本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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
:
-
defaults
:指定您的預設設定,例如預設叢集或預設配方。 -
instance_type
:修改 Amazon EC2 執行個體類型,以符合您正在使用的執行個體類型。 -
git
:指定訓練任務的 SageMaker HyperPod 配方轉接器儲存庫位置。 -
env_vars
:您可以指定要傳遞至執行期訓練任務的環境變數。例如,您可以透過指定 NCCL_DEBUG 環境變數來調整 NCCL 的記錄層級。
配方是定義訓練任務架構的核心組態。此檔案包含訓練任務的許多重要資訊,例如:
-
是否使用模型平行處理
-
資料集的來源
-
混合精確度訓練
-
檢查點相關組態
您可以正常使用配方。您也可以使用下列資訊來修改它們。
run
以下是執行訓練任務的基本執行資訊。
run:
name: llama-8b
results_dir: ${base_results_dir}/${.name}
time_limit: "6-00:00:00"
model_type: hf
-
name
:在組態檔案中指定訓練任務的名稱。 -
results_dir
:您可以指定訓練任務結果存放所在的目錄。 -
time_limit
:您可以為訓練任務設定最長訓練時間,以防止其佔用硬體資源太長。 -
model_type
:您可以指定正在使用的模型類型。例如,您可以指定hf
模型是否來自 HuggingFace。
exp_manager
exp_manager 會設定實驗。使用 exp_manager,您可以指定欄位,例如輸出目錄或檢查點設定。以下是如何設定 exp_manager 的範例。
exp_manager:
exp_dir: null
name: experiment
create_tensorboard_logger: True
-
exp_dir
:實驗目錄包含訓練任務的標準輸出和標準錯誤檔案。根據預設,它會使用您目前的目錄。 -
name
:用於在 exp_dir 下識別實驗的實驗名稱。 -
create_tensorboard_logger
:指定True
或False
以啟用或停用 TensorBoard 記錄器。
檢查點
以下是我們支援的三種檢查點類型:
-
自動檢查點
-
手動檢查點
-
完整檢查點
自動檢查點
如果您要儲存或載入由 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_state_dict,並自動計算最佳儲存間隔。
注意
在此檢查點模式下,自動儲存的檢查點不支援在訓練執行之間重新分片。若要從最新的自動儲存檢查點繼續,您必須保留相同的碎片度。您不需要指定額外資訊即可自動繼續。
手動檢查點
您可以修改 checkpoint_callback_params
以非同步方式將中繼檢查點儲存在 shared_state_dict 中。例如,您可以指定下列組態,以每 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 進行檢查點。
完整檢查點
匯出的 full_state_dict 檢查點可用於推論或微調。您可以透過 hf_model_name_or_path 載入完整的檢查點。在此模式下,只會儲存模型權重。
若要匯出 full_state_dict 模型,您可以設定下列參數。
注意
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
模型
定義模型架構和訓練程序的各個層面。這包括模型平行處理、精確度和資料處理的設定。以下是您可以在模型區段中設定的關鍵元件:
模型平行處理
指定配方後,您可以定義正在訓練的模型。您也可以定義模型平行處理。例如,您可以定義 tensor_model_parallel_degree。您可以啟用其他功能,例如使用 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
若要進一步了解不同類型的模型平行處理技術,您可以參考下列方法:
FP8
若要啟用 FP8 (8 位元浮點精確度),您可以在下列範例中指定 FP8-related組態:
model:
# FP8 config
fp8: True
fp8_amax_history_len: 1024
fp8_amax_compute_algo: max
請務必注意,FP8 資料格式目前僅支援 P5 執行個體類型。如果您使用的是較舊的執行個體類型,例如 P4,請停用模型訓練程序的 FP8 功能。如需 FP8 的詳細資訊,請參閱混合精確度訓練。
資料
您可以在資料下新增資料路徑,以指定訓練任務的自訂資料集。我們系統中的資料模組支援下列資料格式:
-
JSON
-
JSONGZ (壓縮 JSON)
-
ARROW
不過,您必須負責準備自己的預先加密資料集。如果您是具有特定需求的進階使用者,也可以選擇實作和整合自訂資料模組。如需 HuggingFace 資料集的詳細資訊,請參閱資料集
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 配方