このガイドでは、Pathways コントローラ コンポーネントと同じクラスタで完了まで実行される JAX トレーニング ワークロードを使用して、バッチ ワークロードを実行する方法について説明します。
バッチ ワークロードは、Google Kubernetes Engine(GKE)クラスタまたは Slurm を使用する Cluster Director クラスタで実行できます。
- GKE では、JAX ワークロードが完了すると、Pathways クラスタ コンポーネントが終了します。
- Cluster Director では、Pathways コントローラ コンポーネントは個別の Slurm ジョブとして実行されるため、JAX ワークロードが完了した後も、停止するまで実行が継続されます。
このページでは、両方のプラットフォームの手順について説明します。各セクションで、[GKE] タブまたは [Cluster Director] タブを選択します。
始める前に
-
このページのサンプルをどのように使うかに応じて、タブを選択してください。
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 を使用して認証するをご覧ください。
始める前に
GKE
次の前提条件を満たしていることを確認してください。
- GKE クラスタを作成する。
- Cluster Toolkit を設定します。
- Kubernetes ツールをインストールする。
- Kubernetes Engine API を有効にします。
- Pathways のアーティファクトと出力用の Cloud Storage バケットを作成します。
Cluster Director
次の前提条件を満たしていることを確認してください。
- Cluster Director クラスタを作成し、Pathways 環境を設定する。
- Pathways のスクラッチ データとチェックポイントを書き込むことができる Cloud Storage バケットを作成します。
MaxText を使用してトレーニング イメージをビルドする
MaxText は、Google が開発したオープンソースの大規模言語モデル(LLM)プロジェクトです。JAX で記述されており、 Google Cloud TPU と GPU で効率的に実行できるように設計されています。
GKE
オープンソースの GitHub リポジトリから最新バージョンの安定版 JAX を使用して MaxText Docker イメージをビルドするには、次のコマンドを実行します。
git clone https://github.com/AI-Hypercomputer/maxtext cd maxtext gcloud config set project PROJECT_ID bash src/dependencies/scripts/docker_build_dependency_image.sh MODE=stable gcloud auth configure-docker # This script needs bash version >= 4.2 to execute. bash src/dependencies/scripts/docker_upload_runner.sh \ CLOUD_IMAGE_NAME=USER_runner
次のように置き換えます。
PROJECT_ID: 実際のGoogle Cloud プロジェクト ID。USER: 実際のGoogle Cloud ユーザー ID。
このコマンドは、MaxText Kubernetes イメージを gcr.io/PROJECT_ID/USER_runner に push します。この Docker イメージを使用すると、Pathways バックエンドを使用して TPU でトレーニングを実行できます。
Cluster Director
トレーニング イメージをビルドする必要はありません。setup_env.sh は /home/pathways の Pathways 環境に MaxText をインストールし、run_maxtext.sh がそれを実行します。
バッチ ワークロードを実行する
GKE
gclusterバイナリがPATH環境変数にない場合は、gclusterを含むディレクトリをPATHに追加します。export PATH="$PATH:CLUSTER_TOOLKIT_PATH"
CLUSTER_TOOLKIT_PATHは、gclusterバイナリを含むディレクトリの絶対パス($HOME/cluster-toolkitなど)に置き換えます。gcluster job submitコマンドを使用して、ビルド済みの MaxText Docker イメージを送信します。gcluster job submit \ --pathways \ --pathways-gcs-location="gs://BUCKET_NAME/pathways-artifacts" \ --name=WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --num-slices=WORKLOAD_NODEPOOL_COUNT \ --compute-type=COMPUTE_TYPE \ --topology=TOPOLOGY \ --image="gcr.io/PROJECT_ID/USER_runner" \ --command="python3 -m maxtext.trainers.pre_train.train /deps/src/maxtext/configs/base.yml base_output_directory=gs://BUCKET_NAME per_device_batch_size=1 enable_checkpointing=false remat_policy=full global_parameter_scale=1 steps=20 max_target_length=2048 use_iota_embed=true reuse_example_batch=1 dataset_type=synthetic attention=flash gcs_metrics=True enable_single_controller=True run_name=RUN_NAME-pathways-job"
次のように置き換えます。
BUCKET_NAME: 出力用の Cloud Storage バケット。WORKLOAD: ワークロードを識別する一意の名前(DNS ラベルの制限により 22 文字以下)。CLUSTER: GKE クラスタの名前。PROJECT_ID: 実際のGoogle Cloud プロジェクト ID。LOCATION: GKE クラスタのリージョンまたはゾーン。WORKLOAD_NODEPOOL_COUNT: TPU スライス ノードプールの数。COMPUTE_TYPE: TPU マシンタイプ(例:ct6e-standard-4t)。TPU の各バージョンでサポートされている TPU タイプの詳細については、TPU のバージョンをご覧ください。TOPOLOGY: TPU の配置トポロジ(例:2x4)。USER: 実際のGoogle Cloud ユーザー ID。RUN_NAME: ワークフロー実行を識別するユーザー割り当ての名前。
ジョブ送信オプションの詳細については、Cluster Toolkit ジョブ送信ガイドをご覧ください。
gcluster job logsコマンドを使用して、ワークロードの進行状況を確認します。gcluster job logs WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION \ --main-only \ --follow
出力は次のようになります。
completed step: 0, seconds: 1.259, TFLOP/s/device: 10.792, Tokens/s/device: 1626.636, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 1, seconds: 3.366, TFLOP/s/device: 4.036, Tokens/s/device: 608.366, total_weights: 65536, loss: 10.876, lm_loss: 10.876, perplexity: 52906.090 completed step: 2, seconds: 0.264, TFLOP/s/device: 51.415, Tokens/s/device: 7749.885, total_weights: 65536, loss: 10.563, lm_loss: 10.563, perplexity: 38665.316 completed step: 3, seconds: 1.025, TFLOP/s/device: 13.257, Tokens/s/device: 1998.187, total_weights: 65536, loss: 9.983, lm_loss: 9.983, perplexity: 21646.125 completed step: 4, seconds: 1.194, TFLOP/s/device: 11.376, Tokens/s/device: 1714.750, total_weights: 65536, loss: 9.462, lm_loss: 9.462, perplexity: 12864.218 completed step: 5, seconds: 1.185, TFLOP/s/device: 11.465, Tokens/s/device: 1728.203, total_weights: 65536, loss: 8.961, lm_loss: 8.961, perplexity: 7791.373省略可: ワークロードが完了する前にキャンセルするには、
gcluster job cancelコマンドを使用します。gcluster job cancel WORKLOAD \ --cluster=CLUSTER \ --project=PROJECT_ID \ --location=LOCATION
Cluster Director
~/pathways からクラスタのログインノードで次のコマンドを実行します。スクリプトは互いを検索し、そのディレクトリにログを書き込みます。
Pathways サービスを開始します。
cd ~/pathways SLICE_SHAPE=TOPOLOGY \ MIN_SLICES=MIN_SLICES \ MAX_SLICES=MAX_SLICES \ GCS_BUCKET=gs://BUCKET_NAME \ sbatch start_pathways.sh
次のように置き換えます。
TOPOLOGY: 各スライスの TPU トポロジ。TPU ノードセットのacceleratorTopologyと一致する必要があります(例:2x4)。MIN_SLICES: トレーニングを開始して続行するために必要な、実行中のスライスの最小数。MAX_SLICES: 使用するスライスの最大数。通常はノードセット内のスライスの数。BUCKET_NAME: Pathways のスクラッチ データとチェックポイント用の Cloud Storage バケット。
TPU パーティションがクラスタのデフォルト パーティションでない場合は、
PARTITIONをその名前に設定します。ログ
pathways-service-JOB_ID.out(JOB_IDは Slurm ジョブ ID)に次のような出力が表示されると、サービスの準備が完了します。Pathways Runtime Service is READY! Discovery file : /home/USER/pathways/cluster.env IFRT Proxy Target : grpc://RM_IP:29000 Running TPU Slices : 2 / 2 (min=2)MaxText トレーニング ワークロードを送信します。サービスジョブの直後に送信できます。サービスが準備完了になるまで最大 1 時間待機します。
sbatch run_maxtext.shMaxText ジョブは、Pathways サービスに少なくとも
MIN_SLICES個の実行中のスライスが存在するまで待機してから、トレーニングを開始します。ワークロードは、合成データで Llama 3.1 8B をトレーニングします。スライス設定とバケットはサービスから取得されるため、このジョブでは設定しないでください。次のオプション変数を設定できます。STEPS: トレーニング ステップの数。デフォルトは30です。CHECKPOINT_PERIOD: チェックポイント間のステップ数。デフォルトは5です。BASE_OUTPUT_DIR: MaxText がチェックポイントを書き込む Cloud Storage パス。デフォルトはgs://BUCKET_NAME/maxtext-runsです。REDUCED_LAYERS=1:2x2スライスに対して、32 レイヤーすべてではなく、8 レイヤーのバリアントをトレーニングします。
ワークロードの進行状況を確認します(
JOB_IDは、MaxText ジョブの Slurm ジョブ ID に置き換えます)。MaxText はログを標準エラーに書き込みます。tail -f maxtext-llama31-JOB_ID.err
各トレーニング ステップで、次のような行が出力されます。
completed step: 24, seconds: 0.326, live slice count: 2, TFLOP/s/device: 88.199, Tokens/s/device: 6289.27, total_weights: 32768, loss: 6.238サービスを再起動せずに、後で
run_maxtext.shを再度送信できます。完了したら、ワークロードを停止してから Pathways サービスを停止します。
scancel -u ${USER} -n maxtext-llama31 scancel -u ${USER} -n pathways-serviceサービスをキャンセルすると、Pathways ワーカーのジョブもキャンセルされます。TPU VM は静的ノードであるため、実行を継続し、他の Slurm ジョブで使用できるようになります。
問題が発生した場合は、Cloud での Pathways のトラブルシューティングをご覧ください。