このトピックでは、ack-cgpu コンポーネントをインストールした後、専用 GPU クラスターで cGPU 機能を使用する方法について説明します。
前提条件
ack-cgpu コンポーネントがインストールされていることを確認してください。詳細については、「ack-cgpu コンポーネントのインストール」をご参照ください。
注意事項
Container Service for Kubernetes (ACK) クラスターで管理されている GPU ノードの場合、アプリケーションの GPU リソースをリクエストして使用する際には、次の項目に注意する必要があります。
ノード上で直接 GPU を集中的に使用するアプリケーションを実行しないでください。
Docker、Podman、nerdctlなどのツールを使用してコンテナを作成し、そのコンテナに GPU リソースをリクエストしないでください。例えば、docker run --gpus allコマンドやdocker run -e NVIDIA_VISIBLE_DEVICES=allコマンドを実行して、GPU を集中的に使用するアプリケーションを実行しないでください。Pod の YAML ファイルの
envセクションにNVIDIA_VISIBLE_DEVICES=allまたはNVIDIA_VISIBLE_DEVICES=<GPU ID>環境変数を追加しないでください。NVIDIA_VISIBLE_DEVICES環境変数を使用して Pod に GPU リソースをリクエストし、GPU を集中的に使用するアプリケーションを実行しないでください。Pod の YAML ファイルで
NVIDIA_VISIBLE_DEVICES環境変数が指定されていない場合に、コンテナイメージをビルドする際にNVIDIA_VISIBLE_DEVICES=allを設定して GPU を集中的に使用するアプリケーションを実行しないでください。Pod の YAML ファイルの
securityContextセクションにprivileged: trueを追加して、GPU を集中的に使用するアプリケーションを実行しないでください。
上記の方法を使用してアプリケーションの GPU リソースをリクエストすると、次のような潜在的なリスクが存在する可能性があります。
上記の方法のいずれかを使用してノード上の GPU リソースをリクエストし、スケジューラのリソース台帳に詳細を指定しない場合、実際の GPU リソース割り当て情報がスケジューラのリソース台帳の情報と異なる可能性があります。このシナリオでは、スケジューラは依然として GPU リソースをリクエストする特定の Pod をそのノードにスケジュールできます。その結果、ご利用のアプリケーションが同じ GPU によって提供されるリソース (同じ GPU からのリソースリクエストなど) を競合し、一部のアプリケーションは GPU リソースの不足により起動に失敗する可能性があります。
上記の方法を使用すると、NVIDIA コミュニティによって報告された問題など、他の未知の問題が発生する可能性もあります。
操作手順
ACK コンソールにログインします。左側のナビゲーションウィンドウで、クラスターリスト をクリックします。
クラスターリスト ページで、対象のクラスターの名前をクリックします。左側のナビゲーションウィンドウで、 を選択します。
対象のマスターノードにログインし、次のコマンドを実行してクラスターの cGPU 機能のクエリを実行します。
説明マスターノードへのログイン方法の詳細については、「VNC を使用したインスタンスへの接続」をご参照ください。
ローカルクライアントからクラスターの cGPU 機能のクエリを実行するには、ack-cgpu コンポーネントとリソースクエリツールをインストールする必要があります。詳細については、「ステップ 4: 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%)説明cGPU 機能の詳細情報をクエリするには、
kubectl inspect cgpu -dコマンドを実行します。左側のナビゲーションウィンドウで、 を選択します。ジョブ ページで、右上の YAML のリソースの作成 をクリックします。表示されたページで、名前空間を選択し、[サンプルテンプレート] ドロップダウンリストからテンプレートを選択するか、カスタムテンプレートを使用します。次に、次のサンプル 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: # 単位: GiB。Pod は合計 3 GiB の GPU メモリをリクエストします。 aliyun.com/gpu-mem: 3 # GPU メモリの量を指定します。 workingDir: /rootマスターノードで、次のコマンドを再度実行して、クラスター内の 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 メモリ分離が有効になっていることを確認するには、次の手順に従います。
対象のマスターノードにログインします。
次のコマンドを実行してアプリケーションのログを表示し、cGPU メモリ分離が有効になっていることを確認します。
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)出力は、コンテナが 2,832 MB の GPU メモリをリクエストしたことを示しています。
次のコマンドを実行してコンテナにログインし、割り当てられた 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 メモリの合計量が 3,231 MiB であることを示しています。
サンプルアプリケーションを実行している 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 メモリの合計が 15,079 MiB で、そのうち 3,053 MiB がコンテナに割り当てられていることを示しています。