Otimização direta de preferências (DPO)
Visão geral
A otimização direta de preferências (DPO) é uma técnica de alinhamento que ajusta modelos de base usando dados de comparação emparelhados para alinhar as saídas do modelo com as preferências humanas. Ao contrário dos métodos de aprendizado por reforço, a DPO otimiza diretamente o comportamento dos modelos com base no feedback humano sobre quais são as respostas mais desejáveis, oferecendo uma abordagem mais estável e escalável.
Por que usar a DPO
Os modelos de base podem gerar resultados que estão factualmente corretos, mas que não estão alinhados com as necessidades específicas do usuário, com os valores organizacionais ou com os requisitos de segurança. A DPO resolve essa questão permitindo que você:
Ajuste os modelos de acordo com os padrões de comportamento desejados
Reduza as saídas indesejadas ou prejudiciais
Alinhe as respostas do modelo com as diretrizes de voz e comunicação da marca
Melhore a qualidade das respostas com base no feedback de especialistas no domínio
Implemente barreiras de proteção por meio de padrões de resposta preferenciais
Como a DPO funciona
A DPO usa exemplos pareados nos quais avaliadores humanos indicam qual de duas respostas possíveis é a resposta preferida. O modelo aprende a maximizar a probabilidade de gerar respostas preferidas enquanto minimiza as respostas indesejadas.
Quando usar a DPO
Use a DPO nos seguintes cenários:
Otimização para saídas subjetivas que exijam alinhamento com preferências humanas específicas
Ajuste do tom, do estilo ou das características de conteúdo do modelo
Realização de melhorias específicas com base nos feedbacks dos usuários e na análise dos erros.
Manutenção da qualidade consistente das saídas em diferentes casos de uso
Treinamento com aprendizado por reforço sem recompensa usando apenas dados preferenciais
Modelos e técnicas compatíveis
O DPO oferece suporte ao ajuste fino de parâmetros completos e à LoRA (adaptação low-rank):
| Modelo | Entradas compatíveis | Tipo de instância | Contagem de instâncias recomendada | Contagem de instâncias permitidas |
|---|---|---|---|---|
| Amazon Nova Micro | Texto | ml.p5.48xlarge | 2 | 2, 4, 8 |
| Amazon Nova Lite | Texto, imagem | ml.p5.48xlarge | 4 | 2, 4, 8, 16 |
| Amazon Nova Pro | Texto, imagem | ml.p5.48xlarge | 6 | 6, 12, 24 |
Abordagens de treinamento
DPO full-rank: atualiza todos os parâmetros dos modelos. Potencialmente entrega uma melhor qualidade de alinhamento, mas requer mais recursos computacionais e gera modelos maiores.
DPO LoRA: usa adaptadores leves para um ajuste fino com eficiência de parâmetros. Oferece treinamento e implantação mais eficientes com modelos de saída menores, mantendo uma boa qualidade de alinhamento.
Para a maioria dos casos de uso, a abordagem LoRA fornece capacidade de adaptação suficiente com eficiência significativamente superior.
Formato de dados
Os dados de treinamento da DPO seguem o mesmo formato do SFT, exceto que o último turno do assistente deve conter pares de preferências com preferred e rótulos non-preferred.
Estrutura básica
O turno final do assistente usa uma matriz candidates em vez de content:
{ "role": "assistant", "candidates": [ { "content": [ { "text": "This is the preferred response." } ], "preferenceLabel": "preferred" }, { "content": [ { "text": "This is the non-preferred response." } ], "preferenceLabel": "non-preferred" } ] }
Concluir o texto de exemplo
{ "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" } ] } ] }
Exemplo com imagens
{ "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" } ] } ] }
Requisitos de conjunto de dados
Formato: arquivo JSONL único para treinamento, arquivo JSONL único para validação (opcional)
Tamanho mínimo: são recomendados 1.000 pares de preferências para um treinamento eficaz
Qualidade: dados de preferência de alta qualidade geram resultados mais eficazes
Outras restrições: as mesmas do SFT. Para ter mais informações, consulte Restrições de conjuntos de dados.
Upload dos dados
aws s3 cp /path/to/training-data/ s3://your-bucket/train/ --recursive aws s3 cp /path/to/validation-data/ s3://your-bucket/val/ --recursive
Configuração de fórmula
Configuração geral de execução
run: name: "my-dpo-run" model_type: "amazon.nova-lite-v1:0:300k" model_name_or_path: "nova-lite/prod" replicas: 4
| Parameter | Descrição |
|---|---|
name |
Um nome descritivo para sua tarefa de treinamento. |
model_type |
Variante do modelo Nova (não modificar) |
model_name_or_path |
Caminho do modelo de base (não modificar) |
replicas |
O número de instâncias de computação para treinamento distribuído |
Configuração do treinamento
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
| Parameter | Descrição | Intervalo |
|---|---|---|
max_length |
O tamanho máximo da sequência em tokens | 1024–32768 |
global_batch_size |
Amostras por etapa do otimizador | Micro/Lite/Pro: 16, 32, 64, 128. Micro/Lite: 256 |
max_epochs |
O treinamento passa pelo conjunto de dados | Mín.: 1 |
hidden_dropout |
Dropout nos estados ocultos | 0, 0 a 1,0 |
attention_dropout |
Dropout nos pesos de atenção | 0, 0 a 1,0 |
ffn_dropout |
Dropout em camadas de alimentação direta | 0, 0 a 1,0 |
Configuração do otimizador
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
| Parameter | Descrição | Intervalo |
|---|---|---|
lr |
Taxa de aprendizado | 0–1 (normalmente 1e-6 a 1e-4) |
weight_decay |
Força de regularização de L2 | 0, 0 a 1,0 |
warmup_steps |
Etapas para aumentar gradualmente a taxa de aprendizado | 0 a 20 |
min_lr |
Taxa mínima de aprendizado no final do decaimento | 0–1 (deve ser < Ir) |
Configuração específica da DPO
model: dpo_cfg: beta: 0.1
| Parameter | Descrição | Intervalo |
|---|---|---|
beta |
Equilíbrio entre ajustar os dados de treinamento e permanecer próximo ao modelo original | 0,001–0,5 |
Beta superior (0,1): preserva mais o comportamento do modelo de referência, mas pode aprender as preferências mais lentamente.
Beta inferior (0,01–0,05): aprendizado preferencial mais agressiva, mas corre o risco de divergência da referência.
Recomendação: comece com beta: 0.1 e ajuste para baixo se o aprendizado preferencial parecer insuficiente.
Configuração PEFT LoRA
model: peft: peft_scheme: "lora" lora_tuning: loraplus_lr_ratio: 64.0 alpha: 32 adapter_dropout: 0.01
| Parameter | Descrição | Valores permitidos |
|---|---|---|
peft_scheme |
Método de ajuste fino | "lora" ou null (full-rank) |
alpha |
Fator de escala para os pesos LoRA | 32, 64, 96, 128, 160, 192 |
loraplus_lr_ratio |
Fator de escala da taxa de aprendizado LoRA+ | 0,0–100,0 |
adapter_dropout |
Regularização para parâmetros de LoRA. | 0, 0 a 1,0 |
Início de uma tarefa de treinamento
Imagem de contêiner
708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-DPO-latest
Código de exemplo
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)
Implantação do modelo
Após a conclusão do treinamento, implante o modelo personalizado no Amazon Bedrock usando a funcionalidade de importação de modelos personalizados. O modelo é compatível tanto com o throughput provisionado quanto com a inferência sob demanda. Modelos treinados pela LoRA são compatíveis com a inferência sob demanda.
Para obter instruções de implantação, consulte Implantação de modelos personalizados.
Limitações
Modalidades de entrada: a DPO aceita somente texto e imagens. A entrada de vídeo não é compatível.
Modalidade de saída: somente texto
Pares de preferências: o turno final de assistente deve conter exatamente dois candidatos com os rótulos
preferredenon-preferred.Limite de imagens: máximo de dez imagens por bloco de conteúdo
Modalidades mistas: não é possível combinar texto, imagem e vídeo na mesma tarefa de treinamento.