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

Container Service for Kubernetes:GPUメモリ分離なしでGPU共有を設定する

最終更新日:Nov 12, 2024

一部のシナリオでは、GPUメモリを分離せずにGPU共有を使用する必要があります。 たとえば、Javaアプリケーションなどの一部のアプリケーションでは、アプリケーションが使用できるGPUメモリの最大量を指定できます。 GPU共有で提供されるGPUメモリ分離モジュールを使用すると、競合が発生します。 この問題を回避するには、GPU共有が構成されているノードにGPUメモリ分離モジュールをインストールしないことを選択できます。 このトピックでは、GPUメモリを分離せずにGPU共有を設定する方法について説明します。

前提条件

手順1: ノードプールの作成

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

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

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

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

    パラメーター

    説明

    インスタンスタイプ

    [アーキテクチャ][GPUアクセラレーション] に設定し、複数のGPUアクセラレーションインスタンスタイプを選択します。 この例では、V100 GPUを使用するインスタンスタイプが選択されています。

    期待されるノード

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

    ノードラベル

    [1.jpgキー] を [ack.node.gpu.schedule] に設定し、[値][共有] に設定します。 GPUの共有とスケジューリングを有効にします。

    ノードラベルの詳細については、「GPUスケジューリングポリシーを有効にするためのラベル」をご参照ください。

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

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

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

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

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

    apiVersion: batch/v1
    kind: Job
    metadata:
      name: tensorflow-mnist-share
    spec:
      parallelism: 1
      template:
        metadata:
          labels:
            app: tensorflow-mnist-share
        spec:
          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 # Request 4 GiB of memory. 
            workingDir: /root
          restartPolicy: Never

    YAMLテンプレートの説明:

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

    • aliyun.com/gpu-mem: 4リソース制限が追加され、4 GiBのメモリが要求されます。

ステップ3: 設定の確認

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

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

    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      |
    |=============================================================================|
    +-----------------------------------------------------------------------------+

    この例では、V100 GPUが使用される。 出力は、ポッドがGPUによって提供されるすべてのメモリ (サイズは16,384 MiB) を使用できることを示します。 つまり、GPU共有はGPUメモリ分離なしで実装されます。 GPUメモリの分離が有効になっている場合、出力に表示されるメモリサイズは、ポッドが要求するメモリの量 (この例では4 GiB) に等しくなります。

    ポッドは、次の環境変数に基づいて、使用できるGPUメモリの量を決定します。

    ALIYUN_COM_GPU_MEM_CONTAINER=4 # The amount of GPU memory that the pod can use. 
    ALIYUN_COM_GPU_MEM_DEV=16 # The memory size of each GPU.

    ポッドが使用できるGPUメモリとGPUメモリの合計の比率を計算するには、次の式を使用します。

    percetange = ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV = 4 / 16 = 0.25