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

Container Service for Kubernetes:GPU 共有における GPU 選択ポリシーの設定

最終更新日:Apr 25, 2026

デフォルトでは、スケジューラはノード上の 1 つの GPU を可能な限り埋めてから別の GPU に移行します。このアプローチにより、GPU メモリのフラグメンテーションを防ぐことができます。ただし、特定のシナリオでは、単一の GPU が障害した場合のワークロードへの影響を最小限に抑えるため、複数の GPU に Pod を分散させたい場合があります。本トピックでは、GPU 共有における GPU 選択ポリシーの設定方法について説明します。

前提条件

仕組み

複数の GPU を搭載したノードで GPU 共有を使用する場合、Pod への GPU 割り当てポリシーとして以下の 2 つから選択できます。

  • Binpack:(デフォルト)スケジューラは、ノード上の 1 つの GPU を可能な限り埋めてから、別の GPU のリソースを割り当てます。このアプローチにより、GPU メモリのフラグメンテーションを防止します。

  • Spread:スケジューラは、ノード上の利用可能なすべての GPU に Pod をできるだけ均等に分散させます。このアプローチにより、単一の GPU が障害した場合に影響を受けるワークロードの数を最小限に抑えます。

以下の例では、各 GPU が 15 GiB の GPU メモリを持つ 2 つの GPU を搭載したノードを示しています。Pod1 は 2 GiB、Pod2 は 3 GiB の GPU メモリをリクエストします。

操作手順

ノードの GPU 選択ポリシーはデフォルトで Binpack に設定されています。Spread ポリシーを GPU 共有に使用するには、以下の手順に従ってください。

ステップ 1:ノードプールの作成

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

  2. クラスターリスト ページで、対象のクラスター名をクリックします。左側のナビゲーションウィンドウで、ノード > ノードプール を選択します。

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

  2. ノードプールの作成 ページで、パラメーターを設定し、注文の確認 をクリックします。以下の表に、主なパラメーターを示します。その他のパラメーターについては、「ノードプールの作成と管理」をご参照ください。

    パラメーター

    説明

    インスタンスタイプ

    アーキテクチャ で、GPU インスタンス を選択し、インスタンスタイプを選択します。

    Spread ポリシーは、複数の GPU を搭載したノードでのみ有効です。複数の GPU を搭載したインスタンスタイプを選択してください。

    期待ノード数

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

    ノードラベル

    1.jpg をクリックして、以下の 2 つのラベルを追加します。

    • キーack.node.gpu.schedulecgpu を設定します。これにより、GPU 共有および GPU メモリ隔離が有効になります。

    • キーack.node.gpu.placementspread を設定します。これにより、ノードに対して Spread ポリシーが有効になります。

ステップ 2:ジョブの送信

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

  2. クラスターリスト ページで、ご利用のクラスター名をクリックします。左側のナビゲーションウィンドウで、ワークロード > ジョブ をクリックします。

  3. ページ右上隅で、YAML のリソースの作成 をクリックします。次の 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 の GPU メモリをリクエストします。
            workingDir: /root
          restartPolicy: Never

    YAML ファイルの説明:

    • この YAML ファイルは、TensorFlow MNIST サンプルを使用するジョブを定義します。このジョブは 3 つの Pod を作成し、各 Pod は 4 GiB の GPU メモリをリクエストします。

    • Pod は、Pod 仕様の resources.limits セクションで aliyun.com/gpu-mem: 4 を定義することで、4 GiB の GPU メモリをリクエストします。

    • シングルノード上で効果を観察するために、YAML ファイルには特定のノードに Pod をスケジュールするための nodeSelectorkubernetes.io/hostname: <NODE_NAME> が追加されています。

ステップ 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%)

出力結果から、3 つの Pod がノード上の異なる GPU にスケジュールされていることが確認できます。これにより、Spread ポリシーが有効になっていることが確認されます。