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

Container Service for Kubernetes:ACK Edge クラスターでの GPU 共有スケジューリング機能の使用

最終更新日:Mar 26, 2026

GPU 共有により、複数の Pod が単一の GPU のコンピューティングリソースを共有できるようになり、GPU 使用率の向上とコスト削減が実現します。同じ GPU 上のコンテナは互いに隔離されて実行されるため、あるコンテナが割り当てられたリソースを超えて他のコンテナに影響を与えることはありません。

このトピックでは、ACK Edge クラスターで GPU 共有を有効にする方法について説明します。

ノードタイプ別の機能サポート

クラウドノードとエッジノードプールでは、サポートされる GPU 共有機能が異なります。ご利用のノードタイプと隔離要件に基づいて、設定パスを選択してください。

機能クラウドノードエッジノードプール
GPU 共有サポート済みサポート済み
GPU メモリ隔離サポート済みサポート対象外
コンピューティング能力隔離サポート済みサポート対象外

エッジノードプールは GPU 共有のみをサポートします。メモリとコンピューティング能力の隔離はエッジノードでは利用できません。ワークロードでメモリまたはコンピューティング能力の隔離が必要な場合は、クラウドノードを使用してください。

前提条件

開始する前に、以下が準備できていることを確認してください。

注意事項

ACK クラスターで管理される GPU ノードの場合、GPU リソースをリクエストして使用する際は、以下のルールに従ってください。

以下のいずれかの方法で GPU リソースをリクエストしないでください。

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

  • Docker、Podman、または nerdctl を使用して GPU リクエストを持つコンテナを作成する (例:docker run --gpus all または docker run -e NVIDIA_VISIBLE_DEVICES=all)

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

  • Pod の YAML で NVIDIA_VISIBLE_DEVICES が指定されていない場合に、コンテナイメージのビルド中に NVIDIA_VISIBLE_DEVICES=all を設定する

  • Pod の YAML ファイルの securityContext セクションに privileged: true を追加する

これらの方法は、スケジューラのデバイスリソース台帳をバイパスします。その結果、実際の GPU リソース割り当てがスケジューラが追跡しているものと乖離し、スケジューラが同じノードに追加の Pod をスケジュールする原因となります。これにより、アプリケーションが同じ GPU をめぐって競合し、一部は GPU リソース不足で起動に失敗する可能性があります。これらの方法は、NVIDIA コミュニティによって報告されているような、他の未知の問題を引き起こす可能性もあります。

ステップ 1:GPU 共有コンポーネントのインストール

GPU 共有コンポーネント (ack-ai-installer) は、クラウドネイティブ AI スイートの一部です。現在のデプロイ状況に応じた手順に従ってください。

