本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
直接偏好最佳化 (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-pro/prod
、nova-lite/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。一般而言,較大的資料集需要較少的 epoch 才能收斂,而較小的資料集則需要更多 epoch 才能收斂。我們建議您根據資料大小調整 epoch 的數量。
-
-
模型設定
-
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-pro/prod
、nova-lite/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。一般而言,較大的資料集需要較少的 epoch 才能收斂,而較小的資料集則需要更多 epoch 才能收斂。我們建議您根據資料大小調整 epoch 的數量。
-
-
模型設定
-
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 記錄。
-
若要調整超參數,請遵循選取超參數中的指示。