nvidia-docker踩坑记录

docker, nvidia-docker配置镜像创建容器

众所周知,想要在容器中使用nvidia的显卡,需要使用nvidia-docker命令创建容器
环境说明: 服务器端为Ubuntu18.04离线,nvidia-smi正常使用,CUDA版本11.4

Step1:按需下载基础docker镜像(建议按需制作自己的ubuntu18.04的镜像tar包)

参考信息:

尽管Pytorch官方和Nvidia-NCG提供了很多版本的Pytorch镜像,但是我们平时的科研和工作中经常需要在特定系统版本、特定CUDA版本、特定Python版本下使用特定版本的Pytorch,官方的镜像很难满足自定义的需求,因此需要自己构建Pytorch镜像
# 建议使用dockerfile

如有现成匹配CUDA的tar包(如:10.2-cudnn7-devel-ubuntu18.04-v2.tar)可直接下一步

Step2:服务器断网情况下,安装nvidia-docker

下载参考:

https://blog.csdn.net/WenZhaoYang123/article/details/128371533
https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/
http://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu16.04/amd64/

建议安装docker20.10.7,18版本装完nvidia-docker2后无法使用

安装参考:

sudo dpkg -i containerd.io_1.4.6-1_amd64.deb
sudo dpkg -i docker-ce-cli_20.10.7~3-0~ubuntu-xenial_amd64.deb
sudo dpkg -i docker-ce_20.10.7~3-0~ubuntu-xenial_amd64.deb

#装完以上3个文件,可以查看docker -v

sudo dpkg -i nvidia-container-toolkit-base_1.11.0-1_amd64.deb
sudo dpkg -i libnvidia-container1_1.11.0-1_amd64.deb
sudo dpkg -i libnvidia-container-tools_1.11.0-1_amd64.deb
sudo dpkg -i nvidia-container-toolkit_1.11.0-1_amd64.deb

sudo dpkg -i nvidia-docker2_2.8.0-1_all.deb
# 重启docker服务
sudo systemctl daemon-reload 
sudo systemctl restart docker

# 装完以上所有文件,使用nvidia-docker命名不报错即可
Step3: nvidia-docker加载镜像及创建容器

举例:

# 载入镜像:
# 方式1:从镜像归档文件ubuntu_v2.tar创建镜像,命名为nvidia/cuda:10.2-cudnn7-ubuntu18.04-v3
docker import 10.2-cudnn7-devel-ubuntu18.04-v2.tar nvidia/cuda:10.2-cudnn7-ubuntu18.04-v3

# 方式2:直接载入,不可修改
sudo docker load < 10.2-cudnn7-devel-ubuntu18.04-v2.tar.tar

# 查看
docker images -a
# 基于镜像,创建容器(可以指定共享内存大小,指定使用GPU数量)
sudo nvidia-docker run -itd --name new_1 --gpus all \
							--privileged=true \ 
							-v /home:/root/new_1 \		# 挂载不要直接挂在/root下,会覆盖容器内的root目录
                           	-p 9001:80 -p 9002:22 -p 9003:5900 \
                            nvidia/cuda:10.2-cudnn7-ubuntu18.04-v3
# 注意:-p指定的前2个分别是网页端和终端进入的端口号
网页:172.16.0.123:9001
终端:ssh -p 9002  [email protected]
Step*:踩坑记录 及 建议

(1)nvidia-docker创建镜像后,看到docker ps -a 的容器STATUS栏显示(healthy:starting),表示启动中,

过一会看,显示(unhealthy),说明创建容器遇到问题,可以查看docker log 容器id, 看能否找出问题;

Solution:
直接docker stop 该容器,再docker restart 容器id,重复2,3次大概可以显示(healthy),此时可以使用ssh连接进入;(unhealthy状态仅能通过docker exec -it 进入)

(2)创建容器时,-p建议创建2个端口号,若仅用1个-p,可能只能从网页端进入;

(3)创建容器的共享内存配置项 如 --shm-size 16G, 建议根据宿主机实际情况配置,创建容器多次失败建议去除该项试试;

(4)linux进入容器中,可能出现安装了conda命令但无法使用的情况,建议直接进入如/root/minconda/bin/conda --version
Solution:linux系统进入该容器可能需要将该路径加入环境变量,目前win系统进入容器直接是base环境

你可能感兴趣的:(docker,容器,运维)