记录一下自己的实现过程。记录一下自己在的实现过程。配置好的镜像已经上传到了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进行下载
安装稍微参考一下这里
下载之后直接:sh cmake-3.17.0-Linux-x86_64.sh -- --skip-license --prefix=/usr
很快就弄好的,检查版本cmake --version
打算安装tensorRT8.0.0.3,其中要求cuDNN8.2.1
我是通过安装了 官方的 三个deb文件来安装。
参考了这个博客
安装步骤:
1.下载文件:Download cuDNN v8.2.1 (June 7th, 2021), for CUDA 10.2
2.按照官方给的说明安装,或者参照这个博客
按nvidia步骤 来没啥问题。
这里选择TensorRT 8.0.0 EA 版本 , 并且使用 【tar安装方式 】(总感觉成功率会高一些)。
检测是否安装tensorRT成功?在终端输入以下命令不报错就行。
python3
import tensorrt
pip3 install pycuda==2020.1
其实在安装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"
要指定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的已知错误,问题不大,下载安装一下补丁就好啦。
[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 就行了)
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:
我又遇到了问题了,wnm真开心~!以为自己弄好了,但是自己重新导出镜像,再根据导出镜像创建容器的时候发现使用不了GPU,输入nvidia-smi没有任何反应,torch.cuda.is_available()结果为False。
后来才知道我在容器导出的时候用的是docker export 。docker容器的导入导出有两个方式, 他们都可以导出为镜像:
docker export --help
查看说明:Export a container's filesystem as a tar archive
*docker save --help
查看说明:Save one or more images to a tar archive (streamed to STDOUT by default)
正确姿势
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