前言

本篇博客主要记录深度学习环境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.04Docker镜像作为基础镜像,拉取命令如下:

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

安装locales,命令如下:

apt-get install -y locales
# 若安装失败,则运行如下命令进行更新源然后进行安装
apt-get update
apt-get install -y locales

然后设置中文编码,命令如下:

locale-gen zh_CN
locale-gen zh_CN.UTF-8
update-locale LANG=zh_CN.UTF-8 LC_ALL=zh_CN.UTF-8 LANGUAGE=zh_CN.UTF-8

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,命令如下:

sudo 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++编译工具链主要有cmakemake,gccg++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 pkg-config libgtk-3-dev \
                libavcodec-dev libavformat-dev libswscale-dev \
                libv4l-dev libxvidcore-dev libx264-dev \
                libjpeg-dev libpng-dev libtiff-dev \
                gfortran openexr libatlas-base-dev \
                python3-dev python3-numpy libtbb2 libtbb-dev \
                libdc1394-22-dev libopenexr-dev libgstreamer-plugins-base1.0-dev

接着下载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 容器打包成新镜像

首先将容器中的缓存删除掉,减少大小,命令如下:

# 系统缓存
apt clean && rm -rf /tmp/* /var/tmp/* /var/lib/apt/lists/* /var/cache/apt/*

# pip缓存
pip cache purge
rm -rf $(pip cache dir)/*

# conda缓存
conda clean --all

然后将容器打包成本地镜像或者dockerhub中的镜像,命令如下:

# 本地镜像
docker commit 41b dpw_deeplearning_training:cuda11.6_ubunt20.04_paddle2.4_pytorch1.13

# docker hub 镜像
docker commit 41b daipuwei/deeplearning_training:cuda11.6_ubunt20.04_paddle2.4_pytorch1.13
docker login
docker push daipuwei/deeplearning_training:cuda11.6_ubunt20.04_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_training:cuda11.6_ubunt20.04_paddle2.4_pytorch1.13

# dockerhub镜像启动,
sudo docker run -itd --gpus all \
        --runtime=nvidia \
        --ipc=host \
        --restart=always \
        --privileged=true \
        --ulimit memlock=-1 \
        --ulimit stack=67108864 \
        --shm-size=32g  \
        -p "32868:22" \
        --name "daipuwei" \
        -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 /dev/mem:/dev/mem \
        -v /etc/locale.conf:/etc/locale.conf \
        daipuwei/deeplearning_training:cuda11.6_ubunt20.04_paddle2.4_pytorch1.13

在上述命令中端口映射32868:22的意思是将容器22端口映射到宿主机的32868端口,这个设置根据开发需要自行设置。 若想远程ssh连接容器,还必须在镜像中的ssh配置文件中开放端口,端口设置根据实际开发需要进行设置,这本教程中设置为32868。打开/etc/ssh/sshd_config文件,命令如下:

# 首先使用如下命令找到对应容器id,并进入容器
docker ps -a
docker attach container_id

# 打开ssh配置文件
vim /etc/ssh/sshd_config
# 讲下面内容加入到文件中
Port 22
Port 32868

之后重启ssh,命令如下:

/etc/init.d/ssh start
service ssh restart

在这之后建议利用docker命令进入容器查看下ssh服务是否开启,命令如下:

# 查看容器
docker ps -a
# 进入容器
docker exec -it container_id /bin/bash
# 启动ssh
/etc/init.d/ssh start
service ssh restart

之后就可使用ssh命令在局域网内远程连接容器进行相应开发了,命令如下:

ssh  -p 32868  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_training:cuda11.6_ubunt20.04_paddle2.4_pytorch1.13
Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