【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 <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
在这里插入图片描述
终于可以看到,模型被加载了(虽然又有其他报错!不过对于现在的我们,这些报错都是小问题了)
在这里插入图片描述
在这里插入图片描述
模型被加载出来的话,也就意味着将你已经完成了部署!其他报错,将是代码层面的问题!自己百度!

为了显得比较专业,我还是放两张运行成功的图吧!
在这里插入图片描述
在这里插入图片描述
(之前的报错是因为,那张图片的打开权限被占用了!)

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

  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 申请内存、释放内存和查看内存使用情况。这些操作将通过系统调用来实现。内存管理器的主要功能是管理系统中的内存分配和释放,确保内存使用的高效性和安全性。虽然内存管理器还没有完成,但开发人员正在努力工作,以便在不久的将来发布完整的版本。 ### 回答2: 内存分配、内存释放和内存查找。内存分配可以让程序在运行时获取需要的内存空间,内存释放则是将不再需要的内存空间还给操作系统,以便重新分配给其他程序使用。内存查找则是检查某个内存地址是否已经被分配。这些功能对于操作系统运行和程序开发都具有很大的重要性。 内存管理器的实现主要考虑了几个因素。首先是内存的物理组织形式。操作系统需要能够识别内存的物理组织形式,才能够有效地进行内存管理。其次是内存的分配和释放。操作系统需要能够根据不同的需求分配不同大小的内存空间,并且能够及时地释放内存空间以提高系统的运行效率。还有一个重要的因素是内存的安全性。操作系统需要确保不同程序之间的内存空间互相隔离,避免出现内存泄露或者内存破坏等问题。 对于内存管理器的实现方式,目前有很多种不同的方法。其中,最常见的是分页内存管理方式。这种方式将内存空间分成若干个大小相等的页面,每个页面都有自己的地址和内存状态,操作系统只需要记录每个页面的状态和分配情况即可。当程序需要内存空间时,内存管理器会寻找空闲的页面,并将其分配给程序使用。当程序不再需要这些内存空间时,内存管理器会将其释放,并将页面标记为未分配状态。 总之,内存管理器是一个操作系统非常重要的组件,对于系统的性能和稳定性都有很大的影响。hnu-os的内存管理器的实现将进一步完善,以满足更多的需求。 ### 回答3: 内存分配、内存释放和内存查看。但是,由于内存管理器的实现需要许多复杂的算法和微妙的技巧,因此开发人员需要花费更多的时间来完成它。 内存管理器是操作系统中最重要的组件之一,因为它确保操作系统能够正确地使用计算机的内存。内存管理器的主要任务是将物理内存地址映射到虚拟内存地址,并跟踪哪些内存块已经被分配、哪些是空闲的,以及哪些正在使用。 在操作系统中,内存被分割成多个块。当一个程序需要内存时,内存管理器会分配一个或多个块来满足程序的要求。当程序完成它的工作并将内存释放时,内存管理器会将这些块标记为空闲状态,以备后续程序再次使用。 内存管理器还需要处理许多其他事项,例如内存碎片化和内存保护。内存碎片化是指当程序释放一些内存块时,内存管理器会留下一些无法使用的小空间,这些空间可能过小,无法再分配给其他程序。内存保护是指内存管理器可以防止程序访问不属于它的内存区域,从而保护操作系统和其他程序的稳定性和安全性。 总之,内存管理器对于计算机系统的稳定性和性能至关重要。虽然它可能需要一些时间来完成,但一旦实现,它将使操作系统功能更加完整且能够更好地支持更复杂的任务和应用程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值