使用 TPU7x (Ironwood) 訓練模型
本文說明如何佈建 TPU7x 資源,並提供使用 MaxText 和 Cluster Toolkit 部署訓練工作負載的範例。
TPU7x 是 Ironwood 系列的第一個版本,也是第七代 TPU。 Google CloudIronwood 世代的設計目標是支援大規模 AI 訓練和推論。詳情請參閱 TPU7x。
如需針對 TPU7x 最佳化的更多範例,請參閱 GitHub 上的 Ironwood TPU 訓練配方。
使用 MaxText 和 Cluster Toolkit 部署訓練工作負載
使用 Cluster Toolkit 建立可供正式環境使用的 GKE 叢集,並執行訓練工作負載。
以下各節說明如何使用 MaxText 和 Cluster Toolkit 部署訓練工作負載。
事前準備
開始之前,請先完成下列步驟:
- 確認您有已啟用計費功能的 Google Cloud 專案。
- 安裝並初始化 Google Cloud CLI。
- 安裝 Cluster Toolkit。
請設定下列環境變數:
export PROJECT_ID=YOUR_PROJECT_ID export ZONE=YOUR_ZONE export CLUSTER_NAME=YOUR_CLUSTER_NAME export BASE_OUTPUT_DIR="gs://YOUR_BUCKET_NAME"
更改下列內容:
- YOUR_PROJECT_ID: Google Cloud 專案 ID。
- YOUR_ZONE:要建立叢集的可用區。
- YOUR_CLUSTER_NAME:新叢集的名稱。
- YOUR_BUCKET_NAME:Cloud Storage bucket 的名稱,將做為模型訓練的輸出目錄。
如果沒有現成的 Cloud Storage bucket,請使用下列指令建立一個:
gcloud storage buckets create ${BASE_OUTPUT_DIR} \ --project=${PROJECT_ID} \ --location=US \ --default-storage-class=STANDARD \ --uniform-bucket-level-access
部署 TPU7x (Ironwood) 叢集
按照「部署 GKE TPU 7x 叢集」一文中的操作說明,部署 GKE TPU7x 叢集。請確認叢集節點集區拓撲符合訓練工作負載需求 (例如下方範例 MaxText 工作負載的 4x4x8)。
建構及上傳 MaxText Docker 映像檔
建構及推送 MaxText Docker 映像檔:
# Clone MaxText
git clone https://github.com/AI-Hypercomputer/maxtext.git
cd maxtext
git checkout maxtext-tutorial-v1.0.0
# Build the Docker image
bash docker_build_dependency_image.sh MODE=stable JAX_VERSION=0.8.2
export CLOUD_IMAGE_NAME="${USER}-maxtext-runner"
bash docker_upload_runner.sh CLOUD_IMAGE_NAME=${CLOUD_IMAGE_NAME}
定義 MaxText 訓練指令
準備要在 Docker 容器中執行訓練指令碼的指令。
MaxText 1B 模型是 MaxText 架構中的設定,專為訓練約有 10 億個參數的語言模型而設計。您可以使用這個模型,以小晶片規模進行實驗。效能未經過最佳化。
export MAXTEXT_COMMAND="JAX_PLATFORMS=tpu,cpu \
ENABLE_PJRT_COMPATIBILITY=true \
python3 src/MaxText/train.py src/MaxText/configs/base.yml \
base_output_directory=${BASE_OUTPUT_DIR} \
dataset_type=synthetic \
per_device_batch_size=2 \
enable_checkpointing=false \
gcs_metrics=true \
run_name=maxtext_training \
steps=30"
部署訓練工作負載
使用 gcluster job submit 提交訓練工作。如要進一步瞭解工作提交選項,請參閱 Cluster Toolkit 工作指南:
gcluster job submit \
--name="maxtext-1b-$(date +%H%M)" \
--cluster=${CLUSTER_NAME} \
--project=${PROJECT_ID} \
--location=${ZONE} \
--compute-type=tpu7x-standard-4t \
--topology=4x4x8 \
--image="gcr.io/${PROJECT_ID}/${CLOUD_IMAGE_NAME}" \
--command="${MAXTEXT_COMMAND}"
叢集內的工作負載名稱不得重複。在本範例中,$(date
+%H%M) 會附加至工作負載名稱,確保名稱不重複。