使用Cuda运行时构建Docker映像

时间:2019-08-07 08:07:57

标签: docker nvidia-docker

我正在构建需要同时测试GPU可用性的映像。 GPU容器运行良好:

$ docker run --rm --runtime=nvidia nvidia/cuda:9.2-devel-ubuntu18.04 nvidia-smi
Wed Aug  7 07:53:25 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 396.54                 Driver Version: 396.54                    |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|===============================+======================+======================|
|   0  TITAN X (Pascal)    Off  | 00000000:04:00.0 Off |                  N/A |
| 24%   43C    P8    17W / 250W |   2607MiB / 12196MiB |      0%      Default |
+-------------------------------+----------------------+----------------------+

+-----------------------------------------------------------------------------+
| Processes:                                                       GPU Memory |
|  GPU       PID   Type   Process name                             Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

但在使用GPU构建时失败:

$ cat Dockerfile
FROM nvidia/cuda:9.2-devel-ubuntu18.04

RUN nvidia-smi
# RUN build something
# RUN tests require GPU

$ docker build .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM nvidia/cuda:9.2-devel-ubuntu18.04
 ---> cdf6d16df818
Step 2/2 : RUN nvidia-smi
 ---> Running in 88f12f9dd7a5
/bin/sh: 1: nvidia-smi: not found
The command '/bin/sh -c nvidia-smi' returned a non-zero code: 127

我是Docker的新手,但我认为在构建映像时我们需要进行健全性检查。那么我该如何使用cuda运行时构建docker映像?

2 个答案:

答案 0 :(得分:1)

使用--default-runtime=nvidia配置docker守护程序解决了该问题。

有关更多信息,请参阅this wiki

答案 1 :(得分:0)

也许是因为您正在Dockerfile上使用“ RUN”命令。由于使用参数调用“ docker run”,因此我尝试使用“ CMD”(请参阅​​此命令的文档)或“ ENTRYPOINT”。 我认为“ RUN”命令用于在容器可用之前需要执行的先前作业,而不是包含输出和填充的过程。

祝你好运