Xavier配置ubuntu18.04+CUDA10.2+pytorth
注意:刷机时刷的 Jetpack4.4版本的,故下面为与4.4版本对应。
一、ubuntu18.04安装
由于NVIDIA Jetson AGX Xavier在刷机时就安装好了ubuntu系统,查看当前ubuntu系统版本,可知当前版本为18.04。
二、CUDA10.2安装
1.安装
由于NVIDIA Jetson AGX Xavier在板子刷机的时候就已经安装好了CUDA,所以我们不需要在额外安装了。查看已安装好的CUDA版本,可知当前版本为CUDA10.2。
$ nvcc -V
2.验证
使用安装的CUDA的样例读取计算机的硬件信息,显示PASS则通过验证。
$ cd /usr/local/cuda-10.2/samples/1_Utilities/deviceQuery #cuda-10.2对应为自己的CUDA版本
$ sudo make
$ sudo ./deviceQuery
三、cuDNN v8.0.0安装
1.安装
同样,xavier在刷机时已经安装了cuDNN,但没有将对应的头文件和库放到cuda目录 :/usr/local/cuda/include/cudnn.h,而将cuDNN的头文件放在:/usr/include/cudnn.h。
2.验证
故查看cuDNN版本如下,可知cuDNN版本为8.0.0。
$ cat /usr/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
四、Miniforge安装
1.换镜像源
在安装前可以换镜像源,加速下载安装,可参考该文章。
2.安装
由于NVIDIA Jetson Xavier 使用的aarch64架构是没法使用Anaconda的,虽然可以自己编译,但是conda指令是没法编译到aarch64架构上运行的。
所以这里使用Anaconda的替代Miniforge,Miniforge的下载官网:https://github.com/conda-forge/miniforge/releases。下载适合自己的版本。安装完成后,就和anaconda的使用方式一样。
可参考该文章
$ Miniforge-pypy3-4.10.3-4-Linux-aarch64.sh
3.创建虚拟环境
$ conda create -n py36 python=3.6 #py36为我创建虚拟环境的名称,3.6为安装的版本,可换成自己对应的
故虚拟环境安装成功。
可使用以下命令对虚拟环境操作:
$ conda create -n 环境名称 python=版本 #创建虚拟环境
$ conda env list #查看当前虚拟环境都有那些
$ conda activate 创建的虚拟环境名称 #进入创建的虚拟环境
$ conda deactivate #退出虚拟环境
不放心的可以验证一下,确保安装成功。
注意:虚拟环境里面安装的python版本也必须要和jetpack中的python版本一致,不然之后安装pytorch会出错!!!
如下,我jetpack4.4对应python3.6,然而我虚拟环境安装的是python3.8,所以导致我的pytorch不支持安装,安装不上。
五、pycharm安装
pycharm社区版:https://www.jetbrains.com/pycharm/download/#section=linux
$ cd Downloads
$ tar xfz pycharm-community-2021.2.tar.gz
$ cd pycharm-community-2021.2/bin
$ ./pycharm.sh
下载就可以了,但是在运行最后一句代码./pycharm.sh时出现下面问题。
这是因为Xavier的arm架构,导致无法安装官方的JDK环境,在arm64系统上取而代之的是只能安装open-jdk。pycharm需要java jdk,但是支持arm64的只有open-jdk,所以需要先安装open-jdk。
安装过程参考:
https://blog.csdn.net/asayuki_fsk/article/details/112391488?spm=1001.2014.3001.5501
安装完成后可创建桌面快捷方式,创建pycharm.desktop,然后在文本中进行编辑,具体可自己在网上,我就不详将了,然后双击以下路径的图标,并将其锁在桌面即可。
六、pytorch 安装
1.安装
在PC机ubuntu系统上安装pytorch只需要和自己的CUDA版本对应,而Xavier上的pytorch需要和Jetpack版本对应。
找到对应自己刷机的JetPack版本号下载对应的pytorch和torchvision版本即可,这里我下载的JetPack4.4,python3.6中选择pytorch1.7.0(选择适合自己的版本)。官网查询及安装地址:
https://elinux.org/Jetson_Zoo#PyTorch_.28Caffe2.29
这里需要科学上网,如果有需要可以给我私信。
输入以下命令:
$ sudo apt-get install libopenblas-base libopenmpi-dev python3-pip
$ pip3 install Cython
$ cd Downloads
$ pip3 install numpy torch-1.7.0-cp36-cp36m-linux_aarch64.whl #对应自己下载的
安装好pytorch后接着安装torchvision,由上一个图可以看出,我安装的pytorch v1.7对应torchvision v0.8.1。参考官网安装地址:
https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-9-0-now-available/72048
$ sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
$ git clone --branch v0.8.1 https://github.com/pytorch/vision torchvision # see below for version of torchvision to download
$ cd torchvision
$ export BUILD_VERSION=0.8.1 # where 0.x.0 is the torchvision version
$ python3 setup.py install --user
$ cd ../ # attempting to load torchvision from build dir will result in import error
$ pip install 'pillow<7' # always needed for Python 2.7, not needed torchvision v0.5.0+ with Python 3.6
注意:若python3 setup.py install --user 这条语句出现如下错误:
$ python3 setup.py install --user
Illegal instruction (core dumped)
则输入以下命令打开文件
$ sudo gedit ~/.bashrc
在打开的文件最后一行添加以下代码作为环境变量,然后重新执行python3 setup.py install --user命令即可。
export OPENBLAS_CORETYPE=ARMV8
2.验证
可参考官网验证方式:https://forums.developer.nvidia.com/t/pytorch-for-jetson-version-1-9-0-now-available/72048
import torch
print(torch.__version__)
print('CUDA available: ' + str(torch.cuda.is_available()))
print('cuDNN version: ' + str(torch.backends.cudnn.version()))
a = torch.cuda.FloatTensor(2).zero_()
print('Tensor a = ' + str(a))
b = torch.randn(2).cuda()
print('Tensor b = ' + str(b))
c = a + b
print('Tensor c = ' + str(c))
import torchvision
print(torchvision.__version__)
最终验证成功!
七、TensorRT优化
1.安装TensorRT
按照官方给的安装指导手册。在下载的tensorrtx文件中,按照官网给的步骤:在tensorrtx/READMA.md
参考:【动手学深度学习(二)】Yolov5-TensorRT的配置与部署
2. 权重文件转化为TensorRT模型
下载:
下载yolov5-6.1模型,以及对应C++的tensorrtx-yolov5-v6.0。
git clone -b v6.0 https://github.com/ultralytics/yolov5.git
git clone -b yolov5-v6.0 https://github.com/wang-xinyu/tensorrtx.git
生成yolov5s.wts文件
下载yolov5s.pt到yolov5工程的weights文件夹下;
复制tensorrtx/yolov5文件夹下的gen_wts.py文件到yolov5工程下。
conda activate yolov5env #conda activate py36
cd /xxx/yolov5 #/home/zq/yolov5-6.1
python gen_wts.py -w yolov5s.pt -o yolov5s.wts
进入tensorrtx/yolov5文件夹下
cd /home/zq/tensorrtx-yolov5-v6.0/yolov5
修改相关配置
然后进入/tensorrtx-yolov5-v6.0/yolov5
修改yololayer.h文件中的CLASS_NUM为你训练的模型的标签类别数
然后编译
mkdir build
复制yolov5-6.1工程中生成的yolov5s.wts文件到tensorrtx-yolov5-v6.0/yolov5/build文件夹中。并在build文件夹中打开终端:
cmake ..
make #每次修改CLASS_NUM都要make一次
sudo ./yolov5 -s yolov5s.wts yolov5s.engine s #v5.0 sudo ./yolov5 -s [.wts] [.engine]
用它自带的图片测试一下
sudo ./yolov5 -d yolov5s.engine ../samples
最终结果
生成yolov5s.engine文件,这便是我们tensort部署所需要的模型文件
注意:若该阶段出现错误,考虑是否是以下出现了问题
若.engine文件无法生成,可能是生成的.wts文件有问题。建议你从以下几点排查:
1.你的yolov5版本和tensorrtx-yolov5版本对应吗
2.如果对应的话,你有没有修改yolov5的网络结构呢?如果修改了结构,那么tensorrtx-yolov5里也要修改
3.有没有按照readme里的操作生成.wts文件。
参考:
1.https://blog.csdn.net/qq_40691868/article/details/117331162#commentBox
2.https://blog.csdn.net/weixin_54603153/article/details/120079220#commentBox
3.模型部署
修改 /home/zq/tensorrtx-yolov5-v6.0/yolov5/yolov5_trt.py中的categories类别
最后在yolov5环境中执行yolov5_trt.py脚本。
实现效果
参考:
1.https://blog.csdn.net/abc13526222160/article/details/106710163?spm=1001.2014.3001.5501
2.https://blog.csdn.net/maum61/article/details/98218802?spm=1001.2014.3001.5501
3.https://blog.csdn.net/asayuki_fsk/article/details/112391488?spm=1001.2014.3001.5501
4.TensorRT(1)-介绍-使用-安装