常规配置
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: 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:可以指定所使用的模型的类型。例如,如果模型来自 HuggingFace,则可指定hf。
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.checkpoint_dir 设置为 Amazon S3 路径时,可以将 exp_manager.export_full_model.final_export_dir 设置为本地文件系统上的特定目录。
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 相关的配置:
model: # FP8 config fp8: True fp8_amax_history_len: 1024 fp8_amax_compute_algo: max
需要重点注意的是,目前仅 P5 实例类型支持 FP8 数据格式。如果您使用的是旧实例类型(如 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 配方