安装nvidia-docker2

为什么要用nvidia-docker2?

一个浅显的原因是,nvidia-docker已经被官方废弃了。 最大的原因是,nvidia-docker作为Docker的一个包装,需要运行一个独立的daemon,与Docker的生态不能很好地兼容。 比如,docker-composedocker swarm与Kubernetes,都不能很好的和nvidia-docker一起工作。

nvidia-docker2解决了这些问题,甚至能在非官方CUDA镜像以外的镜像工作。 nvidia-docker是一个Volume Plugin,而nvidia-docker2则是一个Docker Runtime,机制的差异,带来了巨大的改进。

nvidia-gpu-docker

安装nvidia-docker2

Debian-based distributions

以下是基于Debian系的安装方法:

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

具体到Ubuntu 16.04来说,nvidia-docker.list就是如下内容:

deb https://nvidia.github.io/libnvidia-container/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-container-runtime/ubuntu16.04/$(ARCH) /
deb https://nvidia.github.io/nvidia-docker/ubuntu16.04/$(ARCH) /

RHEL-based distributions

distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | \
  sudo tee /etc/yum.repos.d/nvidia-docker.repo

红帽系的,孤没用过,以上仅为官方样例。

配置nvidia-docker2

安装后,需要配置新的Docker Runtime。 同时,也需要把默认的Runtime设为nvidia

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia",
    ...
}

以上内容加入/etc/docker/daemon.json文件中,然后重启dockerd

sudo systemctl restart docker

对不需要GPU资源的应用来说,这样设了也不会有问题,除非它依赖另一个Runtime。 如果没有default-runtime的配置,在运行时添加一个参数--runtime,也能使容器可以访问GPU资源。

docker run --runtime nvidia ...

APT证书验证问题

某些公司的内网,环境及其恶劣,证书验证不一定能通过。 把一下一行添加到/etc/apt/apt.conf中,可以确保apt update时不出问题。

Acquire::https::nvidia.github.io::Verify-Peer "false";

参考


相关笔记