すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:GPU共有コンポーネントのインストール

最終更新日:Dec 13, 2024

Container Service for Kubernetes (ACK) は、複数のモデルが1つのGPUを共有できるようにするGPU共有機能を提供し、NVIDIAカーネルモードドライバーに基づくGPUメモリの分離をサポートします。 このトピックでは、GPU共有コンポーネントとGPU検査ツールをGPU高速化ノードにインストールして、GPU共有とGPUメモリの分離をサポートする方法について説明します。

前提条件

制限事項

  • GPU共有が有効になっているノードでは、CPUポリシーを静的に設定しないでください。

  • cGPUはCUDA API cudaMallocManaged() をサポートしていません。 これは、cGPUでは、Unified Virtual memory (UVM) メソッドを使用してGPUメモリを要求できないことを示しています。 GPUメモリを要求するには、cudaMalloc() などの別のメソッドを使用する必要があります。 詳細については、NVIDIA公式Webサイトをご覧ください。

  • 共有GPUのDaemonSetによって管理されるポッドは、最高の優先順位を享受しません。 したがって、リソースは、より高い優先度を有するポッドにスケジュールされ得、ノードは、DaemonSetによって管理されるポッドを追い出し得る。 この問題を防ぐには、共有GPUの実際のDaemonSetを変更します。 たとえば、GPUメモリの共有に使用するgpushare-device-plugin-ds DaemonSetを変更し、priorityClassName: system-node-criticalを指定して、DaemonSetによって管理されるポッドの優先度を確保できます。

  • リージョン制限なしでGPU共有コンポーネントをインストールできます。 ただし、GPUメモリ分離は、次の表に示すリージョンでのみサポートされます。 ACKクラスターがいずれかのリージョンにデプロイされていることを確認します。

    リージョン

    リージョン

    リージョン ID

    中国 (北京)

    cn-beijing

    中国 (上海)

    cn-shanghai

    中国 (杭州)

    cn-hangzhou

    中国 (張家口)

    cn-zhangjiakou

    中国 (ウランチャブ)

    cn-wulanchabu

    中国 (深セン)

    cn-shenzhen

    中国 (成都)

    cn-chengdu

    中国 (河源)

    cn-heyuan

    中国 (香港)

    cn-hongkong

    日本 (東京)

    ap-northeast-1

    インドネシア (ジャカルタ)

    ap-southeast-5

    シンガポール

    ap-southeast-1

    米国 (バージニア)

    us-east-1

    米国 (シリコンバレー)

    us-west-1

    ドイツ (フランクフルト)

    eu-central-1

  • バージョン要件

    項目

    バージョン要件

    Kubernetes バージョン

    1.18.8以降

    NVIDIAドライバーのバージョン

    418.87.01以降

    Container runtimeバージョン

    • Docker: 19.03.5以降

    • containerd: 1.4.3またはそれ以降

    オペレーティングシステム

    Alibaba Cloud Linux 3.x、Alibaba Cloud Linux 2.x、CentOS 7.6、CentOS 7.7、およびCentOS 7.9

    GPUモデル

    NVIDIA P、NVIDIA T、NVIDIA V、NVIDIA A、およびNVIDIA Hシリーズ

ステップ1: GPU共有コンポーネントのインストール

