

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 教學課程 - Amazon SageMaker HyperPod 無檢查點 PEFT-LoRA GPT OSS 120b
<a name="sagemaker-eks-checkpointless-recipes-peft"></a>

在 HyperPod 上執行無檢查點訓練配方需要以下一系列步驟。

## 先決條件
<a name="sagemaker-eks-checkpointless-recipes-peft-prereqs"></a>

開始設定環境之前，請確定您具有下列先決條件：
+ [ 在 Amazon SageMaker HyperPod 中啟用 Amazon EKS 支援 HyperPod](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-hyperpod-eks-prerequisites.html)
+ [ 設定 HyperPod 訓練運算子 (v1.2\$1)](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-operator.html)
+ 共用儲存位置。它可以是可從叢集節點存取的 Amazon FSx 檔案系統或 NFS 系統。
+ 採用下列其中一種格式的資料：
  + JSON
  + JSONGZ (壓縮 JSON)
  + ARROW
+ 從[來源](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection)選擇 Llama 70B 或 GPT-OSS 120B 支援的無檢查點訓練配方。
+ [ 將包圍的臉部模型權重和隱蔽值下載](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html)為 [ Nemo 支援的格式](https://docs.nvidia.com/nemo-framework/user-guide/latest/nemo-2.0/features/hf-integration.html#importing-from-hugging-face)。
+ 設定您的環境

## Kubernetes 環境設定
<a name="sagemaker-eks-checkpointless-recipes-peft-kubernetes"></a>

若要設定 Kubernetes 環境，請執行下列動作：

1. 設定虛擬環境。請確定您使用 Python 大於或等於 3.10 且 < 3.14。

   ```
   python3 -m venv ${PWD}/venv
   source venv/bin/activate
   ```

1. [ 設定 kubectl 和 eksctl](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)

1. [ 安裝 Helm](https://helm.sh/docs/intro/install/)

1. 連線至您的 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
     ```
   + kubectl 搭配預先定義的任務 yaml 方法

     ```
     # install SageMaker HyperPod checkpointless training.
     git clone git@github.com:aws/sagemaker-hyperpod-checkpointless-training.git
     cd sagemaker-hyperpod-checkpointless-training
     ```

您現在可以使用 NeMo 樣式的啟動器或使用 kubectl 來啟動無檢查點訓練配方。

## 使用配方啟動器啟動訓練任務
<a name="sagemaker-eks-checkpointless-recipes-peft-recipes-launcher"></a>

或者，您可以使用 SageMaker HyperPod 配方來提交訓練任務。使用配方涉及更新 k8s.yaml、config.yaml 和執行啟動指令碼。

1. 更新 `launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_lora.sh`

   your\$1contrainer：深度學習容器。若要尋找最新版本的無檢查點訓練容器，請參閱[無檢查點訓練版本備註](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html)。

   ```
   #!/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/gpt_oss/checkpointless_gpt_oss_120b_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 \
   ```

1. 啟動訓練任務

   ```
   bash launcher_scripts/gpt_oss/run_checkpointless_gpt_oss_120b_lora.sh
   ```

在提交了訓練任務之後，您可以使用下列命令來驗證是否已成功提交。

```
kubectl get pods

NAME                             READY   STATUS             RESTARTS        AGE
gpt-oss-120b-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 會變成已完成

## 使用具有預先定義 yaml 的 kubectl 啟動訓練任務
<a name="sagemaker-eks-checkpointless-recipes-peft-kubectl"></a>

另一個選項是使用預先定義的任務 yaml 透過 kubectl 啟動訓練。

1. 更新 examples/gpt\$1oss/launch/peft\$1gpt\$1oss\$1120b\$1checkpointless\$1p5.yaml
   + 影像：深度學習容器。若要尋找最新版本的無檢查點訓練容器，請參閱[無檢查點訓練版本備註](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-release-notes.html)。
   + resume.restore\$1config.path=<path\$1to\$1pretrained\$1weights>：先決條件步驟中[以 Nemo 格式下載預先訓練模型權重的](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-eks-checkpointless-recipes-peft.html#sagemaker-eks-checkpointless-recipes-peft-prereqs)路徑。
   + dataset.dataset\$1path=<path\$1to\$1dataset>：存放在共用儲存體中的資料集路徑

1. 使用 kubectl 搭配 peft\$1gpt\$1oss\$1120b\$1checkpointless\$1p5.yaml 提交任務

   ```
   kubectl apply -f examples/gpt_oss/launch/peft_gpt_oss_120b_checkpointless_p5.yaml
   ```

在提交了訓練任務之後，您可以使用下列命令來驗證是否已成功提交。

```
kubectl get pods

NAME                                             READY   STATUS             RESTARTS        AGE
gpt-120b-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 會變成已完成