0%

nvidia docker配置darknet应用镜像环境

nvidia docker配置GPU 深度学习镜像


使用目标

通过nvidia docker搭建在宿主机上搭建装有cuda,cudnn,opencv,darkent的基础镜像,从而便于后续基于GPU目标识别应用的容器化部署和管理

安装流程

安装nvidia docker

  • 卸载nvidia-docker和其他GPU容器

    1
    2
    docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1 docker ps -q -a -f volume={} | xargs -r docker rm -f
    sudo apt-get purge -y nvidia-docker
  • 添加package repositories

    1
    2
    3
    4
    5
    6
    curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
    sudo apt-key add -
    distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
    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
  • 安装 nvidia-docker2

    1
    2
    sudo apt-get install -y nvidia-docker2
    sudo pkill -SIGHUP dockerd

安装cuda基础镜像

  • 安装指定版本cuda

    1
    nvidia-docker run --rm -ti nvidia/cuda:{cuda版本} nvcc --version

更新基础cuda镜像

更新cuda镜像的方式有很多,例如:通过DockerFile文件更新镜像,通过bash编辑镜像然后commit,我这里使用的方法是,先通过cuda镜像生成容器,通过编辑容器,将容器保存为新的镜像文件,这样的原因在于可以很方便的通过docker cap命令拷贝文件进入容器中

预先准备

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、更换apt安装镜像源
sed -i 's#http://archive.ubuntu.com/#http://mirrors.tuna.tsinghua.edu.cn/#' /etc/apt/sources.list
2、更新apt镜像源,修复包,安装python3 pip
apt-get update -y --fix-missing && apt-get install -y python3-pip python3-dev libsm6 libxext6 libxrender-dev --fix-missing
3、安装依赖包
apt-get install -y \
wget \
unzip \
ffmpeg \
git

# Install cmake
apt-get install -y build-essential
apt-get install -y cmake

安装OpenCV

1
2
3
4
5
6
7
8
9
10
11
12
13
14
1、下载opencv源码包,opencv源码包有1个多G,可以在gitee上clone源码,速度很快
git clone -b 3.4 https://gitee.com/mirrors/opencv.git
2、安装依赖包
sudo apt-get install libpng-dev
sudo apt-get install libjpeg-dev
sudo apt-get install libopenexr-dev
sudo apt-get install libtiff-dev
sudo apt-get install libwebp-dev
3、在OpenCV中创建build文件夹
mkdir build
cd build
4、配置和编译
cmake ../
make install

安装cudnn

1
2
3
4
5
6
1、下载与cuda版本对应的cudnn
2、将cudnn拷贝至容器指定目录下 docker cp {cudnn文件目录} {容器目录}
3、解压cudnn文件
4、sudo cp cuda/include/cudnn.h /usr/local/cuda/include
sudo cp cuda/lib64/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn*

编译darknet

1
2
3
4
5
6
7
8
1、下载ABdarknet源码
git clone https://github.com/AlexeyAB/darknet
2、修改Makefile文件
GPU=1
CUDNN=1
OPENCV=1
3、编译
make

根据基础镜像创建容器

1
nvidia-docker run -it name {容器名称} {镜像名称} {容器位置}

注意:1、一定要用nvidia-docker创建容器,否者会出现cudnn not found的问题

2、调用darknet时如果出现 error while loading shared libraries:libopencv_highgui.so.3.4: cannot open shared object file的问题,编辑 /etc/ld.so.conf文件,加上include /etc/ld.so.conf.d/*.con,然后执行ldconfig,在darknet目录下make clean后重新make