JetSon-nano板卡_从sd卡烧录到tensorRT部署_一条龙

JetSon Nano 部署

开发板官网教程
link

查看 ubuntu 版本
lsb_release -a
查看 cuda 版本
nvcc -V
如果找不到 nvcc,则

sudo vim ~/.bashrc
# 在文件末尾添加环境变量
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=$PATH:/usr/local/cuda/bin
export CUDA_HOME=$CUDA_HOME:/usr/local/cuda
# wq! 保存退出
# 更新配置文件
source ~/.bashrc

检查cudnn

cd /usr/src/cudnn_samples_v8/mnistCUDNN #进入例子目录
sudo make 			#编译
./mnistCUDNN 	#验证结果

1、准备SD卡

格式化一张 sd 卡,sd卡需保证32g以上。

2、下载镜像

link

3、烧录

使用 balenaEtcher 烧录镜像

4、启动

将 sd 卡插入 jetson-nano 开发板,接通显示器,接上电源自动启动,一路下一步到桌面

5、联网

插上网线

配置远程、配置墙(可选)

远程文件传输
5.x、通过其他主机来下载不易下载的文件,再远程给开发板
5.1、(可用可不用)远程ssh文件传输
sudo apt install openssh-server
5.2、启动ssh服务器
sudo service ssh restart
5.3、客户端通过filezilla连接服务器
IP: sftp://192.168.3.8
用户名: admin
密码: xxx

下载 clash-linux-armv8… 版的,别下错了
link

解压clash
gzip -d clash-linux-amd64-v0.17.1.gz 
配置文件,将机场节点配置文件改为 config.yaml
config.yaml
修改权限
chmod +x clash-linux-amd64-v0.17.1
执行
./clash-linux-amd64-v0.17.1 -d .
修改代理
JetSon-nano板卡_从sd卡烧录到tensorRT部署_一条龙_第1张图片
可以在浏览器输入 http://clash.razord.top/ 进行设置查看

6、安装 pip3

sudo apt install python3-pip
如果遇到pip3无法安装(可能是环境变量的原因)
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py

7、下载并安装pytorch

我下载的最新当前最新1.9.0版本:
link
JetSon-nano板卡_从sd卡烧录到tensorRT部署_一条龙_第2张图片
下载后安装(torch 这里采用的是离线安装包):

sudo apt-get install python3-pip libopenblas-base libopenmpi-dev 
pip3 install Cython
pip3 install numpy==1.16.6 
pip3 install torch-1.9.0-cp36-cp36m-linux_aarch64.whl

#测试是否安装成功

import torch
print(torch.__version__)
print('CUDA available: ' + str(torch.cuda.is_available()))
print(torch.randn((2,2)))

8、安装 torchvison

说明地址:link

注意 torch 和 torchvision 的版本有对应关系,1.9.0的pytorch对应0.10.0的torchvision,所以如下安装

sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev
pip3 install torchvision==0.10.0

手动去这个地址 https://github.com/pytorch/vision
找到 release 0.10 版本下载,解压后,进入文件夹

sudo python3 setup.py install 

#测试是否安装成功

import torchvision
print(torchvision.__version__)

9、安装 onnx

如果numpy当前的版本小于1.16.6,需要升级

pip3 show numpy
sudo pip3 install https://pypi.tuna.tsinghua.edu.cn/simple --upgrade numpy==1.16.6

安装 onnx

sudo apt install protobuf-compiler libprotoc-dev
sudo pip3 install onnx

检查

import onnx
print(onnx.__version__)

安装 onnxruntime 踩坑记录(可以跳过)

参考网站
link

sudo pip3 install onnxruntime

但是报错
Could not find a version that satisfies the requirement onnxruntime (from versions:)
No matching distribution found for onnxruntime

那么就只有手动编译了

升级Cmake 至3.20.6版本(或者更高)(onnxruntime 编译需要3.13以上的)

#卸载旧版 cmake(非必须)

sudo apt remove cmake    

下载cmake arrch64版本 : https://cmake.org/download/

