本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
直接偏好优化 (DPO)
直接偏好优化 (DPO) 是一种高效的基础模型微调方法,它使用配对的比较数据使模型输出与人类偏好保持一致。这种方法可以根据人类关于哪些响应更理想的反馈来直接优化模型行为。
全秩 DPO 和低秩适配器 (LoRA) DPO 均可用。
数据格式要求
对于全等级和 LoRa DPO,训练数据格式要求与 SFT 类似。但是,对于 DPO,最后一回合需要有偏好对。以下是 DPO 数据格式的示例:
// N-1 turns same as SFT format { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } // content list can contain multiple 'text' objects ], "preferenceLabel": "non-preferred" } ] }
以下是另一个完整的 DPO 文本示例:
{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }
以下是完整的 DPO 图片示例:
{ "system": [ { "text": "..." } ], "messages":[ { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "content": [ { "text": "..." } ] }, { "role": "user", "content": [ { "text": "..." }, { "text": "..." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/your-image.jpg", "bucketOwner": "your-aws-account-id" } } } } // "content" can have multiple "text" and "image" objects. // max image count is 10 ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "..." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "..." } ], "preferenceLabel": "non-preferred" } ] } ], }
对输入数据集的其他限制也适用。有关更多信息,请参阅数据集约束。我们建议您加入至少 1,000 个偏好对,以便进行有效的训练。高质量的偏好数据可以带来更有效的结果。
我们建议在以下场景中使用 DPO:
-
针对需要符合特定人类偏好的主观输出进行优化。
-
调整模型的语气、风格或内容特征以匹配预期的响应模式。
-
根据用户反馈和错误分析对现有模型进行针对性的改进。
-
在不同用例中保持一致的输出质量。
-
通过偏好的响应模式实施安全护栏。
-
使用无奖励强化学习进行训练。
-
仅使用偏好数据,而非已评分或标注的数据。
-
在细致的对齐任务中改进模型,例如有用、无害或诚实。
全级 DPO
可用于完整等级 DPO 的 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 文件。此文件必须与集群位于相同的账户和区域中。提供的所有 S3 地点都必须位于同一个账户和区域中。 -
validation_data_s3_path
:验证数据集的 S3 位置,它是一个 JSONL 文件。此文件必须位于与集群相同的 AWS 账户 区域中。提供的所有 S3 地点都必须位于同一个账户和区域中。
-
-
训练配置
-
max_length
:以令牌为单位的最大序列长度。这决定了训练的上下文窗口大小。DPO 支持的最大值为 32,768 个代币。更长的序列会以增加内存需求为代价提高训练效率。我们建议您将
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-4 之间的值。有效值介于 0-1 之间(含)。 -
name
:优化器算法。目前仅支持distributed_fused_adam
。 -
weight_decay
: L2 正则化强度。较高的值(介于 0.01-0.1 之间)会增加正则化。 -
warmup_steps
: 逐步提高学习率的步骤数。这提高了训练的稳定性。有效值介于 1-20 之间(含)。 -
min_lr
: 衰变结束时的最低学习率。有效值介于 0-1(含)之间,但必须小于学习率。
-
-
DPO 配置
-
beta
:确定模型应与训练数据或原始模型的拟合程度。有效值介于 0.001-0.5 之间(含)。指定较大的值(例如 0.5)以保留更多的参考模型行为,同时更慢地学习新的首选项。指定较小的值(例如 0.01-0.05)可以更快地学习新的首选项,但可能会偏离参考模型的行为。
-
全级 DPO 配方
以下是 DPO 的完整等级配方
## Run config run: name: "my-dpo-micro-job" # A descriptive name for your training job model_type: "amazon.nova-micro-v1:0:128k" # Model variant specification, do not change model_name_or_path: "nova-micro/prod" # Base model path, do not change replicas: 2 # Number of compute instances for training, allowed values are 2, 4, 8 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). global_batch_size: 64 # Global batch size, allowed values are 16, 32, 64. trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states, must be between 0.0 and 1.0 attention_dropout: 0.0 # Dropout for attention weights, must be between 0.0 and 1.0 ffn_dropout: 0.0 # Dropout for feed-forward networks, must be between 0.0 and 1.0 optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm, do not change adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength, must be between 0.0 and 1.0 betas: # Adam optimizer betas, must be between 0.0 and 1.0 - 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, must be lower than lr dpo_cfg: beta: 0.1 # Strength of preference enforcement. Limits: [0.001, 0.5] peft: peft_scheme: null # Disable LoRA, trigger full rank fine tuning
低等级适配器 DPO
适用于低等级适配器 DPO 的 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 个副本。
-
-
训练配置
-
max_length
:以令牌为单位的最大序列长度。这决定了训练的上下文窗口大小。DPO 支持的最大值为 32,768 个代币。更长的序列会以增加内存需求为代价提高训练效率。我们建议您将
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-4 之间的值。有效值介于 0-1 之间(含)。 -
name
:优化器算法。目前仅支持distributed_fused_adam
。 -
weight_decay
: L2 正则化强度。较高的值(介于 0.01-0.1 之间)会增加正则化。 -
warmup_steps
: 逐步提高学习率的步骤数。这提高了训练的稳定性。有效值介于 1-20 之间(含)。 -
min_lr
: 衰变结束时的最低学习率。有效值介于 0-1(含)之间,但必须小于学习率。
-
-
DPO 配置
-
beta
:确定模型应与训练数据或原始模型的拟合程度。有效值介于 0.001-0.5 之间(含)。指定较大的值(例如 0.5)以保留更多的参考模型行为,同时更慢地学习新的首选项。指定较小的值(例如 0.01-0.05)可以更快地学习新的首选项,但可能会偏离参考模型的行为。
-
-
LoRa 配置参数
-
peft_scheme
: 设置lora
为启用低等级自适应,从而生成效率更高、输出更小的模型。还提供以下特定于 Lora 的属性:-
alpha
: LoRa 权重的缩放系数。通常将其设置为与相同的值adapter_dim
。 -
adapter_dropout
: LoRa 参数的正则化参数。
-
-
LoRa DPO 食谱
以下是 LoRa DPO 的秘诀。
## 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, do not change model_name_or_path: "nova-lite/prod" # Base model path, do not change replicas: 4 # Number of compute instances for training. All supported values: {4, 8, 16} 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: 16384 # Maximum context window size (tokens). Should be between [1024, 32768] and multiple of 1024. # Note: Image dataset for DPO has a limit on 20k samples and 16384 max_length global_batch_size: 64 # Total samples per step. Limits: {16, 32, 64, 128, 256} trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states. Limits: [0.0, 1.0] attention_dropout: 0.0 # Dropout for attention weights. Limits: [0.0, 1.0] ffn_dropout: 0.0 # Dropout for feed-forward networks. Limits: [0.0, 1.0] optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm, do not change adam_w_mode: true # Enable AdamW mode eps: 1e-08 # Epsilon for numerical stability weight_decay: 0.01 # L2 regularization strength betas: # Adam optimizer betas. Limits: [0.0, 1.0] - 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 dpo_cfg: beta: 0.01 # Strength of preference enforcement. Limits: [0.001, 0.5] peft: peft_scheme: "lora" # Enable LoRA for parameter-efficient fine-tuning lora_tuning: loraplus_lr_ratio: 20.0 # LoRA+ learning rate scaling factor. Limits: [0.0, 100.0] alpha: 64 # Scaling factor for LoRA weights. [32, 64, 96, 128, 160, 192] adapter_dropout: 0.01 # Regularization for LoRA parameters. Limits: [0.0, 1.0]
限制
DPO 有以下限制:
-
中间检查点不会保存以供评估,也无法从中间检查点恢复。仅保存最后一个检查点。
-
MLflow 不支持日志记录。
-
要调整超参数,请按照选择超参数中的指导进行操作。