직접 선호 최적화(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 콘솔에서 작업을 식별하는 데 도움이 됩니다. -
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: 훈련 데이터세트(JSONL 파일)의 S3 위치입니다. 이 파일은 클러스터와 동일한 계정 및 리전에 있어야 합니다. 제공된 모든 S3 위치는 동일한 계정 및 리전에 있어야 합니다. -
validation_data_s3_path: 검증 데이터세트(JSONL 파일)의 S3 위치입니다. 이 파일은 클러스터와 동일한 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 콘솔에서 작업을 식별하는 데 도움이 됩니다. -
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 로깅은 지원되지 않습니다.
-
하이퍼파라미터를 조정하려면 하이퍼파라미터 선택의 지침을 따릅니다.