告别版本混乱:在Ubuntu上用Tar包管理多版本TensorRT(附CUDA 11.0+cuDNN 8.0.5环境)
告别版本混乱在Ubuntu上用Tar包管理多版本TensorRT附CUDA 11.0cuDNN 8.0.5环境深度学习工程师经常面临一个棘手问题如何在单台开发机上同时维护多个TensorRT版本当项目A需要TensorRT 7.x而项目B依赖TensorRT 8.x时传统安装方式往往导致环境冲突。本文将介绍一种基于tar包和虚拟环境的优雅解决方案让您彻底告别版本混乱。1. 环境隔离的必要性与方案选型在深度学习开发中环境隔离不是可选项而是必选项。TensorRT的版本差异可能导致模型推理结果不一致甚至直接报错退出。我们来看一个典型场景生产环境使用TensorRT 7.1.3.4训练的模型新项目需要TensorRT 8.2.1.8的新特性本地开发机同时进行两个项目的调试传统直接安装方式会导致版本覆盖后安装的版本会替换前一个版本依赖冲突不同TensorRT版本对CUDA/cuDNN的要求不同环境污染全局环境变量可能指向错误的库路径解决方案对比表方案优点缺点Docker容器完全隔离资源占用高GPU穿透配置复杂源码编译灵活定制编译耗时依赖管理困难tar包虚拟环境轻量隔离快速切换需要手动管理环境变量通过对比可见tar包安装配合虚拟环境在灵活性和易用性上取得了最佳平衡。下面我们具体实现这一方案。2. 基础环境准备2.1 硬件与驱动检查首先确认GPU驱动就绪nvidia-smi预期输出应包含GPU型号和驱动版本例如----------------------------------------------------------------------------- | NVIDIA-SMI 470.63.01 Driver Version: 470.63.01 CUDA Version: 11.4 | |--------------------------------------------------------------------------- | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | | | | MIG M. | || | 0 GeForce RTX 3090 On | 00000000:01:00.0 On | N/A | | 30% 45C P8 22W / 350W | 689MiB / 24268MiB | 0% Default | | | | N/A | ---------------------------------------------------------------------------2.2 CUDA与cuDNN安装为支持TensorRT 7.x和8.x我们安装兼容性较好的CUDA 11.0wget https://developer.download.nvidia.com/compute/cuda/11.0.3/local_installers/cuda_11.0.3_450.51.06_linux.run sudo sh cuda_11.0.3_450.51.06_linux.run --override配置cuDNN 8.0.5tar -xzvf cudnn-11.0-linux-x64-v8.0.5.39.tgz sudo cp cuda/include/cudnn*.h /usr/local/cuda/include sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod ar /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*注意建议将CUDA安装路径加入环境变量但不要在此阶段设置TensorRT相关变量3. 多版本TensorRT部署策略3.1 版本目录结构设计推荐按以下结构组织不同版本~/tensorrt_versions/ ├── 7.1.3.4 │ ├── TensorRT-7.1.3.4 │ └── env_7.1.3.4 └── 8.2.1.8 ├── TensorRT-8.2.1.8 └── env_8.2.1.8下载对应版本tar包并解压mkdir -p ~/tensorrt_versions/7.1.3.4 cd ~/tensorrt_versions/7.1.3.4 tar -xzvf TensorRT-7.1.3.4.Ubuntu-16.04.x86_64-gnu.cuda-11.0.cudnn8.0.tar.gz3.2 虚拟环境创建为每个版本创建独立conda环境conda create -n trt_7 python3.7 conda activate trt_7 cd TensorRT-7.1.3.4/python pip install tensorrt-7.1.3.4-cp37-none-linux_x86_64.whl验证安装import tensorrt as trt print(trt.__version__) # 应输出7.1.3.44. 动态环境切换方案4.1 环境切换脚本创建~/bin/trt_switch脚本#!/bin/bash if [ $# -ne 1 ]; then echo Usage: trt_switch [7|8] exit 1 fi case $1 in 7) conda activate trt_7 export TRT_PATH~/tensorrt_versions/7.1.3.4/TensorRT-7.1.3.4 ;; 8) conda activate trt_8 export TRT_PATH~/tensorrt_versions/8.2.1.8/TensorRT-8.2.1.8 ;; *) echo Invalid version exit 1 ;; esac export LD_LIBRARY_PATH$TRT_PATH/lib:$LD_LIBRARY_PATH export PATH$TRT_PATH/bin:$PATH赋予执行权限并测试chmod x ~/bin/trt_switch trt_switch 7 # 切换到7.x环境 trt_switch 8 # 切换到8.x环境4.2 自动化验证流程创建验证脚本verify_trt.sh#!/bin/bash echo [验证开始] $(date) echo 当前TensorRT版本 python -c import tensorrt as trt; print(trt.__version__) echo 库文件路径 ldd $(which trtexec) | grep libnvinfer echo [样例测试] cd $TRT_PATH/samples/sampleMNIST make clean make ./sample_mnist5. 常见问题与解决方案5.1 库文件加载失败现象ImportError: libnvinfer.so.7: cannot open shared object file解决方案确认LD_LIBRARY_PATH包含正确路径检查软链接ls -l $TRT_PATH/lib/libnvinfer.so*更新库缓存sudo ldconfig5.2 Python包冲突现象ERROR: Cannot uninstall tensorrt. It is a distutils installed project解决方案 使用--ignore-installed参数强制安装pip install --ignore-installed tensorrt-*.whl5.3 多GPU环境适配对于多GPU服务器建议通过CUDA_VISIBLE_DEVICES控制GPU可见性# 只使用第一块GPU CUDA_VISIBLE_DEVICES0 trtexec --onnxmodel.onnx6. 进阶技巧与最佳实践6.1 版本兼容性矩阵TensorRT版本CUDA要求cuDNN要求Python支持7.1.310.2/11.08.0.53.6-3.88.2.111.48.2.43.6-3.96.2 性能优化建议为每个项目创建专属环境使用固定版本号安装依赖pip install tensorrt7.1.3.4 --no-deps定期清理缓存conda clean --all pip cache purge6.3 CI/CD集成方案在自动化流程中可以通过环境变量精确控制版本# .gitlab-ci.yml示例 test_trt7: variables: TRT_VERSION: 7 script: - source ~/bin/trt_switch $TRT_VERSION - ./run_tests.sh
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2556361.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!