XPK を使用して GKE に Managed Lustre をプロビジョニングする

このドキュメントでは、Managed Lustre を GKE と統合して、人工知能(AI)、機械学習(ML)、ハイ パフォーマンス コンピューティング(HPC)などの要求の厳しいデータ集約型ワークロードに最適な環境を作成する方法について説明します。

このドキュメントでは、XPK を使用して GKE クラスタをプロビジョニングし、Managed Lustre インスタンスを作成してクラスタに接続します。この構成をテストするには、Flex Start でプロビジョニングされたノードでワークロードを実行します。

このドキュメントは、Managed Lustre インスタンスを基盤とする Kubernetes コンテナ オーケストレーション機能の使用に関心のある ML エンジニアやデータと AI のスペシャリストを対象としています。のコンテンツで使用されている 一般的なロールとタスクの例の詳細については、 一般的な GKE ユーザーのロールとタスクをご覧ください。 Google Cloud

背景

このセクションでは、このドキュメントで使用されている重要なテクノロジーについて説明します。

XPK

XPK は、GKE クラスタとワークロードのプロビジョニングと管理を簡素化するツールです。特に AI/ML タスクに適しています。XPK は、事前構成されたトレーニングに最適化されたインフラストラクチャの生成に役立ちます。そのため、概念実証とテスト環境に適しています。

TPU を使用するクラスタは、Google Cloud CLI または Accelerated Processing Kit(XPK)を使用して作成できます。

  • gcloud CLI を使用して、GKE クラスタ インスタンスを手動で作成し、既存の GKE 本番環境を正確にカスタマイズまたは拡張します。
  • XPK を使用すると、GKE クラスタをすばやく作成し、概念実証とテスト用のワークロードを実行できます。 詳細については、 XPK README をご覧ください。

このドキュメントでは、リソースのプロビジョニングと管理に XPK のみを使用します。

詳細については、 Accelerated Processing Kit(XPK)のドキュメントをご覧ください。

Flex Start

Flex Start を使用すると、必要なリソースに対してのみ料金を支払うことで、TPU のプロビジョニングを最適化できます。Flex Start は、リソースを必要に応じて動的にプロビジョニングする必要があり、最長 7 日間での利用が想定され、コスト効率よく使いたいワークロードにおすすめです。

このドキュメントでは、使用オプションの例として Flex Start を使用しますが、予約や Spot などの他のオプションも使用できます。詳細については、 GKE での AI/ML ワークロードのアクセラレータ使用オプションについてをご覧ください。

Managed Lustre

Managed Lustre は、要求の厳しいワークロード向けに設計された高パフォーマンスの並列ファイル システム サービスです。Managed Lustre CSI ドライバを使用すると、標準の Kubernetes 永続ボリュームの要求(PVC)と永続ボリューム(PV)を使用して、Managed Lustre インスタンスを GKE と統合できます。このドライバは、永続的でスケーラブルな高スループット ストレージを必要とする AI、ML、HPC ワークロードに特に役立ちます。

詳細については、Managed Lustre CSI ドライバについてをご覧ください。

始める前に

作業を始める前に、次のタスクが完了していることを確認してください。

  • Google Cloud Managed Lustre API と Google Kubernetes Engine API を有効にします。
  • API を有効にする
  • このタスクに Google Cloud CLI を使用する場合は、 インストールして 初期化する gcloud CLI。gcloud CLI をインストール済みの場合は、最新の バージョンをgcloud components updateコマンドを実行して取得します。以前のバージョンの gcloud CLI では、このドキュメントのコマンドを実行できない場合があります。

環境を準備する

