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

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

最終更新日:Apr 17, 2025

Container Service for Kubernetes (ACK) では、GPU スケジューリングを使用して GPU リソースをスケジュールおよび管理できます。デフォルトの GPU スケジューリングモードは、オープンソースの Kubernetes で使用されるモードと同じです。このトピックでは、GPU 負荷の高いアプリケーションを迅速にデプロイする方法を説明するために、GPU アクセラレーション TensorFlow タスクを例として使用します。

使用上の注意

ACK によって管理される GPU アクセラレーションノードの GPU リソースは、Kubernetes の拡張リソースと同じ方法でリクエストすることをお勧めします。アプリケーションの GPU リソースをリクエストし、GPU リソースを使用する場合は、以下の項目に注意する必要があります。

  • GPU 負荷の高いアプリケーションをノードで直接実行しないでください。

  • dockerpodmannerdctl などのコマンドラインツールを使用してコンテナーを作成したり、これらのツールを使用してコンテナーの GPU リソースをリクエストしたりしないでください。たとえば、docker run --gpus all コマンドまたは docker run -e NVIDIA_VISIBLE_DEVICES=all コマンドを実行して、GPU 負荷の高いアプリケーションを実行しないでください。

  • Pod YAML ファイルの env セクションに NVIDIA_VISIBLE_DEVICES=all 環境変数または NVIDIA_VISIBLE_DEVICES=<GPU ID> 環境変数を追加しないでください。NVIDIA_VISIBLE_DEVICES 環境変数を使用して Pod の GPU リソースをリクエストし、GPU 負荷の高いアプリケーションを実行しないでください。

  • Pod YAML ファイルで NVIDIA_VISIBLE_DEVICES 環境変数が指定されていない場合、コンテナーイメージをビルドするときに NVIDIA_VISIBLE_DEVICES=all を設定して GPU 負荷の高いアプリケーションを実行しないでください。

  • Pod YAML ファイルの securityContext セクションに privileged: true を追加して、GPU 負荷の高いアプリケーションを実行しないでください。

上記のいずれかの方法を使用して GPU リソースをリクエストすると、以下のセキュリティリスクが存在する可能性があります。

  • 上記のいずれかの方法を使用してノードの GPU リソースをリクエストしたが、スケジューラのデバイスリソース台帳に詳細を指定しなかった場合、実際の GPU リソース割り当て情報がスケジューラのデバイスリソース台帳の情報と異なる場合があります。このシナリオでは、スケジューラは、GPU リソースをリクエストする特定の Pod を引き続きノードにスケジュールできます。その結果、アプリケーションが同じ GPU によって提供されるリソースの競合(同じ GPU からのリソースのリクエストなど)が発生し、GPU リソースが不足しているために一部のアプリケーションが起動に失敗する可能性があります。

  • 上記のいずれかの方法を使用すると、NVIDIA コミュニティによって報告された問題など、その他の予期しない問題が発生する可能性もあります。

手順

  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  # Pod に 1 つの GPU をリクエストします。
        workingDir: /root
      restartPolicy: Always
  4. クラスタ管理ページの左側のナビゲーションウィンドウで、[ワークロード] > [ポッド] を選択し、作成した Pod を見つけて、Pod の名前をクリックして Pod 情報を表示します。

    [ログ] タブをクリックして、TensorFlow タスクのログを表示します。次の出力は、タスクが GPU を使用していることを示しています。

    image.png