View a markdown version of this page

직접 선호 최적화(DPO) - Amazon Nova

직접 선호 최적화(DPO)

개요

직접 선호 최적화(DPO)는 페어링된 비교 데이터를 사용하여 모델 출력을 인적 선호도에 맞추도록 조정하는 방식으로 파운데이션 모델을 미세 조정하는 조정 기법입니다. 강화 학습 방법과 달리 DPO는 어떤 응답이 더 바람직한지에 대한 사람의 피드백을 기반으로 모델 동작을 직접 최적화하여 보다 안정적이고 확장 가능한 접근 방식을 제공합니다.

DPO를 사용하는 이유

파운데이션 모델은 사실상 정확한 출력을 생성할 수 있지만, 특정 사용자 요구, 조직의 가치, 안전 요구 사항과 일치하지 않을 수 있습니다. DPO는 다음을 지원하며 이 문제를 해결합니다.

  • 원하는 동작 패턴에 맞게 모델 미세 조정

  • 원치 않는 출력이나 유해한 응답 감소

  • 브랜드 톤과 커뮤니케이션 가이드라인에 맞춘 응답 정렬

  • 도메인 전문가 피드백을 기반으로 한 응답 품질 향상

  • 선호 응답 패턴을 통해 안전 가드레일 구현

DPO의 작동 방식

DPO는 두 가지 가능한 응답 중 어느 것이 선호되는지 인간 평가자가 표시한 쌍 예제를 사용합니다. 모델은 선호되는 응답을 생성할 가능성을 최대화하고 원치 않는 응답 가능성은 최소화하도록 학습합니다.

DPO를 사용해야 하는 경우

다음 시나리오에서 DPO를 사용합니다.

  • 특정 인적 선호도에 맞춘 주관적 출력 최적화

  • 모델의 어조, 스타일 또는 콘텐츠 특성 조정

  • 사용자 피드백 및 오류 분석을 기반으로 목표 개선 사항 달성

  • 다양한 사용 사례에서 일관된 출력 품질 유지

  • 선호 데이터만 사용하여 보상 없는 강화 학습으로 훈련

지원되는 모델 및 기법

DPO는 전체 파라미터 미세 조정과 저순위 적응(LoRA)을 모두 지원합니다.

모델 지원되는 입력 인스턴스 유형 권장 인스턴스 수 허용된 인스턴스 수
Amazon Nova Micro 텍스트 ml.p5.48xlarge 2 2, 4, 8
Amazon Nova Lite 텍스트, 이미지 ml.p5.48xlarge 4 2, 4, 8, 16
Amazon Nova Pro 텍스트, 이미지 ml.p5.48xlarge 6 6, 12, 24

훈련 접근 방식

  • 전체 순위 DPO: 모든 모델 파라미터를 업데이트합니다. 잠재적으로 더 나은 조정 품질을 제공하지만 더 많은 컴퓨팅 리소스가 필요하고 더 큰 모델을 생성합니다.

  • LoRA DPO: 파라미터 효율적 미세 조정을 위해 경량 어댑터를 사용합니다. 우수한 조정 품질을 유지 관리하면서 더 작은 출력 모델로 더 효율적인 훈련 및 배포를 제공합니다.

대부분의 사용 사례에서 LoRA 접근 방식은 효율성을 크게 개선하여 충분한 적응 기능을 제공합니다.

데이터 형식

DPO 훈련 데이터는 마지막 어시스턴트 턴에는 preferrednon-preferred 레이블이 있는 기본 설정 페어가 포함되어야 한다는 점을 제외하면 SFT와 동일한 형식을 따릅니다.

기본 구조

마지막 어시스턴트 턴은 content 대신 candidates 배열을 사용합니다.

{ "role": "assistant", "candidates": [ { "content": [ { "text": "This is the preferred response." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "This is the non-preferred response." } ], "preferenceLabel": "non-preferred" } ] }

전체 텍스트 예제

