栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【HNU-CSEE jetson nano 第四节】部署torch环境框架以及torchvision

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【HNU-CSEE jetson nano 第四节】部署torch环境框架以及torchvision

  • 前言
    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
^~~~~~~~~~~~~~~~~~~~~~
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

终于可以看到,模型被加载了(虽然又有其他报错!不过对于现在的我们,这些报错都是小问题了)


模型被加载出来的话,也就意味着将你已经完成了部署!其他报错,将是代码层面的问题!自己百度!

为了显得比较专业,我还是放两张运行成功的图吧!


(之前的报错是因为,那张图片的打开权限被占用了!)

小结
看到这里的时候,你可能会疑惑,我为什么要花大量篇幅去写处理报错的过程,直接把匹配的库文件和编号列个表,放在这里,岂不是简洁又方便?
是的,完全可以这样做。但是,我想,“授人以渔”是一种传统美德!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/272567.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号