このページでは、プラットフォーム管理者と ML エンジニア向けに、Slurm でオーケストレートされた Cluster Director クラスタを作成し、Pathways ワークロード用に構成する方法について説明します。これらの手順を完了すると、TPU v6e スライス、CPU コントローラ ノード、共有 Google Cloud Managed Lustre ファイル システム、/home/pathways ランタイム環境を含むクラスタがプロビジョニングされます。Pathways は Cluster Director クラスタにプリインストールされていません。クラスタを作成した後、Pathways スクリプトをログインノードにダウンロードし、設定スクリプトを 1 回実行します。
始める前に
-
このページのサンプルをどのように使うかに応じて、タブを選択してください。
gcloud
Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。ログイン後、次のコマンドを実行して Google Cloud CLI を初期化します。
gcloud initREST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Google Cloud CLI をインストールし、 フェデレーション ID を使用して gcloud CLI にログインします。
詳細については、 Google Cloud 認証ドキュメントの REST を使用して認証するをご覧ください。
始める前に
始める前に、次の前提条件を満たす必要があります。
- Google Cloud CLI をインストールします。
- Hypercompute Cluster API を有効にします。
- ユーザー アカウントと Compute Engine のデフォルトのサービス アカウントに、Cluster Director クラスタの作成と接続に必要な Identity and Access Management(IAM)ロールがあることを確認します。ロールのリストについては、Cluster Director のクイックスタートの始める前にをご覧ください。
- クラスタを作成するゾーンに TPU v6e 予約を作成します(たとえば、2 つの
2x4スライスに少なくとも 4 つのct6e-standard-4tVM)。 - スライスの自動復元のために、クラスタノードでパスワードなしの
sudoを構成します。プロジェクトに対する Compute OS 管理者ログイン(roles/compute.osAdminLogin)ロールを付与するよう管理者に依頼してください。 - Pathways のスクラッチ データとワークロード出力用の Cloud Storage バケットを作成し、プロジェクトの Storage オブジェクト ユーザー(
roles/storage.objectUser)ロールをユーザー アカウントと Compute Engine のデフォルト サービス アカウントに付与します。
ローカル環境を設定する
Google Cloud の認証情報でログインします。
gcloud auth login
ワークロードに適した値を使用して、次の環境変数を定義します。
export PROJECT=PROJECT_ID export REGION=REGION export ZONE=ZONE export CLUSTER_ID=CLUSTER_ID export RESERVATION_NAME=RESERVATION_NAME
次のように置き換えます。
PROJECT_ID: 実際のGoogle Cloud プロジェクト ID。REGION: リソースを作成するリージョン。ZONE: リソースを作成するゾーン。CLUSTER_ID: クラスタ名。名前は最大 10 文字で、数字と英小文字のみを使用できます。RESERVATION_NAME:ZONEの TPU v6e 予約の名前。
Cluster Director クラスタを作成する
次の例では、予約から 2 つの TPU v6e 2x4 スライス(4 つの ct6e-standard-4t VM)と、Pathways コントローラ用の 1 つの CPU ノードを持つクラスタを作成します。すべてのノードが、共有 Managed Lustre ファイル システムを /home にマウントします。クラスタ定義のフィールドの詳細については、カスタム クラスタを作成するをご覧ください。
REST API を使用してクラスタを作成します。
リクエストの本文を作成します。
cat <<EOF > "${CLUSTER_ID}_create.json" { "networkResources": { "net": { "config": { "newNetwork": { "network": "projects/${PROJECT}/global/networks/${CLUSTER_ID}-net" } } } }, "storageResources": { "home": { "config": { "newLustre": { "lustre": "projects/${PROJECT}/locations/${ZONE}/instances/${CLUSTER_ID}-lustre", "filesystem": "lustre", "capacityGb": "18000", "perUnitStorageThroughput": "500" } } } }, "computeResources": { "crtpu": { "config": { "newReservedInstances": { "reservation": "projects/${PROJECT}/zones/${ZONE}/reservations/${RESERVATION_NAME}" } } }, "crcpu": { "config": { "newOnDemandInstances": { "zone": "${ZONE}", "machineType": "n2-highmem-32" } } } }, "orchestrator": { "slurm": { "loginNodes": { "count": "1", "zone": "${ZONE}", "machineType": "n2-standard-16", "enableOsLogin": true, "enablePublicIps": true, "bootDisk": { "type": "pd-balanced", "sizeGb": "100" }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] }, "nodeSets": [ { "id": "nstpu", "computeId": "crtpu", "staticNodeCount": "4", "maxDynamicNodeCount": "0", "enablePublicIps": true, "resourcePolicyConfig": { "acceleratorTopology": "2x4" }, "computeInstance": { "bootDisk": { "type": "hyperdisk-balanced", "sizeGb": "100" } }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] }, { "id": "nscpu", "computeId": "crcpu", "staticNodeCount": "1", "maxDynamicNodeCount": "0", "enablePublicIps": true, "computeInstance": { "bootDisk": { "type": "pd-balanced", "sizeGb": "100", "image": "projects/clusterdirector-public-images/global/images/family/tpu-v6e-v5p-ubuntu2204-slurm2605-v20260902" } }, "storageConfigs": [ { "id": "home", "localMount": "/home" } ] } ], "partitions": [ { "id": "tpu", "nodeSetIds": ["nstpu"] }, { "id": "cpu", "nodeSetIds": ["nscpu"] } ], "defaultPartition": "tpu", "config": { "requeueExitCodes": [1, 2, 134, 137, 139, 143] } } } } EOFリクエストを送信します。
curl -s -X POST \ -H "Content-Type: application/json" \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -d @"${CLUSTER_ID}_create.json" \ "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters?clusterId=${CLUSTER_ID}"クラスタには次のものが含まれます。
tpuパーティション: 予約済みの TPU v6e VM の静的ノードセット。staticNodeCountは VM の数、acceleratorTopologyは各スライスのトポロジです。各ct6e-standard-4tVM には 4 つのチップがあるため、2x4スライスには 2 つの VM があります。スライスを増やす場合は、乗算します。2 つの2x4スライスには、4のstaticNodeCountが必要です。cpuパーティション: Pathways リソース マネージャー、IFRT プロキシ サーバー、MaxText クライアントを実行する 1 つのオンデマンド VM。Pathways スクリプトは、cpuという名前のパーティションにジョブを送信します。VM はn2-highmem-32マシンタイプを使用します。これは、Pathways サービスと MaxText がチェックポイントを保存する際に、最大 240 GB のメモリが必要になるためです。また、Pathways サービスがこの VM から TPU ワーカー ジョブを送信するため、TPU スライスをサポートする Slurm 26.05 のイメージも使用します。requeueExitCodes: Slurm は、これらのコードのいずれかで終了するジョブを再キューイングします。この設定により、スライス内の最初の VM だけでなく、任意の VM がプリエンプトされたときに、Slurm が TPU ワーカー ジョブを再起動できます。
クラスタの準備が完了するまで待ちます。 Google Cloud コンソールの [Cluster Director] ページで進行状況を確認するか、次のコマンドの出力で
reconcilingがfalseであることを確認します。curl -s \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ "https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"
Pathways 環境を設定する
Pathways 環境は共有ファイル システムの /home/pathways に存在するため、クラスタごとに 1 回設定します。これには、Pathways コンテナ イメージ、JAX と pathwaysutils を含む Python 環境、Pathways スクリプトが含まれています。
ログインノードに接続します。他の接続方法については、クラスタに接続するをご覧ください。
gcloud compute ssh ${CLUSTER_ID}-login-001 \ --project=${PROJECT} \ --zone=${ZONE} \ --tunnel-through-iapcpuパーティションとtpuパーティションが存在し、idle状態であることを確認します。sinfo -o "%P %a %D %T %N %f"出力は次のようになります。
PARTITION AVAIL NODES STATE NODELIST FEATURES tpu* up 4 idle ${CLUSTER_ID}-nstpu-[0-3] cpu up 1 idle ${CLUSTER_ID}-nscpu-0Pathways スクリプトをログインノードにダウンロードします。
mkdir -p ~/pathways-scripts && cd ~/pathways-scripts for f in setup_env.sh start_pathways.sh run_worker_slice.sh run_maxtext.sh; do curl -fsSLO "https://raw.githubusercontent.com/GoogleCloudPlatform/slurm-gcp/tpu-2605/pathways/scripts/${f}" doneこのコマンドは、次のスクリプトをダウンロードします。
setup_env.sh: Pathways 環境の 1 回限りの設定を行います。start_pathways.sh: Pathways サービスを開始します。run_worker_slice.sh: 1 つの TPU スライスの Pathways ワーカーを起動します(start_pathways.shによって送信)。run_maxtext.sh: MaxText トレーニング ワークロードの例を実行します。
設定スクリプトを実行します。これには 5 分ほどかかります。
chmod +x *.sh ./setup_env.shこのスクリプトは、Pathways サーバーとプロキシ イメージを pull し、JAX、
pathwaysutils、MaxText を使用して Python 環境をビルドし、スクリプトを/home/pathwaysにコピーして、~/pathwaysを/home/pathwaysにリンクします。次のような出力で終了します。Environment ready: JAX 0.11.1省略可: 他のクラスタ ユーザーに Pathways 環境へのアクセス権を付与するには、
/home/pathwaysをホーム ディレクトリにリンクしてもらいます。ln -sfn /home/pathways ~/pathways
この時点で、クラスタは Pathways の準備ができています。バッチ ワークロードとインタラクティブ ワークロードは異なる設定で開始されるため、ワークロードの実行の一部として Pathways サービスを開始します。詳細については、Pathways を使用してバッチ ワークロードを実行すると Pathways を使用してインタラクティブ ワークロードを実行するをご覧ください。
問題が発生した場合は、Cloud での Pathways のトラブルシューティングをご覧ください。
クリーンアップ
このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、完了時に Cluster Director クラスタを削除します。
curl -s -X DELETE \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://hypercomputecluster.googleapis.com/v1alpha/projects/${PROJECT}/locations/${REGION}/clusters/${CLUSTER_ID}"