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

Container Service for Kubernetes:複数のGPU共有を操作する

最終更新日:Dec 13, 2024

ACK ProクラスターはGPU共有をサポートしています。 GPU共有を使用して、GPUリソースを共有し、GPUメモリを分離できます。 このトピックでは、複数GPU共有ポリシーを設定する方法について説明します。

前提条件

Introduction to multiple GPU sharing

重要

複数のGPU共有は、コンピューティング能力がコンテナーによって共有され、GPUメモリが分離されているシナリオでのみ使用できます。 コンピューティングパワーが共有されていない場合は、複数のGPU共有を使用できません。

開発者はモデルを開発するときに複数のGPUを使用する必要がありますが、開発プラットフォームはすべてのGPUリソースを使用できません。 すべてのGPUが同じ開発プラットフォームに割り当てられている場合、リソースの浪費が発生する可能性があります。 この問題を回避するには、複数のGPU共有を使用できます。

複数のGPU共有は次のように機能します。アプリケーションは合計でN GiBのGPUメモリを要求し、要求されたメモリ量を割り当てるためにM個のGPUを必要とします。 各GPUによって割り当てられるメモリはN/Mである。N/Mの値は整数で、使用するGPUは同じノードにインストールする必要があります。 例えば、アプリケーションは、8 GiBのメモリを要求し、要求されたメモリを割り当てるために2つのGPUを必要とする。 この場合、ノードは2つのGPUをアプリケーションに割り当てる必要があり、各GPUは4 GiBのメモリを割り当てる必要があります。 単一GPU共有と複数GPU共有の違い:

  • 単一GPU共有: ポッドは、1つのGPUによってのみ割り当てられたGPUリソースを要求できます。

  • 複数のGPU共有: ポッドは、複数のGPUによって均等に割り当てられたGPUリソースを要求できます。

图片1.png

複数のGPU共有ポリシーの設定

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

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

  3. ページの右上にある [YAMLから作成] をクリックします。 次のコンテンツを [テンプレート] セクションにコピーし、[作成] をクリックします。

    クリックしてYAMLコンテンツを表示

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist-multigpu
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: tensorflow-mnist-multigpu
            # Add a pod label and a resource limit to request 8 GiB of memory allocated by 2 GPUs. Each GPU allocates 4 GiB of memory. 
            aliyun.com/gpu-count: "2"
        spec:
          containers:
          - name: tensorflow-mnist-multigpu
            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: 8 # Request 8 GiB of memory. 
            workingDir: /root
          restartPolicy: Never

    YAMLテンプレートの説明:

    • YAMLテンプレートは、TensorFlow MNISTジョブを定義します。 ジョブは、2つのGPUによって割り当てられた8 GiBのメモリを要求します。 各GPUは、4 GiBのメモリを割り当てる。

    • aliyun.com/gpu-count=2ポッドラベルを追加して、2つのGPUを要求します。

    • aliyun.com/gpu-mem: 8リソース制限を追加して、8 GiBのメモリを要求します。

複数のGPU共有ポリシーの確認

  1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[ワークロード] > [ポッド] を選択します。

  2. tensorflow-mnist-multigpu-*** など、作成したポッドの [操作] 列で [ターミナル] をクリックして、ポッドにログインし、次のコマンドを実行します。

    nvidia-smi

    期待される出力:

    Wed Jun 14 03:24:14 2023
    +-----------------------------------------------------------------------------+
    | NVIDIA-SMI 470.161.03   Driver Version: 470.161.03   CUDA Version: 11.4     |
    |-------------------------------+----------------------+----------------------+
    | 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   38C    P0    61W / 300W |    569MiB /  4309MiB |      2%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    |   1  Tesla V100-SXM2...  On   | 00000000:00:0A.0 Off |                    0 |
    | N/A   36C    P0    61W / 300W |    381MiB /  4309MiB |      0%      Default |
    |                               |                      |                  N/A |
    +-------------------------------+----------------------+----------------------+
    
    +-----------------------------------------------------------------------------+
    | Processes:                                                                  |
    |  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
    |        ID   ID                                                   Usage      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    出力は、ポッドが2つのGPUのみを使用できることを示します。 各GPUは、ポッドによって要求されるメモリの4,309のMiBを提供することができる。 各GPUの実際のメモリサイズは16,160 MiBです。

  3. ポッドの [操作] 列で [ログ] をクリックして、ポッドのログを表示します。 次の情報が表示されます。

    totalMemory: 4.21GiB freeMemory: 3.91GiB
    totalMemory: 4.21GiB freeMemory: 3.91GiB

    デバイス情報は、各GPUが4 GiBのメモリを割り当てることを示す。 各GPUの実際のメモリサイズは16,160 MiBです。 これは、メモリ分離が実装されることを意味する。