使用CUDA运行时构建Docker映像

wfveoks0  于 2023-03-29  发布在  Docker
关注(0)|答案(3)|浏览(206)

我正在构建一个需要测试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 runtime构建docker镜像呢?

hts6caw3

hts6caw31#

使用--default-runtime=nvidia配置docker守护进程解决了这个问题。
请参考此wiki了解更多信息。

k4ymrczo

k4ymrczo2#

也许是因为你在Dockerfile上使用了“RUN”命令。我会尝试“CMD”(请参阅此命令的文档)或“ENTRYPOINT”,因为需要使用参数调用“docker run”。我认为“RUN”命令是用于之前的作业,您需要在容器可用之前执行,而不是具有输出和内容的进程。
祝你好运

6g8kf2rb

6g8kf2rb3#

今天(2023年3月27日),我遇到了另一个问题,即用cuda运行时构建docker镜像。
尽管配置了正确的nvidia运行时,我的docker build .docker-compose命令无法访问CUDA。
我通过禁用新的docker build kit解决了这个问题:

DOCKER_BUILDKIT=0 docker build .

DOCKER_BUILDKIT=0 docker-compose build

您也可以通过添加以下内容修改/etc/docker/daemon.json来永久禁用新的docker构建工具包:

{
  "features": {
    "buildkit" : true
  }
}

看起来新的docker构建工具包在处理CUDA和GPU方面有一些问题,所以如果你正在使用它,请检查我的解决方案。

相关问题