文章目录
- 前言
- 一、Docker相关工具安装
- 1.1 Docker安装和配置
- 1.2 Nvidia-Docker安装
- 1.3 Docker-Compose安装
- 二、深度学习环境Docker镜像配置
- 2.1 基础镜像拉取与启动
- 2.2 深度学习Docker环境配置
- 2.2.1 更换软件源
- 2.2.2 安装常见命令
- 2.2.3 安装SSH
- 2.2.4 安装Miniconda
- 2.2.5 安装Pytorch环境
- 2.2.6 安装PaddlePaddle环境
- 2.2.7 安装NCCL
- 2.2.8 安装C++工具链
- 2.2.9 安装OpenCV
- 2.2.10安装Spdlog
- 2.2.11安装TensorRT
- 2.2.12 bug修复
- 三、 容器打包上传启动拉取
- 3.1 设置root账号密码
- 3.2 容器打包成新镜像
- 3.3 持久化启动新容器
- 3.4 本地化保存镜像
- 3.5 DockerHub拉取现有镜像
前言
本篇博客主要记录深度学习环境Docker镜像配置全过程,请注意该教程对前提需要有台Linux系统机器,如何从零到一安装Linux系统服务器请详见从零到一保姆级Ubuntu深度学习服务器环境配置教程
一、Docker相关工具安装
1.1 Docker安装和配置
利用国内镜像源一键安装docker,命令如下:
# 阿里源
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# daocloud
curl -sSL https://get.daocloud.io/docker | sh
接着将当前用户加入到组,并赋予当前用户root权限,命令如下:
sudo groupadd docker
sudo gpasswd -a ${USER} docker
sudo newgrp - docker
之后重启docker,并测试是否成功,命令如下:
# 重启docker
sudo service docker restart
# 设置成开机自启
sudo systemctl enable docker
# 测试赋予权限是否成功
docker ps
docker --version
为了加快docker拉取镜像速度,需要更换docker镜像源,同时将拉取镜像的保存地址更换到数据盘,命令如下:
sudo vim /etc/docker/daemon.json
# 将如下内容复制到/etc/docker/daemon.json
{
"registry-mirrors": [
"https://hub-mirror.c.163.com",
"https://mirror.baidubce.com",
"https://xxx.mirror.aliyuncs.com" # 阿里云
],
"data-root": "/data/docker", # docker镜像存储地址
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
然后重启docker,命令如下:
sudo chmod 777 /etc/docker/daemon.json
sudo service docker restart
sudo systemctl daemon-reload
sudo systemctl restart docker
1.2 Nvidia-Docker安装
为了顺利在Docker容器中使用英伟达显卡实现,需要安装Nvidia-Docker。首先创建nvidia-docker.sh
文件,然后写入如下内容,命令如下:
sudo vim nvidia-docker.sh
# 写入内容
#!/bin/bash
sudo cat >> /etc/hosts <<EOF
# NVIDIA DOCKER Domain IP
185.199.108.153 nvidia.github.io
185.199.109.153 nvidia.github.io
185.199.110.153 nvidia.github.io
185.199.111.153 nvidia.github.io
EOF
distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \
&& curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add - \
&& curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
#sudo apt-get install nvidia-container-toolkit --fix-missing
sudo apt-get install nvidia-docker2 --fix-missing
# 重启docker
sudo systemctl restart docker
保存文件后,使用运行脚本进行安装好nvidia-docker,命令如下:
sudo chmod 777 nvidia-docker.sh
bash nvidia-docker.sh
接着拉取镜像进行测试nvidia-docker是否安装成功,命令如下:
docker run --gpus all -it --rm nvidia/cuda:11.0.3-base nvidia-smi
若出现如下图所示结果则证明nvidia-docer安装成功。
1.3 Docker-Compose安装
通过Github安装docker-compose,命令如下:
sudo curl -L https://github.com/docker/compose/releases/download/1.16.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
若网速存在问题则换成daocloud进行下载,命令如下:
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
下载完成够添加可执行权限,命令如下:
sudo chmod +x /usr/local/bin/docker-compose
利用如下命令测试安装结果是否成功:
docker-compose --version
二、深度学习环境Docker镜像配置
2.1 基础镜像拉取与启动
在docker hub网站中选取自己所需的基础cuda镜像,并拉取到本地。在这里建议大家选择拉取tag中带devel+cudnn的Ubuntu镜像,而非runtime的Ubuntu镜像,runtime的Ubuntu镜像过小,阉割很多必要组件。
在这里建议大家到PaddlePaddle官网和Pytorch官网上查看都支持哪些cuda版本,然后再在docker hub网站中拉取一个能兼容目前两大常见深度学习训练框架cuda镜像,避免后续重复工作,配置多个Docker镜像。
对于PaddlePaddle版本选择,建议首先在Github上查看PaddleSlim版本和Paddle2ONNX的版本,尽可能保持这三个库版本保持一致,尤其是PaddlePaddle和PaddleSlim两个库的版本,为了保险起见可以使用降低版本以确保稳定性,若不保持后续若是需要使用PaddleSlim做模型剪枝、模型蒸馏和模型量化会遇到困难。在此教程中我们以安装PaddlePaddle2.4为例。在官网中查看发下,paddlepaddle2.4对应的cuda版本支持11.6和11.7。
查看Pytorch官网发现pytorch1.13支持cuda11.6和cuda11.7,因此本教程中在这里我选择nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04
Docker镜像作为基础镜像,拉取命令如下:
docker pull nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04
静静等待镜像拉取结束,然后输入下命令查看镜像是否下载成功:
docker image ls
出现对应Dokcer镜像名称则表示Docker镜像拉取成功。
然后输入如下命令启动容器,建议大家启动容器过程时挂载宿主机上的/home目录,并在/home目录下准备Pytorch和PaddlePaddle相关训练代码方便后续验证环境是否存在问题。
docker run -it --restart=always \
--ipc=host \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
--gpus all \
-p 41262:22 \
--privileged \
--net host \
-v /sbin/dmidecode:/sbin/dmidecode \
-v /dev/mem:/dev/mem \
-v /home/dpw:/home/dpw \
-v /etc/locale.conf:/etc/locale.conf \
--shm-size=32g \
nvidia/cuda:11.6.2-cudnn8-devel-ubuntu20.04
出现如下画面说明容器启动成功,并在容器输入nvidia-smi
验证显卡是否存在。
然后安装vim
命令为配置环境变量做准备,命令如下:
apt-get -y install vim
若出现上述途中错误错误则,更新现有软件源后再安装,命令如下。首次更新软件源时间会比较慢,请耐心等待。
# 安装失败则更新软件源后再安装
apt-get update
apt-get -y install vim
配置cuda环境变量,首先打开~/.bashrc
文件,命令如下:
vim ~/.bashrc
将以下内容写入到~/.bashrc
尾部,并保存成功。
export PATH=/usr/local/cuda-11.6/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda/lib64:$LD_LIBRARY_PATH
然后让~/.bashrc
生效,命令如下:
source ~/.bashrc
最后输入如下命令验证cuda版本:
nvcc -V
2.2 深度学习Docker环境配置
2.2.1 更换软件源
增加国内镜像源是为了方便后续快速安装各种软件列表和软件包。首先是复制源文件备份,以防万一。我们要修改的文件是sources.list
,它在目录/etc/apt/
下,sources.list
是包管理工具apt所用的记录软件包仓库位置的配置文件,同样类型的还有位于 同目录下sources.list.d
文件下的各种.list
后缀的各文件。命令如下:
cp /etc/apt/sources.list /etc/apt/sources.list.bak
之后在/etc/apt/sources.list
添加阿里源镜像网址,命令如下:
vim /etc/apt/sources.list
由于镜像源地址因系统版本而异,在此列出常见Ubuntu版本的镜像源网址,根据自身安装ubuntu版本进行复制:
# ubuntu16.04 阿里源
deb-src http://archive.ubuntu.com/ubuntu xenial main restricted
deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-updates main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates universe
deb http://mirrors.aliyun.com/ubuntu/ xenial multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-updates multiverse
deb http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu xenial partner
deb-src http://archive.canonical.com/ubuntu xenial partner
deb http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted
deb-src http://mirrors.aliyun.com/ubuntu/ xenial-security main restricted multiverse universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security universe
deb http://mirrors.aliyun.com/ubuntu/ xenial-security multiverse
# ubuntu18.04 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
# ubuntu20.04 阿里源
deb http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# ubuntu22.04 清华源
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# ubuntu22.04 阿里源
deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
# ubuntu22.04 中科大源
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# ubuntu22.04 网易163源
deb http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
之后依次运行如下命令更新软件列表和软件包
apt-get update
apt-get upgrade
如果网速不够快,这两条命令会运行比较长的时间,请耐心等待即可。等更新之后,在命令行安装软件的速度将会大幅度提升。
2.2.2 安装常见命令
安装tmux
,命令如下:
apt-get install -y tmux
# 若安装失败,则运行如下命令进行更新源然后进行安装
apt-get update
apt-get install -y tmux
安装7z
,命令如下:
apt-get install -y p7zip-full
# 若安装失败,则运行如下命令进行更新源然后进行安装
apt-get update
apt-get install -y p7zip-full
安装git
,命令如下:
apt-get install -y git
# 若安装失败,则运行如下命令进行更新源然后进行安装
apt-get update
apt-get install -y git
安装mlocate
,命令如下:
apt-get install -y mlocate
# 若安装失败,则运行如下命令进行更新源然后进行安装
apt-get update
apt-get install -y mlocate
安装net-tools
,命令如下:
apt-get install -y net-tools
# 若安装失败,则运行如下命令进行更新源然后进行安装
apt-get update
apt-get install -y net-tools
2.2.3 安装SSH
使用以下命令安装:
apt-get install -y openssh-server
启动ssh命令:
/etc/init.d/ssh start
接下来修改默认端口及并修改ssh配置允许root登录。打开/etc/ssh/sshd_config
文件,命令如下:
vim /etc/ssh/sshd_config
文件中找到Port 22相关内容,默认这一行是注释掉,需要讲前面的"#"去掉,并在文件中添加如下内容,如下图所示。
echo "PermitRootLogin yes" >> /etc/ssh/sshd_config
# 或者 vim /etc/ssh/sshd_config 并手敲一行PermitRootLogin yes
之后重启ssh,命令如下:
service ssh restart
2.2.4 安装Miniconda
在Miniconda官网找到Linux系统的安装包进行安装。
安装wget
命令后直接在容器中下载安装,命令如下:
# 安装wget
apt-get install -y wget
# 下载miniconda安装包
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
miniconda安装包下载完成后,运行如下命名安装miniconda。
chmod 777 Miniconda3-latest-Linux-x86_64.sh
bash Miniconda3-latest-Linux-x86_64.sh
安装Miniconda过程中会出现的所有选项输入如下图所示。
然后是配置环境变量,首先打开配置文件,代码如下:
sudo vim ~/.bashrc
之后下面代码输入带文件末尾:
export PATH=/root/miniconda3/bin:$PATH
然后更新配置文件,代码如下:
source ~/.bashrc
为了加快pip下载速度,将pip的默认源更换位阿里源,命令如下:
mkdir ~/.pip
vim ~/.pip/pip.conf
# 将以下内容添加到~/.pip/pip.conf
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
最后删除安装包,命令如下:
rm -rf Miniconda3-latest-Linux-x86_64.sh
2.2.5 安装Pytorch环境
进入Pytorch历史版本官网,选择适合自身服务器的pytorch版本进行安装。
首先建立pytorch1.13
的虚拟环境,并激活环境,命令如下:
conda create -n pytorch1.13 python=3.8
conda activate pytorch1.13
然后安装pytorch1.13
,安装命令如下:
pip install torch==1.13.1+cu116 torchvision==0.14.1+cu116 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu116
接着安装常见第三方工具库,命令如下:
# 常见第三方工具库
pip install ipython scipy numpy==1.23.1 protobuf==3.19.0 cython pandas matplotlib yacs pyyaml opencv-python opencv-contrib-python scikit-learn Pillow onnx==1.10.0 onnx-simplifier onnxruntime-gpu==1.10.0 onnxoptimizer tqdm tensorboardX==2.0.0 pascal-voc-writer cython visdom
# COCO-API
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
sudo make install
(or)
python3 setup.py install --user
2.2.6 安装PaddlePaddle环境
进入PaddlePaddle官网,找到适合服务器cuda版本的按照包,如下图所示,
首先建立paddle2.4
的虚拟环境,并激活环境,命令如下:
conda create -n paddle2.4 python=3.8
conda activate paddle2.4
然后安装paddle2.4
,安装命令如下:
python3 -m pip install paddlepaddle-gpu==2.4.2.post116 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html
接着安装常见第三方工具库:
# 常见第三方工具库
# paddle2.4
pip install ipython scipy numpy==1.23.1 protobuf==3.20.0 pandas matplotlib yacs pyyaml opencv-python opencv-contrib-python scikit-learn Pillow onnx==1.10.0 onnx-simplifier onnxruntime-gpu==1.10.0 onnxoptimizer tqdm pascal-voc-writer cython paddle2onnx visualdl paddleslim==2.4.1
# paddle2.6
pip install ipython scipy numpy==1.23.1 protobuf==3.20.2 pandas matplotlib yacs pyyaml opencv-python opencv-contrib-python scikit-learn Pillow onnx==1.10.0 onnx-simplifier onnxruntime-gpu==1.10.0 onnxoptimizer tqdm pascal-voc-writer cython paddle2onnx visualdl paddleslim==2.6.0
# COCO-API
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
sudo make install
(or)
python3 setup.py install --user
2.2.7 安装NCCL
进入NCCL官网找到对应Ubuntu系统版本和Cuda版本的安装包。在这里我选择了Ubuntu20.04+Cuda11.6版本的安装包。
在这里官方给出了离线安装包和网络安装包两种安装形式,可以根据个人喜好进行选择。为了方便起见,在这里我们选用网络安装方式,相关安装命令如下:
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/cuda-keyring_1.0-1_all.deb
chmod 777 cuda-keyring_1.0-1_all.deb
dpkg -i cuda-keyring_1.0-1_all.deb
rm -rf /etc/apt/sources.list.d/cuda.list
rm -rf /etc/apt/sources.list.d/nvidia-ml.list
apt-get update
apt-get install libnccl2=2.12.12-1+cuda11.6 libnccl-dev=2.12.12-1+cuda11.6 --fix-missing
2.2.8 安装C++工具链
安装c++编译工具链主要有cmake
,make
,gcc
,g++
和gdb
,安装命令如下。
# 更新apt包列表
apt-get update
# 安装基本构建工具和C++编译器,gcc,g++
apt-get install -y build-essential
# 安装CMake
apt-get install -y cmake
# 安装GDB
apt-get install -y gdb
# 清理不再需要的包
apt-get autoremove -y
2.2.9 安装OpenCV
安装OpenCV相关的依赖库,命令如下:
apt-get install -y libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libatlas-base-dev gfortran libgtk2.0-dev libjpeg-dev libpng-dev libeigen3-dev libopenexr-dev libtiff-dev libdc1394-dev pkg-config
接着下载opencv相关源码,进行编译,在这里我们使用opencv-4.5.5.版本,命令如下:
# 下载代码
cd /root
git clone https://github.com/opencv/opencv.git
cd opencv && git checkout 4.5.5
git clone https://github.com/opencv/opencv_contrib.git
cd opencv_contrib && git checkout 4.5.5 && cd ..
# 编译安装
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/usr/local -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules/ ../
make -j12 && make install
编译成功后,开始配置环境变量。首先在/etc/ld.so.conf.d/opencv.conf
文件中添加相关路径并使文件生效,命令如下:
sudo vim /etc/ld.so.conf.d/opencv.conf
# 添加内容
/usr/local/lib
# 文件生效
sudo ldconfig
接着配置环境变量,命令如下:
sudo vim /etc/bash.bashrc
# 添加内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
export PKG_CONFIG_PATH
# 文件生效
source /etc/bash.bashrc
sudo updatedb
2.2.10安装Spdlog
进行C++开发少不了需要使用日志模块,在这里推荐安装日志模块Spdlog
,安装流程如下:
cd /root
git clonehttps://github.com/gabime/spdlog.git
cd spdlog && mkdir build && cd build
cmake .. && make -j12 && make install
2.2.11安装TensorRT
进入TensorRT官网下载安装好对应安装包,TensorRT安装包会根据Linux版本和cuda版本不同而存在不一样的安装包。以TensorRT8.6.1.6为例,如下图所示。
等待安装包下载完成,然后进行解压,命令如下:
cd /root
chmod 777 TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
tar -zxvf TensorRT-8.6.1.6.Linux.x86_64-gnu.cuda-11.8.tar.gz
chmod 777 -R TensorRT-8.6.1.6/
接着创建tensorrt8
虚拟环境进入指定的虚拟环境,安装相关python库,命令如下:
# 创建并激活虚拟环境
conda create -n tensorrt8 python=3.8
conda activate tensorrt8
# 安装相关工具库
pip install ipython cython pycuda==2019.1 scipy numpy==1.23.1 protobuf==3.19.0 cython pandas matplotlib yacs pyyaml opencv-python opencv-contrib-python scikit-learn Pillow onnx==1.10.0 onnx-simplifier onnxruntime-gpu==1.10.0 onnxoptimizer tqdm pascal-voc-writer cython
# COCO-API
git clone https://github.com/cocodataset/cocoapi.git
cd cocoapi/PythonAPI
sudo make install
(or)
python3 setup.py install --user
cd TensorRT-8.6.1.6/
cd python
pip install tensorrt-8.6.1-cp38-none-linux_x86_64.whl
cd ..
cd graphsurgeon
pip install graphsurgeon-0.4.6-py2.py3-none-any.whl
cd ..
cd onnx_graphsurgeon
pip install onnx_graphsurgeon-0.3.12-py2.py3-none-any.whl
cd ..
cd uff
pip install uff-0.6.9-py2.py3-none-any.whl
然后在配置文件中假如TensorRT的环境变量,命令如下:
vim ~/.bashrc
# 下面命令假假如~/.bashrc文件文件中,需要根据自身需要调整TensorRT文件夹的绝对路径
export TENSORRT_ROOT=/root/TensorRT-8.6.1.6/
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/root/TensorRT-8.6.1.6/lib
# 然后使配置文件生效
source ~/.bashrc
最后将TensorRT-8.6.1.6
中的相关文件复制到/usr目录下,命令如下:
cp -r ./lib/* /usr/lib/x86_64-linux-gnu
cp -r ./include/* /usr/include/x86_64-linux-gnu
2.2.12 bug修复
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
错误解决办法如下:
apt-get update && apt-get install -y libgl1
三、 容器打包上传启动拉取
3.1 设置root账号密码
为了后续方便远程ssh连接容器,在这里我们给容器的root账号设置密码,命令如下:
# 修改密码
passwd root
设置完密码后,在宿主机上重新打开一个终端查看容器id信息,命令如下:
# 查看容器信息
docker ps -a
3.2 容器打包成新镜像
然后将容器打包成本地镜像或者dockerhub中的镜像,命令如下:
# 本地镜像
docker commit 41b dpw_deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13
# docker hub 镜像
docker commit 41b daipuwei/deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13
docker login
docker push daipuwei/deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13
3.3 持久化启动新容器
然后启动docker镜像,命令如下:
# 本地镜像启动
docker run -itd \
--gpus all \
--runtime=nvidia \
--ipc=host \
--restart=always \
--privileged=true \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
-p 41282:22 \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e NVIDIA_VISIBLE_DEVICES=all \
-e LANG=zh_CN.UTF-8 \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime:ro \
-v /sbin/dmidecode:/sbin/dmidecode \
-v /dev/mem:/dev/mem \
-v /home/dpw:/home/dpw \
-v /etc/locale.conf:/etc/locale.conf \
--shm-size=32g \
dpw_deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13
# dockerhub镜像启动
docker run -itd \
--gpus all \
--runtime=nvidia \
--ipc=host \
--restart=always \
--privileged=true \
--ulimit memlock=-1 \
--ulimit stack=67108864 \
-p 41282:22 \
-e NVIDIA_DRIVER_CAPABILITIES=all \
-e NVIDIA_VISIBLE_DEVICES=all \
-e LANG=zh_CN.UTF-8 \
-e TZ="Asia/Shanghai" \
-v /etc/localtime:/etc/localtime:ro \
-v /sbin/dmidecode:/sbin/dmidecode \
-v /dev/mem:/dev/mem \
-v /home/dpw:/home/dpw \
-v /etc/locale.conf:/etc/locale.conf \
--shm-size=32g \
daipuwei/deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13
在上述命令中端口映射41262:22
的意思是将容器22端口映射到宿主机的41282端口,这个设置根据开发需要自行设置。原则就是宿主机上的端口必须在ssh配置文件开放。 若想远程ssh连接容器,还必须在宿主机ssh配置文件中开放端口,端口设置根据实际开发需要进行设置,这本教程中设置为41282。打开/etc/ssh/sshd_config
文件,命令如下:
vim /etc/ssh/sshd_config
# 讲下面内容加入到文件中
Port 41282
之后重启ssh,命令如下:
sudo /etc/init.d/ssh start
sudo service ssh restart
在这之后即可使用ssh命令在局域网内远程连接容器进行相应开发吗,命令如下:
ssh -p 41282 root@ip
3.4 本地化保存镜像
若想本地化保存镜像可使用如下命令:
# 本地打包镜像
docker save -o dpw_deeplearning.tar dpw_deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13
# 本地加载镜像
docker load -i dpw_deeplearning.tar dpw_deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13
3.5 DockerHub拉取现有镜像
若是大家不想配置深度学习容器,可以直接拉取该镜像进行使用,命令如下:
docker pull daipuwei/deeplearning:cuda11.6_ubunt20.04_trt8.6.1.6_paddle2.4_pytorch1.13