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

:ack-cgpuコンポーネントの使用

最終更新日:Nov 14, 2024

このトピックでは、ACK-cGPUコンポーネントをインストールした後、GPU高速化ノードを含むContainer Service for Kubernetes (ack) 専用クラスターでcgpuを使用する方法について説明します。

前提条件

ack-cgpuコンポーネントがクラスターにインストールされています。 詳細については、「ack-cgpuのインストール」をご参照ください。

使用上の注意

Container Service For Kubernetes (ACK) クラスターで管理されているGPUノードの場合、アプリケーション用にGPUリソースをリクエストし、GPUリソースを使用する場合は、次の項目に注意する必要があります。

  • GPUを多用するアプリケーションをノードで直接実行しないでください。

  • DockerPodmannerdctlなどのツールを使用してコンテナーを作成し、コンテナーのGPUリソースを要求しないでください。 たとえば、docker run -- gpus allまたはdocker run -e NVIDIA_VISIBLE_DEVICES=allコマンドを実行せず、GPUが多いアプリケーションを実行します。

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

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

  • ポッドYAMLファイルのsecurityContextセクションにprivileged: trueを追加せず、GPUが多いアプリケーションを実行しないでください。

上記の方法を使用してアプリケーションのGPUリソースを要求すると、次の潜在的なリスクが存在する可能性があります。

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

  • 上記の方法を使用すると、NVIDIAコミュニティから報告された問題など、他の未知の問題も発生する可能性があります。

手順

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

  2. クラスターページで、管理するクラスターの名前をクリックし、ノード > ノードプール左側のナビゲーションウィンドウに表示されます。

  3. マスターノードにログインし、次のコマンドを実行して、クラスターのGPU共有ステータスを照会します。

    説明
    kubectl inspect cgpu

    期待される出力:

    NAME                     IPADDRESS    GPU0(Allocated/Total)  GPU1(Allocated/Total)  GPU Memory(GiB)
    cn-beijing.192.168.XX.XX   192.168.XX.XX  0/7                    0/7                    0/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    0/14 (0%)
    説明

    GPU共有に関する詳細情報を照会するには、kubectl inspect cgpu -dコマンドを実行します。

  4. 左側のナビゲーションウィンドウで、[ワークロード] > [ジョブ] を選択します。 [ジョブ] ページの右上隅にある [YAMLから作成] をクリックします。 [作成] ページで、[名前空間] ドロップダウンリストから名前空間を選択し、[サンプルテンプレート] ドロップダウンリストから既存のテンプレートまたはカスタムテンプレートを選択します。 次の内容をコードエディターに入力し、[作成] をクリックします。

    apiVersion: v1
    kind: Pod
    metadata:
      name: gpu-share-sample
    spec:
      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:
            # The pod requests 3 GiB of GPU memory in total. 
            aliyun.com/gpu-mem: 3 # Specify the requested amount of GPU memory. 
        workingDir: /root                    
  5. マスターノードで次のコマンドを再度実行して、GPUのメモリ使用量を照会します。

    kubectl inspect cgpu

    期待される出力:

    NAME                      IPADDRESS      GPU0(Allocated/Total)  GPU Memory(GiB)
    cn-beijing.192.168.XX.XX  192.168.XX.XX  3/14                   3/14
    ---------------------------------------------------------------------
    Allocated/Total GPU Memory In Cluster:
    3/14 (21%)

    出力は、ノードcn-beijing.192.168.XX.XXのGPUメモリの合計が14 GiBであり、3 GiBのGPUメモリが割り当てられていることを示しています。

結果の検証

次の方法を使用して、ノードのGPUメモリ分離が有効になっているかどうかを確認できます。

  1. マスターノードにログインします。

  2. 次のコマンドを実行して、デプロイされたアプリケーションのログを印刷し、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)

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

  3. 次のコマンドを実行して、コンテナにログインし、コンテナに割り当てられている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      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    出力は、コンテナに割り当てられたGPUメモリの量がMiB 3,231であることを示します。

  4. 次のコマンドを実行して、アプリケーションがデプロイされているGPUアクセラレーションノードの合計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 |
    +-----------------------------------------------------------------------------+
    
                            

    出力は、ノードのGPUメモリの合計がMiBで15,079、GPUメモリのMiBがコンテナに割り当てられてい3,053ことを示します。

関連ドキュメント