web-dev-qa-db-ja.com

docker-compose.ymlからnvidiaランタイムを指定するにはどうすればよいですか?

次のコマンドを使用して、コマンドラインからGPUにアクセスして、テンソルフローコンテナーを実行できます。

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

このコンテナをdocker-composeから実行できるようにしたいと思います。 --runtimeからdocker-compose.ymlフラグを指定することは可能ですか?

25
rissem

/etc/docker/daemon.jsonを編集し、最初のレベルのキー"default-runtime": "nvidia"を追加し、Dockerデーモン(例:"Sudo service docker restart")を再起動すると、そのホスト上のすべてのコンテナーがnvidiaランタイムで実行されます。

daemon.jsonに関する詳細情報 こちら

現在(2018年8月)、Docker用のNVIDIAコンテナーランタイム( nvidia-docker2Docker Composeをサポート .

はい、Composeフォーマット2.3を使用し、GPUサービスにランタイム:nvidiaを追加します。 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 Container Runtimeで複数のGPUコンテナーを起動する方法を示しています。

25
cedrickchee

またはそれ以上: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ランタイムに関するチュートリアル から着想を得たソリューション。

3
Abdennour TOUMI