クラウドネイティブAIスイートがデプロイされていません

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[アプリケーション] > [クラウドネイティブAIスイート] を選択します。

  3. [クラウドネイティブAI Suite] ページで、[デプロイ] をクリックします。

  4. クラウドネイティブAI Suiteページで、[スケジューリングコンポーネント (バッチタスクスケジューリング、GPU共有、トポロジ対応GPUスケジューリング、およびNPUスケジューリング) を選択します。1

  5. 必要に応じて、 [スケジューリングコンポーネント (バッチタスクスケジューリング、GPU共有、トポロジ対応GPUスケジューリング、およびNPUスケジューリング) の右側にある [詳細設定] をクリックします。 [パラメーター] パネルで、cGPUのpolicyパラメーターを変更します。 [OK] をクリックします。

    cGPUが提供するコンピューティング能力共有機能に関する要件がない場合は、デフォルトの設定policy: 5を使用することを推奨します。 cGPUでサポートされているポリシーの詳細については、「DockerコンテナーへのcGPUのインストールと使用」をご参照ください。2.jpg

  6. [クラウドネイティブAIスイート] ページの下部で、[クラウドネイティブAIスイートのデプロイ] をクリックします。

    クラウドネイティブAIスイートがインストールされた後、[クラウドネイティブaiスイート] ページでack-AI-installerが [デプロイ済み] 状態になっていることがわかります。

クラウドネイティブAIスイートがデプロイされました

  1. ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。

  2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のウィンドウで、[アプリケーション] > [クラウドネイティブAIスイート] を選択します。

  3. ack-ai-installerを見つけ、[操作] 列の [デプロイ] をクリックします。

  4. 必要に応じて、 [パラメーター] パネルで、cGPUのpolicyパラメーターを変更します。

    cGPUが提供するコンピューティング能力共有機能に関する要件がない場合は、デフォルトの設定policy: 5を使用することを推奨します。 cGPUでサポートされているポリシーの詳細については、「DockerコンテナーへのcGPUのインストールと使用」をご参照ください。2.jpg

  5. 構成を完了すると、OK をクリックします。

    ack-ai-installerをインストールすると、コンポーネントの状態がデプロイ済みに変わります。

ステップ2: GPU共有とGPUメモリの分離を有効にする

  1. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[ノード] > [ノードプール] を選択します。

  2. の右上隅にノードプールページをクリックします。ノードプールの作成.

  3. [ノードプールの作成] ダイアログボックスで、ノードプールを作成するパラメーターを設定し、[注文の確認] をクリックします。

    次の表に、主要なパラメーターを示します。 その他のパラメーターの詳細については、「ノードプールの作成」をご参照ください。

    パラメーター

    説明

    期待されるノード

    ノードプール内の初期ノード数。 ノードプールにノードを作成しない場合は、このパラメーターを0に設定します。

    ノードラベル

    ビジネス要件に基づいてノードプールに追加するラベル。 ノードラベルの詳細については、「GPUスケジューリングポリシーを有効にするためのラベルとラベル値の変更方法」をご参照ください。

    この例では、ラベルの値はcgpuに設定されています。これは、ノードに対してGPU共有が有効になっていることを示します。 ノード上のポッドはGPUメモリのみを要求する必要があります。 複数のポッドが同じGPUを共有して、GPUのメモリ分離とコンピューティング能力の共有を実装できます。

    [Node Label] パラメーターの横にある节点标签アイコンをクリックし、[Key] フィールドをack.node.gpu.scheduleに設定し、[Value] フィールドをcgpuに設定します。

    cGPUが提供するメモリ分離機能を使用する際の一般的な問題の詳細については、「cGPUのメモリ分離機能に関する使用方法の注意事項」をご参照ください。

    重要

    GPU共有を有効にするためのラベルをノードに追加した後、kubectl label nodesコマンドを実行してラベル値を変更したり、ラベル管理機能を使用してACKコンソールの [ノード] ページでノードラベルを変更したりしないでください。 これは潜在的な問題を防ぎます。 これらの潜在的な問題の詳細については、「kubectl label nodesコマンドを使用するか、またはACKコンソールでラベル管理機能を使用してラベル値を変更する場合に発生する可能性のある問題」をご参照ください。 ノードプールに基づいてGPU共有を設定することを推奨します。 詳細については、「ノードプールのGPUスケジューリングポリシーの設定」をご参照ください。

ステップ3: GPU高速化ノードの追加

説明

ノードプールの作成時に、GPUアクセラレーションノードをノードプールに既に追加している場合は、この手順をスキップしてください。

ノードプールが作成されたら、GPUアクセラレーションノードをノードプールに追加できます。 GPU高速化ノードを追加するには、GPU高速化アーキテクチャを使用するECSインスタンスを選択する必要があります。 詳細については、「既存のECSインスタンスをACKクラスターに追加する」または「ノードプールの作成」をご参照ください。

ステップ4: GPUインスペクションツールをインストールして使用する

  1. kubectl-inspect-cgpuのダウンロード.

    • 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
  2. 次のコマンドを実行して、kubectl-inspect-cgpuに実行権限を付与します。

    chmod +x /usr/local/bin/kubectl-inspect-cgpu
  3. 次のコマンドを実行して、クラスターの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%)