Docker容器中安装TensorRT8.0.0.3以及onnx2trt

Docker容器内部构建tensorRT过程

记录一下自己的实现过程。记录一下自己在的实现过程。配置好的镜像已经上传到了dockerhub。可以直接拉取就不用配置了。

拉取命令:docker pull liuyuankai/kkubuntu:v2.1

一、基础环境

基于:platform_pytorch:1.5_py37_v2.0 (或者dockerhub上的其他基础镜像)
以及在Dockefile里面写了一些基础的依赖包的版本

二、启动容器

通过挂载的方式进行创建一个容器,指令如下

nvidia-docker run --shm-size 12G -it --rm  -v /balbala/xiaomoxian/liuyuankai/:/liuyuankai --name lykcontainer_trytrt chest:v1
关键参数解释:
    --shm-size 12G  :容器共享内存大小shared memory (shm)
    -it             : -i: 交互式操作 -t: 终端
    --rm            :退出容器后自动删除
    -v              :挂载
    --name          :命名容器

在容器里面进行后续的操作

三、 升级 cmake

从这里去找高版本的cmake进行下载

安装稍微参考一下这里
下载之后直接:sh cmake-3.17.0-Linux-x86_64.sh -- --skip-license --prefix=/usr
很快就弄好的,检查版本cmake --version

四、docker 容器内部安装 cuDNN

打算安装tensorRT8.0.0.3,其中要求cuDNN8.2.1
我是通过安装了 官方的 三个deb文件来安装。
参考了这个博客

安装步骤

1.下载文件:Download cuDNN v8.2.1 (June 7th, 2021), for CUDA 10.2
Docker容器中安装TensorRT8.0.0.3以及onnx2trt_第1张图片

2.按照官方给的说明安装,或者参照这个博客

五、安装 TensorRT8.0.0.3

按nvidia步骤 来没啥问题。

这里选择TensorRT 8.0.0 EA 版本 , 并且使用 【tar安装方式 】(总感觉成功率会高一些)。
Docker容器中安装TensorRT8.0.0.3以及onnx2trt_第2张图片
Docker容器中安装TensorRT8.0.0.3以及onnx2trt_第3张图片

检测是否安装tensorRT成功?在终端输入以下命令不报错就行。

python3
import tensorrt

六、PyCuda和ProtocBuf

安装pycuda: pip3 install pycuda==2020.1

安装protocbuf(>=3.3.0):

其实在安装trt的时候我看到是自动检查并安装了protocbuf的,但是不知道为啥使用protoc --version看到的还是Ubuntu16.04自带的2.6的版本。

在docker内_覆盖安装_ protobuf-cpp-3.4.1.tar.gz :

$ tar xzvf protobuf-cpp-3.4.1.tar.gz
$ cd protobuf-3.4.1
$ ./autogen.sh     # 如果报错failed to run libtoolize: No such file or directory,则执行:apt install libtool
$ ./configure
$ make
$ make check
$ make install
$ source ~/.bashrc
$ protoc --version  # 查看使用的protoc版本:3.4.1

如果版本还没有改变的话需要添加一下环境变量的吧↓

$ vim ~/.bashrc 
末尾添加以下,然后source ~/.bashrc
# protobuf
export PATH="$PATH:/usr/local/bin"
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/lib"

七、安装 onnx2trt

要指定tag版本,不然会有问题,因为TensorRT8.0.0.3,所以onnx2trt的版本是8.0-EA

1.git clone --recursive -b 8.0-EA https://github.com/onnx/onnx-tensorrt.git
注意: 拉取8.0-EA分支,不是master。时间较长,成功后最好备份。拉取成功之后git branch -a检查一下自己所处分支位置。

2.↓

cd onnx-tensorrt
mkdir build
cd build
# /path/to/TensorRT-8.0.0.3改成自己的TensorRT绝对路径
cmake .. -DTENSORRT_ROOT=/path/to/TensorRT-8.0.0.3
make -j16
make install

八、CUDA10.2 补丁修复

在上述操作完成后,测试,然后报错以下内容,经过查阅是CUDA10.2的已知错误,问题不大,下载安装一下补丁就好啦。

[2021-08-31 02:26:25   ERROR] 2: [ltWrapper.cpp::setupHeuristic::323] Error Code 2: Internal Error (Assertion cublasStatus == CUBLAS_STATUS_SUCCESS failed.)

参考:这个链接 。

在nvidia补丁链接
选择自己的系统适配版本,安装补丁1,2。(其实安装补丁1 就行了)

最后注意添加cuda10.2的环境变量

vim ~/.bashrc
末尾加入:

#cuda
export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH

source ~/.bashrc

撒花!撒花!撒花!

最后测试:onnx2trt t2baseline_best.onnx -o my_engine.trt

显示 All done


20210901 update:

容器→镜像→上传dockerhub→重新拉取镜像使用

我又遇到了问题了,wnm真开心~!以为自己弄好了,但是自己重新导出镜像,再根据导出镜像创建容器的时候发现使用不了GPU,输入nvidia-smi没有任何反应,torch.cuda.is_available()结果为False。

后来才知道我在容器导出的时候用的是docker export 。docker容器的导入导出有两个方式, 他们都可以导出为镜像:

  • docker export + docker import

    通过docker export --help查看说明:Export a container's filesystem as a tar archive*
    只打包容器的文件系统*,导出的是容器的快照,不会保存元数据。
    docker export 仅能指定container。
  • docker save + docker load

    通过docker save --help查看说明:Save one or more images to a tar archive (streamed to STDOUT by default)
    命令行参数要求指定image,实际上也可以对container进行打包
    如果指定的是container,docker save将保存的是容器背后的image。

正确姿势

1.  docker commit container-name image-name:version   # docker commit :从容器创建一个新的镜像
2.  docker save -o image-name.tar image-name:version    # 在这一步之后就可推送了
3.  docker load -i image-name.tar        # 本地有tar包,重新通过tar加载镜像

推送dockerhub

docker login
docker push liuyuankai/kkubuntu:v2.1

你可能感兴趣的:(docker,tensorrt,docker,pytorch,tensorrt)