Skip to content

コンテナー内での GPU の使用

⚡ 必要条件 nerdctl >= 0.9

nerdctl は、Docker 互換の NVIDIA GPU サポートを提供します。

前提 条件

  • NVIDIAドライバ
  • Docker で GPU を使用する場合と同じ要件。詳細については、NVIDIAのドキュメントを参照してください。
  • nvidia-container-cli
  • containerd は、コンテナー内の GPU を設定するためにこの CLI に依存しています。これはlibnvidia-containerパッケージからインストールできます。

nerdctl run --gpusのオプション

nerdctl run --gpus docker run --gpus と互換性があります。

使用するGPUの数は、--gpusオプションで指定できます。 次の例では、使用可能なすべての GPU を公開します。

nerdctl run -it --rm --gpus all nvidia/cuda:12.3.1-base-ubuntu20.04 nvidia-smi

また、詳細な設定をキーと値のペアのリストを --gpus オプションに渡すこともできます。次のオプションが用意されています。

  • count: 使用する GPU の数。all は、使用可能なすべての GPU を公開します。
  • device: 使用する GPU の ID。UUID または GPU の数を指定できます。
  • capabilities: ドライバーの機能。設定されていない場合は、既定ドライバのutility``computeを使用します。

次の例では、特定の GPU をコンテナーに公開します。

nerdctl run -it --rm --gpus '"capabilities=utility,compute",device=GPU-3a23c669-1f69-c64e-cf85-44e9b07e7a2a' nvidia/cuda:12.3.1-base-ubuntu20.04 nvidia-smi

nerdctl compose のフィールド

nerdctl compose は、compose-spec に続く GPU もサポートしています。

作成時に GPU を使用するには、services.demo.deploy.resources.reservations.devices で次の機能の一部を指定します。

  • gpu
  • nvidia
  • nerdctl run --gpusで許可されているすべての機能

使用可能なフィールドは nerdctl run --gpus と同じです。

次の例では、使用可能なすべての GPU をコンテナーに公開します。

バージョン: "3.8"
サービス:
  デモ:
    イメージ: nvidia/cuda:12.3.1-base-ubuntu20.04
    コマンド: nvidia-smi
    deploy:
      リソース:
        予約:
          デバイス:
          - capabilities: ["utility"]
            カウント: all

トラブルシューティング

nerdctl run --gpus は、Nvidia gpu-operator を使用すると失敗します

Nvidia ドライバーが gpu-operatorの場合、nerdctl runは、エラーメッセージ(FATA[0000] exec: "nvidia-container-cli": executable file not found in $PATH)で失敗します。

そのため、nvidia-container-cli を PATH 環境変数に追加する必要があります。

修正には、$HOME/.profile または /etc/profile (システム全体のインストールの場合) に次の行を追加します。

export PATH=$PATH:/usr/local/nvidia/toolkit

共有ライブラリもシステムに追加する必要があります。

echo "/run/nvidia/driver/usr/lib/x86_64-linux-gnu" > /etc/ld.so.conf.d/nvidia.conf
ldconfig

これで、nerdctl run --gpusは正常に実行できます。