nvidia-docker + nvidia-container-runtime 使用
docker 官方是 19.0.2 开始支持英伟达GPU 在此之前版本可以通过英伟达魔改docker的工具 实现此需求
📦 nvidia-docker + nvidia-container-runtime 这个方案最低docker 要求是在docker 12 并且 由于docker 官方在docker 19 开始支持英伟达GPU目前这个 方案是已经停止维护了。高于19 直接安装 nvidia-container-toolkit
0 使用原理
-
-
📦nvidia-docker2.0 是 nvidia-docker 升级版
1 docker 安装
sudo apt update
卸载 docker
服务器上有其他版本docker 才需要
sudo apt-get purge docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin docker-ce-rootless-extras
# 上面无效使用下面的
find / -name docker # 找到所有docker有关的文件
rm -rf /etc/systemd/system/docker.service.d
rm -rf /var/lib/docker
rm /usr/bin/dockerd
rm /run/containerd/containerd.sock
rm /usr/bin/docker
rm /usr/share/bash-completion/completions/docker
rm /etc/docker
rm -rf /run/docker
rm -rf /root/server/docker
安装指定版本docker
下载离线安装包
因为17.03.2-ce 版本比较老 网络安装可能会遇到检索不到这个版本的问题所以采用离线安装包安装。
找到需要版本下载即可
创建安装脚本
准备docker.service 系统配置文件
vim docker.service
内容如下
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
# the default is not to use systemd for cgroups because the delegate issues still
# exists and systemd currently does not support the cgroup feature set required
# for containers run by docker
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
# Having non-zero Limit*s causes performance problems due to accounting overhead
# in the kernel. We recommend using cgroups to do container-local accounting.
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
# Uncomment TasksMax if your systemd version supports it.
# Only systemd 226 and above support this version.
#TasksMax=infinity
TimeoutStartSec=0
# set delegate yes so that systemd does not reset the cgroups of docker containers
Delegate=yes
# kill only the docker process, not all processes in the cgroup
KillMode=process
# restart the docker process if it exits prematurely
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
准备安装脚本和卸载脚本
创建安装脚本:install.sh
vim install.sh
创建卸载脚本:delete.sh
$ vim delete.sh
安装 nvidia-docker nvidia-docker2
sudo apt-get install nvidia-docker2
安装docker
bash install.sh docker-17.03.2-ce.tgz
check
//查看docker版本命令
$ docker -v
//查看docker所有命令
$ docker --help
2 安装 nvidia-docker2 & nvidia-container-runtime
检索可用版本
apt-cache madison nvidia-docker2
apt-cache madison nvidia-container-runtime
📦 没找到 17.03.2-ce 对应安装包 测试了一下17.12.1-1版本也是可以用的
安装
apt install nvidia-docker2=2.0.3+docker17.12.1-1
apt install nvidia-container-runtime=2.0.0+docker17.12.1-1
安装好之后更改配置文件
# vi /etc/docker/daemon.json
{
"default-runtime": "nvidia", # 其他的已经有了,加上将nvidia 设置为默认 runtime
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
check
# 输入以下命名有正常返回说明安装完成
nvidia-docker -v
nvidia-docker --help
3 测试
# 输入以下命令可以正常显示宿主机显卡信息则表示安装成功
nvidia-docker run --rm nvidia/cuda nvidia-smi
# 由于 docker-17.03.2-ce 是比较老旧的版本很有可能会遇到 无法从镜像仓库拉新镜像的问题。这个时候只能去镜像仓库 找老的可用的版本,加上版本号后拉取成功。
nvidia-docker run --rm nvidia/cuda:11.1.1-cudnn8-runtime nvidia-smi
📦 网上部分教程会提到需要加入--runtime=nvidia 参数.但前面已经设置过nvidia 为默认runtime 所以直接使用nvidia-docker 即可