このトピックでは、ACK-cGPUコンポーネントをインストールした後、GPU高速化ノードを含むContainer Service for Kubernetes (ack) 専用クラスターでcgpuを使用する方法について説明します。
前提条件
ack-cgpuコンポーネントがクラスターにインストールされています。 詳細については、「ack-cgpuのインストール」をご参照ください。
使用上の注意
Container Service For Kubernetes (ACK) クラスターで管理されているGPUノードの場合、アプリケーション用にGPUリソースをリクエストし、GPUリソースを使用する場合は、次の項目に注意する必要があります。
GPUを多用するアプリケーションをノードで直接実行しないでください。
Docker
、Podman
、nerdctl
などのツールを使用してコンテナーを作成し、コンテナーの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コミュニティから報告された問題など、他の未知の問題も発生する可能性があります。
手順
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
クラスターページで、管理するクラスターの名前をクリックし、 左側のナビゲーションウィンドウに表示されます。
マスターノードにログインし、次のコマンドを実行して、クラスターのGPU共有ステータスを照会します。
説明マスターノードにログインする方法の詳細については、「VNCを使用してインスタンスに接続する」または「パスワードを使用してWindowsインスタンスに接続する」をご参照ください。
オンプレミスマシンからクラスターのGPU共有ステータスを照会する場合は、ack-cgpuとGPUインスペクションツールをインストールする必要があります。 詳細については、「手順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%)
説明GPU共有に関する詳細情報を照会するには、
kubectl inspect cgpu -d
コマンドを実行します。左側のナビゲーションウィンドウで、 を選択します。 [ジョブ] ページの右上隅にある [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
マスターノードで次のコマンドを再度実行して、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メモリ分離が有効になっているかどうかを確認できます。
マスターノードにログインします。
次のコマンドを実行して、デプロイされたアプリケーションのログを印刷し、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がコンテナによって要求されたことを示します。
次のコマンドを実行して、コンテナにログインし、コンテナに割り当てられている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であることを示します。
次のコマンドを実行して、アプリケーションがデプロイされている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ことを示します。