将Nvidia运行时添加到Docker运行时

21

我在GCP上运行了一台虚拟机,并搭载了一块Tesla GPU。现在我希望使用这个GPU来加速基于PyTorch的应用程序,并让docker容器可以访问它。

我想让docker使用这个GPU,并且从容器中访问它。

我已经在主机上安装了所有的驱动程序,并且应用程序可以在那里正常运行,但是当我尝试在基于nvidia/cuda容器的docker中运行时,PyTorch会出现错误。

File "/usr/local/lib/python3.6/dist-packages/torch/cuda/__init__.py", line 82, 
in _check_driver http://www.nvidia.com/Download/index.aspx""")
AssertionError: 
Found no NVIDIA driver on your system. Please check that you have an NVIDIA GPU and installed a driver from

要获取容器中可见的有关Nvidia驱动程序的一些信息,我运行了以下命令:

docker run --runtime=nvidia --rm nvidia/cuda nvidia-smi
但它报错了:docker: Error response from daemon: Unknown runtime specified nvidia.

在主机上,nvidia-smi 的输出看起来像这样:

+-----------------------------------------------------------------------------+
| NVIDIA-SMI 440.33.01    Driver Version: 440.33.01    CUDA Version: 10.2     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  Tesla P100-PCIE...  On   | 00000000:00:04.0 Off |                    0 |
| N/A   39C    P0    35W / 250W |    873MiB / 16280MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

如果我在Docker中检查运行时,我只能得到runc运行时,没有像互联网上的示例中一样有nvidia

$ docker info|grep -i runtime
 Runtimes: runc
 Default Runtime: runc

我该如何将 nvidia 运行环境添加到我的 Docker 中?

迄今为止,我发现的大多数帖子和问题都说:“我只是忘记重启我的 Docker 守护程序,它就好了”,但这对我没有帮助。我该怎么办?

我在 Github 上查看了许多问题,包括#1#2#3 StackOverflow 的问题 - 都没有帮助。


  1. 在基础系统上安装最新的NVIDIA GPU驱动程序。2. 安装docker-ce 19.03或更新版本。3. 使用--gpus all开关启动您的容器。4. 获得利润!请参见此处:https://docs.nvidia.com/ngc/ngc-titan-setup-guide/index.html
- Robert Crovella
分享一些经验:一些旧项目依赖于已弃用的nvidia-docker2的接口选项“--runtime nvidia”。检查的答案(安装nvidia-container-runtime并编辑/etc/docker/daemon.json)可以在新的nvidia-docker-toolkit之上安装,似乎与其兼容,并且只需一个非常小的软件包(Ubuntu上为600kB),就可以实现所需的向后兼容性。 - sema
2个回答

25
你需要的 nvidia 运行时是 nvidia-container-runtime
请按照此处的安装说明进行安装:
https://github.com/NVIDIA/nvidia-container-runtime#installation 基本上,如果没有预先安装,你需要首先使用你的包管理器安装它:
sudo apt-get install nvidia-container-runtime 然后将其添加到 Docker 运行时中:
https://github.com/nvidia/nvidia-container-runtime#daemon-configuration-file 对我来说,这个选项很有效:
$ sudo tee /etc/docker/daemon.json <<EOF
{
    "runtimes": {
        "nvidia": {
            "path": "/usr/bin/nvidia-container-runtime",
            "runtimeArgs": []
        }
    }
}
EOF
sudo pkill -SIGHUP dockerd

检查是否已添加:

$ docker info|grep -i runtime
 Runtimes: nvidia runc
 Default Runtime: runc

1
作为对@Viacheslav Shalamov答案的更新,nvidia-container-runtime软件包现在已成为nvidia-container-toolkit的一部分,可以通过以下方式安装:

sudo apt install nvidia-cuda-toolkit

然后按照上面的指示设置nvidia为默认运行时。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接