tar -xvf cmake-3.20.6-Linux-aarch64.tar.gz
sudo mv cmake-3.20.6-Linux-aarch64  /opt/cmake-3.20.6
sudo ln -sf /opt/cmake-3.20.6/bin/*  /usr/bin/

检查

cmake --version
cmake version 3.20.6

手动下载并编译 onnxruntime

参考博客 :
link

git clone --recursive https://github.com/Microsoft/onnxruntime
cd onnxruntime
./build.sh \
--update --config Release --enable_pybind \
--build_shared_lib --build --build_wheel \
--use_openmp --use_tensorrt \
--tensorrt_home /usr/src/tensorrt \
--cuda_home /usr/local/cuda \
--cudnn_home /usr/lib/aarch64-linux-gnu

等待5个小时左右

如果编译过程中遇到 git clone的时候,The TLS connection was non-properly terminated. 如果没有遇到,直接下一步就好。

原因:代理设置出错

解决方案:重置代理

git config --global  --unset https.https://github.com.proxy 
git config --global  --unset http.https://github.com.proxy 

若需使用代理,http协议和socket协议的配置分别如下,以8080端口为例:

**http**
git config --global http.https://github.com.proxy http://127.0.0.1:7890
git config --global https.https://github.com.proxy https://127.0.0.1:7890

 **socket**
git config --global http.proxy 'socks5://127.0.0.1:1080'
git config --global https.proxy 'socks5://127.0.0.1:1080'

onnxruntime 等待5个小时左右,编译成功后,执行

cd build/Linux/Release/dist
pip3 install onnxruntime_gpu_tensorrt-1.10.0-cp36-cp36m-linux_aarch64.whl

但是还是遇到了错误!!!找不到执行版本,推测是 pip3 的问题,于是卸载 pip3

10、安装 onnxruntime

最终解决方案是:

python3 -m pip uninstall pip
sudo apt remove python3-pip
wget https://bootstrap.pypa.io/get-pip.py
sudo python3 get-pip.py
sudo pip3 install onnxruntime -i https://pypi.douban.com/simple
#这里确实安装成功了,但是默认numpy-1.16.6版本被卸载替换成了1.9,导致了 Illegal instruction (core dumped) 错误

sudo pip3 uninstall numpy
sudo pip3 install numpy==1.16.6 -i https://pypi.douban.com/simple
#终于成功,通过测试

验证

import onnxruntime
print(onnxruntime.__version__)
import numpy
print(numpy.__version__)
import onnx
print(onnx.__version__)
import torch
print(torch.__version__)
import torchvison
print(torchvison.__version__)

自行安装 tensorRT(看看就好,非主干)

windows上8.0.2后不支持 python版本的tensorRT,只有 C++ 版本的tensorRT。

jetson-nano开发板中默认安装了tensorrt,所以不用在安装了。

但是在使用 torch2trt 的时候可能会遇到如下报错:

AttributeError: ‘tensorrt.tensorrt.Builder‘ object has no attribute ‘max_workspace_size‘

原因是:
Got the same error when running using TensorRT Python 8.0.0.3 and 8.0.1.6
With nvidia-tensorrt-7.2.3.4 it works fine.

pip3 uninstall tensorrt #卸载当前版本
pip3 install nvidia-tensorrt==7.2.* --index-url https://pypi.ngc.nvidia.com

注意:以上命令在 jetson-nano中是无法使用的,官网只提供了 x86-64 cpu架构的包。
如果是jetson-nano中卸载了tensorrt那么在没有找到其他办法的情况下还是重新烧录系统吧。于是我有全部重来了一次。所以上述 关于 没有属性max_workspace_size 的问题还是再找其他办法解决的好。不要轻易删除 jetson-nano 自带 tensorrt 。

尝试: JetPack 之 NVIDIA SDK Manager 法
在这里下载 NVIDIA SDK Manager
link

下载后丢到 nano 中
sudo dpkg -i sdkmanager-1.6.1-8175_amd64.deb
结果报错:软件包体系架构amd64与本机系统体系结构amd64不符
于是:
sudo dpkg --add architecture amd64
sudo dpkg -i sdkmanager-1.6.1-8175_amd64.deb
结果发现 JetPack 根本就不是 arm架构的包,而是amd64的包,放弃折腾,重新烧录系统。

未尝试:可能可行方案,AArch64用户交叉编译样本,有兴趣可以尝试
tensorRT AArch64用户交叉编译样本

总结:tensorRT 是默认装好的,不要去折腾它!!!遇到问题,尽量不要通过卸载解决问题。

tensorrt的使用

C++版:
link

python版:
link

(踩坑)下载并安装 torch2trt

torch2trt 下载地址:
link

python3 setup.py install 

补充:windows上8.0.2后不支持 python版本的tensorRT,torch2trt 依赖 tensorRT,所以windows上不需要考虑安装 torch2trt。

11、jetson nano sd卡 备份与还原

把nano的卡用读卡器插到ubuntu机器上

sudo  fdisk -u -l

JetSon-nano板卡_从sd卡烧录到tensorRT部署_一条龙_第3张图片

备份:然后用下面命令将tf卡镜像并压缩,如果挂载名为sdb

sudo dd if=/dev/sdb | gzip >/home/yuehe/mBackup/jetson_nano_v01.img.gz

恢复

sudo gzip -dc /home/yuehe/mBackup/jetson_nano_v01.img.gz | sudo dd of=/dev/sdb

补充:ubuntu 弹出 挂载点(弹出u盘)

udisksctl unmount -b /dev/sdb1   //卸载挂载点。相当于(umount /dev/sdb1)
udisksctl power-off -b /dev/sdb   //关闭驱动器

你可能感兴趣的:(pytorch,人工智能)