在jetson xavier nx/jetson agx xavier上部署mmdeploy使用tensorrt加速

###首先一定要确保jetpack版本在4.6及以上!!!

因为更早的 JetPack 版本与 TensorRT 7.x 存在不兼容的情况。

查看jetpack版本的命令为jtop

1.jetpack升级

(1)在文本编辑器中打开 apt 源配置文件:

$ sudo vi /etc/apt/sources.list.d/nvidia-l4t-apt-source.list


(2)在 deb 命令中更改存储库名称和下载 URL

原始命令:

deb https://repo.download.nvidia.com/jetson/common <release> main
deb https://repo.download.nvidia.com/jetson/<platform> <release> main

其中:
•t186 用于 Jetson TX2 系列
•t194 for Jetson AGX Xavier 系列或 Jetson Xavier NX
•t210 用于 Jetson Nano 设备或 Jetson TX1
例如,如果当前版本是 r32.5,而您的平台是 Jetson Xavier NX,要升级到jetpack4.6,其对应r32.6,命令为: 

deb https://repo.download.nvidia.com/jetson/common r32.6 main
deb https://repo.download.nvidia.com/jetson/ t194 r32.6 main

具体要升级的jetpack版本对应的数值可以去nvidia官网查看,官网链接: 

JetPack Archive | NVIDIA Developer

(3)保存并关闭源配置文件。

(4)输入命令:

$ sudo apt update
$ sudo apt dist-upgrade

如果 apt 提示您选择配置文件,请回复 Y 为 yes(以使用该文件的 NVIDIA 更新版本)。
(5)查看 JetPack版本(如 jtop),为4.6则完成
(6)升级完成后,重新启动 Jetson 设备。 

2.安装miniforge(类似于anaconda,但aarch结构的不支持anaconda,故需要使用miniforge)

(1)去官网下载对应的包Releases · conda-forge/miniforge · GitHub

(2)cd 到下载位置,使用sh命令安装

sh Miniforge-pypy3-4.10.3-3-Linux-aarch64.sh

(3)安装完毕后,添加环境变量,并激活环境。

# 编辑环境变量
gedit ~/.bashrc
# 增加环境变量, 将<username>换成你的用户名
export PATH=/home/<username>/miniforge-pypy3/bin:$PATH
# 激活环境变量
source ~/.bashrc
# 显示(base)
source activate

(4)新建虚拟环境,python 版本建议与底层自带的python3.6保持一致

conda create -y -n mmdeploy python=3.6

3.安装pytorch和torchvision(建议与官网文档的版本保持一致,pytorch1.10.0,torchvision0.11.1)

# pytorch
wget https://nvidia.box.com/shared/static/fjtbno0vpo676a25cgvuqc1wty0fkkg6.whl -O torch-1.10.0-cp36-cp36m-linux_aarch64.whl
pip3 install torch-1.10.0-cp36-cp36m-linux_aarch64.whl
# torchvision
sudo apt-get install libjpeg-dev zlib1g-dev libpython3-dev libavcodec-dev libavformat-dev libswscale-dev libopenblas-dev -y
sudo rm -r torchvision
git clone https://github.com/pytorch/vision torchvision
cd torchvision
git checkout tags/v0.11.1 -b v0.11.1
export BUILD_VERSION=0.11.1
pip install -e .

4.升级cmake版本

# purge existing移除自带的cmake
sudo apt-get purge cmake
sudo snap remove cmake

# install prebuilt binary
export CMAKE_VER=3.23.1
export ARCH=aarch64
wget https://github.com/Kitware/CMake/releases/download/v${CMAKE_VER}/cmake-${CMAKE_VER}-linux-${ARCH}.sh
chmod +x cmake-${CMAKE_VER}-linux-${ARCH}.sh
sudo ./cmake-${CMAKE_VER}-linux-${ARCH}.sh --prefix=/usr --skip-license
cmake --version

 5.安装model convert的相关依赖包

(1)mmcv-full

sudo apt-get install -y libssl-dev
git clone https://github.com/open-mmlab/mmcv.git
cd mmcv
git checkout v1.4.0
MMCV_WITH_OPS=1 pip install -e .

(2)onnx

# 以下方式二选一,我自己使用pip报错了,但conda可以成功安装
python3 -m pip install onnx
conda install -c conda-forge onnx

(3)  h5py 和 pycuda

 同样的,如果pip失败就用conda

sudo apt-get install -y pkg-config libhdf5-100 libhdf5-dev
pip install versioned-hdf5 pycuda

6.配置TensorRT

 jetpack已经自带了tensorrt,我们需要将其自带的包copy到我们的虚拟环境中

cp -r /usr/lib/python3.6/dist-packages/tensorrt* ~/archiconda3/envs/mmdeploy/lib/python3.6/site-packages/
conda deactivate
conda activate mmdeploy
python -c "import tensorrt; print(tensorrt.__version__)" # 将会打印出 TensorRT 版本

# 为之后编译 MMDeploy 设置环境变量
export TENSORRT_DIR=/usr/include/aarch64-linux-gnu

# 将 cuda 路径和 lib 路径写入到环境变量 `$PATH` 和 `$LD_LIBRARY_PATH` 中, 为之后编译 MMDeploy 做准备
export PATH=$PATH:/usr/local/cuda/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64

 7.安装mmdeploy和使用的mm系列(本人使用的模型是mmsegmentation里的)

git clone --recursive https://github.com/open-mmlab/mmdeploy.git
cd mmdeploy
export MMDEPLOY_DIR=$(pwd)

8. 安装 Model Converter

# 编译 TensorRT 自定义算子
mkdir -p build && cd build
cmake .. -DMMDEPLOY_TARGET_BACKENDS="trt"
make -j$(nproc) && make install

# 安装 model converter
cd ${MMDEPLOY_DIR}
pip install -v -e .

如果在make时报错,出现no cub.hb的错误,是指没有cub这个包,下载后,使用如下命令将cub放到对应路径下,再次make即可成功

下载地址Release CUB 1.12.1 (CUDA Toolkit 11.4) · NVIDIA/cub · GitHub

mv cub-1.12.1/cub /usr/local/cuda/include

9.将模型训练后的pth文件转换为end2end.engine

#选择自己模型对应的config参数,执行对应命令
cd mmdeploy

python tools/deploy.py  configs/mmseg/segmentation_tensorrt_static-512×512.py mmsegmentation/configs/stdc/stdc2_in1k-pre_512×1024 80k_rail13.py mmsegmentation/work_dirs/stdc_lin1k-pre_512×1024_80k_rail13/latest.pth --work-dir /mmdeploy/tensorrt_output  --image-dir 000005.png  --device cuda

 10.如果成功导出onnx但无法导出engine,且报错Couldnot find any implementation for node GlobalAveragePool,使用如下命令就可以顺利导出end2end.engine啦

首先cd到导出的onnx位置
然后运行
/usr/src/tensorrrt/bin/trtexec--onnx=./end2end.onnx --plugins=../../mmdeploy/lib/libmmdeploy_tensorrt_ops.so --workspace=6000 --fp=16 --saveEngine=end2end.engine

参考文档与博客:

(69条消息) NVIDIA Jetson Xavier NX升级JetPack 4.4至4.6.1_jetson nx ota升级_我爱写BUG的博客-CSDN博客

如何在 Jetson 模组上安装 MMDeploy — mmdeploy 0.12.0 文档

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值