nvidia-docker + nvidia-container-runtime 使用

发布时间 2023-11-04 13:04:28作者: 貌似大家

docker 17.03.2-ce 使用GPU

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 是一个简单的包,它主要通过修改docker的配置文件/etc/docker/daemon.json来让docker使用NVIDIA Container runtime

  • nvidia-container-runtime 才是真正的核心部分,它在原有的docker容器运行时runc的基础上增加一个prestart hook,用于调用libnvidia-container库。

    ?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

 

#!/bin/sh
echo '解压tar包...'
tar -xvf $1
echo '将docker目录移到/usr/bin目录下...'
cp docker/* /usr/bin/
echo '将docker.service 移到/etc/systemd/system/ 目录...'
cp docker.service /etc/systemd/system/
echo '添加文件权限...'
chmod +x /etc/systemd/system/docker.service
echo '重新加载配置文件...'
systemctl daemon-reload
echo '启动docker...'
systemctl start docker
echo '设置开机自启...'
systemctl enable docker.service
echo 'docker安装成功...'
docker -v

创建卸载脚本:delete.sh

$ vim delete.sh

 

#!/bin/sh
echo '删除docker.service...'
rm -rf /etc/systemd/system/docker.service
echo '删除docker文件...'
rm -rf /usr/bin/docker*
echo '重新加载配置文件'
systemctl daemon-reload
echo '卸载成功...'

 

安装 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 即可