Docker | Docker 快速搭建 TensorRT 环境(超详细)

原创声明

本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!


前言

我们平时训练 or 部署的环境, TensorFlow 和 Pytorch 有时候会出现兼容性导致的错误,如果线上已经部署了多个 TensorFlow 模型的情况下,后续要继续使用 TensorFlow 而不能使用 Pytorch 写的更好的网络,这导致我们在模型选型的时候很受制约,但是 TensorRT 可以解决这个问题。

另外,我们如果直接使用 Python 部署的话,其作为解释语言的处理速度无法超过编译语言,这导致推理会比较耗时,但是如果使用 TensorRT 的话,可以很好的对网络进行加速,提升 10倍+ 的速度,真正做到模型推理速度起飞的效果。

另外,如果在宿主机直接安装,可能会出现和开发or训练环境不同的系统配置,有一定的风险,借助 Docker 容器的便捷性,更加能够快速进行 TensorRT 的搭建 ,下面我就为大家带来 Docker 搭建 TensorRT 的环境。

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!


一、什么是 TensorRT

NVIDIA® TensorRT™的核心是一个C++库,它有助于NVIDIA图形处理单元(GPU)的高性能推理。它被设计成一种与训练框架(如TensorFlowPyTorchMXNet等)互补的工作方式。它特别关注于在GPU上快速高效地运行已经训练过的网络。

一些训练框架如TensorFlow已经集成了TensorRT,因此可以使用它来加速框架内的推理。或者,TensorRT可以用作用户应用程序中的库。它包括一个Onnx解析器和C++Python API,用于以编程方式构建模型。

图1.TensorRT是一个用于产品部署的高性能神经网络推理优化器和运行时引擎。
在这里插入图片描述

TensorRT通过组合层和优化内核选择来优化网络,以提高延迟、吞吐量、能效和内存消耗。如果应用程序指定,它将进一步优化网络以较低的精度运行,进一步提高性能并减少内存需求。

下面就让我们开始搭建 TensorRT 的环境吧。


二、搭建

本文介绍两种方法进行 docker 环境的搭建:

  • 手工搭建(知其然,知其所以然)
  • Dockerfile 一键搭建(爽)

注意:无论使用什么方式都需要在宿主机先安装 NVIDIA-Docker ,安装方式可以参考我之前的文章:Docker 搭建深度学习环境镜像,一次搭建,无限部署! 中的 【四、NVIDIA-Docker】。


方案一:手工搭建(知其然,知其所以然)

过程

  1. 浏览 nvidia 官方的 dockerhub 镜像库: nvidia/cuda ,选择你使用的环境。如果没有的话,就点击这里,获取最全列表:
    在这里插入图片描述
    可以看到很多版本的 tag 名称:
    在这里插入图片描述

  2. 我这里选择的是 10.0-cudnn7-devel-ubuntu18.04,使用命令拉取

    docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
    
  3. 进入镜像

    docker run -it --name 容器名称 --gpus all \
    -v 需要映射外部路径:容器内部路径 镜像名 /bin/bash
    
  4. 进入 docker

    查看 cudacudnn 版本

    cat /usr/local/cuda/version.txt
    cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
    
  5. 查看发行版

    cat /etc/issue
    
  6. 登录官网:NVIDIA TensorRT 下载 TensorRT
    在这里插入图片描述

  7. 找到需要的版本号:
    在这里插入图片描述

  8. 同意条约:
    在这里插入图片描述

  9. 选择对应的系统和版本进行下载:我选择了 TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz,您根据自己需要的现在即可。
    在这里插入图片描述

    这里附上 TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz 下载的 link

    https://developer.nvidia.com/compute/machine-learning/tensorrt/secure/7.0/7.0.0.11/tars/TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
    
  10. 安装tensorRT

    解压:

    tar -zxvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
    
  11. 添加环境变量:

    vim ~/.bashrc
    export LD_LIBRARY_PATH=解压TensorRT的路径/TensorRT-7.0.0.11/lib:$LD_LIBRARY_PATH
    source ~/.bashrc
    
  12. 安装 python

    apt-get install -y --no-install-recommends \
      python3 \
      python3-pip \
      python3-dev \
      python3-wheel &&\
    cd /usr/local/bin &&\
    ln -s /usr/bin/python3 python &&\
    ln -s /usr/bin/pip3 pip;
    
  13. pip 安装对应的 TensorRT 库,注意,一定要使用 pip 本地安装 tar 附带的 whl 包!

    cd TensorRT-7.0.0.11/python/
    sudo pip3 install tensorrt-7.0.0.11-cp36-none-linux_x86_64.whl
    
  14. 测试 TensorRTpython 接口,出现下图就显示成功!
    在这里插入图片描述

