监督微调 (SFT) - 亚马逊 SageMaker AI
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

监督微调 (SFT)

以下各节概述了监督微调 (SFT) 的过程,包括全级 SFT 和参数高效的 SFT。

全等级监督微调 (SFT)

监督式微调 (SFT) 是指向基础模型提供一组提示-响应对的过程,用于提高预训练基础模型在特定任务中的性能。标注示例的格式为提示-回答对,措辞为指示。这个微调过程修改模型的权重。

当您拥有需要提供特定提示-响应对来获得最佳结果的特定领域数据时,应使用 SFT。

请注意,您的训练和验证输入数据集必须位于客户拥有的存储桶中,而不是存储在托管或服务托管的 S3 存储桶中。

数据要求

对于全级 SFT 和低等级适配器 (LoRa) SFT,数据应遵循亚马逊 Bedrock Converse 的操作格式。有关此格式的示例和约束条件,请参阅准备数据以进行微调了解模型

要在提交数据集之前验证您的数据集格式,我们建议使用 Amazon Bedrock 示例存储库中的验证脚本。此验证工具有助于确保您的 JSONL 文件符合所需的格式规范,并在提交微调任务之前识别出任何潜在问题。

可用于 SFT 进行调整的 Amazon Nova 参数如下:

  • 运行配置

    • name: 您的训练作业的描述性名称。这有助于确定您的工作 Amazon Web Services Management Console。

    • model_type: 要使用的亚马逊 Nova 型号变体。可用选项有amazon.nova-micro-v1:0:128kamazon.nova-lite-v1:0:300k、或amazon.nova-pro-v1:0:300k

    • model_name_or_path:用于训练的基础模型的路径。从nova-micro/prodnova-lite/prodnova-pro/prod、或训练后检查点的 S3 路径中选择要使用的模型(s3://<escrow bucket>/<job id>/outputs/checkpoints)。

    • replicas:用于分布式训练的计算实例数量。可用值因所选型号而异。Amazon Nova Micro 支持 2、4 或 8 个副本。Amazon Nova Lite 支持 4、8、16 或 32 个副本。Amazon Nova Pro 支持 6、12 或 24 个副本。

    • data_s3_path:训练数据集的 S3 位置,它是一个 JSONL 文件。此文件必须位于与集群相同的 Amazon Web Services 账户 区域中。所提供的 S3 路径中的所有 S3 位置都必须位于同一个账户和区域中。

    • validation_data_s3_path:(可选)验证数据集的 S3 位置,它是一个 JSONL 文件。此文件必须与集群位于相同的账户和区域中。所提供的 S3 路径中的所有 S3 位置都必须位于同一个账户和区域中。

    • output_s3_path:存储清单和 TensorBoard 日志的 S3 位置。所提供的 S3 路径中的所有 S3 位置都必须位于同一个账户和区域中。

  • 训练配置

    • max_length:以令牌为单位的最大序列长度。这决定了训练的上下文窗口大小。SFT 支持的最大值为 65,536 个代币。

      更长的序列会以增加内存需求为代价提高训练效率。我们建议您将max_length参数与您的数据分布进行匹配。

  • 教练设置

    • max_epochs:通过训练数据集的完整传球次数。最大值为 5。

      通常,较大的数据集需要较少的时代才能收集,而较小的数据集需要更多的时代才能收集。我们建议您根据数据大小调整周期数。

  • 模型设置

    • hidden_dropout: 丢弃隐藏状态输出的概率。将该值增加大约 0.0-0.2 以减少对较小数据集的过度拟合。有效值介于 0-1 之间(含)。

    • attention_dropout: 注意力权重下降的概率。此参数可以帮助进行概括。有效值介于 0-1 之间(含)。

    • ffn_dropout: 丢弃前馈网络输出的概率。有效值介于 0-1 之间(含)。

  • 优化器配置

    • lr: 学习速率,它控制优化期间的步长。有效值介于 1e-6-1e-3 之间(含)。为了获得良好的性能,我们建议使用介于 1e-6-1e-4 之间的值。

    • name:优化器算法。目前仅支持 distributed_fused_adam

    • weight_decay: L2 正则化强度。较高的值(介于 0.01-0.1 之间)会增加正则化。

    • warmup_steps: 逐步提高学习率的步骤数。这提高了训练的稳定性。有效值介于 1-20 之间(含)。

    • min_lr: 衰变结束时的最低学习率。有效值介于 0-1(含)之间,但必须小于学习率。

快速开始使用完整等级 SFT 食谱

以下是完整等级 SFT 的配方,旨在让你在集群上快速启动 SFT 作业。 HyperPod 此配方还假设您已使用正确的 Amazon 凭证连接到 HyperPod 集群。

run: name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs model_type: "amazon.nova-micro-v1:0:128k" model_name_or_path: "nova-micro/prod" replicas: 2 data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## training specific configs training_config: max_length: 32768 save_steps: 100000 replicas: ${recipes.run.replicas} micro_batch_size: 1 task_type: sft global_batch_size: 64 weights_only: True allow_percentage_invalid_samples: 10 exp_manager: exp_dir: null create_wandb_logger: False create_tensorboard_logger: True project: null name: null checkpoint_callback_params: monitor: step save_top_k: 10 mode: max every_n_train_steps: ${recipes.training_config.save_steps} save_last: True create_early_stopping_callback: True early_stopping_callback_params: min_delta: 0.001 mode: min monitor: "val_loss" patience: 2 trainer: log_every_n_steps: 1 max_epochs: -1 max_steps: 16 val_check_interval: 100 limit_test_batches: 0 gradient_clip_val: 1.0 num_nodes: ${recipes.training_config.replicas} model: hidden_dropout: 0.0 # Dropout probability for hidden state transformer. attention_dropout: 0.0 # Dropout probability in the attention layer. ffn_dropout: 0.0 # Dropout probability in the feed-forward layer. sequence_parallel: True optim: lr: 1e-5 name: distributed_fused_adam bucket_cap_mb: 10 contiguous_grad_buffer: False overlap_param_sync: False contiguous_param_buffer: False overlap_grad_sync: False adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 sched: name: CosineAnnealing warmup_steps: 10 constant_steps: 0 min_lr: 1e-6 mm_cfg: llm: freeze: false image_projector: freeze: true require_newline: true video_projector: freeze: true require_newline: false peft: peft_scheme: null training_validation: loader: args: data_loader_workers: 1 prefetch_factor: 2 collator: args: force_image_at_turn_beginning: false
完整等级食谱示例

以下是 SFT 的完整配方示例,其中所有组件均已正确配置。

## Run config run: name: "my-sft-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training data_s3_path: s3:Replace with your S3 bucket name/input.jsonl validation_data_s3_path: [OPTIONAL] s3:your S3 bucket name/input.jsonl output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate peft: peft_scheme: null # Set to null for full-parameter fine-tuning
限制

不支持将指标发布到 “权重与 MLFlow 偏差”。

中间检查点不会保存以供评估,也无法从中间检查点恢复。仅保存最后一个检查点。

要调整超参数,请按照选择超参数中的指导进行操作。

参数高效微调 (PEFT)

参数高效微调 (PEFT) 涉及重新训练少量额外的权重,以使基础模型适应新的任务或领域。具体而言,低等级适配器 (LoRa) PEFT 通过将低等级可训练权重矩阵引入特定模型层,从而在保持模型质量的同时减少可训练参数的数量,从而有效地微调基础模型。

LoRa PEFT 适配器通过加入轻量级适配器层来增强基础模型,这些适配器层在推理过程中修改模型的权重,同时保持原始模型参数不变。这种方法也被视为最具成本效益的微调技术之一。有关更多信息,请参阅使用适配器推理组件微调模型

你应该在以下情况下使用 LoRa PEFT:

  • 你想从一个快速的训练程序开始。

  • 基础模型的性能已经令人满意。在此情况下,LoRA PEFT 旨在增强其在多个相关任务中的能力,例如文本摘要或语言翻译。LoRa PEFT 的正则化属性有助于防止过度拟合,并降低模型 “忘记” 源域的风险。这可以确保模型保持多功能性,并且可以适应各种应用。

  • 您想使用相对较小的数据集执行指令微调方案。LoRA PEFT 在处理特定任务的小型数据集时表现优于处理更广泛、更大的数据集。

  • 您的大型标注数据集超过了 Amazon Bedrock 自定义数据限制。在这种情况下,你可以在 SageMaker AI 上使用 LoRa PEFT 来生成更好的结果。

  • 如果你已经通过 Amazon Bedrock 微调取得了令人鼓舞的结果,那么 SageMaker 人工智能中的 LoRa PEFT 可以帮助进一步优化模型超参数。

LoRa PEFT 中可用的 Amazon Nova 参数包括:

  • 运行配置

    • name: 您的训练作业的描述性名称。这有助于确定您的工作 Amazon Web Services Management Console。

    • model_type: 要使用的 Nova 模型变体。可用选项有amazon.nova-micro-v1:0:128kamazon.nova-lite-v1:0:300k、或amazon.nova-pro-v1:0:300k

    • model_name_or_path:用于训练的基础模型的路径。选择要使用的模型。可用选项有nova-micro/prodnova-lite/prodnova-pro/prod、或训练后检查点的 S3 路径 (s3://<escrow bucket>/<job id>/outputs/checkpoints)。

    • replicas:用于分布式训练的计算实例数量。可用值因您使用的模型而异。Amazon Nova Micro 支持 2、4 或 8 个副本。Amazon Nova Lite 支持 4、8、16 或 32 个副本。Amazon Nova Pro 支持 6、12 或 24 个副本。

    • output_s3_path:存储清单和 TensorBoard 日志的 S3 位置。所提供的 S3 路径中的所有 S3 位置都必须位于同一个账户和区域中。

  • 训练配置

    • max_length:以令牌为单位的最大序列长度。这决定了训练的上下文窗口大小。LoRa PEFT 支持的最大值为 65,536 个代币。

      更长的序列会以增加内存需求为代价提高训练效率。我们建议您将max_length参数与您的数据分布进行匹配。

  • 教练设置

    • max_epochs:通过训练数据集的完整传球次数。您可以设置max_stepsmax_epochs,但我们不建议同时设置两者。最大值为 5。

      通常,较大的数据集需要较少的时代才能收集,而较小的数据集需要更多的时代才能收集。我们建议您根据数据大小调整周期数。

  • 模型设置

    • hidden_dropout: 丢弃隐藏状态输出的概率。将该值增加大约 0.0-0.2 以减少对较小数据集的过度拟合。有效值介于 0-1 之间(含)。

    • attention_dropout: 注意力权重下降的概率。此参数可以帮助进行概括。有效值介于 0-1 之间(含)。

    • ffn_dropout: 丢弃前馈网络输出的概率。有效值介于 0-1 之间(含)。

  • 优化器配置

    • lr: 学习速率,它控制优化期间的步长。为了获得良好的性能,我们建议使用介于 1e-6-1e-4 之间的值。有效值介于 0-1 之间(含)。

    • name:优化器算法。目前仅支持 distributed_fused_adam

    • weight_decay: L2 正则化强度。较高的值(介于 0.01-0.1 之间)会增加正则化。

    • warmup_steps: 逐步提高学习率的步骤数。这提高了训练的稳定性。有效值介于 1-20 之间(含)。

    • min_lr: 衰变结束时的最低学习率。有效值介于 0-1(含)之间,但必须小于学习率。

  • LoRa 配置参数

    • peft_scheme: 设置为lora以启用低等级自适应。

    • alpha: LoRa 权重的缩放系数。通常将其设置为与相同的值adapter_dim

    • adaptor_dropout: LoRa 的正则化参数。

PEFT 食谱

以下是 LoRa PEFT 的配方。

## Run config run: name: "my-lora-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 0.9 - 0.999 sched: warmup_steps: 10 # Learning rate warmup steps constant_steps: 0 # Steps at constant learning rate min_lr: 1e-6 # Minimum learning rate peft: peft_scheme: "lora" # Enable LoRA for parameter-efficient fine-tuning lora_tuning: loraplus_lr_ratio: 8.0 # LoRA+ learning rate scaling factor alpha: 32 # Scaling factor for LoRA weights adapter_dropout: 0.01 # Regularization for LoRA parameters
限制

PEFT 有以下限制:

  • 前面提供的训练配置包含每个参数的推荐值。

  • 中间检查点不会保存以供评估,也无法从中间检查点恢复。仅保存最后一个检查点。

  • MLflow 不支持日志记录。

故障排除

使用以下信息来帮助解决您可能遇到的问题:

  • 用于训练和验证的输入数据集应位于客户拥有的存储桶中,而不是托管存储桶或服务托管的 S3 存储桶中。

  • 如果您在中收到 “未找到区域” 错误 Amazon CLI,请重新提交任务,并在启动任务命令前加上该区域。例如:AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters

  • 要调整超参数,请按照选择超参数中的指导进行操作。