一部のシナリオでは、GPUメモリを分離せずにGPU共有を使用する必要があります。 たとえば、Javaアプリケーションなどの一部のアプリケーションでは、アプリケーションが使用できるGPUメモリの最大量を指定できます。 GPU共有で提供されるGPUメモリ分離モジュールを使用すると、競合が発生します。 この問題を回避するには、GPU共有が構成されているノードにGPUメモリ分離モジュールをインストールしないことを選択できます。 このトピックでは、GPUメモリを分離せずにGPU共有を設定する方法について説明します。
前提条件
手順1: ノードプールの作成
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
On theクラスターページで、管理するクラスターの名前をクリックし、 左側のナビゲーションウィンドウに表示されます。
[ノードプール] ページの右上隅にある [ノードプールの作成] をクリックします。
[ノードプールの作成] ダイアログボックスで、ノードプールを設定し、[注文の確認] をクリックします。 次の表に、主要なパラメーターを示します。 その他のパラメーターの詳細については、「ノードプールの作成」をご参照ください。
パラメーター
説明
インスタンスタイプ
[アーキテクチャ] を [GPUアクセラレーション] に設定し、複数のGPUアクセラレーションインスタンスタイプを選択します。 この例では、V100 GPUを使用するインスタンスタイプが選択されています。
期待されるノード
ノードプール内のノードの初期数を指定します。 ノードプールにノードを作成しない場合は、このパラメーターを0に設定します。
ノードラベル
[キー] を
[ack.node.gpu.schedule]
に設定し、[値] を[共有]
に設定します。 GPU共有とGPUメモリ分離の両方を有効にします。ノードラベルの詳細については、「Labels for enabling GPU scheduling policies」をご参照ください。
ステップ2: ジョブを送信
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
ページの右上にある [YAMLから作成] をクリックし、次のコンテンツを [テンプレート] セクションにコピーしてから、[作成] をクリックします。
YAMLテンプレートの説明:
このYAMLテンプレートは、TensorFlow MNISTジョブを定義します。 ジョブは1つのポッドを作成し、ポッドは4 GiBのメモリを要求します。
aliyun.com/gpu-mem: 4
リソース制限が追加され、4 GiBのメモリが要求されます。
ステップ3: 設定の確認
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
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