方案一中可能出现的错误

  1. 安装 pychuda 出现错误: ERROR: Could not build wheels for pycuda which use PEP 517 and cannot be installed directly

    pip install pychuda 
    

    在这里插入图片描述
    这是因为安装的版本太新了,装旧版本即可:

    pip install pycuda==2018.1.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
    
  2. 显示中文出现: UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-9: ordinal not in range(128)
    在这里插入图片描述
    (1) 查看容器的语言环境

    locale
    

    输出:

    LANG=
    LANGUAGE=
    LC_CTYPE="POSIX"
    

    (2) 查看容器支持的语言

    locale -a
    

    输出:

    C
    C.UTF-8
    POSIX
    

    (3) 修改 /etc/profile

    vi /etc/profile   
    

    在文件的在最后添加:

    export  LANG=C.UTF-8
    

    (4) 重新加载环境变量

    source /etc/profile
    

    (5) 再次查看容器的语言环境

    locale
    

    成功!

    LANG=C.UTF-8
    LANGUAGE=
    LC_CTYPE="C.UTF-8"
    

方案二:Dockerfile 一键搭建(爽)

  1. 将下面的代码保存成文件 Dokerfile

        # Copyright (c) 2021, NVIDIA CORPORATION. All rights reserved.
    #
    # Licensed under the Apache License, Version 2.0 (the "License");
    # you may not use this file except in compliance with the License.
    # You may obtain a copy of the License at
    #
    #     http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    
    ARG CUDA_VERSION=10.0
    ARG CUDNN_VERSION=7
    ARG OS_VERSION=18.04
    
    FROM nvidia/cuda:${CUDA_VERSION}-cudnn${CUDNN_VERSION}-devel-ubuntu${OS_VERSION}
    LABEL maintainer="HinGwen Woong"
    
    # ENV TRT_VERSION 7.2.3.4
    ENV TRT_VERSION 7.0.0.11
    SHELL ["/bin/bash", "-c"]
    
    
    # 将 apt 的升级源切换成 阿里云
    RUN  sed -i s@/archive.ubuntu.com/@/mirrors.aliyun.com/@g /etc/apt/sources.list && \
                apt-get clean && \
                rm /etc/apt/sources.list.d/*
    
    # 安装必要的库
    RUN apt-get update && apt-get install -y software-properties-common
    RUN add-apt-repository ppa:ubuntu-toolchain-r/test
    RUN apt-get update && apt-get install -y --no-install-recommends \
        libcurl4-openssl-dev \
        wget \
        zlib1g-dev \
        git \
        pkg-config \
        sudo \
        ssh \
        libssl-dev \
        pbzip2 \
        pv \
        bzip2 \
        unzip \
        devscripts \
        lintian \
        fakeroot \
        dh-make \
        build-essential \
        libgl1-mesa-glx
    
    # 安装 python3 环境
    RUN apt-get install -y --no-install-recommends \
        python3 \
        python3-pip \
        python3-dev \
        python3-wheel &&\
        cd /usr/local/bin &&\
        ln -s /usr/bin/python3 python &&\
        ln -s /usr/bin/pip3 pip;
    
    # 安装 TensorRT
    RUN cd /tmp &&\
        wget https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/nvidia-machine-learning-repo-ubuntu1804_1.0.0-1_amd64.deb &&\
        dpkg -i nvidia-machine-learning-repo-*.deb && apt-get update
    RUN v="${TRT_VERSION%.*}-1+cuda${CUDA_VERSION%.*}" &&\
        apt-get install -y libnvinfer7=${v} libnvinfer-plugin7=${v} libnvparsers7=${v} libnvonnxparsers7=${v} libnvinfer-dev=${v} libnvinfer-plugin-dev=${v} libnvparsers-dev=${v} python3-libnvinfer=${v} &&\
        apt-mark hold libnvinfer7 libnvinfer-plugin7 libnvparsers7 libnvonnxparsers7 libnvinfer-dev libnvinfer-plugin-dev libnvparsers-dev python3-libnvinfer
    
    # 升级 pip 并切换成国内豆瓣源
    RUN python3 -m pip install -i https://pypi.douban.com/simple/ --upgrade pip
    RUN pip3 config set global.index-url https://pypi.douban.com/simple/
    RUN pip3 install setuptools>=41.0.0
    
    # 升级 Cmake(可选)
    RUN cd /tmp && \
        wget https://github.com/Kitware/CMake/releases/download/v3.14.4/cmake-3.14.4-Linux-x86_64.sh && \
        chmod +x cmake-3.14.4-Linux-x86_64.sh && \
        ./cmake-3.14.4-Linux-x86_64.sh --prefix=/usr/local --exclude-subdir --skip-license && \
        rm ./cmake-3.14.4-Linux-x86_64.sh
    
    # 设置环境变量和工作路径
    ENV TRT_LIBPATH /usr/lib/x86_64-linux-gnu
    ENV TRT_OSSPATH /workspace/TensorRT
    ENV LD_LIBRARY_PATH="${LD_LIBRARY_PATH}:${TRT_OSSPATH}/build/out:${TRT_LIBPATH}"
    WORKDIR /workspace
    
    # 设置语言环境为中文,防止 print 中文报错
    ENV LANG C.UTF-8
    
    RUN ["/bin/bash"]
    
  2. 构建镜像的指令,其中 hingwenwoong/tensorrt-docker:v1 的是构建镜像的命名,自行修改; 注意:最后的 . 不要漏掉了!

    sudo docker build -t hingwenwoong/tensorrt-docker:v1 -f ./Dockerfile .
    
  3. 新建并进入容器,其中容器名hingwenwoong/tensorrt-docker:v1 根据上一步设置的来修改:

    docker run -it --name 容器名称 --gpus all \
    -v 需要映射外部路径:容器内部路径 hingwenwoong/tensorrt-docker:v1 /bin/bash
    
  4. python3 环境中测试 TensorRTpython 接口,出现下图就显示成功!
    在这里插入图片描述


总结

以上就是使用 Docker 快速进行 TensorRT 环境的搭建,希望能够祝您一臂之力,减少搭建环境的需要的时间和精力!

我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!


更多阅读推荐

参考

授权须知

  1. 原创文章在推送一天后才可进行转载
  2. 转载文章,禁止声明原创
  3. 不允许直接二次转载,转载请根据原文链接联系作者
  4. 若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
    但对于未注明转载来源/原文链接的文章,我将保留追述的权利。

    作者:HinGwenWoong
    一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
    CSDN: HinGwenWoong
    原文链接:Docker | Docker 快速搭建 TensorRT 环境(超详细)

  5. 若需要修改文章的排版,请根据原文链接联系作者
  6. 再次感谢您的认可,转载请遵守如上转载须知!
  • 30
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
Docker Compose是一个用于定义和运行多个Docker容器的工具。通过使用Docker Compose,您可以快速搭建LNMP(Linux、Nginx、MySQL、PHP)开发环境。下面是一个快速搭建LNMP开发环境的示例docker-compose.yml文件: ```yaml version: '3' services: nginx: image: nginx:latest ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./html:/usr/share/nginx/html depends_on: - php php: image: php:7.4-fpm volumes: - ./php.ini:/usr/local/etc/php/php.ini - ./html:/var/www/html depends_on: - mysql mysql: image: mysql:latest ports: - 3306:3306 environment: - MYSQL_ROOT_PASSWORD=your_password volumes: - ./mysql:/var/lib/mysql ``` 在上面的示例中,我们定义了三个服务:nginx、php和mysql。nginx服务使用nginx:latest镜像,并将主机的80端口映射到容器的80端口。同时,我们将nginx.conf文件和html文件夹分别挂载到容器内的对应路径。php服务使用php:7.4-fpm镜像,并将php.ini文件和html文件夹挂载到容器内的对应路径。mysql服务使用mysql:latest镜像,并将主机的3306端口映射到容器的3306端口。我们还设置了MYSQL_ROOT_PASSWORD环境变量,并将mysql文件夹挂载到容器内的/var/lib/mysql路径。 要快速搭建LNMP开发环境,您只需在包含docker-compose.yml文件的目录中运行以下命令: ```shell docker-compose up -d ``` 这将启动所有定义的服务,并将它们放在后台运行。现在,您可以通过访问http://localhost来访问您的LNMP开发环境
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值