本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
教學課程 - Amazon SageMaker HyperPod 無檢查點 PEFT-LoRA Llama 3 70b
在 HyperPod 上執行無檢查點訓練配方需要以下一系列步驟。
先決條件
開始設定環境之前,請確定您具有下列先決條件:
共用儲存位置。它可以是可從叢集節點存取的 Amazon FSx 檔案系統或 NFS 系統。
-
採用下列其中一種格式的資料:
JSON
JSONGZ (壓縮 JSON)
ARROW
從來源
選擇 Llama 70B 或 GPT-OSS 120B 支援的無檢查點訓練配方。 設定您的環境
Kubernetes 環境設定
若要設定 Kubernetes 環境,請執行下列動作:
-
設定虛擬環境。請確定您使用的 Python 大於或等於 3.10 且低於 3.14。
python3 -m venv ${PWD}/venv source venv/bin/activate -
連線至您的 Kubernetes 叢集
aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}" -
使用下列其中一種方法安裝相依性:
-
方法 1:SageMaker HyperPod 配方方法:
# install SageMaker HyperPod Recipes. git clone --recursive git@github.com:aws/sagemaker-hyperpod-recipes.git cd sagemaker-hyperpod-recipes pip3 install -r requirements.txt -
方法 2:具有預先定義任務 yaml 方法的 kubectl
# install SageMaker HyperPod checkpointless training. git clone git@github.com:aws/sagemaker-hyperpod-checkpointless-training.git cd sagemaker-hyperpod-checkpointless-training
-
您現在可以使用 NeMo 樣式的啟動器或使用 kubectl 來啟動無檢查點訓練配方。
方法 1:使用配方啟動器啟動訓練任務
或者,您可以使用 SageMaker HyperPod 配方來提交訓練任務。使用配方涉及更新 k8s.yaml、config.yaml 和執行啟動指令碼。
-
更新
launcher_scripts/llama/run_checkpointless_llama3_70b_lora.sh深度學習容器。若要尋找最新版本的無檢查點訓練容器,請參閱無檢查點訓練版本備註。
#!/bin/bash SAGEMAKER_TRAINING_LAUNCHER_DIR=${SAGEMAKER_TRAINING_LAUNCHER_DIR:-"$(pwd)"} TRAIN_DIR="${TRAIN_DIR}" VAL_DIR="${VAL_DIR}" EXP_DIR="${EXP_DIR}" LOG_DIR="${LOG_DIR}" CONTAINER_MOUNT="/data" CONTAINER="${CONTAINER}" MODEL_NAME_OR_PATH="${MODEL_NAME_OR_PATH}" HYDRA_FULL_ERROR=1 python3 "${SAGEMAKER_TRAINING_LAUNCHER_DIR}/main.py" \ recipes=fine-tuning/llama/checkpointless_llama3_70b_lora \ recipes.dataset.dataset_path="${TRAIN_DIR}" \ recipes.exp_manager.exp_dir="${EXP_DIR}" \ recipes.log_dir="${LOG_DIR}" \ recipes.resume.restore_config.path="${MODEL_NAME_OR_PATH}" \ base_results_dir="${SAGEMAKER_TRAINING_LAUNCHER_DIR}/results" \ git.use_default=false \ cluster=k8s \ cluster_type=k8s \ container="${CONTAINER}" \ +cluster.hostNetwork=true \ +cluster.persistent_volume_claims.0.claimName=fsx-claim \ +cluster.persistent_volume_claims.0.mountPath="${CONTAINER_MOUNT}" \ +recipes.dataset.val_dataset_path="${VAL_DIR}" \ ++recipes.callbacks.3.test_fault_config.fault_prob_between_lock=1 \ -
啟動訓練任務
bash launcher_scripts/llama/run_checkpointless_llama3_70b_lora.sh -
在提交了訓練任務之後,您可以使用下列命令來驗證是否已成功提交。
kubectl get pods NAME READY STATUS RESTARTS AGE llama-3-70b-worker-0 0/1 running 0 36s -
如果 STATUS 位於 PENDING 或 ContainerCreating,請執行下列命令以取得更多詳細資訊
kubectl describe pod <name of pod> -
在任務 STATUS 變更為執行中之後,您可以使用下列命令來檢查日誌。
kubectl logs <name of pod>當您執行 kubectl 取得 Pod 時,STATUS 會變成已完成
方法 2:使用具有預先定義 yaml 的 kubectl 啟動訓練任務
另一個選項是使用預先定義的任務 yaml 透過 kubectl 啟動訓練。
-
更新
examples/llama3/launch/peft_llama3_70b_checkpointless_p5.yamlimage:深度學習容器 若要尋找最新版本的無檢查點訓練容器,請參閱無檢查點訓練版本備註。resume.restore_config.path=<path_to_pretrained_weights>:先決條件步驟中以 Nemo 格式下載預先訓練模型權重的路徑。dataset.dataset_path=<path_to_dataset>:存放在共用儲存體中的資料集路徑
-
透過 使用 kubectl 提交任務
peft_llama3_70b_checkpointless_p5.yamlkubectl apply -f examples/llama3/launch/peft_llama3_70b_checkpointless_p5.yaml -
在提交了訓練任務之後,您可以使用下列命令來驗證是否已成功提交。
kubectl get pods NAME READY STATUS RESTARTS AGE llama3-70b-lora-checkpointless-worker-0 0/1 running 0 36s -
如果 STATUS 位於 PENDING 或 ContainerCreating,請執行下列命令以取得更多詳細資訊
kubectl describe pod <name of pod> -
在任務 STATUS 變更為執行中之後,您可以使用下列命令來檢查日誌。
kubectl logs <name of pod>當您執行 kubectl 取得 Pod 時,STATUS 會變成已完成