Container Service for Kubernetes (ACK) では、GPU スケジューリングを使用して GPU リソースをスケジュールおよび管理できます。デフォルトの GPU スケジューリングモードは、オープンソースの Kubernetes で使用されるモードと同じです。このトピックでは、GPU 負荷の高いアプリケーションを迅速にデプロイする方法を説明するために、GPU アクセラレーション TensorFlow タスクを例として使用します。
使用上の注意
ACK によって管理される GPU アクセラレーションノードの GPU リソースは、Kubernetes の拡張リソースと同じ方法でリクエストすることをお勧めします。アプリケーションの 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 コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。
[クラスタ] ページで、管理するクラスタを見つけ、その名前をクリックします。左側のウィンドウで、 を選択します。
[デプロイメント] ページで、[YAML から作成] をクリックします。次のコードブロックを [テンプレート] エディターに貼り付けて、[作成] をクリックします。
apiVersion: v1 kind: Pod metadata: name: tensorflow-mnist namespace: default spec: containers: - image: registry.cn-beijing.aliyuncs.com/acs/tensorflow-mnist-sample:v1.5 name: tensorflow-mnist command: - python - tensorflow-sample-code/tfjob/docker/mnist/main.py - --max_steps=100000 - --data_dir=tensorflow-sample-code/data resources: limits: nvidia.com/gpu: 1 # Pod に 1 つの GPU をリクエストします。 workingDir: /root restartPolicy: Alwaysクラスタ管理ページの左側のナビゲーションウィンドウで、 を選択し、作成した Pod を見つけて、Pod の名前をクリックして Pod 情報を表示します。
[ログ] タブをクリックして、TensorFlow タスクのログを表示します。次の出力は、タスクが GPU を使用していることを示しています。