このセクションでは、クラスタ環境を準備する方法について説明します。

  1. 新しいターミナル ウィンドウで、仮想環境を作成します。

    VENV_DIR=~/venvp4;python3 -m venv $VENV_DIR;source $VENV_DIR/bin/activate
    
  2. XPK インストール ファイルの手順に沿って XPK をインストールします。ソースからクローンするのではなく、pip install を使用します。

  3. デフォルトの環境変数を設定します。

    gcloud config set project PROJECT_ID
    gcloud config set billing/quota_project PROJECT_ID
    export PROJECT_ID=$(gcloud config get project)
    export LOCATION=LOCATION
    export CLUSTER_NAME=CLUSTER_NAME
    export GKE_VERSION=VERSION
    export NETWORK_NAME=NETWORK_NAME
    export IP_RANGE_NAME=IP_RANGE_NAME
    export FIREWALL_RULE_NAME=FIREWALL_RULE_NAME
    export ACCELERATOR_TYPE=v6e-16
    export NUM_SLICES=1
    

    次の値を置き換えます。

    上記のコマンドは、v6e-16 アクセラレータ タイプを構成します。この構成には、次の変数が含まれます。

    • ACCELERATOR_TYPE=v6e-16: 4x4 トポロジの TPU Trillium に対応します。 この TPU バージョンは、マルチホスト スライス ノードプールをプロビジョニングするように GKE に指示します。v6e-16 は、GKE の ct6e-standard-4t マシンタイプにマッピングされます。
    • NUM_SLICES=1: 選択した ACCELERATOR_TYPE に対して XPK が作成する TPU スライス ノードプールの数。

    ACCELERATOR_TYPE 変数と NUM_SLICES 変数をカスタマイズする場合は、次のドキュメントを参照して、使用可能な組み合わせを確認してください。

VPC ネットワークを準備する

Managed Lustre インスタンスと GKE クラスタ用に Virtual Private Cloud ネットワークを準備します。

  1. Service Networking API を有効にします。

    gcloud services enable servicenetworking.googleapis.com \
            --project=${PROJECT_ID}
    
  2. VPC ネットワークを作成します。

    gcloud compute networks create ${NETWORK_NAME} \
            --subnet-mode=auto --project=${PROJECT_ID} \
            --mtu=8896
    
  3. VPC ピアリングの IP アドレス範囲を作成します。

    gcloud compute addresses create ${IP_RANGE_NAME} \
            --global \
            --purpose=VPC_PEERING \
            --prefix-length=20 \
            --description="Managed Lustre VPC Peering" \
            --network=${NETWORK_NAME} \
            --project=${PROJECT_ID}
    
  4. IP アドレス範囲の CIDR 範囲を取得します。

    CIDR_RANGE=$(
        gcloud compute addresses describe ${IP_RANGE_NAME} \
                --global  \
                --format="value[separator=/](address, prefixLength)" \
                --project=${PROJECT_ID}
    )
    
  5. IP アドレス範囲からの TCP トラフィックを許可するファイアウォール ルールを作成します。

    gcloud compute firewall-rules create ${FIREWALL_RULE_NAME} \
            --allow=tcp:988,tcp:6988 \
            --network=${NETWORK_NAME} \
            --source-ranges=${CIDR_RANGE} \
            --project=${PROJECT_ID}
    
  6. VPC ピアリングを接続します。

    gcloud services vpc-peerings connect \
            --network=${NETWORK_NAME} \
            --project=${PROJECT_ID} \
            --ranges=${IP_RANGE_NAME} \
            --service=servicenetworking.googleapis.com
    

Managed Lustre ストレージ インスタンスを作成する

Managed Lustre ストレージ インスタンスを作成します。

  1. ストレージ インスタンス変数を設定します。

    export STORAGE_NAME=STORAGE_NAME
    export STORAGE_THROUGHPUT=STORAGE_THROUGHPUT
    export STORAGE_CAPACITY=STORAGE_CAPACITY_GIB
    export STORAGE_FS=lfs
    

    次の値を置き換えます。

  2. Managed Lustre インスタンスを作成します。

    gcloud lustre instances create ${STORAGE_NAME} \
            --per-unit-storage-throughput=${STORAGE_THROUGHPUT} \
            --capacity-gib=${STORAGE_CAPACITY} \
            --filesystem=${STORAGE_FS} \
            --location=${LOCATION} \
            --network=projects/${PROJECT_ID}/global/networks/${NETWORK_NAME} \
            --project=${PROJECT_ID} \
            --async # Creates the instance asynchronously
    

    --async フラグは、インスタンスを非同期で作成し、ステータスを追跡するためのオペレーション ID を提供します。

  3. オペレーションのステータスを確認します。

    gcloud lustre operations describe OPERATION_ID  \
            --location=${LOCATION} \
            --project=${PROJECT_ID}
    

    OPERATION_ID は、前の非同期コマンドの出力の ID に置き換えます。ID がない場合は、すべてのオペレーションを一覧表示できます。

    gcloud lustre operations list \
            --location=${LOCATION} \
            --project=${PROJECT_ID}
    

    コマンド出力に done: true と表示されたら、インスタンスの準備は完了です。

