- 前言
pytorch是由facebook公司推出的计算框架,torchvision则是基于torch的计算机视觉计算框架,所以,我们接下来在搭建torch环境的时候需要注意torch版本。 - 正文
1、升级pip3
参考文章:pip3在Ubuntu下的安装、升级、卸载
打开终端,先安装pip3工具试一下,如果系统没有安装好的pip3,则在此指令下即可安装好最新的pip3:
sudo apt-get install python3-pip
如果你的系统提示,已经有安装好的pip3,则执行如下pip3升级指令
sudo pip3 install --upgrade pip
2、配置CUDA 的环境变量
CUDA 在jetpack中已经有自带的,但需要你手动将CUDA文件路径添加到环境变量中,添加方式如下,第一步,属于指令如下:
sudo gedit ~/.bashrc
即可打开.bashrc配置文件
在文件末尾加入如下代码
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda/bin:$PATH
再执行以下指令让环境变量生效
source ~/.bashrc
而后再输入
nvcc -V
如果能如图所示,看到cuda版本参数,即可认为环境变量参数修改成功!
3、安装torch
!!!这里注意!!!torch和jetpack版本的匹配,你训练模型时候用的torch版本跟nano所安装的torch版本的匹配
这里来个番外篇,详细讲讲!!点击看番外。
安装torch需要注意的一点是,最好安装与自己的jetpack版本匹配的torch,具体如下图所示:
更详细内容请跳转到官网: 点击去官网
这里注意,下载这些.whl文件需要FQ,在你的主机上下好后,U盘迁移过来,然后再进行安装。
然后,迁移到本地盘中,新建一个英文名称的文件夹,将torch的安装包放进这个文件夹中,并在文件夹中右键单机,选择在“终端中打开”。
然后,依次执行如下指令:
sudo apt-get install python3-pip libopenblas-base libopenmpi-dev
pip3 install Cython
pip3 install torch-1.6.0-cp36-cp36m-linux_aarch64.whl
安装成功后系统将提示:
Installing collected packages: future, numpy, torch
Successfully installed future-0.18.2 numpy-1.19.5 torch-1.6.0
而后,需要你在ubuntu中调出python来实际测试是否可以成功引入torch库。
!!!这里注意!!!
!!!你在终端中调用python的时候,需要输入的指令是python3,而非python!!!
python3
之后在调出来的python3 IDE中输入
import torch
如果在import torch后不报错,那么,恭喜你!你顺利地完成了torch的安装!
但是,大多数情况下,是没有这么好的运气的,由于nvidia官方对一些版本的jetpack(例如:2GB nano jetpack4.5<—>torch 1.6)对应的torch适配不完全,会导致你在import torch的时候报错如下:
OSError: libmpi_cxx.so.20: cannot open shared object file: No such file or directory
这里的意思是说,你import torch的话,还需要这些库文件的支持。(因为pytorch一开始便是在X86芯片架构的平台上开发的人工智能计算框架,它的运行需要调用一些必要的库文件,而这些文件,正常的amd64版本的Ubuntu会自带,但是我们现在用的是nano适配的ubuntu系统,这个系统是跑在arm架构芯片上的ubuntu系统,因而,它运行torch时候所需的库文件是需要重新编译的,这其中,类似于需要支持pytorch运行的库文件,有一些arm64版本的ubuntu系统是缺失的,需要你额外自行下载!)
所以,对症下药,到这个网站:
https://pkgs.org/
在右上角的search栏搜索在报错中缺失的库文件,此处以 libmpi_cxx.so.20 这个库文件为例,在搜索栏输入库文件的文件名后,你将进入这个界面,进入后
选择,Ubuntu 18.04 LTS(Bionic Beaver)一栏中的arm64后缀的deb文件,点击进入:
往下拉,找到download一栏,复制Binary Package一栏中网址,输入搜索栏中即可自动下载,下载
有可能会在页面左下角提示如图所示的内容,遇到的话,就选择“保留”
打开下载了这个文件的位置,右键在文件夹中打开终端,输入指令:
sudo dpkg -i libopenmpi2_2.1.1-8_arm64.deb
安装上述deb文件的过程中,还有可能报错如下:
那就继续去搜索栏,搜索—>下载—>dpkg,直到import torch的时候没有报错!
4、安装torchvision
安装torchvision需要注意,你安装的torchvision版本需要与torch版本匹配,具体如下:
查看最新版本的匹配模式请到这个网站:
https://github.com/pytorch/vision
然后先执行下列指令:
sudo apt-get install libjpeg-dev zlib1g-dev
然后,在地址栏中直接输入如下网址:
https://github.com/pytorch/vision/archive/v0.7.0.zip
你需要下载哪个版本,就把.zip前面的版本号改成你要下载的版本号!
等下载好后,照例,将其解压到一个新的文件夹中,进入文件夹,并右键单击选择在终端中打开
在此时的终端中运行如下指令:
sudo python3 setup.py install
等待片刻!
出现一个报错:
fatal error: libavcodec/avcodec.h: 没有那个文件或目录
#include <libavcodec/avcodec.h>
^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
error: command ‘aarch64-linux-gnu-gcc’ failed with exit status 1
这个报错的意思是说,在本地编译torchvision的时候,其中的/home/hnu-csee/torch/vision-0.7.0/torchvision/csrc/cpu/decoder/defs.h 文件在第12行引用了avcodec.h头文件,但是现在的这个系统中没有这个文件,这个报错是不是有点熟悉?
!没错,就是我们在前文提到的安装import torch的时候如果缺失库文件时候…其实,现在也是跟之前一样的情况!少了系统库文件!
进入https://pkgs.org/,如法炮制,搜索libavcodec
点击Ubuntu 18.04 LTS(Bionic Beaver),
后边操作不多赘述了,前文都有。
当然,如果你的网络今天比较给力,那么直接执行如下语句:
sudo apt-get install libavcodec-dev
也是一种方法!
然后,继续尝试:sudo python3 setup.py install
又报错!
如果再遇到类似错误,继续sudo apt-get install xx-dev,然后再 sudo python3 setup.py install
直到出现如下:
便可以认为torchvision也已经安装成功,接下来进行测试,测试方法跟之前测试torch的一样:
python3
import torchvision
如果如上图所示,不再有什么报错,方可判定torchvision也已经在nano 上部署完毕!
5、运行时刻
ubuntu 中运行一个py文件很简单,只需要在py文件所在的文件夹中打开终端并输入python3 xx.py
即可!
!!!这里注意!!!看到这种报错,先不要着急pip3 install,应当先到报错对应的文件夹看看是不是缺失了对应的文件,因为ubuntu对nano的适配并不是很完美,所以,U 盘传文件的时候很容易出现文件缺失或者文件破损的情况!!!
我就遇到了这种情况!把utils文件夹重新传过来,再来一遍!
遇到这样一个报错,可以看出没有提示是在哪个文件夹,而是py文件的头文件引用提示没有相应的matplotlib库!此时,就直接pip3 install matplotlib(!!!这里注意!!!,你的报错的头文件可能跟我的不一样,你只需要把pip3 install后面的文件名换作你的报错中缺失的文件名!)
又有这样一个报错,如下图:
这种类型的报错,看文件的地址,是在python3里面,那么就极有可能是因为一些库的版本不匹配,导致库文件之间相互引用的时候找不到对应的头文件函数!
解决这种问题的话,第一种方法,查询你的报错路径中两个库的版本匹配机制,然后将两个库文件版本更新到相互匹配(例如,上图中产生冲突的两个库文件为scipy和numpy,你应该查询他们两个库的版本匹配)。第二种,直接百度你的报错信息!
百度后,我们得知,scipy<=0.19但是numpy>=1.18就会出现错误!所以,我们重新安装scipy和numpy(一般顺序是先装numpy后装scipy),然而又得到如下报错:
Not uninstalling scipy at /usr/lib/python3/dist-packages, outside environment /usr
pip3指令无法卸载csipy,最后说了原因,是因为outside environment /usr,意思是说,此处的csipy不是pip3 指令安装的,而是由外部安装包apt-get 指令安装的,所以,卸载也需要apt指令,则执行以下指令:
sudo apt remove python3-scipy
成功卸载!
然后再重新安装!sudo apt-get install python3-csipy
此时,发现一个问题!我的系统报告最新的scipy就是0.19.1,上不了1.0版本了,所以就只能降低numpy版本,用如下指令:
pip3 install -U numpy==1.13.3
这里我降到了1.13.3,但是,奇葩的事情又来了,之前安装的matplotlib又不匹配了…那就…继续操作!!!(太磨人了)
终于,scipy和numpy不再报错了!(虽然起码库文件又有报错)(太衰了!!)不过有了前面与各种报错斗争的经验,现在遇到这种报错,起码不慌!稳稳的输入pip3 install xx
终于可以看到,模型被加载了(虽然又有其他报错!不过对于现在的我们,这些报错都是小问题了)
模型被加载出来的话,也就意味着将你已经完成了部署!其他报错,将是代码层面的问题!自己百度!
为了显得比较专业,我还是放两张运行成功的图吧!
(之前的报错是因为,那张图片的打开权限被占用了!)
小结
看到这里的时候,你可能会疑惑,我为什么要花大量篇幅去写处理报错的过程,直接把匹配的库文件和编号列个表,放在这里,岂不是简洁又方便?
是的,完全可以这样做。但是,我想,“授人以渔”是一种传统美德!