docker容器内安装TensorRT的问题

本文档详细介绍了在Ubuntu系统和Docker环境下安装TensorRT时遇到的依赖冲突问题及其解决方案。通过创建优先级文件避免包冲突,以及针对RTX30系列GPU选择合适的CUDA版本,成功安装并避免了性能降低和编译错误。
部署运行你感兴趣的模型镜像

Ubuntu上卸载已安装的版本:

   sudo apt-get purge "libnvinfer*"

如果想把安装文件都删掉以释放空间,执行:

   dpkg -l | grep tensorrt

查看到安装包名,假如是nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007,则执行:

sudo dpkg -P nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007

这样就把/var/nv-tensorrt-repo-ubuntu1804-cuda11.1-trt7.2.1.6-ga-20201007_1-1这样的目录文件删掉了。

在Ubuntu主机上安装TensorRT按照https://docs.nvidia.com/deeplearning/tensorrt/install-guide/index.html#installing-debian 做即可,下载安装repo的deb文件后执行下面的步骤即可,假如安装适配CUDA10.2的TensorRT7.2.1版,执行:

   sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.2.1.6-ga-20201006_1-1_amd64.deb

   sudo apt-key add /var/nv-tensorrt-repo-cuda10.2-trt7.2.1.6-ga-20201006/7fa2af80.pub

   sudo apt-get update

   sudo apt-get install tensorrt

如果是在docker容器内安装就不能使用上面的步骤了,否则在安装最后一步时总是会遇到类似如下的错误:

The following packages have unmet dependencies:
 tensorrt : Depends: libnvinfer-dev (= 7.2.1-6+cuda10.2) but 8.0.0-1+cuda11.3 is to be installed
            Depends: libnvinfer-plugin-dev (= 7.2.1-6+cuda10.2) but 8.0.0-1+cuda11.3 is to be installed
            Depends: libnvparsers-dev (= 7.2.1-6+cuda10.2) but 8.0.0-1+cuda11.3 is to be installed
            Depends: libnvonnxparsers-dev (= 7.2.1-6+cuda10.2) but 8.0.0-1+cuda11.3 is to be installed
            Depends: libnvinfer-samples (= 7.2.1-6+cuda10.2) but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

容器内分明安装的是CUDA10.2,TensorRT也是7.2.1.6+cuda10.2版的,但是就总是报上面类似的错误,换成其他版本也是一样的继续报类似错,折腾得很郁闷,后来仔细看NVIDIA的文档发现

看来在docker容器内安装TensorRT得用另外的办法,但是呢,用Network Repo方式安装去指定安装一堆libnvinfer*库(根据需要修改8为7)是在是麻烦:

而且装完后后来编译程序时发现还有这样那样的问题,哪怕是指定版本的方式也是同样有问题:

又来回折腾了一阵还是有错,最后往下看发现了这个最简单可靠的方式:

也就是说,最前面报那种莫名其妙的错,其实是因为docker容器内配置有NVIDIA CUDA network repository,而手工下载安装nv-tensorrt-repo-ubuntu1804-cuda10.2-trt7.2.1.6-ga-20201006_1-1_amd64.deb这样的TensorRT local repository后,使用sudo apt-get install tensorrt安装的话由于有两种源会导致包冲突,只需要在/etc/apt/preferences.d/下增加个文件local-repo,内容是:

Package: *
Pin: origin ""
Pin-Priority: 1001

然后执行

   sudo apt-get update

   sudo apt-get install tensorrt

就顺利安装完成local repo对应的版本cuda10.2-trt7.2.1.6,然后编译程序也没见什么错误了!

感觉NVIDIA的文档有的地方写得真的是烂,不能针对每种环境安装分别清楚无误完整地说明白么,非要把很多搅合在一起让用户自己去蹚一个个坑

另外,如果是使用的RTX30序列的GPU,CUDA版本需要 >= 11.1,不然,虽然TensorRT可以安装,但是实际运行时可能会报下面这样的错误:

[W] [TRT] Half2 support requested on hardware without native FP16 support, performance will be negatively affected.
[E] [TRT] ../rtSafe/cuda/caskUtils.cpp (98) - Assertion Error in trtSmToCask: 0 (Unsupported SM.)

11.1.0虽然可以用,但是编译caffe或darknet等某些程序时可能会有下面的错误:

    nvcc fatal: Unsupported gpu architecture 'compute_86'

所以对于RTX30序列的GPU,最好安装CUDA的版本 >= 11.1.1

 

 

您可能感兴趣的与本文相关的镜像

PyTorch 2.7

PyTorch 2.7

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