XPK を使用して GKE クラスタを作成する

XPK を使用して、ノードプールを含む GKE クラスタを作成します。

GKE クラスタを作成します。

xpk cluster create --cluster ${CLUSTER_NAME} \
        --num-slices=${NUM_SLICES} \
        --tpu-type=${ACCELERATOR_TYPE} \
        --zone=${LOCATION} \
        --project=${PROJECT_ID} \
        --gke-version=${GKE_VERSION} \
        --custom-cluster-arguments="--network=${NETWORK_NAME}" \
        --enable-lustre-csi-driver \
        --flex

このコマンドは、XPK を使用して GKE クラスタを作成します。このクラスタは、ノード プロビジョニングに Flex Start を使用するように構成され、Managed Lustre CSI ドライバが有効になっています。

ストレージ インスタンスをクラスタに接続する

PersistentVolume(PV)と PersistentVolumeClaim(PVC)を構成するため、このセクションでは、マニフェスト ファイルで XPK ストレージ接続コマンド(xpk storage attach)を使用します。 このセクションでは、サンプル マニフェスト を XPK ソースコードから使用します。

次の手順で、Managed Lustre ストレージ インスタンスを GKE クラスタに接続します。

  1. サンプル マニフェスト ファイル を現在の作業ディレクトリにダウンロードし、lustre-manifest-attach.yaml として保存します。

  2. Managed Lustre インスタンスの情報でマニフェスト ファイルを更新します。

    1. PersistentVolume セクションで、次の値を置き換えます。

      • STORAGE_SIZE:Managed Lustre インスタンスのサイズ(GiB)。
      • PROJECT_ID/ZONE/INSTANCE_NAME: Managed Lustre インスタンスのリソースの完全パス。
      • IP_ADDRESS: Managed Lustre インスタンスの IP アドレス。
      • FILE_SYSTEM:ファイル システムのタイプ。lfs です。
    2. PersistentVolumeClaim セクションで、次の値を置き換えます。

      • STORAGE_SIZE: PersistentVolumeClaim のサイズ(GiB)。
  3. ストレージ インスタンスをクラスタに接続します。

    xpk storage attach ${STORAGE_NAME} \
            --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \
            --type=lustre \
            --mount-point='/lustre-data' \
            --readonly=false \
            --auto-mount=true \
            --manifest='./lustre-manifest-attach.yaml'
    
  4. クラスタのストレージを接続したことを確認します。

    xpk storage list \
            --cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION}
    

ワークロードを実行する

接続された Managed Lustre インスタンスでワークロードを実行します。次のコマンド例では、使用可能なディスクを一覧表示し、Managed Lustre インスタンスのディレクトリに「hello」ファイルを作成します。

ワークロードを作成して実行します。

xpk workload create --workload test-lustre \
--cluster=${CLUSTER_NAME} --project=${PROJECT_ID} --zone=${LOCATION} \
--command="df -h && echo 'hello' > /lustre-data/hello.txt && cat /lustre-data/hello.txt" \
--tpu-type=${ACCELERATOR_TYPE} \
--num-slices=1 \
--flex

クリーンアップ

このドキュメントの手順を完了したら、アカウントで不要な請求が発生しないように、クラスタを削除します。

  xpk cluster delete --cluster ${CLUSTER_NAME} \
        --zone ${LOCATION} \
        --project ${PROJECT_ID}

次のステップ