{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a helpful assistant." } ], "messages": [ { "role": "user", "content": [ { "text": "What is the capital of France?" } ] }, { "role": "assistant", "content": [ { "text": "The capital of France is Paris." } ] }, { "role": "user", "content": [ { "text": "Tell me more about it." } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "Paris is the capital and largest city of France, known for the Eiffel Tower, world-class museums like the Louvre, and its rich cultural heritage." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "Paris is a city in France." } ], "preferenceLabel": "non-preferred" } ] } ] }

이미지를 포함하는 예제

{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are a helpful assistant." } ], "messages": [ { "role": "user", "content": [ { "text": "Describe this image." }, { "image": { "format": "jpeg", "source": { "s3Location": { "uri": "s3://your-bucket/your-path/image.jpg", "bucketOwner": "your-aws-account-id" } } } } ] }, { "role": "assistant", "candidates": [ { "content": [ { "text": "The image shows a detailed description with relevant context and observations." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "This is a picture." } ], "preferenceLabel": "non-preferred" } ] } ] }

데이터 세트 요구 사항

  • 형식: 훈련을 위한 단일 JSONL 파일, 검증을 위한 단일 JSONL 파일(선택 사항)

  • 최소 크기: 효과적인 훈련에 권장되는 선호 페어 1,000개

  • 품질: 고품질 기본 설정 데이터로 보다 효과적인 결과 생성

  • 기타 제약 조건: SFT와 동일합니다. 자세한 내용은 데이터세트 제약 조건을 참조하세요.

데이터 업로드

aws s3 cp /path/to/training-data/ s3://your-bucket/train/ --recursive aws s3 cp /path/to/validation-data/ s3://your-bucket/val/ --recursive

레시피 구성

일반 실행 구성

run: name: "my-dpo-run" model_type: "amazon.nova-lite-v1:0:300k" model_name_or_path: "nova-lite/prod" replicas: 4
파라미터 설명
name 훈련 작업을 설명하는 이름
model_type Nova 모델 변형(수정하지 않음)
model_name_or_path 기본 모델 경로(수정하지 않음)
replicas 분산 훈련에 대한 컴퓨팅 인스턴스 수

훈련 구성

training_config: max_length: 16384 global_batch_size: 32 trainer: max_epochs: 3 model: hidden_dropout: 0.0 attention_dropout: 0.0 ffn_dropout: 0.0
파라미터 설명 Range
max_length 토큰 단위의 최대 시퀀스 길이 1024~32768
global_batch_size 옵티마이저 단계당 샘플 Micro/Lite/Pro: 16, 32, 64, 128. Micro/Lite: 256
max_epochs 데이터세트를 통과한 훈련 최소: 1
hidden_dropout 숨겨진 상태에 대한 드롭아웃 0.0~1.0
attention_dropout 관심 가중치에 대한 드롭아웃 0.0~1.0
ffn_dropout 피드포워드 계층에 대한 드롭아웃 0.0~1.0

옵티마이저 구성

model: optim: lr: 1e-5 name: distributed_fused_adam adam_w_mode: true eps: 1e-08 weight_decay: 0.0 betas: - 0.9 - 0.999 sched: warmup_steps: 10 constant_steps: 0 min_lr: 1e-6
파라미터 설명 Range
lr 학습률 0~1(일반적으로 1e-6~1e-4)
weight_decay L2 정규화 강도 0.0~1.0
warmup_steps 학습 속도가 점진적으로 증가하는 단계 0~20
min_lr 감소 종료 시의 최소 학습 속도 0~1(< lr이어야 함)

DPO 특정 구성

model: dpo_cfg: beta: 0.1
파라미터 설명 Range
beta 훈련 데이터 적합과 원래 모델과 가깝게 유지 사이에서 균형 0.001~0.5
  • 더 높은 베타(0.1): 더 많은 참조 모델 동작을 유지하지만 기본 설정을 더 느리게 학습할 수 있음

  • 낮은 베타(0.01~0.05): 보다 적극적으로 기본 설정을 학습하지만 참조 기준과 차이를 보일 위험이 있음

권장 사항: beta: 0.1으로 시작하고 기본 설정 학습이 충분하지 않은 경우 하향 조정합니다.

LoRA PEFT 구성

model: peft: peft_scheme: "lora" lora_tuning: loraplus_lr_ratio: 64.0 alpha: 32 adapter_dropout: 0.01
파라미터 설명 허용된 값
peft_scheme 미세 조정 방법 "lora" 또는 null(전체 순위)
alpha LoRA 가중치의 조정 인수 32, 64, 96, 128, 160, 192
loraplus_lr_ratio LoRA+ 학습 속도 조정 인자 0.0~100.0
adapter_dropout LoRA 파라미터에 대한 정규화 0.0~1.0

훈련 작업 시작

컨테이너 이미지

708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest

예제 코드

from sagemaker.pytorch import PyTorch from sagemaker.inputs import TrainingInput instance_type = "ml.p5.48xlarge" instance_count = 4 image_uri = "708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest" recipe_overrides = { "training_config": { "trainer": {"max_epochs": 2}, "model": { "dpo_cfg": {"beta": 0.1}, "peft": { "peft_scheme": "lora", "lora_tuning": { "loraplus_lr_ratio": 64.0, "alpha": 32, "adapter_dropout": 0.01, }, }, }, }, } estimator = PyTorch( output_path=f"s3://{bucket_name}/{job_name}", base_job_name=job_name, role=role, instance_count=instance_count, instance_type=instance_type, training_recipe="fine-tuning/nova/nova_lite_p5_gpu_lora_dpo", recipe_overrides=recipe_overrides, max_run=18000, sagemaker_session=sagemaker_session, image_uri=image_uri, disable_profiler=True, debugger_hook_config=False, ) train_input = TrainingInput( s3_data=train_dataset_s3_path, distribution="FullyReplicated", s3_data_type="Converse", ) val_input = TrainingInput( s3_data=val_dataset_s3_path, distribution="FullyReplicated", s3_data_type="Converse", ) estimator.fit(inputs={"train": train_input, "validation": val_input}, wait=True)

모델 배포

훈련이 완료되면 사용자 지정 모델 가져오기 기능을 사용하여 사용자 지정 모델을 Amazon Bedrock에 배포합니다. 모델은 프로비저닝된 처리량과 온디맨드 추론을 모두 지원합니다. LoRA 훈련 모델은 온디맨드 추론을 지원합니다.

배포 지침은 사용자 지정된 모델 배포를 참조하세요.

제한 사항

  • 입력 모달리티: DPO는 텍스트 및 이미지만 허용합니다. 비디오 입력은 지원되지 않습니다.

  • 출력 양식: 텍스트만

  • 기본 설정 페어: 최종 어시스턴트 턴에는 preferrednon-preferred 레이블이 있는 정확히 두 개의 후보가 포함되어야 함

  • 이미지 제한: 콘텐츠 블록당 최대 10개의 이미지

  • 혼합 모달리티: 동일한 훈련 작업에서 텍스트, 이미지 및 비디오를 결합할 수 없음