

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

# 教學課程 - Amazon SageMaker HyperPod 無檢查點預先訓練或微調自訂模型
<a name="sagemaker-eks-checkpointless-recipes-custom"></a>

在 HyperPod 上使用自訂模型執行無檢查點訓練時，需要下列步驟序列。

## 先決條件
<a name="sagemaker-eks-checkpointless-recipes-custom-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://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-custom-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. 連線至您的 Kubernetes 叢集

   ```
   aws eks update-kubeconfig --region "${CLUSTER_REGION}" --name "${CLUSTER_NAME}"
   ```

1. 安裝相依項目

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

## 無檢查點訓練修改指示
<a name="sagemaker-eks-checkpointless-recipes-custom-modification-instructions"></a>

若要逐步採用自訂模型的無檢查點訓練，請遵循整合指南 （此處我們使用 Llama 3 70b 預先訓練作為範例），其中包含：
+ 快速建立通訊器
+ 記憶體映射資料載入器 (MMAP)
+ 進行中和無檢查點復原

### 元件 1：快速建立通訊器
<a name="sagemaker-eks-checkpointless-recipes-custom-component1"></a>

這是為了最佳化在工作者之間建立連線的時間。不需要變更程式碼，而且只需要設定 env 變數

```
  # Enable Rootless features
  export HPCT_USE_ROOTLESS=1 && \
  sysctl -w net.ipv4.ip_local_port_range="20000 65535" && \

  hyperpodrun --nproc_per_node=8 \
              ...
              --inprocess-restart \
              ...
```

您可以在 [ llama3 70 預先訓練啟動任務組態](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/launch/pretrain_llama3_70b_checkpointless_p5.yaml)中找到完整的變更。

### 元件 2：記憶體映射資料載入器 (MMAP)
<a name="sagemaker-eks-checkpointless-recipes-custom-component2"></a>

MMAP 快取可存放預先擷取的資料範例，並啟用立即訓練開始，而無需等待資料預先處理。它需要最小的程式碼變更，才能透過包裝現有的資料載入器來採用。

```
data_module = MMAPDataModule(
  data_module=base_data_module,
  mmap_config=CacheResumeMMAPConfig(cache_dir=…)
)
```

### 元件 3 和 4：進行中和無檢查點復原
<a name="sagemaker-eks-checkpointless-recipes-custom-components3-4"></a>

這可在不重新啟動訓練程序或從檢查點載入的情況下進行故障復原。所需的其他程式碼變更 （策略和訓練組態更新、包裝現有的主要）

```
@HPWrapper(
  health_check=CudaHealthCheck(),
  hp_api_factory=HPAgentK8sAPIFactory(),
  abort_timeout=60.0,
...)
def run_main(
  cfg,
  caller: Optional[HPCallWrapper] = None):
...


CheckpointlessMegatronStrategy(
  **self.cfg.strategy,
  ddp=self.ddp,
)
```

您可以在 [llama3 70 預先訓練項目指令碼](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/llama3_70b_pretrain_checkpointless.py)中找到完整的變更，並在 [ llama3 70b 訓練組態中找到對應的訓練組態](https://github.com/aws/sagemaker-hyperpod-checkpointless-training/blob/main/examples/llama3/config/llama3_70b_peft_checkpointless.yaml)變更。

### 啟動訓練
<a name="sagemaker-eks-checkpointless-recipes-custom-launch"></a>

您現在可以使用 kubectl 啟動無檢查點訓練。

```
kubectl apply -f your_job_config.yaml
```