Docker+harbor搭建深度学习环境

  近期在配置深度学习的环境,上传到服务器运行,需要在Ubuntu环境的Docker中配置镜像,并上传至Harbor,然后服务器中运行,博主配置的环境为Ubuntu18.04-CUDA11.0-cudnn8-tf2.4-torch1.7-py3.6,整个过程均在Ubuntu20.04系统中操作,以下是整个配置步骤(在配置环境之前,最好先学习一下Docker和Linux的相关知识和基础操作)。

1.Docker安装
2.Harbor安装
2.1安装Docker-Compose
2.2配置安装Harbor
3.Docker拉取镜像
4.安装cudnn
5.配置环境
5.1安装远程连接服务
5.2安装深度学习相关库
5.3封装镜像
6.推送镜像到Harbor
7.参考

Docker与Harbor:
 个人的一些见解
  Docker类似于虚拟机仓库,可以在里边下载并制作我们需要的镜像,制作好镜像后,上传到服务器或者在本地使用。
  Harbor与Docker基本相同,不过Harbor是私有仓库,如果公司使用Harbor,给员工分配一个公司的IP地址,用于连接公司内部的服务器,员工登录公司服务器后,运行服务器所需镜像就会直接从公司内部的Harbor仓库拉取。

1.Docker安装

  Ubuntu中使用wget安装Docker,官方安装指导需要注意Docker的版本,因为在19.x版本以前,nvidia镜像使用CUDA的方式是nvidia-docker,现在官方已经放弃这种方式了,但是还有一些博客在讲这种老旧的安装教程,如果看到nvidia-docker的安装方式,就可以直接关闭了,19.x版本以后的Docker安装nvidia的镜像,只需要从Docker Hub仓库中拉取相应版本CUDA的镜像就可以。
  Docker安装成功后,使用docker --version命令来查看安装的docker版本。

# 安装Docker
wget -qO- https://get.docker.com/ | sh

# 安装完成后查看Docker版本
docker --version

  Docker安装成功后,从Docker Hub拉取镜像了(后边会有讲解),Docker Hub是一个镜像的仓库,里边有各个公司做的镜像,在里边可以找到nvidia已经做好的包含CUDA的镜像。

2.Harbor安装

  Harbor是构建私有服务器的工具,举个例子,公司有深度学习相关的服务器,这个服务器仅连接公司的内部网络,要想在这个服务器上运行自己的程序,需要自己做镜像,并上传镜像到公司的Harbor平台,我们使用服务器前选择从公司的Harbor平台找到自己做的镜像,服务器启动后首先去这个平台寻找镜像运行,镜像运行成功后就可以运行自己的程序。

2.1安装Docker-Compose

  在Ubuntu上安装Harbor需要安装Docker-Compose,Docker-Compose官方的安装教程

# 下载Docker-Compose二进制包(此处为1.28.5的版本)
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 设置Docker-Compose的权限
sudo chmod +x /usr/local/bin/docker-compose

# 检查Docker-Compose的版本
docker-compose --version

# 如果检查版本失败,创建一个软链接即可
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

2.2配置安装Harbor

  此处可以参考Harbor官方安装指导,我们需要下载Harbor离线安装包

# 解压安装包,版本替换为下载的版本
tar zxvf harbor-offline-installer-v2.2.0.tgz

# 配置harbor.yml.tmpl文件,必须在安装之前配置。
cd harbor
vim harbor.yml.tmpl

# 配置harbor.yml.tmpl文件最主要的就是配置IP地址
# IP地址是在Web打开harbor的IP地址
hostname: IP地址

# 配置好harbor.yml文件后,开始安装
./ install.sh

docker 默认是https请求,由于Harbor私有库是http,因此需修改Docker配置。

vim /etc/docker/daemon.json
# 添加
"insecure-registries": ["IP地址"]

# 重启Docker服务
systemctl restart docker

# 安装完成后,查看harbor服务是否运行
docker ps -a

3.Docker拉取镜像

  首先注册一个Docker Hub账号,然后进入Docker Hub,在搜索栏输入nvidia,进入nvidia/cuda的仓库,在tags搜索11.0-devel-ubuntu18.04,右侧有拉取该镜像的命令,这个镜像是nvidia已经做好的包含CUDA的镜像,nvidia出的也有同时包含CUDA和cudnn的镜像,但是我没有使用,还是自己手动安装了cudnn。

拉取11.0-devel-ubuntu18.04镜像

docker pull nvidia/cuda:11.0.3-devel-ubuntu18.04