クラウドネイティブ AI スイートがデプロイされていない場合

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

  2. [クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [クラウドネイティブ AI スイート] を選択します。

  3. [クラウドネイティブ AI スイート] ページで、[デプロイ] をクリックします。

  4. [クラウドネイティブ AI スイートのデプロイ] ページで、[スケジューリングポリシー拡張 (バッチタスクスケジューリング、GPU 共有、トポロジー認識 GPU スケジューリング)] を選択します。

  5. (任意) コンポーネントの横にある [詳細設定] をクリックします。[パラメーター] パネルで、cGPU の policy パラメーターを変更し、[OK] をクリックします。コンピューティング能力の共有に要件がない場合は、デフォルトの policy: 5 を使用します。サポートされているポリシーの詳細については、「Docker コンテナで cGPU をインストールおよび使用する」をご参照ください。2.jpg

  6. ページの下部で、[クラウドネイティブ AI スイートのデプロイ] をクリックします。

デプロイが完了すると、[クラウドネイティブ AI スイート] ページの ack-ai-installer[デプロイ済み] 状態で表示されます。

クラウドネイティブ AI スイートが既にデプロイされている場合

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

  2. [クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[アプリケーション] > [クラウドネイティブ AI スイート] を選択します。

  3. ack-ai-installer を見つけ、[操作] 列の [デプロイ] をクリックします。

  4. (任意) [パラメーター] パネルで、cGPU の policy パラメーターを変更します。コンピューティング能力の共有に関する要件がない場合は、デフォルトの policy: 5 を使用します。サポートされているポリシーの詳細については、「Docker コンテナに cGPU をインストールして使用する」をご参照ください。2.jpg

  5. [OK] をクリックします。

ack-ai-installer がインストールされると、その状態は [デプロイ済み] に変わります。

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

クラウドノードプール

  1. [クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  2. [ノードプール] ページの右上隅にある [ノードプールを作成] をクリックします。

  3. [ノードプールの作成] ダイアログボックスでパラメーターを設定し、[注文の確認] をクリックします。 次の表で、主要なパラメーターについて説明します。 その他のパラメーターについては、「ノードプールの作成と管理」をご参照ください。

    重要

    ノードに GPU 共有ラベルを追加した後、kubectl label nodes または ACK コンソールのラベル管理機能を使用してラベル値を変更しないでください。これにより、スケジューリングの問題が発生する可能性があります。GPU 共有はノードプールレベルで設定してください。詳細については、「ノードプールの GPU スケジューリングポリシーを設定する」および「ラベル値を変更した場合に発生する可能性のある問題」をご参照ください。

    パラメーター説明
    予想されるノード初期ノード数。0 に設定すると、空のノードプールが作成されます。
    ノードラベルNode Label「」アイコンをクリックし、[キー]ack.node.gpu.schedule に設定し、[値]cgpu に設定します。このラベルにより、GPU メモリの隔離とコンピューティング能力の共有を伴う GPU 共有が有効になります。ノード上の Pod は GPU メモリのみを要求し、複数の Pod が同じ GPU を共有できます。詳細については、「GPU スケジューリングポリシーを有効化するためのラベル」をご参照ください。

エッジノードプール

  1. [クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  2. [ノードプール] ページで、[ノードプールを作成] をクリックします。

  3. [ノードプールを作成] ダイアログボックスで、パラメーターを設定し、[注文の確認] をクリックします。[ノードラベル] セクションで、Node Label アイコンをクリックし、[キー]ack.node.gpu.schedule に、[値]share に設定します。このラベルは GPU 共有を有効にします。その他のパラメーターについては、「エッジノードプールの管理」をご参照ください。ノードラベルの詳細については、「GPU スケジューリングポリシーを有効にするためのラベル」をご参照ください。

ステップ 3:GPU 高速化ノードの追加

クラウドノード

ノードプールの作成時に既に GPU 高速化ノードを追加している場合は、このステップをスキップしてください。

GPU アクセラレーション対応アーキテクチャの ECS インスタンスをクラウドノードプールに追加します。詳細については、「既存の ECS インスタンスを追加する」または「ノードプールを作成および管理する」をご参照ください。

エッジノード

詳細については、「GPU 高速化ノードの追加」をご参照ください。

ステップ 4:GPU 検査ツールのインストール (クラウドノードのみ)

kubectl-inspect-cgpu を使用して、クラスター全体の GPU メモリ割り当てを検査します。このステップはクラウドノードにのみ適用されます。

  1. kubectl-inspect-cgpu を PATH 内のディレクトリにダウンロードします。この例では /usr/local/bin/ を使用します。

    • Linux: ``bash wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu ``

    • macOS: ``bash wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu ``

  2. 実行権限を付与します。

    chmod +x /usr/local/bin/kubectl-inspect-cgpu
  3. クラスター全体の GPU 使用量を照会します。

    kubectl inspect cgpu

    想定される出力:

    NAME                       IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.6.104  192.168.6.104  0/15                   0/15
    ----------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/15 (0%)

    Pod ごとの GPU 割り当て詳細を表示するには、kubectl inspect cgpu -d を実行します。

ステップ 5:サンプルワークロードのデプロイ

クラウドノードプール

  1. 現在の GPU メモリ割り当てを確認します。

    kubectl inspect cgpu

    想定される出力:

    NAME                     IPADDRESS    GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU Memory(GiB)
    cn-shanghai.192.168.0.4  192.168.0.4  0/7                    0/7                    0/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/14 (0%)
  2. 3 GiB の GPU メモリをリクエストするサンプルジョブをデプロイします。npxxxxxxxxxxxxxx をご利用のノードプール ID に置き換えてください。

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: gpu-share-sample
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: gpu-share-sample
        spec:
          nodeSelector:
            alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # ご利用のノードプール ID に置き換えます
          containers:
          - name: gpu-share-sample
            image: registry.cn-hangzhou.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: 3 # リクエストする GPU メモリ (GiB)
            workingDir: /root
          restartPolicy: Never

    aliyun.com/gpu-mem フィールドは、GPU メモリの量を GiB 単位で指定します。例えば、3 は共有 GPU から 3 GiB の GPU メモリをリクエストします。

エッジノードプール

4 GiB の GPU メモリをリクエストするサンプルジョブをデプロイします。npxxxxxxxxxxxxxx をご利用のエッジノードプール ID に置き換えてください。

apiVersion: batch/v1
kind: Job
metadata:
  name: tensorflow-mnist-share
spec:
  parallelism: 1
  template:
    metadata:
      labels:
        app: tensorflow-mnist-share
    spec:
      nodeSelector:
        alibabacloud.com/nodepool-id: npxxxxxxxxxxxxxx # ご利用のエッジノードプール ID に置き換えます
      containers:
      - name: tensorflow-mnist-share
        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 # リクエストする GPU メモリ (GiB)
        workingDir: /root
      restartPolicy: Never

ステップ 6:結果の確認

クラウドノードプール

  1. コントロールプレーンにログインします。

  2. Pod の最後のログ行をプリントして、GPU メモリ隔離がアクティブであることを確認します。

    kubectl logs gpu-share-sample --tail=1

    想定される出力:

    2023-08-07 09:08:13.931003: I tensorflow/core/common_runtime/gpu/gpu_device.cc:1326] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 2832 MB memory) -> physical GPU (device: 0, name: Tesla T4, pci bus id: 0000:00:07.0, compute capability: 7.5)

    この出力は、コンテナによって 2,832 MiB の GPU メモリがリクエストされたことを示しています。

  3. コンテナ内で nvidia-smi を実行して、コンテナから見えるメモリを確認します。

    • `3043MiB / 3231MiB` — コンテナは GPU 全体のメモリではなく、3,231 MiB (約 3 GiB) のみを参照できます。これは GPU メモリ隔離が機能していることを確認するものです。

    kubectl exec -it gpu-share-sample nvidia-smi

    想定される出力:

    Mon Aug 7 08:52:18 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   41C    P0    26W /  70W |   3043MiB /  3231MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    主な考慮事項:

  4. ノード上で nvidia-smi を実行して、合計 GPU メモリを確認します。

    • `15079MiB` — ノード上の合計 GPU メモリ (Tesla T4 全体)

    • `3053MiB / 15079MiB` — コンテナは合計 15,079 MiB のうち 3,053 MiB を占有しており、残りのメモリは他の Pod が同じ GPU を共有するために利用可能です。

    nvidia-smi

    想定される出力:

    Mon Aug  7 09:18:26 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 418.87.01    Driver Version: 418.87.01    CUDA Version: 10.1     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |===============================+======================+======================|
    |   0  Tesla T4            On   | 00000000:00:07.0 Off |                    0 |
    | N/A   40C    P0    26W /  70W |   3053MiB / 15079MiB |      0%      Default |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                       GPU Memory |
    |  GPU       PID   Type   Process name                             Usage      |
    |=============================================================================|
    |    0      8796      C   python3                                     3043MiB |
    +-----------------------------------------------------------------------------+

    主な考慮事項:

エッジノードプール

  1. [クラスター] ページで、対象のクラスターを見つけてその名前をクリックします。左側のナビゲーションウィンドウで、[ワークロード] > [Pod] を選択します。

  2. ご利用の Pod (例:`tensorflow-mnist-multigpu-*`) の [操作] 列で、[ターミナル] をクリックして以下を実行します。

    • `16384MiB` — Pod は GPU 全体のメモリ (V100 SXM2, 16 GiB) を参照できます。エッジノードプールは GPU 共有をサポートしますが、GPU メモリ隔離はサポートしないため、Pod のビューはリクエストした 4 GiB に制限されません。

    • Pod の実際の GPU メモリ使用量は、GPU 共有コンポーネントによって自動的に設定される環境変数によって管理されます:`` ALIYUN_COM_GPU_MEM_CONTAINER=4 # Pod に割り当てられた GPU メモリ (GiB) ALIYUN_COM_GPU_MEM_DEV=16 # 物理 GPU の合計メモリ (GiB) ``

    • 割り当てられた GPU メモリと合計 GPU メモリの比率は次のとおりです:4 / 16 = 0.25 (25%)

    nvidia-smi

    想定される出力:

    Wed Jun 14 06:45:56 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 515.105.01   Driver Version: 515.105.01   CUDA Version: 11.7     |
    |-------------------------------+----------------------+----------------------+
    | GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
    | Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
    |                               |                      |               MIG M. |
    |===============================+======================+======================|
    |   0  Tesla V100-SXM2...  On   | 00000000:00:09.0 Off |                    0 |
    | N/A   35C    P0    59W / 300W |    334MiB / 16384MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    主な考慮事項:

次のステップ

参考文献