

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

# 一般組態
<a name="sagemaker-hyperpod-recipes-general-configuration"></a>

config.yaml 檔案指定訓練配方和叢集。它還包含執行時期組態，例如訓練任務的環境變數。

```
defaults:
  - _self_
  - cluster: slurm 
  - recipes: training/llama/hf_llama3_8b_seq8192_gpu
instance_type: p5.48xlarge
git:
  repo_url_or_path: null
  branch: null
  commit: null
  entry_script: null
  token: null
env_vars:
  NCCL_DEBUG: WARN
```

您可以修改 `config.yaml` 中的下列參數：

1. `defaults`：指定您的預設設定，例如預設叢集或預設配方。

1. `instance_type`：修改 Amazon EC2 執行個體類型，以符合您正在使用的執行個體類型。

1. `git`：指定訓練任務的 SageMaker HyperPod 配方轉接器儲存庫位置。

1. `env_vars`：您可以指定要傳遞至執行時期訓練任務的環境變數。例如，您可以透過指定 NCCL\$1DEBUG 環境變數來調整 NCCL 的記錄層級。

配方是定義訓練任務架構的核心組態。此檔案包含許多對您訓練任務至關重要的資訊，例如：
+ 是否使用模型平行化
+ 資料集的來源
+ 混合精確度訓練
+ 檢查點相關組態

您可以依原狀使用配方。您也可以使用下列資訊來修改它們。

## run
<a name="run"></a>

以下是用於執行訓練任務的基本執行資訊。

```
run:
  name: llama-8b
  results_dir: ${base_results_dir}/${.name}
  time_limit: "6-00:00:00"
  model_type: hf
```

1. `name`：在組態檔案中指定訓練任務的名稱。

1. `results_dir`：您可以指定訓練任務結果存放所在的目錄。

1. `time_limit`：您可以為訓練任務設定訓練時間上限，以防止其佔用硬體資源太長時間。

1. `model_type`：您可以指定正在使用的模型類型。例如，如果您的模型來自 HuggingFace，您可以指定 `hf`。

## exp\$1manager
<a name="exp-manager"></a>

exp\$1manager 會設定實驗。使用 exp\$1manager，您可以指定輸出目錄或檢查點設定等欄位。以下是如何設定 exp\$1manager 的範例。

```
exp_manager:
  exp_dir: null
  name: experiment
  create_tensorboard_logger: True
```

1. `exp_dir`：實驗目錄包含訓練任務的標準輸出和標準錯誤檔案。根據預設，它會使用您的目前目錄。

1. `name`：用來在 exp\$1dir 下識別實驗的實驗名稱。

1. `create_tensorboard_logger`：指定 `True` 或 `False` 以啟用或停用 TensorBoard 記錄器。

## 檢查點
<a name="checkpointing"></a>

以下是我們支援的三種檢查點類型：
+ 自動檢查點
+ 手動檢查點
+ 完整檢查點

### 自動檢查點
<a name="auto-checkpointing"></a>

如果您要儲存或載入由 SageMaker HyperPod 配方轉接器自動管理的檢查點，您可以啟用 `auto_checkpoint`。若要啟用 `auto_checkpoint`，請將 `enabled` 設定為 `True`。您可以使用自動檢查點進行訓練和微調。您可以針對共用檔案系統和 Amazon S3 使用自動檢查點。

```
exp_manager
  checkpoint_dir: ${recipes.exp_manager.exp_dir}/checkpoints/
  auto_checkpoint:
    enabled: True
```

自動檢查點會使用自動計算的最佳儲存間隔，以非同步方式儲存 local\$1state\$1dict。

**注意**  
在此檢查點模式下，自動儲存的檢查點不支援在訓練執行之間重新碎片。若要從最新自動儲存的檢查點繼續，您必須保留相同的碎片度。您不需要指定額外資訊即可自動繼續。

### 手動檢查點
<a name="manual-checkpointing"></a>

您可以修改 `checkpoint_callback_params` 以非同步方式將中繼檢查點儲存在 shared\$1state\$1dict 中。例如，您可以指定下列組態，每 10 個步驟啟用碎片檢查點，並保留最新的 3 個檢查點。

碎片檢查點可讓您在訓練執行之間變更碎片度，並透過設定 `resume_from_checkpoint` 載入檢查點。

**注意**  
若是 PEFT 微調，碎片檢查點不支援 Amazon S3。
自動和手動檢查點是互斥的。
僅允許 FSDP 碎片度和複寫度變更。