运行刚刚下载好的docker镜像并修改源

docker run -it -v /home/user:/workspace nvidia/cuda:11.0-devel-ubuntu18.04
# 更新源
apt update
apt install vim
vim /etc/apt/sources.list
# 注释sources.list内容,并将以下文字粘粘到sources.list里边
# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb 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 https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu/ jammy-security main restricted universe multiverse
# 保存文件sources.list后
apt update

4.安装cudnn

  进入nvidia网站下载cudnn,运行镜像是挂载在Ubuntu20.04的usr文件夹,我们可以直接将下载的cudnn压缩包放在这个地方,在docker镜像中\workspace文件夹可直接使用,不用再从宿主机复制cudnn压缩包到镜像中。

# 运行镜像
docker run -it -v /home/usr:/workspace nvidia/cuda:11.0-devel-ubuntu18.04

# 进入镜像后,在/workspace文件夹解压cudnn的压缩包
tar zxvf cudnn-11.0-linux-x64-v8.0.5.39.tgz

复制cudnn文件到cuda相关文件夹中,此处需要注意的是,第一个命令是复制cuda/include/文件夹下所有的文件,在8版本之前只有一个cudnn.h文件,但是cudnn8以后这个文件夹有多个文件,都需要复制。

cp cuda/include/* /usr/local/cuda/include
cp cuda/lib64/libcudnn* /usr/local/cuda/lib64

# 查看CUDA版本
nvcc -V

# 查看cudnn版本,cudnn8以后查看cudnn版本不在使用cudnn.h文件
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

5.配置环境

5.1安装远程连接服务

# 安装远程连接服务
apt install ssh curl wget net-tools iputils-ping gcc g++ cmake make build-essential -y

# 修改ssh配置文件
vim /etc/ssh/sshd_config
# 允许远程登录
PermitRootLogin yes

# 修改/.bashrc文件,在最后一行添加
export PATH=$PATH:/root

至此镜像已经配置好了,然后安装深度学习相关的库。

5.2安装深度学习相关库

  安装远程连接时,安装的服务有的需要依赖python,会安装python,Ubuntu18.04默认的python版本为3.6,查看python版本,并修改python的软链接,如果没有安装python,按以下步骤安装python。

5.2.1安装python

apt update
apt install software-properties-common

# 安装 ppa 添加源
add-apt-repository ppa:deadsnakes/ppa
apt update

# 如果需要更改为其他版本的python,例如安装 python3.7
apt install python3.7

# 建立软连接,在Ubuntu中,命令行输入python打开的是2.x版本,因此需将python链接更改为3.x
ln -s /usr/bin/python3.7 /usr/bin/python
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py

# 下载安装脚本
apt install python3-distutils
python get-pip.py

5.2.2安装pip

# 安装pip
pip3 install -U pip
rm -rf /usr/bin/pip /usr/local/bin/pip /usr/local/bin/pip3 /usr/bin/pip3

# 添加软链接
ln -s /usr/local/bin/pip3.5 /usr/bin/pip
ln -s /usr/local/bin/pip3.5 /usr/local/bin/pip
# 更新pip版本
pip install -U pip

5.2.3安装机器学习库

# 安装机器学习相关库
pip install sklearn matplotlib pandas numpy Pillow jupyter jupyterlab

# 安装tensorflow相关库
pip install tensorflow-gpu==2.4.0

# 安装pytorch库
pip install torch torchvision tensorboardx

# 安装tqdm
pip install tqdm

# 此处自己安装 opencv SimpleITK 等其他自己需要的库

# 安装各种所需的库后,退出容器
exit

5.3封装容器

# 将容器封装为新的镜像
docker commit 容器ID ubuntu1804:cuda11.0-torch1.7-py3.7
# 将镜像保存为压缩包
docker save -o ubuntu1804_image.tar 新的镜像ID

6.推送镜像到Harbor

# 登录Harbor账号,(此处注意,Harbor的密码包含大写字母)
docker login IP地址

# 输入账号密码登录成功后,推送镜像
docker push IP地址/cuda11.0-tf2.4-torch1.7-py3.6

  至此配置好了一个深度学习的镜像,在使用服务器运行前,会要求选择使用的镜像,此时选择上传到Harbor的这个镜像就可以运行了。

参考

1.如何在ubuntu18.04中安装 cuda11.0 + cudnn8
2.Ubuntu 18.04 安装 Harbor v2.1.2
3.ubuntu 安装harbor仓库

posted @ 2021-03-27 14:29  zonghuia  阅读(465)  评论(0编辑  收藏  举报