简述:
本系列文章涉及三部分:环境搭建、onnx模型转换、TRT模型转换;
一、环境搭建:
因为最终要在orin上转换TRT,所以要先在本地搭建类似 orin 的环境(主要是cuda,tensorrt);
环境的构建采取的是 docker+conda 的模式(docker隔离性和可移植性较好,conda便于管理软件包,不要觉得麻烦,当复习工具使用了!);
Orin配置:
cuda-11.4.315
tensorrt-8.5.2.2
本机信息:
NVIDIA RTXA2000 GA106
二、细节
1. tensorrt torch cuda 对应关系:
tensorrt 版本对应的 torch 和 cuda:Release Notes :: NVIDIA Deep Learning TensorRT Documentation
CUDA Toolkit版本及可用PyTorch对应关系:【最新】CUDA Toolkit版本及可用PyTorch对应关系(参考官网)_cuda12.2对应的pytorch_将月藏进诗尾的博客-CSDN博客
PyTorch中torch、torchvision、torchaudio版本对应关系:PyTorch中torch、torchvision、torchaudio版本对应关系_torch2.0.1对应的torchvision_Liekkas Kono的博客-CSDN博客
2. docker 以及 conda 的构建:
2.1 cuda from Dockerfile
cuda cudnn 在 docker hub: https://hub.docker.com/r/nvidia/cuda上下载对应Dockerfile:
sudo docker pull nvidia/cuda:11.4.3-cudnn8-devel-ubuntu20.04
比如我为了搭建和orin相同的cuda环境,就选11.4.3-cudnn8-devel-ubuntu20.04,注意要安装devel 版本!
2.2 构建容器
然后是熟悉的 docker run 操作(替换自己的映射路径和镜像id):
sudo docker run -it --name xxx --shm-size 64g --gpus all -v xxx:/xxx -v xxx:/xxx Image_ID
sudo docker exec -it xxx /bin/bash
2.3 构建虚拟环境
然后是熟悉的 conda create 操作(就安装3.8.10,不要改):
conda create -n centerpoint_orin python=3.8.10
conda activate centerpoint_orin
2.4 安装tensorrt
从官网 Log in | NVIDIA Developer下载 tensorrt-8.5.2.2(GA是稳定版,英伟达系列的 updateX 就代表版本号后面加上一个.X),在conda环境中手动安装TRT:【TensorRT系列】1.TensorRT安装教程 - 知乎
2.5 备份
好了至此已经搭建了等同 orin 的 cuda tensorrt(以及你自定义安装的一系列xxx),如果对接下来的操作不放心,可以将此容器备份成镜像便于反复调试:
sudo docker commit [-m="提交的描述信息"] [-a="创建者"] 容器名称|容器ID 生成的镜像名[:标签名]
3. pytorch 家族以及 mmcv 家族的安装:
至此已经得到了”母环境“(建议备份!建议备份!建议备份!),接下来要进行大乱斗安装:
3.1 torch家族安装:
根据上文贴出来的对应关系,安装你想要的系列(nvidia 的 cuda11.x 向下兼容,即11.4完全可以安装11.3系列对应的torch):
conda install pytorch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1+cu113 cudatoolkit==11.3.1 -c pytorch
注:上述安装pytorch的命令中-c
的意义是指定从torch官方的渠道进行下载,而不使用默认渠道。
或者 你想要 pip 安装(确保在上一步已经更新):
pip install torch==1.10.1+cu113 torchvision==0.11.2+cu113 torchaudio==0.10.1+cu113 cudatoolkit==11.3.1
在这里扯一下conda install 和 pip install 的关系,为什么 pip list 里没有的包也能运行? conda list 里的东西又是怎么被调用的? pip和conda可以混用吗? - 知乎
好了扯回来!如果使用 conda 安装 pytorch 后 import 找不到 torch 怎么办(/path/to/torch替换成自己的路径,如果不知道自己 torch 安装在哪,重新运行一遍你刚才的安装命令,会提示 xxx is already exists in /xxx/path):
vim ~/.bashrc
export PYTHONPATH=/path/to/torch:$PYTHONPATH
source ~/.bashrc
3.2 安装mmengine mmcv:
pip install mmcv-full
(实践中我先没有指定版本)若上述命令无效:
用mim安装:
pip install -U openmim
mim install mmcv-full
实在安不下来手动安装 .whl 吧(cuxxx torchx.x.x记得更换!): https://download.openmmlab.com/mmcv/dist/cu111/torch1.8.0/index.html
4. 运行时的报错案例及解决
然后运行你的小脚本,出现什么报错解决什么(环境层面),如:
ImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory:
apt-get update
apt-get install libglib2.0-0
The following packages have unmet dependencies: libglib2.0-dev : Depends: libpcre3-dev (>= 1:8.31) but it is not going to be installed Depends: zlib1g-dev but it is not going to be installed E: Unable to correct problems, you have held broken packages.
apt-get install libpcre3-dev=1:8.31 zlib1g-dev
总之一句话,缺什么安什么,安装完记得看最后一行有没有warning,按照他提供的最小安装版本条件安装!
若出现下面的大坑,误慌,先 pip uninstall mmcv,再根据 安装 MMCV — mmcv 2.0.1 文档 输入你的配置得到安装命令;
ImportError: /root/miniconda3/envs/centerpoint_radarduck/lib/python3.8/site-packages/mmcv/_ext.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZN3c105ErrorC2ENS_14SourceLocationESs