如何从 docker-compose.yml 指定 nvidia 运行时?

问题描述 投票:0回答:4

我能够运行一个张量流容器,并通过以下命令从命令行访问 GPU

$ sudo docker run --runtime=nvidia --rm gcr.io/tensorflow/tensorflow:latest-gpu

我希望能够从 docker-compose 运行这个容器。是否可以从

--runtime
指定
docker-compose.yml
标志?

docker docker-compose tensorflow nvidia-docker
4个回答
48
投票

目前(2018 年 8 月),适用于 Docker 的 NVIDIA 容器运行时 (nvidia-docker2)支持 Docker Compose

是的,使用 Compose 格式 2.3 并将运行时:nvidia 添加到您的 GPU 服务。 Docker Compose 版本必须为 1.19.0 或更高版本。

示例

docker-compose.yml

version: '2.3'

services:
  nvsmi:
    image: ubuntu:16.04
    runtime: nvidia
    environment:
      - NVIDIA_VISIBLE_DEVICES=all
    command: nvidia-smi

更多 来自 NVIDIA 博客的示例使用 Docker Compose 展示如何使用 NVIDIA 容器运行时启动多个 GPU 容器。


32
投票

您应该编辑

/etc/docker/daemon.json
,添加第一级密钥
"default-runtime": "nvidia"
,重新启动 docker 守护进程(例如
"sudo service docker restart"
),然后该主机上的所有容器都将使用 nvidia 运行时运行。

更多信息

daemon.json
这里


5
投票

或者更好:使用

systemd
并假设路径是
/usr/libexec/oci/hooks.d/nvidia

配置

mkdir -p /etc/systemd/system/docker.service.d/
cat > /etc/systemd/system/docker.service.d/nvidia-containers.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd -D --add-runtime nvidia=/usr/libexec/oci/hooks.d/nvidia --default-runtime=nvidia
EOF

重新启动

systemctl daemon-reload
systemctl restart docker

演示

不需要指定

--runtime=nvidia
,因为我们在配置步骤中设置了
default-runtime=nvidia

docker run --rm gcr.io/tensorflow/tensorflow:latest-gpu

解决方案灵感来自我的关于 KATA 运行时的教程


0
投票

设置默认运行时间对我来说似乎是最合理的。然而加布里埃尔的回答对我不起作用。

相反,我发现 nvidia 容器工具包可以自动配置

daemon.json
[1]。

sudo nvidia-ctk runtime configure --runtime=docker --set-as-default
sudo service docker restart

这应该更适合未来,因为它现在在

daemon.json
中添加了不同的部分。

[1] https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/1.12.1/user-guide.html

© www.soinside.com 2019 - 2024. All rights reserved.