一部のシナリオでは、GPUメモリを分離せずにGPU共有が必要になる場合があります。 たとえば、Javaアプリケーションなどの一部のアプリケーションでは、アプリケーションが使用できるGPUメモリの最大量を指定できます。 このシナリオでは、GPUメモリ分離を使用すると、例外が発生する可能性があります。 この問題に対処するには、GPU共有をサポートするノードのGPUメモリ分離を無効にします。 このトピックでは、GPUメモリを分離せずにGPU共有を設定する方法について説明します。
前提条件
GPU高速化ノードを含むContainer Service for Kubernetes (ACK) 専用クラスターが作成されます。 詳細については、「GPUアクセラレーションノードを使用したACK専用クラスターの作成」をご参照ください。
ack-cgpuコンポーネントがインストールされています。 詳細については、「ack-cgpuコンポーネントのインストール」をご参照ください。
手順1: ノードプールの作成
次の手順を実行して、GPUメモリの分離が無効になっているノードプールを作成します。
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
On theクラスターページで、管理するクラスターの名前をクリックし、左側のナビゲーションウィンドウに表示されます。
[ノードプール] ページで、[ノードプールの作成] をクリックします。 [ノードプールの作成] ダイアログボックスでパラメーターを設定し、[注文の確認] をクリックします。
次の表に、主要なパラメーターを示します。 詳細については、「ノードプールの作成」をご参照ください。
予想されるノード: ノードプール内のノードの初期数を指定します。 ノードプールにノードを追加しない場合は、このパラメーターを0に設定します。
ノードラベル: GPU共有ラベルをノードに追加します。 ラベルの詳細については、「GPUスケジューリングポリシーを有効にするためのラベルとラベル値を変更する方法」をご参照ください。
アイコンをクリックし、Keyをgpushareに設定し、Valueをtrueに設定します。
ステップ2: ジョブを送信
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[ジョブ] ページで、[YAMLから作成] をクリックします。 [作成] ページのコードエディターで、次のコンテンツと [作成] を貼り付けます。
apiVersion: batch/v1 種類: 仕事 メタデータ: 名前: tensorflow-mnist-share spec: parallelism: 1 template: metadata: labels: アプリ: tensorflow-mnist-share 仕様: containers: -name: tensorflow-mnist-share 画像: 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メモリのリクエスト4 GiB。 workingDir: /root restartPolicy: 決してコードの説明:
YAMLコンテンツはTensorFlowジョブを定義します。 ジョブは1つのポッドを作成し、ポッドは4 GiBのGPUメモリを要求します。
aliyun.com/gpu-mem: 4をresources.limits以下に設定して、4 GiBのGPUメモリをリクエストできます。
ステップ3: 設定の確認
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
[ポッド] ページで、手順2で作成したポッドの [操作] 列で を選択してポッドにログインします。
次のコマンドを実行して、GPUメモリ情報を照会します。
nvidia-smi期待される出力:
6月14日水曜日06:45:56 2023 + ----------------------------------------------------------------------------- + | NVIDIA-SMI 515.105.01ドライバのバージョン: 515.105.01 CUDAバージョン: 11.7 | | ------------------------------- + ---------------------- + ---------------------- + | GPU名永続性-M | Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr: 使用量 /キャップ | メモリ使用量 | GPU-Util Compute M. | | | | MIG M. | |=============================== + ====================== + ======================| | 0 Tesla V100-SXM2... オン | 00000000:00:09.0オフ | 0 | | N/A 35C P0 59W / 300W | 334MiB / 16384MiB | 0% のデフォルト | | | | N/A | + ------------------------------- + ---------------------- + ---------------------- + + ----------------------------------------------------------------------------- + | プロセス: | | GPU GI CI PIDタイププロセス名GPUメモリ | | ID IDの使用法 | |=============================================================================| + ----------------------------------------------------------------------------- +出力は、ポッドに割り当てられたGPUがメモリのMiBを提供16,384ことを示します。 この例では、GPUモデルはV100です。 GPUメモリ分離が有効になっている場合、値はポッドによって要求されたメモリの量 (4 GiB) に等しくなります。 これは、構成が有効であることを示す。
アプリケーションは、以下の環境変数からGPUメモリ割り当て情報を読み取る必要があります。
ALIYUN_COM_GPU_MEM_CONTAINER=4# ポッドで使用可能なGPUメモリ。 ALIYUN_COM_GPU_MEM_DEV=16# 各GPUによって提供される合計GPUメモリ。アプリケーションで使用可能なGPUメモリの比率が必要な場合は、次の式を使用して、上記の環境変数に基づいて、アプリケーションが使用するGPUメモリと、GPUが提供するGPUメモリの合計の比率を計算できます。
perceange=ALIYUN_COM_GPU_MEM_CONTAINER / ALIYUN_COM_GPU_MEM_DEV=4/16=0.25
関連ドキュメント
ack-cgpuコンポーネントのインストール