原创声明
本文为 HinGwenWoong 原创,如果这篇文章对您有帮助,欢迎转载,转载请阅读文末的【授权须知】,感谢您对 HinGwenWoong 文章的认可!
前言
我们平时训练 or 部署的环境, TensorFlow 和 Pytorch 有时候会出现兼容性导致的错误,如果线上已经部署了多个 TensorFlow 模型的情况下,后续要继续使用 TensorFlow 而不能使用 Pytorch 写的更好的网络,这导致我们在模型选型的时候很受制约,但是 TensorRT 可以解决这个问题。
另外,我们如果直接使用 Python 部署的话,其作为解释语言的处理速度无法超过编译语言,这导致推理会比较耗时,但是如果使用 TensorRT 的话,可以很好的对网络进行加速,提升 10倍+ 的速度,真正做到模型推理速度起飞的效果。
另外,如果在宿主机直接安装,可能会出现和开发or训练环境不同的系统配置,有一定的风险,借助 Docker 容器的便捷性,更加能够快速进行 TensorRT 的搭建 ,下面我就为大家带来 Docker 搭建 TensorRT 的环境。
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!
一、什么是 TensorRT
NVIDIA® TensorRT™
的核心是一个C++
库,它有助于NVIDIA
图形处理单元(GPU)的高性能推理。它被设计成一种与训练框架(如TensorFlow
、PyTorch
、MXNet
等)互补的工作方式。它特别关注于在GPU
上快速高效地运行已经训练过的网络。
一些训练框架如TensorFlow
已经集成了TensorRT
,因此可以使用它来加速框架内的推理。或者,TensorRT
可以用作用户应用程序中的库。它包括一个Onnx
解析器和C++
和Python API
,用于以编程方式构建模型。
图1.TensorRT是一个用于产品部署的高性能神经网络推理优化器和运行时引擎。
TensorRT
通过组合层和优化内核选择来优化网络,以提高延迟、吞吐量、能效和内存消耗。如果应用程序指定,它将进一步优化网络以较低的精度运行,进一步提高性能并减少内存需求。
下面就让我们开始搭建 TensorRT 的环境吧。
二、搭建
本文介绍两种方法进行 docker 环境的搭建:
- 手工搭建(知其然,知其所以然)
- Dockerfile 一键搭建(爽)
注意:无论使用什么方式都需要在宿主机先安装 NVIDIA-Docker
,安装方式可以参考我之前的文章:Docker 搭建深度学习环境镜像,一次搭建,无限部署! 中的 【四、NVIDIA-Docker】。
方案一:手工搭建(知其然,知其所以然)
过程
-
浏览
nvidia
官方的dockerhub
镜像库: nvidia/cuda ,选择你使用的环境。如果没有的话,就点击这里,获取最全列表:
可以看到很多版本的tag
名称:
-
我这里选择的是
10.0-cudnn7-devel-ubuntu18.04
,使用命令拉取docker pull nvidia/cuda:10.0-cudnn7-devel-ubuntu18.04
-
进入镜像
docker run -it --name 容器名称 --gpus all \ -v 需要映射外部路径:容器内部路径 镜像名 /bin/bash
-
进入 docker
查看
cuda
和cudnn
版本cat /usr/local/cuda/version.txt cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2
-
查看发行版
cat /etc/issue
-
登录官网:NVIDIA TensorRT 下载 TensorRT
-
找到需要的版本号:
-
同意条约:
-
选择对应的系统和版本进行下载:我选择了
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
下载的 linkhttps://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
-
安装tensorRT
解压:
tar -zxvf TensorRT-7.0.0.11.Ubuntu-18.04.x86_64-gnu.cuda-10.0.cudnn7.6.tar.gz
-
添加环境变量:
vim ~/.bashrc export LD_LIBRARY_PATH=解压TensorRT的路径/TensorRT-7.0.0.11/lib:$LD_LIBRARY_PATH source ~/.bashrc
-
安装 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;
-
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
-
测试
TensorRT
的python
接口,出现下图就显示成功!
方案一中可能出现的错误
-
安装 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
-
显示中文出现:
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 一键搭建(爽)
-
将下面的代码保存成文件
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"]
-
构建镜像的指令,其中
hingwenwoong/tensorrt-docker:v1
的是构建镜像的命名,自行修改; 注意:最后的.
不要漏掉了!sudo docker build -t hingwenwoong/tensorrt-docker:v1 -f ./Dockerfile .
-
新建并进入容器,其中容器名
hingwenwoong/tensorrt-docker:v1
根据上一步设置的来修改:docker run -it --name 容器名称 --gpus all \ -v 需要映射外部路径:容器内部路径 hingwenwoong/tensorrt-docker:v1 /bin/bash
-
在
python3
环境中测试TensorRT
的python
接口,出现下图就显示成功!
总结
以上就是使用 Docker 快速进行 TensorRT 环境的搭建,希望能够祝您一臂之力,减少搭建环境的需要的时间和精力!
我是 HinGwenWoong,一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,码字不易,如果帮到您,请帮我在屏幕下方点赞 👍 ,您的点赞可以让技术传播得更远更广,谢谢!
参考
- [1] NVIDIA\TensorRT\docker
- [2] Docker:Ubuntu容器中中文变成方块(中文乱码;不支持中文)解决办法
- [3] NVIDIA Deep Learning TensorRT Documentation
授权须知
- 原创文章在推送一天后才可进行转载
- 转载文章,禁止声明原创
- 不允许直接二次转载,转载请根据原文链接联系作者
- 若无需改版,在文首清楚标注作者及来源/原文链接,并删除【原创声明】,即可直接转载。
但对于未注明转载来源/原文链接的文章,我将保留追述的权利。作者:HinGwenWoong
一个有着清晰目标不停奋斗的程序猿,热爱技术,喜欢分享,共同进步!
CSDN: HinGwenWoong
原文链接:Docker | Docker 快速搭建 TensorRT 环境(超详细) - 若需要修改文章的排版,请根据原文链接联系作者
- 再次感谢您的认可,转载请遵守如上转载须知!