Container Service for Kubernetes (ACK) は、単一の GPU を共有するモデル推論シナリオ向けに GPU 共有およびスケジューリング機能を提供します。また、NVIDIA ドライバーのカーネルモジュールを使用して、GPU メモリ分離を実現します。すでにクラスターに共有 GPU スケジューリングコンポーネントをインストール済みで、ノード上の GPU ドライバーまたはオペレーティングシステムが、インストールされている cGPU バージョンと互換性がない場合は、コンポーネントを最新バージョンにアップグレードする必要があります。このトピックでは、GPU ノード上の共有 GPU スケジューリングコンポーネントを管理し、GPU のスケジューリングと分離を有効にする方法について説明します。
前提条件
-
共有 GPU スケジューリングを使用する前に、Cloud-native AI Suite がアクティブ化されている必要があります。課金の詳細については、「Cloud-native AI Suite の課金」をご参照ください。
-
cGPU の使用に関する注意事項については、「cGPU に関する FAQ」をご参照ください。
-
ACK managed cluster が作成され、インスタンスタイプとして GPU クラウドサーバー が選択されていること。
制限事項
-
cGPU のメモリ分離機能は ECS ノードでのみサポートされています。ECS 以外のノードには、
ack.node.gpu.schedule=cgpuまたはack.node.gpu.schedule=core_memラベルを追加しないでください。 -
共有 GPU スケジューリングを使用するノードでは、CPU ポリシーを
staticに設定しないでください。 -
KubeConfig ファイルにカスタムパスを指定する必要がある場合は、
export KUBECONFIG=<kubeconfig>コマンドを実行してください。kubectl inspect cgpuコマンドは--kubeconfigパラメーターをサポートしていません。 -
cGPU の隔離は統合仮想メモリ (UVM) をサポートしていないため、cudaMallocManaged() を呼び出して GPU メモリを割り当てることはできません。代わりに、cudaMalloc() を呼び出してください。詳細については、NVIDIA ドキュメントをご参照ください。
-
共有 GPU の DaemonSet Pod の優先度は最高ではありません。ノードリソースが他の優先度の高い Pod によってプリエンプトされる可能性があり、これによりこれらの DaemonSet Pod が排除されることがあります。これを防ぐには、共有 GPU メモリ用の
gpushare-device-plugin-dsなど、使用している DaemonSet を変更し、priorityClassName: system-node-criticalを追加して高い優先度を確保してください。 -
パフォーマンス上の理由から、cGPU を使用する場合、単一の GPU カード上に最大 20 個の Pod を作成できます。この制限を超えると、そのカードにスケジュールされた後続の Pod は実行に失敗し、エラーメッセージ
Error occurs when creating cGPU instance: unknownが返されます。 -
共有 GPU コンポーネントはどのリージョンにもインストールできます。ただし、GPU メモリ分離機能は以下のリージョンでのみ利用できます。クラスターがこれらのリージョンのいずれかにあることを確認してください。
-
バージョンの互換性。
コンポーネント
サポートされるバージョン
Kubernetes バージョン
-
ack-ai-installer 1.12.0 より前のバージョンは、Kubernetes 1.18.8 以降を実行しているクラスターをサポートします。
-
ack-ai-installer 1.12.0 以降は、Kubernetes 1.20 以降を実行しているクラスターをサポートします。
NVIDIA ドライバーバージョン
418.87.01 以降
コンテナランタイムバージョン
-
Docker: 19.03.5 以降
-
containerd: 1.4.3 以降
オペレーティングシステム
Alibaba Cloud Linux 3.x (コンテナ最適化版には ack-ai-installer v1.12.6 以降が必要)、Alibaba Cloud Linux 2.x、CentOS 7.6、CentOS 7.7、CentOS 7.9、Ubuntu 22.04
サポートされる GPU
P シリーズ、T シリーズ、V シリーズ、A シリーズ、H シリーズ
-
共有 GPU スケジューリングコンポーネントのインストール
ステップ 1:共有 GPU コンポーネントのインストール
AI Suite がデプロイされていない場合
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
クラウドネイティブ AI コンポーネントセット ページで、デプロイ をクリックしてください。
-
クラウドネイティブ AI コンポーネントセット のデプロイページで、[スケジューリングポリシー拡張 (バッチタスクスケジューリング、GPU 共有、トポロジー対応 GPU スケジューリング)] を選択してください。
-
(オプション) cGPU ポリシーをカスタマイズするには、スケジューリングポリシーの拡張 (一括タスクスケジューリング、GPU 共有、GPU トポロジ認識) の右にある 上級 をクリックしてください。パラメーター ダイアログボックスで、cGPU の
policyフィールドを変更し、OK をクリックしてください。cGPU の計算能力共有に特別な要件がない場合は、デフォルトの
policy: 5(ネイティブスケジューリング) を使用することを推奨します。cGPU でサポートされているポリシーの詳細については、「cGPU サービスのインストールと使用」をご参照ください。 -
クラウドネイティブ AI コンポーネントセット ページの下部で、クラウドネイティブ AI コンポーネントセットのデプロイ をクリックしてください。
インストール後、[ack-ai-installer] コンポーネントが クラウドネイティブ AI コンポーネントセット ページのコンポーネントリストに表示されます。
AI Suite がデプロイされている場合
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
[ack-ai-installer] コンポーネントを見つけ、操作 列の デプロイ をクリックしてください。
-
(オプション) 表示される パラメーター ダイアログボックスで、cGPU の
policyフィールドを変更してください。cGPU の計算能力共有に特別な要件がない場合は、デフォルトの
policy: 5(ネイティブスケジューリング) を使用することを推奨します。cGPU でサポートされているポリシーの詳細については、「cGPU サービスのインストールと使用」をご参照ください。 -
パラメーターの変更が完了したら、OK をクリックしてください。
コンポーネントがインストールされると、[ack-ai-installer] の ステータス が デプロイ済み に変わります。
ステップ 2:共有 GPU スケジューリングと分離の有効化
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
ノードプール ページで、ノードプールの作成 をクリックしてください。「ノードプールの作成と管理」の説明に従ってパラメーターを設定してください。
-
ノードプールの作成 ページで、ノードプールのパラメーターを設定し、注文の確認 をクリックしてください。次の表に、主要なパラメーターを示します。
パラメーター
説明
ノードの期待数
ノードプールの初期ノード数を入力してください。初期ノードが不要な場合は 0 を使用してください。
ノードラベル
ビジネス要件に基づいてラベル値を設定してください。ノードラベルの詳細については、「スケジューリングの有効化」をご参照ください。
この例では、ラベル値
cgpuを使用します。この値により、ノードで共有 GPU スケジューリングが有効になり、各 Pod は GPU メモリリソースのみを要求するだけでよくなります。単一の GPU カード上の複数の Pod は、計算能力を共有し、メモリが分離されます。[ノードラベル] の横にある
をクリックしてください。キー を ack.node.gpu.scheduleに、値 をcgpuに設定してください。重要-
cGPU 分離機能の使用に関する注意事項については、「cGPU に関する FAQ」をご参照ください。
-
共有 GPU スケジューリングラベルを追加した後、
kubectl label nodesコマンドや ノード ページのラベル管理機能を使用して GPU スケジューリングラベルを変更しないでください。変更すると、問題が発生する可能性があります。詳細については、「スケジューリングの有効化」をご参照ください。推奨される方法は、「スケジューリングの有効化」に記載されています。
-
ステップ 3:GPU ノードの追加
ノードプールを追加したときにすでに GPU ノードを作成している場合は、この手順をスキップできます。
ノードプールを作成した後、GPU ノードを追加してください。その際、インスタンスタイプとして GPU クラウドサーバー を指定してください。詳細については、「既存ノードのノードプールへの追加」または「ノードプールの作成と管理」をご参照ください。
ステップ 4:GPU クエリツールのインストール
-
kubectl-inspect-cgpu 実行可能ファイルを PATH 内のディレクトリ (例:
/usr/local/bin/) にダウンロードしてください。-
Linux を使用している場合は、次のコマンドを実行して kubectl-inspect-cgpu をダウンロードしてください。
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-linux -O /usr/local/bin/kubectl-inspect-cgpu -
macOS を使用している場合は、次のコマンドを実行して kubectl-inspect-cgpu をダウンロードしてください。
wget http://aliacs-k8s-cn-beijing.oss-cn-beijing.aliyuncs.com/gpushare/kubectl-inspect-cgpu-darwin -O /usr/local/bin/kubectl-inspect-cgpu
-
-
ファイルを実行可能にしてください:
chmod +x /usr/local/bin/kubectl-inspect-cgpu -
クラスター内の GPU 使用状況を確認してください:
kubectl inspect cgpu期待される出力:
NAME IPADDRESS GPU0(Allocated/Total) GPU Memory(GiB) cn-shanghai.192.168.6.104 192.168.6.104 0/15 0/15 ---------------------------------------------------------------------- Allocated/Total GPU Memory In Cluster: 0/15 (0%)
共有 GPU スケジューリングコンポーネントのアップグレード
ステップ 1:アップグレード方法の決定
アップグレード方法は、ack-ai-installer コンポーネントが最初にインストールされた方法によって異なります。2つの方法があります:
-
クラウドネイティブ AI コンポーネントセット ページ経由 (推奨):コンポーネントが クラウドネイティブ AI コンポーネントセット ページからインストールされた場合。
-
Marketplace の アプリカタログ ページからインストール (現在利用不可):ack-ai-installer コンポーネントを アプリカタログ ページからインストールした場合。このインストール方法は現在利用できません。ただし、この方法でインストールされた既存のコンポーネントがある場合は、引き続きこの方法でアップグレードできます。
重要この方法でインストールされたコンポーネントをアンインストールした場合、再インストールするには Cloud-native AI Suite をアクティブ化し、インストールを完了する必要があります。
ステップ 2:コンポーネントのアップグレード
Cloud-native AI Suite
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、 を選択します。
-
コンポーネント セクションで、[ack-ai-installer] コンポーネントを見つけ、アクション 列の アップグレード をクリックしてください。
App Catalog
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
[クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、 を選択します。
-
Helm ページで、ack-ai-installer リリースを見つけ、アクション 列で 更新 をクリックしてください。プロンプトに従って最新の Chart バージョンを選択し、コンポーネントを更新してください。
重要Chart 設定をカスタマイズする必要がある場合は、変更を行った後にコンポーネントの更新を確認してください。
更新後、Helm ページで ack-ai-installer リリースの Chart バージョンが最新バージョンであることを確認してください。
ステップ 3:既存ノードのアップグレード
[ack-ai-installer] コンポーネントをアップグレードしても、既存ノードの cGPU バージョンは自動的にアップグレードされません。次の情報を使用して、ノードで cGPU 分離機能が有効になっているかどうかを判断してください。
-
クラスターに cGPU 分離機能が有効になっている GPU ノードが含まれている場合は、それらのノードの cGPU バージョンもアップグレードする必要があります。詳細については、「ノードの cGPU バージョンのアップグレード」をご参照ください。
-
クラスターに cGPU 分離機能が有効になっているノードがない場合は、この手順をスキップできます。
説明-
ノードに
ack.node.gpu.schedule=cgpuまたはack.node.gpu.schedule=core_memというラベルが付いている場合、cGPU 分離機能は有効になっています。 -
既存ノードの cGPU バージョンをアップグレードするには、それらのノード上のすべてのビジネス Pod を停止する必要があります。ビジネスへの影響を最小限に抑えるため、この操作はオフピーク時に実行してください。
-