从零到一保姆级深度学习Docker镜像配置教程

news2024/11/16 22:32:22

文章目录

  • 前言
  • 一、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.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

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++编译工具链主要有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 -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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1379285.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算n的平方根m 进而将m向下取整 math.isqrt()

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 计算n的平方根m 进而将m向下取整 math.isqrt() 选择题 请问执行math.isqrt(10)的运行结果是&#xff1a; import math print("【执行】math.sqrt(10)") print (math.sqrt(10)) pr…

thinkphp6报错Driver [Think] not supported.

thinkphp6报错Driver [Think] not supported. 问题解决方法测试 问题 直接使用 View::fetch();渲染模板报错 解决方法 这个报错是由于有安装视图驱动造成的 运行如下命令安装即可 composer require topthink/think-view官方文档中是这么写的 视图功能由\think\View类配合视…

视频SDK的技术架构优势和价值

为了满足企业对于高质量视频的需求&#xff0c;美摄科技推出了一款强大的视频SDK&#xff08;软件开发工具包&#xff09;&#xff0c;旨在帮助企业轻松实现高效、稳定的视频功能&#xff0c;提升用户体验&#xff0c;增强企业竞争力。 一、美摄视频SDK的技术实现方式 美摄视…

Flutter之配置环境创建第一个项目

随着时代发展&#xff0c;使用Flutter开发的项目越来越多&#xff0c;于是踏上了Flutter开发之路。 作为一个Android开发人员&#xff0c;也只能被卷到与时俱进&#xff0c;下面一起创建一个Flutter项目吧。 一、Android开发&#xff0c;电脑上已经具备了的条件&#xff1a; …

easyexcel上传校验的方法封装

easyexcel版本3.1.5 使用自定义注解的方式来定义校验的类型&#xff0c;避免冗余代码。 //校验value不能为空&#xff0c;且长度最大为30 RowCheck(value {RowCheckType.EMPTY,RowCheckType.LENGTH},max 30) private String value; 具体代码&#xff1a; 首先定义校验类型…

4.8 SUMMARY 4.9 EXERCISES

总之&#xff0c;在现代处理器中&#xff0c;程序的执行速度可能会受到内存速度的严重限制。为了很好地利用CUDA设备的执行吞吐量&#xff0c;应该在内核代码中获得高计算与全局内存访问率。如果获得的比率很低&#xff0c;则内核受内存约束&#xff1b;即其执行速度受从内存访…

Docker安装Elesticsearch7详细步骤

​ 1、创建安装目录 mkdir -p /usr/local/docker/es-docker 2、配置虚拟内存 如果不配置&#xff0c;后面启动es会报错。 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 配置如下 vi /etc/sysctl.conf vm.max_map_coun…

MySQL夯实之路-存储引擎深入浅出

innoDB Mysql4.1以后的版本将表的数据和索引放在单独的文件中 采用mvcc来支持高并发&#xff0c;实现了四个标准的隔离级别&#xff0c;默认为可重复读&#xff0c;并且通过间隙锁&#xff08;next-key locking&#xff09;策略防止幻读&#xff08;查询的行中的间隙也会锁定…

使用Navicat导入csv数据至mysql

问题 使用Navicat导入csv数据至mysql 详细问题 笔者有已进行数据处理的csv&#xff0c;需要将数据信息导入mysql中 解决方案 步骤1、建立数据表&#xff0c;字段信息&#xff08;最好&#xff09;与csv字段信息保持一致&#xff0c;方便后续导入。 具体的&#xff0c;双击…

WPS - 表格虚线变成实线解决方案(Office 同上)

1、选中表格区域&#xff0c;在表格中选中需要调整为实线的表格区域 2、点击设置单元格格式&#xff0c;鼠标进行右击并点击设置单元格格式选项 3、选择实线&#xff0c;在单元格格式下的边框&#xff0c;调整到实线 4、设置为实线&#xff0c;即可将表格的虚线设置为实线

Django(七)

Django(六) 4.编辑用户 点击编辑&#xff0c;跳转到编辑页面&#xff08;将编辑行的ID携带过去&#xff09;。编辑页面&#xff08;默认数据&#xff0c;根据ID获取并设置到页面中&#xff09;提交&#xff1a; 错误提示数据校验在数据库更新 user_edit.html {% exte…

JavaScript Web Worker用法指南

&#x1f9d1;‍&#x1f393; 个人主页&#xff1a;《爱蹦跶的大A阿》 &#x1f525;当前正在更新专栏&#xff1a;《VUE》 、《JavaScript保姆级教程》、《krpano》 ​ ​ ✨ 前言 Web Worker可以将耗时任务放到后台执行,避免阻塞UI。本文将详细介绍Web Worker的用法,让你…

Spark原理——运行过程

运行过程 逻辑图 是什么 怎么生成 具体怎么生成 val textRDD sc.parallelize(Seq("Hadoop Spark", "Hadoop Flume", "Spark Sqoop")) val splitRDD textRDD.flatMap(_.split(" ")) val tupleRDD splitRDD.map((_, 1)) val reduceRD…

代币合约 ERC20 Token接口

代币合约 在以太坊上发布代币就要遵守以太坊的规则&#xff0c;那么以太坊有什么规则呢?以太坊的精髓就是利用代码规定如何运作&#xff0c;由于在以太坊上发布智能合约是不能修改和删除的&#xff0c;所以智能合约一旦发布&#xff0c;就意味着永久有效&#xff0c;不可篡改…

ESU毅速丨复杂结构模具可尝试3D打印随形水路

冷却水路对模具的生产效率影响巨大&#xff0c;一些结构复杂、骨位深的模具常规水路加工困难且冷却效果不理想&#xff0c;这时可尝试3D打印来制造水路。3D打印技术可以制造出具有复杂内部结构和任意几何形状的部件&#xff0c;特别适合结构复杂、骨位深、薄壁等特征的模具水路…

解决uni-app小程序获取路由及路由参数

代码: this.id = this.$route.query.id;错误信息: 解决方案: // 获取query对象// #ifdef H5this.id = this.$route

电子学会C/C++编程等级考试2023年09月(三级)真题解析

C/C++编程(1~8级)全部真题・点这里 第1题:谁是你的潜在朋友 “臭味相投”——这是我们描述朋友时喜欢用的词汇。两个人是朋友通常意味着他们存在着许多共同的兴趣。然而作为一个宅男,你发现自己与他人相互了解的机会并不太多。幸运的是,你意外得到了一份北大图书馆的图书借…

最新AI绘画Midjourney绘画提示词Prompt大全

一、Midjourney绘画工具 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭…

提供一些防扫描被封禁、防溯源工具

1► 介绍 SecScanC2可以创建P2P网络进行安全扫描和C2。该工具可以帮助安全研究人员更有效地进行渗透测试&#xff0c;防止扫描被封禁&#xff0c;保护自己免受溯源。 2► 工具特性 P2P&#xff1a;将大量互联网节点构建成P2P网络 防止扫描被封禁&#xff1a;随机或指定节点…

Photoshop 2024 (PS2024) v25 直装版 支持win/mac版

Photoshop 2024 提供了多种创意工具&#xff0c;如画笔、铅笔、涂鸦和渐变等&#xff0c;用户可以通过这些工具来创建独特和令人印象深刻的设计效果。增强的云同步&#xff1a;通过 Adobe Creative Cloud&#xff0c;用户可以方便地将他们的工作从一个设备无缝同步到另一个设备…