本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
监督微调 (SFT)
以下各节概述了监督微调 (SFT) 的过程,包括全级 SFT 和参数高效的 SFT。
全等级监督微调 (SFT)
监督式微调 (SFT) 是指向基础模型提供一组提示-响应对的过程,用于提高预训练基础模型在特定任务中的性能。标注示例的格式为提示-回答对,措辞为指示。这个微调过程修改模型的权重。
当您拥有需要提供特定提示-响应对来获得最佳结果的特定领域数据时,应使用 SFT。
请注意,您的训练和验证输入数据集必须位于客户拥有的存储桶中,而不是存储在托管或服务托管的 S3 存储桶中。
数据要求
对于全级 SFT 和低等级适配器 (LoRa) SFT,数据应遵循亚马逊 Bedrock Converse 的操作格式。有关此格式的示例和约束条件,请参阅准备数据以进行微调了解模型。
要在提交数据集之前验证您的数据集格式,我们建议使用 Amazon Bedrock 示例存储库中的验证脚
可用于 SFT 进行调整的 Amazon Nova 参数如下:
-
运行配置
-
name
: 您的训练作业的描述性名称。这有助于确定您的工作 AWS Management Console。 -
model_type
: 要使用的亚马逊 Nova 型号变体。可用选项有amazon.nova-micro-v1:0:128k
amazon.nova-lite-v1:0:300k
、或amazon.nova-pro-v1:0:300k
。 -
model_name_or_path
:用于训练的基础模型的路径。从nova-micro/prod
、nova-lite/prod
nova-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 文件。此文件必须位于与集群相同的 AWS 账户 区域中。所提供的 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 此配方还假设您已使用正确的 AWS 凭证连接到 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
: 您的训练作业的描述性名称。这有助于确定您的工作 AWS Management Console。 -
model_type
: 要使用的 Nova 模型变体。可用选项有amazon.nova-micro-v1:0:128k
amazon.nova-lite-v1:0:300k
、或amazon.nova-pro-v1:0:300k
。 -
model_name_or_path
:用于训练的基础模型的路径。选择要使用的模型。可用选项有nova-micro/prod
、nova-lite/prod
nova-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_steps
或max_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 存储桶中。
-
如果您在中收到 “未找到区域” 错误 AWS CLI,请重新提交任务,并在启动任务命令前加上该区域。例如:
AWS_REGION=us-east-1 hyperpod start-job ...
。Job Parameters
-
要调整超参数,请按照选择超参数中的指导进行操作。