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

Container Service for Kubernetes:GPU 共有機能が有効になっているノードの GPU 選択ポリシーを構成する

最終更新日:Jul 03, 2025

デフォルトでは、スケジューラは、別の GPU に切り替える前に、ノード上の GPU のすべてのリソースをポッドに割り当てます。これは、GPU フラグメントを防ぐのに役立ちます。状況によっては、GPU に障害が発生した場合にビジネスの中断が発生するのを防ぐために、ポッドをノード上の異なる GPU に分散させることができます。このトピックでは、GPU 共有機能が有効になっているノードの GPU 選択ポリシーを構成する方法について説明します。

前提条件

ポリシーの説明

GPU 共有機能が有効になっているノードに複数の GPU がある場合は、次の GPU 選択ポリシーのいずれかを選択できます。

  • Binpack: デフォルトでは、binpack ポリシーが使用されます。スケジューラは、別の GPU に切り替える前に、GPU のすべてのリソースをポッドに割り当てます。これは、GPU フラグメントを防ぐのに役立ちます。

  • Spread: スケジューラは、GPU に障害が発生した場合にビジネスの中断が発生するのを防ぐために、ポッドをノード上の異なる GPU に分散させようとします。

この例では、ノードに 2 つの GPU があります。各 GPU は 15 GiB のメモリを提供します。Pod1 は 2 GiB のメモリを要求し、Pod2 は 3 GiB のメモリを要求します。

手順

デフォルトでは、binpack ポリシーを使用して GPU が選択されます。GPU 共有で spread ポリシーを有効にするには、次の手順を実行します。

ステップ 1: ノードプールを作成する

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

  2. [クラスタ] ページで、管理するクラスタを見つけ、クラスタの名前をクリックしてクラスタの詳細ページに移動します。左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  1. [ノードプール] ページの右上隅で、[ノードプールの作成] をクリックします。

  2. [ノードプールを作成] ダイアログボックスで、ノードプールのパラメータを構成し、[注文の確認] をクリックします。次の表に、主要なパラメータを示します。その他のパラメータの詳細については、「ノードプールを作成および管理する」をご参照ください。

    パラメータ

    説明

    インスタンスタイプ

    [アーキテクチャ][GPU アクセラレーション] に設定し、複数の GPU アクセラレーションインスタンスタイプを選択します。

    spread ポリシーは、ノードに複数の GPU がある場合にのみ有効になります。したがって、複数の GPU を搭載したインスタンスタイプを選択してください。

    予想ノード数

    ノードプール内のノードの初期数を指定します。ノードプールにノードを作成しない場合は、このパラメータを 0 に設定します。

    ノードラベル

    1.jpg アイコンをクリックして、2 つのエントリを追加します。

    • [キー]ack.node.gpu.schedule で、[値]cgpu のラベルを追加します。このラベルは、GPU 共有機能と GPU メモリ分離機能を有効にします。

    • [キー]ack.node.gpu.placement で、[値]spread のラベルを追加します。このラベルは、spread ポリシーを有効にします。

ステップ 2: ジョブを送信する

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

  2. [クラスタ] ページで、目的のクラスタを見つけて名前をクリックします。左側のウィンドウで、[ワークロード] > [ジョブ] を選択します。

  3. ページの右上にある [YAML から作成] をクリックし、次のコードを [テンプレート] エディターにコピーして、以下のコメントに基づいてパラメータを変更します。構成が完了したら、[作成] をクリックします。

    YAML コンテンツを表示するには、ここをクリックしてください

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist-spread
    spec:
      parallelism: 3
      template:
        metadata:
          labels:
            app: tensorflow-mnist-spread
        spec:
          nodeSelector:
             kubernetes.io/hostname: <NODE_NAME> # <NODE_NAME> を、クラスタ内の GPU アクセラレーションノードの名前に置き換えます(例: cn-shanghai.192.0.2.109)。
          containers:
          - name: tensorflow-mnist-spread
            image: registry.cn-beijing.aliyuncs.com/ai-samples/gpushare-sample:tensorflow-1.5
            command:
            - python
            - tensorflow-sample-code/tfjob/docker/mnist/main.py
            - --max_steps=100000
            - --data_dir=tensorflow-sample-code/data
            resources:
              limits:
                aliyun.com/gpu-mem: 4 # 4 GiB のメモリをリクエストします。
            workingDir: /root
          restartPolicy: Never

    YAML テンプレートの説明:

    • この YAML テンプレートは、TensorFlow MNIST ジョブを定義します。ジョブは 3 つのポッドを作成し、各ポッドは 4 GiB のメモリを要求します。

    • ポッドリソース制限 aliyun.com/gpu-mem: 4 は、ポッドのメモリをリクエストするために使用されます

    • GPU 選択ポリシーをノードで有効にするには、NodeSelector kubernetes.io/hostname: <NODE_NAME> を YAML テンプレートに追加して、ポッドを指定されたノードにスケジュールします。

ステップ 3: spread ポリシーが使用されているかどうかを確認する

GPU 検査ツールを使用して、ノードの GPU 割り当て情報をクエリします。

kubectl inspect cgpu

NAME                   IPADDRESS      GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU2(Allocated/Total)  GPU3(Allocated/Total)  GPU Memory(GiB)
cn-shanghai.192.0.2.109  192.0.2.109  4/15                   4/15                   0/15                   4/15                   12/60
--------------------------------------------------------------------------------------
Allocated/Total GPU Memory In Cluster:
12/60 (20%)

結果は、ポッドが異なる GPU に分散されていることを示しています。spread ポリシーが有効になっています。