すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:デフォルトの Kubernetes GPU スケジューリングの使用

最終更新日:Jun 18, 2026

Container Service for Kubernetes (ACK) は GPU スケジューリングおよび操作をサポートしています。そのデフォルトの GPU 使用モードは、アップストリームの Kubernetes コミュニティのパターンに準拠しています。本トピックでは、GPU スケジューリングを検証するために、サンプルの TensorFlow ワークロードをデプロイする手順を説明します。

前提条件

以下の要件を満たしていることを確認してください。

  • GPU ノードが 1 台以上ある ACK クラスター

  • クラスターへの接続が構成済みの kubectl

  • ACK コンソールへのアクセス

標準的な GPU リソースリクエストをバイパスしないこと

ACK で管理される GPU ノードでは、標準的な Kubernetes 拡張リソースメカニズム(nvidia.com/gpuresources.limits 内で指定)を通じてのみ GPU リソースをリクエストしてください。以下の操作はこのメカニズムをバイパスし、セキュリティリスクをもたらします。

  • ノード上で直接 GPU アプリケーションを実行すること

  • dockerpodman、または nerdctl を使用してコンテナを作成したり GPU リソースをリクエストしたりすること(例:docker run --gpus alldocker run -e NVIDIA_VISIBLE_DEVICES=all

  • Pod の YAML ファイルの env セクションに NVIDIA_VISIBLE_DEVICES=all または NVIDIA_VISIBLE_DEVICES=<GPU ID> を追加すること

  • NVIDIA_VISIBLE_DEVICES 環境変数を使用して Pod の GPU リソースをリクエストすること

  • Pod の YAML で設定されていない場合に、コンテナイメージ内で NVIDIA_VISIBLE_DEVICES をデフォルトで all に設定すること

  • Pod の securityContextprivileged: true を設定して GPU プログラムを実行すること

重要性: 非標準的な GPU リクエストは、スケジューラのリソーストラッキングに対して非表示になります。この不整合により、スケジューラがノード上の GPU を過剰に割り当て、複数の Pod が同一の GPU カード(例:GPU メモリ)を争う状態となり、ワークロードが失敗する可能性があります。これらの方法は、NVIDIA コミュニティによって報告されている既知のエラーを引き起こすこともあります。

GPU の可用性の確認

ワークロードをデプロイする前に、ご利用の GPU ノードが Kubernetes スケジューラに対して GPU 容量を公開していることを確認してください。

  1. クラスター内のノード一覧を取得します。

    kubectl get nodes
  2. GPU ノードの詳細を確認し、その容量をチェックします。

    kubectl describe node <gpu-node-name>

    Capacity セクションで、nvidia.com/gpu がゼロ以外の値を示している必要があります。

    Capacity:
     nvidia.com/gpu: 1

    nvidia.com/gpu が存在しない、または 0 を示している場合は、NVIDIA デバイスプラグインがノード上で実行されていない可能性があります。先に進む前に、プラグインの DaemonSet デプロイメント、GPU ドライバー、およびノード構成を確認してください。

GPU アプリケーションのデプロイ

  1. ACK コンソールにログインします。左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、対象のクラスターをクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [デプロイメント] を選択します。

  3. [デプロイメント] ページで、[YAML から作成] をクリックし、以下のマニフェストを貼り付けます。

    apiVersion: v1
    kind: Pod
    metadata:
      name: tensorflow-mnist
      namespace: default
    spec:
      containers:
      - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5
        name: tensorflow-mnist
        command:
        - python
        - tensorflow-sample-code/tfjob/docker/mnist/main.py
        - --max_steps=100000
        - --data_dir=tensorflow-sample-code/data
        resources:
          limits:
            nvidia.com/gpu: 1  # このコンテナに GPU カードを 1 枚リクエストします。
        workingDir: /root
      restartPolicy: Always
    GPU 拡張リソースには limits のみが必要であり、requests は不要です。Kubernetes では、拡張リソースに対して一致する limits なしに requests を指定することはできません。スケジューラは limits の値を有効なリクエストとして扱います。
  4. 左側のナビゲーションウィンドウで、[ワークロード] > [Pod] を選択します。該当の Pod を見つけてクリックします。

  5. [ログ] タブをクリックします。イメージのプルおよび Pod の起動には数分かかる場合があります。実行開始後、ログ出力により GPU スケジューリングが正しく機能していることが確認できます。

    image.png

次のステップ

  • 異種混合クラスターで特定の GPU タイプをターゲットにするには、ノードラベルとセレクターを使用します。アクセラレータタイプ別に GPU ノードにラベルを付与します(例:kubectl label nodes <node-name> accelerator=<gpu-model>)。その後、Pod の spec に nodeSelector を追加します。

  • GPU 共有や隔離などの高度な GPU スケジューリングオプションについては、ACK GPU スケジューリングドキュメントをご参照ください。