GPU服务器上的tensorrt环境搭建
文章目录
在生产实际中,我们通常通过在GPU服务器上docker镜像环境搭建用于加速深度学习图像识别推理的tensorrt的环境。
1.拉取docker服务器上的支持cuda、cudnn的镜像文件
在 Docker Hub上拉取适合服务器的镜像
docker pull nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04
运行拉取的镜像并将GPU挂载到该容器上:
docker run --name tensorrt --gpus all -v $PWD:/home -it nvidia/cuda:10.2-cudnn7-devel-ubuntu18.04 /bin/bash
2.设置环境变量并下载相关依赖
更新环境源变量:
apt-get update
apt-get upgrade
apt-get install software-properties-common
apt-get upgrade
设置python3为默认python执行器:
update-alternatives --install /usr/bin/python python /usr/bin/python2 100
update-alternatives --install /usr/bin/python python /usr/bin/python3 150
update-alternatives --config python
也可以通过建立软连接的方式将输入python指令为调用python3:
首先查找python3 的位置, 然后通过软连接将python和python3连接,当存在其他软连接时,可以将其先删除,如图,在/usr/bin查看所有文件:
whereis python3
# 软连接
ln -s /usr/bin/python3.6 /usr/bin/python
修改后:
安装相关依赖:
apt-get install -y python3-pip
apt-get install -y vim
apt-get install -y wget
apt-get install unzip
pip3 install pyyaml
apt-get install -y build-essential cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
apt-get install -y libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
apt-get install -y python2.7-dev python3.6-dev python-dev python-numpy python3-numpy
apt-get install -y libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libdc1394-22-dev
apt-get install -y libv4l-dev v4l-utils qv4l2 v4l2ucp
apt-get install -y curl
apt-get install -y libgtk-3-dev
2.1安装cuda和cudnn
查看自己显卡可支持的版本:
nvidia-smi
在Nvidia官网下载像对应的cuda版本,可以下载低于自己系统支持的版本,下载之前可以看看pytorch官网中历史版本中对应的cuda和cudnn所需要的版本,以免后续安装pytorch时出现版本不符合的情况。在cuda下载选项中选择自己系统合适的版本,建议选择cuda的runfile[local]安装包。
安装cuda,将下载好的cuda文件复制到镜像挂载目录下,执行sh命令进行安装。
sh cuda_*.run
安装过程中输入 accept 接受条款,再通过上下键进行选择安装。
安装cudnn,该步骤需要注册Nvidia账号,再在cudnn下载地址中选择所安装的cuda所对应的cudnn,我安装的为cuda10.2,建议选择对应的cudnn8.0.4
注:在配置tensorrt7.*版本时,建议配置为cuda10.2和cudnn8.0.4,配置8.0.2会出现一下的警告,虽然可以依旧能够完成推理,但建议安装配套的版本。
[TensorRT] WARNING: TensorRT was linked against cuDNN 8.0.4 but loaded cuDNN 8.0.2
cudnn建议下载对应版本的Runtime 、Developer 、Code Samples 这三个文件,下载完成后复制到容器挂载的目录下,在分别执行以下指令:
dpkg -i libcudnn8_8.0.4.*+cuda10.2_amd64.deb
dpkg -i libcudnn8-dev_8.0.4.*+cuda10.2_amd64.deb
dpkg -i libcudnn8-doc_8.0.4.*+cuda10.2_amd64.deb
2.2 pytorch和torchvision安装
相关版本可以在pytorch历史稳定版本查找自己安装对应的python、cuda和cudnn、系统为linux的版本,我安装的是(cu102/torch-1.7.1-cp36-cp36m-linux_x86_64.whl和cu102/torchvision-0.8.2-cp36-cp36m-linux_x86_64.whl),将下载好的文件复制到容器挂载的目录下,通过pip install …命令执行安装如:
pip install torch-1.7.1-cp36-cp36m-linux_x86_64.whl
pip install torchvision-0.8.2-cp36-cp36m-linux_x86_64.whl
2.3 编译安装opencv4.4
百度云链接
提取码:cb0s
执行下面命令,完成编译前准备工作:
# 解压相关文件
tar -zxvf opencv_contrib-4.4.0.tar.gz
unzip opencv-4.4.0.zip
unzip xfeatures2d.zip
mv opencv_contrib-4.4.0/ opencv_contrib/
# 将xfeatures2d中的文件复制到opencv_contrib/modules/xfeatures2d/src文件夹下
cp -r xfeatures2d/* opencv_contrib/modules/Xfeatures2d/src
# 进入opencv-4.4.0文件夹内,并创建build文件夹,并进入build文件夹内
cd opencv-4.4.0 && mkdir build
cd build
# 将 opencv-4.4.0文件夹内的modules/features2d/拷贝到build目录下
cp -r ../modules/features2d/ .
开始安装编译:
cmake -D WITH_CUDA=ON -D CUDA_ARCH_BIN="6.1" \
-D CUDA_ARCH_PTX="" \
-D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules \
-D WITH_GSTREAMER=ON \
-D WITH_LIBV4L=ON \
-D BUILD_opencv_python2=ON -D BUILD_opencv_python3=ON \
-D BUILD_TESTS=OFF \
-D BUILD_PERF_TESTS=OFF \
-D BUILD_EXAMPLES=OFF \
-D CMAKE_BUILD_TYPE=RELEASE \
-D CMAKE_INSTALL_PREFIX=/usr/local ..
make -j3
make instal
注:cmake最后一行中的CMAKE_INSTALL_PREFIX=为opencv编译安装的保存位置
2.4 安装pycuda
安装依赖:
apt-get install python-dev python-pip libxml2-dev libxslt1-dev zlib1g-dev libffi-dev libssl-dev
安装pycuda
pip3 install pyzmq==17.0.0
pip3 install pycuda
2.5 tensorrt安装
在Nvidia官网选择下载的安装包,我下载的是 —> TensorRT-7.2.1.6.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gz,首先解压安装包,然后再选择合适的python版本进行安装:
tar -zxvf TensorRT-7.2.1.6.Ubuntu-18.04.x86_64-gnu.cuda-10.2.cudnn8.0.tar.gz
cd TensorRT-7.2.1.6/python
pip install tensorrt-7.2.1.6-cp36-none-linux_x86_64.whl
为避免在编译过程中找不相关库文件,建议将Tensorrt部分文件拷贝到系统路径下:
# TensorRT-7.2.1.6路径下
cp -r lib/* /usr/lib
cp -r include/* /usr/include
2.6 添加系统环境变量
将tensorrt 、 cuda 、 opencv4 的安装路径加入环境变量
vim ~/.bashrc
#添加以下在.bashrc文件的末尾
export PATH=/home/TensorRT-7.2.1.6/include:$PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/TensorRT-7.2.1.6/lib
export CUDA_HOME=/usr/local/cuda-10.2
export PATH=$PATH:$CUDA_HOME/bin
export CUDA_INSTALL_DIR=/usr/local/cuda-10.2
export CUDNN_INSTALL_DIR=/usr/local/cuda-10.2
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export PATH=/usr/local/cuda-10.2/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-10.2/lib64:$LD_LIBRARY_PATH
export PATH=/usr/local/include/opencv4:$PATH
最后在source以下.bashrc
source ~/.bashrc