0 前言
手里的Jetson NX的Jetpack版本为4.5.1 [L4T 32.5.2],其中包含深度学习相关版本:
- cuDNN:8.0.0.180
- CUDA:10.2.89
- TensorRT:7.1.3.0
都算是比较旧的了【2023-06-09】,TensorRT 8的加速能力相较于7又是一个大提升,于是决定给它升升级。
TensorRT的技术文档,通过查看TensorRT Support Matrix 缺点8.x版本支持的CUDA和cuDNN版本。
1 PyTorch环境、OpenCV以及jtop
系统烧录装载
CUDA Toolkits验证
nvcc -V
没有则配置路径:
sudo gedit ~/.bashrc
# 添加以下内容
export CUDA_HOME=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.2/bin:$PATH
# 保存 退出后 激活
source ~/.bashrc
升级OpenCV 4.4
初始的OpenCV版本为3.3.x版本,且未经过CUDA compiled
miniforge安装
Jetson Xavier NX是aarch 64架构,不支持Anaconda,需要用miniforge作替代。
访问minforge repo查看详情
Pytroch安装
关于miniforge的介绍,pytorch和torchvision的whl文件地址和安装步骤看这篇博文
安装jtop
工具
sudo -H pip3 install -U jetson-stats
更换apt-get
源
- 备份sources.list文件
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak
- 编辑sources.list文件
sudo vim /etc/apt/sources.list
- 添加镜像源
或者#清华源 deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted deb-src http://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ bionic main universe restricted
# 中科大源 deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-updates main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-security main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic-backports main restricted universe multiverse deb http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main universe restricted deb-src http://mirrors.ustc.edu.cn/ubuntu-ports/ bionic main universe restricted
- 保存sources.list文件后需要更新
sudo apt-get update
2 更新Jetpack
需要确保Jetpack版本在4.6及以上,因为更早的Jetpack版本于TensorRT 7.x存在不兼容的情况
-
编辑apt源配置文件
sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list
-
更改存储库名称和下载URL
# 原始 deb https://repo.download.nvidia.com/jetson/common <release> main deb https://repo.download.nvidia.com/jetson/<platform> <release> main # 修改为 deb https://repo.download.nvidia.com/jetson/common r32.6 main deb https://repo.download.nvidia.com/jetson/t194 r32.6 main
其中:
- t186用于Jetson TX2系列
- t194 for Jetson AGX Xavier系列或者Jetson Xavier NX
- t210用于Jetson Nano设备或Jetson TX1
具体的数值对应在官网 JetPack Archive
-
保存并退出配置文件
-
执行命令
sudo apt update # 需要先更换`apt-get`源,否则会失败 sudo apt dist-upgrade
-
若
apt
提示选择配置文件,回复’Y’(以使用该文件的NVIDIA更新版本) -
升级其他 JetPack 組件
sudo apt install nvidia-jetpack
-
jtop
查看Jepack版本,为4.6则完成。重启Jetson设备
注意:重启后使用
jtop
可以看到已更新为4.6,但是swp显示为OFF
,而且WI-FI无法连接,使用ifconfig
也看不到wlan0的信息
解决方案在:Nvidia Jetson Xavier NX Develeoper | Forums 问答① 问答②
配置Python包tensorrt
经过上面步骤安装或升级之后的 Jetpack 已经自带了tensorrt
,需要将其自带的包copy到minforge的虚拟环境中
cp -r /usr/lib/python3.6/dist-packages/tensorrt* ~/archiconda3/envs/torch_env/lib/python3.6/site-packages/
# 激活虚拟环境
conda activate troch_env
python -c "import tensorrt; print(tensorrt.__version__)" # 将会打印出 TensorRT 版本
# 为之后编译 设置环境变量
export TENSORRT_DIR=/usr/include/aarch64-linux-gnu
# 将 cuda 路径和 lib 路径写入到环境变量 `$PATH` 和 `$LD_LIBRARY_PATH` 中
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
运行一个引用
libgomp
库的程序时,出现报错libgomp.so.1: cannot allocate memory in static TLS block
解决方案:博文libgomp.so.1: cannot allocate memory in static TLS block