<think>我们正在回答用户关于在Linux容器安装TensorRT问题。用户之前遇到了`./bin/trtexec: No such file or directory`错误,现在想了解在容器安装TensorRT的方法。 根据引用内容,我们可以整理出在容器安装TensorRT的步骤。注意,用户是在容器环境中,所以我们需要考虑容器的特性(如文件系统隔离、权限等)。 安装TensorRT的常见方法有两种: 1. 使用Tar包安装(适用于任何Linux发行版,包括容器环境) 2. 使用deb包安装(适用于Ubuntu等,但在容器中可能更复杂,因为需要配置apt源) 由于容器通常是一个精简的环境,我们推荐使用Tar包安装,因为它不依赖系统包管理器,并且可以安装到任意路径。 步骤概览: 1. 下载TensorRT的Tar包(注意选择与CUDA版本匹配的包) 2. 将Tar包复制到容器内(如果容器正在运行,可以使用`docker cp`;或者直接在容器内下载) 3. 在容器内解压Tar包 4. 设置环境变量(将TensorRT库路径添加到LD_LIBRARY_PATH,并将bin目录添加到PATH) 5. 安装Python包(可选,如果需要在Python中使用) 6. 验证安装 详细步骤: 1. **下载TensorRT Tar包**: 从NVIDIA官网下载对应版本的TensorRT Tar包。注意选择与容器内CUDA版本兼容的TensorRT版本。例如,如果容器内CUDA版本是11.2,则下载对应的TensorRT版本(如TensorRT-8.2.1.8.Linux.x86_64-gnu.cuda-11.2.cudnn8.2.tar.gz)[^2]。 2. **将Tar包复制到容器内**: 如果容器正在运行,可以使用以下命令将文件复制到容器内: ```bash docker cp /path/to/TensorRT-8.2.1.8.Linux.x86_64-gnu.cuda-11.2.cudnn8.2.tar.gz <container_name>:/path/in/container/ ``` 或者,可以在容器内直接下载(如果容器有网络): ```bash wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.2.1/tars/TensorRT-8.2.1.8.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz ``` (注意:实际URL可能变化,请从官网获取) 3. **在容器内解压Tar包**: 进入容器内存放Tar包的目录,然后解压: ```bash tar -zxvf TensorRT-8.2.1.8.Linux.x86_64-gnu.cuda-11.2.cudnn8.2.tar.gz ``` 解压后会生成一个目录,例如`TensorRT-8.2.1.8`[^1]。 4. **设置环境变量**: 将TensorRT的库路径添加到环境变量中。可以将以下命令添加到容器的`~/.bashrc`或直接在shell中执行: ```bash export TENSORRT_ROOT=/path/to/TensorRT-8.2.1.8 # 替换为实际路径 export LD_LIBRARY_PATH=$TENSORRT_ROOT/lib:$LD_LIBRARY_PATH export PATH=$TENSORRT_ROOT/bin:$PATH ``` 然后使环境变量生效: ```bash source ~/.bashrc ``` 5. **安装Python包(可选)**: 如果需要在Python中使用TensorRT,需要安装Python wheel包。进入TensorRT目录下的python文件夹,选择适合的Python版本的wheel包进行安装。例如: ```bash cd $TENSORRT_ROOT/python pip install tensorrt-8.2.1.8-cp38-none-linux_x86_64.whl ``` 注意:whl文件名中的Python版本(cp38)和系统架构(x86_64)需要匹配。 此外,还需要安装PyCUDA(如果尚未安装): ```bash pip install pycuda==2020.1 ``` 6. **验证安装**: - 运行`trtexec`工具: ```bash trtexec --version ``` 如果安装正确,会显示版本信息。 - Python环境下验证: ```python import tensorrt print(tensorrt.__version__) ``` 注意事项: - 容器内需要已经安装了对应的CUDA和cuDNN,且版本与TensorRT要求一致。 - 如果容器重启,需要重新设置环境变量(可以考虑将环境变量设置写入容器的启动脚本)。 如果在运行`trtexec`时仍然遇到`No such file or directory`错误,请按照之前的方法检查路径和权限。 引用说明: [^1]: 解压TensorRT Tar包后生成对应版本文件夹。 [^2]: 下载TensorRT的官方来源。 相关问题: 1. 如何解决TensorRT的CUDA版本不匹配问题? 2. 在容器中如何永久设置环境变量? 3. 如何验证TensorRT是否能够正常运行模型? 4. 使用TensorRT转换ONNX模型的方法是什么? 5. 在容器安装多个版本的TensorRT如何管理? </think>### 在Linux容器安装TensorRT的完整指南 #### 1. **下载TensorRT安装包** ```bash # 在容器内下载匹配CUDA版本的TensorRT(示例为CUDA 11.2) wget https://developer.nvidia.com/downloads/compute/machine-learning/tensorrt/secure/8.2.1/tars/TensorRT-8.2.1.8.Linux.x86_64-gnu.cuda-11.4.cudnn8.2.tar.gz ``` > 注意:需确保CUDA版本匹配,可通过`nvcc --version`验证[^2] #### 2. **解压安装包** ```bash tar -zxvf TensorRT-8.2.1.8.Linux.x86_64-gnu.cuda-11.2.cudnn8.2.tar.gz cd TensorRT-8.2.1.8 # 进入解压目录[^1] ``` #### 3. **添加环境变量** ```bash # 添加到容器环境变量(临时生效) export LD_LIBRARY_PATH=$PWD/lib:$LD_LIBRARY_PATH # 永久生效(写入容器启动脚本) echo "export LD_LIBRARY_PATH=$PWD/lib:\$LD_LIBRARY_PATH" >> ~/.bashrc ``` #### 4. **安装Python支持(可选)** ```bash cd python pip install tensorrt-*-cp3x-none-linux_x86_64.whl # 替换cp3x为实际Python版本 pip install pycuda==2020.1 # 安装依赖[^5] ``` #### 5. **验证安装** ```bash # 验证命令行工具 ./bin/trtexec --version # Python验证 python -c "import tensorrt; print(tensorrt.__version__)" # 应输出8.2.1[^2] ``` #### 6. **解决常见问题** - **文件权限问题**: ```bash chmod +x bin/* # 授予执行权限 ``` - **依赖缺失**: ```bash apt-get update && apt-get install libnvinfer-dev # 安装核心库 ``` - **ONNX支持**(可选): ```bash cd onnx-tensorrt cmake .. -DTENSORRT_ROOT=/path/to/TensorRT-8.2.1.8 make -j$(nproc) && make install[^3] ``` > **关键提示**:容器重启后需重新挂载环境变量,建议在Dockerfile中添加: > ```dockerfile > ENV LD_LIBRARY_PATH /opt/TensorRT-8.2.1.8/lib:$LD_LIBRARY_PATH > COPY TensorRT-8.2.1.8 /opt/TensorRT-8.2.1.8 > ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Arnold-FY-Chen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值