```
exp_manager:
  checkpoint_callback_params:
    # Set save_top_k = 0 to disable sharded checkpointing
    save_top_k: 3
    every_n_train_steps: 10
    monitor: "step"
    mode: "max"
    save_last: False
  resume_from_checkpoint: ${recipes.exp_manager.exp_dir}/checkpoints/
```

若要進一步了解檢查點，請參閱[使用 SMP 進行檢查點](model-parallel-core-features-v2-checkpoints.md)。

### 完整檢查點
<a name="full-checkpointing"></a>

匯出的 full\$1state\$1dict 檢查點可以用於推論或微調。您可以透過 hf\$1model\$1name\$1or\$1path 載入完整檢查點。在此模式下，只會儲存模型權重。

若要匯出 full\$1state\$1dict 模型，您可以設定下列參數。

**注意**  
目前，Amazon S3 檢查點不支援完整檢查點。如果您啟用完整檢查點，則無法設定 `exp_manager.checkpoint_dir` 的 S3 路徑。不過，您可以將 `exp_manager.export_full_model.final_export_dir` 設定為本機檔案系統上的特定目錄，同時將 `exp_manager.checkpoint_dir` 設定為 Amazon S3 路徑。

```
exp_manager:
  export_full_model:
    # Set every_n_train_steps = 0 to disable full checkpointing
    every_n_train_steps: 0
    save_last: True
    final_export_dir : null
```

## 模型
<a name="model"></a>

定義模型架構和訓練程序的各個層面。這包括模型平行化、精確度和資料處理的設定。以下是您可以在模型區段內設定的關鍵元件：

### 模型平行化
<a name="model-parallelism"></a>

在您指定了配方之後，請定義您要訓練的模型。您也可以定義模型平行化。例如，您可以定義 tensor\$1model\$1parallel\$1degree。您可以啟用其他功能，例如使用 FP8 精確度進行訓練。例如，您可以使用張量平行化和內容平行化訓練模型：

```
model:
  model_type: llama_v3
  # Base configs
  train_batch_size: 4
  val_batch_size: 1
  seed: 12345
  grad_clip: 1.0

  # Model parallelism
  tensor_model_parallel_degree: 4
  expert_model_parallel_degree: 1
  context_parallel_degree: 2
```

若要更好地了解不同類型的模型平行化技術，您可以參考下列方法：

1. [張量平行化](model-parallel-core-features-v2-tensor-parallelism.md)

1. [專家平行化](model-parallel-core-features-v2-expert-parallelism.md)

1. [內容平行化](model-parallel-core-features-v2-context-parallelism.md)

1. [混合碎片資料平行化](model-parallel-core-features-v2-sharded-data-parallelism.md)

### FP8
<a name="fp8"></a>

若要啟用 FP8 (8 位元浮點精確度)，您可以在下列範例中指定 FP8 相關組態：

```
model:
  # FP8 config
  fp8: True
  fp8_amax_history_len: 1024
  fp8_amax_compute_algo: max
```

請務必注意，目前僅對 P5 執行個體類型支援 FP8 資料格式。如果您使用的是較舊的執行個體類型，例如 P4，請對您的模型訓練程序停用 FP8 功能。如需 FP8 的詳細資訊，請參閱[混合精確度訓練](model-parallel-core-features-v2-mixed-precision.md)。

### data
<a name="data"></a>

您可以在資料下新增資料路徑，為您的訓練任務指定自訂資料集。我們系統中的資料模組支援下列資料格式：

1. JSON

1. JSONGZ (壓縮 JSON)

1. ARROW

不過，您負責準備自己的預先記號化資料集。如果您是具有特定要求的進階使用者，也可以選擇實作和整合自訂的資料模組。如需 HuggingFace 資料集的詳細資訊，請參閱[資料集](https://huggingface.co/docs/datasets/v3.1.0/en/index)。

```
model:
  data:
    train_dir: /path/to/your/train/data
    val_dir: /path/to/your/val/data
    dataset_type: hf
    use_synthetic_data: False
```

您可以指定訓練模型的方式。根據預設，配方會使用預先訓練而非微調。下列範例會將配方設定為使用 LoRA (低排名調整) 執行微調任務。

```
model:
  # Fine tuning config
  do_finetune: True
  # The path to resume from, needs to be HF compatible
  hf_model_name_or_path: null
  hf_access_token: null
  # PEFT config
  peft:
    peft_type: lora
    rank: 32
    alpha: 16
    dropout: 0.1
```

如需配方的相關資訊，請參閱 [SageMaker HyperPod 配方](https://github.com/aws/sagemaker-hyperpod-recipes)。