Otimização direta de preferências (DPO)
A otimização direta de preferências (DPO) é um método eficiente de ajuste para modelos de base, que usa dados de comparação emparelhados para alinhar as saídas do modelo com preferências humanas. Essa abordagem permite a otimização direta do comportamento do modelo com base no feedback humano sobre quais são as respostas mais desejáveis.
Tanto a DPO completa quanto a DPO de adaptador de classe baixa (LoRA) estão disponíveis.
Requisitos de formato de dados
Para DPO de classificação completa e LoRa, os requisitos de formato de dados de treinamento são semelhantes aos do SFT. No entanto, para a DPO, o turno final precisa ter pares preferenciais. Este é um exemplo de formato de dados da 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" } ] }
Este é outro exemplo completo de texto da 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" } ] } ], }
Este é um exemplo completo de imagem da 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" } ] } ], }
Outras restrições nos conjuntos de dados de entrada se aplicam. Para ter mais informações, consulte Restrições de conjuntos de dados. Recomendamos que você inclua um mínimo de mil pares de preferências para que o treinamento seja eficaz. Dados de preferência de alta qualidade geram resultados mais eficientes.
É recomendável usar a DPO nos seguintes cenários:
-
Otimização para resultados subjetivos que exijam alinhamento com preferências humanas específicas.
-
Ajuste do tom, estilo ou características de conteúdo do modelo para atender aos padrões de resposta desejados.
-
Realização de melhorias específicas em um modelo existente com base em feedback dos usuários e análise dos erros.
-
Manutenção de qualidade de saída consistente em diferentes casos de uso.
-
Implementação de barreiras de segurança por meio de padrões de resposta preferenciais.
-
Treinamento com aprendizado por reforço sem recompensa.
-
Uso apenas dados de preferência em vez de dados avaliados ou rotulados.
-
Aprimoramento do modelo em tarefas de alinhamento com nuances, como utilidade, inocuidade ou honestidade.
DPO de classificação completa
Os parâmetros do Amazon Nova que estão disponíveis para DPO de classificação completa são os seguintes:
-
Configuração da execução
-
name: um nome descritivo para a tarefa de treinamento. Isso ajuda a identificar sua tarefa no Console de gerenciamento da AWS. -
model_type: a variante do modelo do Nova a ser usada. As opções disponíveis sãoamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300kouamazon.nova-pro-v1:0:300k. -
model_name_or_path: o caminho para o modelo de base. Selecione o modelo a ser usado, comonova-micro/prod,nova-lite/prodounova-pro/prod, ou o caminho do S3 para o ponto de verificação pós-treinamento (s3://<escrow bucket>/<job id>/outputs/checkpoints). -
replicas: o número de instâncias de computação a serem usadas no treinamento distribuído. Os valores disponíveis variam de acordo com o modelo escolhido. O Amazon Nova Micro permite 2, 4 ou 8 réplicas. O Amazon Nova Lite permite 4, 8, 16 ou 32 réplicas. O Amazon Nova Pro permite 6, 12 ou 24 réplicas. -
data_s3_path: o local no S3 do conjunto de dados de treinamento, que é um arquivo JSONL. Esse arquivo deve estar na mesma conta e região que o cluster. Todos os locais do S3 fornecidos devem estar na mesma conta e região. -
validation_data_s3_path: o local no S3 do conjunto de dados de validação, que é um arquivo JSONL. Esse arquivo deve residir na mesma região e Conta da AWS que o cluster. Todos os locais do S3 fornecidos devem estar na mesma conta e região.
-
-
Configuração do treinamento
-
max_length: o tamanho máximo da sequência em tokens. Isso determina o tamanho da janela de contexto para treinamento. O valor máximo permitido é 32.768 tokens para DPO.Sequências mais longas melhorarão a eficiência do treinamento à custa de maiores requisitos de memória. Recomendamos que você compatibilize o parâmetro
max_lengthcom sua distribuição de dados.
-
-
Configurações do treinador
-
max_epochs: o número de passagens completas pelo conjunto de dados de treinamento. O valor máximo é 5.Em geral, conjuntos de dados maiores exigem menos épocas para convergir, enquanto conjuntos de dados menores exigem mais épocas para convergir. Recomendamos que você ajuste o número de épocas com base no tamanho dos seus dados.
-
-
Configurações do modelo
-
hidden_dropout: a probabilidade de descartar saídas de estado oculto. Aumente esse valor em aproximadamente 0,0-0,2 para reduzir o sobreajuste em conjuntos de dados menores. Os valores válidos estão entre 0 e 1, inclusive. -
attention_dropout: a probabilidade de descartar os pesos de atenção. Esse parâmetro pode ajudar na generalização. Os valores válidos estão entre 0 e 1, inclusive. -
ffn_dropout: a probabilidade de descartar as saídas da rede de alimentação direta. Os valores válidos estão entre 0 e 1, inclusive.
-
-
Configuração do otimizador
-
lr: a taxa de aprendizado, que controla o tamanho da etapa durante a otimização. Recomendamos valores entre 1e-6 e 1e-4 para um obter bom desempenho. Os valores válidos estão entre 0 e 1, inclusive. -
name: o algoritmo otimizador. No momento, só há compatibilidade comdistributed_fused_adam. -
weight_decay: a força de regularização de L2. Valores mais altos (entre 0,01 e 0,1) aumentam a regularização. -
warmup_steps: o número de etapas para aumentar gradualmente a taxa de aprendizado. Isso melhora a estabilidade do treinamento. Os valores válidos estão entre 1 e 20, inclusive. -
min_lr: a taxa mínima de aprendizado no final da queda. Os valores válidos estão entre 0-1, inclusive, mas devem ser menores que a taxa de aprendizado.
-
-
Configuração da DPO
-
beta: determina até que ponto o modelo deve se ajustar aos dados de treinamento ou ao modelo original. Os valores válidos estão entre 0,00001 e 0,5, inclusive.Especifique valores maiores (por exemplo, 0,5) para preservar mais o comportamento do modelo de referência, embora com um aprendizado mais lento de novas preferências. Especifique valores menores (por exemplo, 0,01-0,05) para que o modelo aprenda mais rapidamente novas preferências, em detrimento do risco de divergir do comportamento do modelo de referência.
-
Fórmula de classificação completa para DPO
A seguir é apresentada uma fórmula de classificação completa para 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 de adaptador de baixa classificação
Os parâmetros do Amazon Nova que estão disponíveis para o adaptador de DPO de baixa classificação são os seguintes:
-
Configuração da execução
-
name: um nome descritivo para a tarefa de treinamento. Isso ajuda a identificar sua tarefa no Console de gerenciamento da AWS. -
model_type: a variante do modelo do Nova a ser usada. As opções disponíveis sãoamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300kouamazon.nova-pro-v1:0:300k. -
model_name_or_path: o caminho para o modelo de base. Selecione o modelo a ser usado, comonova-micro/prod,nova-lite/prodounova-pro/prod, ou o caminho do S3 para o ponto de verificação pós-treinamento (s3://<escrow bucket>/<job id>/outputs/checkpoints). -
replicas: o número de instâncias de computação a serem usadas no treinamento distribuído. Os valores disponíveis variam de acordo com o modelo escolhido. O Amazon Nova Micro permite 2, 4 ou 8 réplicas. O Amazon Nova Lite permite 4, 8, 16 ou 32 réplicas. O Amazon Nova Pro permite 6, 12 ou 24 réplicas.
-
-
Configuração do treinamento
-
max_length: o tamanho máximo da sequência em tokens. Isso determina o tamanho da janela de contexto para treinamento. O valor máximo permitido é 32.768 tokens para DPO.Sequências mais longas melhorarão a eficiência do treinamento à custa de maiores requisitos de memória. Recomendamos que você compatibilize o parâmetro
max_lengthcom sua distribuição de dados.
-
-
Configurações do treinador
-
max_epochs: o número de passagens completas pelo conjunto de dados de treinamento. O valor máximo é 5.Em geral, conjuntos de dados maiores exigem menos épocas para convergir, enquanto conjuntos de dados menores exigem mais épocas para convergir. Recomendamos que você ajuste o número de épocas com base no tamanho dos seus dados.
-
-
Configurações do modelo
-
hidden_dropout: a probabilidade de descartar saídas de estado oculto. Aumente esse valor em aproximadamente 0,0-0,2 para reduzir o sobreajuste em conjuntos de dados menores. Os valores válidos estão entre 0 e 1, inclusive. -
attention_dropout: a probabilidade de descartar os pesos de atenção. Esse parâmetro pode ajudar na generalização. Os valores válidos estão entre 0 e 1, inclusive. -
ffn_dropout: a probabilidade de descartar as saídas da rede de alimentação direta. Os valores válidos estão entre 0 e 1, inclusive.
-
-
Configuração do otimizador
-
lr: a taxa de aprendizado, que controla o tamanho da etapa durante a otimização. Recomendamos valores entre 1e-6 e 1e-4 para um obter bom desempenho. Os valores válidos estão entre 0 e 1, inclusive. -
name: o algoritmo otimizador. No momento, só há compatibilidade comdistributed_fused_adam. -
weight_decay: a força de regularização de L2. Valores mais altos (entre 0,01 e 0,1) aumentam a regularização. -
warmup_steps: o número de etapas para aumentar gradualmente a taxa de aprendizado. Isso melhora a estabilidade do treinamento. Os valores válidos estão entre 1 e 20, inclusive. -
min_lr: a taxa mínima de aprendizado no final da queda. Os valores válidos estão entre 0-1, inclusive, mas devem ser menores que a taxa de aprendizado.
-
-
Configuração da DPO
-
beta: determina até que ponto o modelo deve se ajustar aos dados de treinamento ou ao modelo original. Os valores válidos estão entre 0,00001 e 0,5, inclusive.Especifique valores maiores (por exemplo, 0,5) para preservar mais o comportamento do modelo de referência, embora com um aprendizado mais lento de novas preferências. Especifique valores menores (por exemplo, 0,01-0,05) para que o modelo aprenda mais rapidamente novas preferências, em detrimento do risco de divergir do comportamento do modelo de referência.
-
-
Parâmetros de configuração do LoRA
-
peft_scheme: defina comolorapara habilitar a adaptação de baixa classificação, o que gera um modelo de saída menor e mais eficiente. Estas propriedades específicas de LoRa também estão disponíveis:-
alpha: o fator de ajuste de escala para pesos de LoRa. Normalmente, isso é definido com o mesmo valor deadapter_dim. -
adapter_dropout: o parâmetro de regularização para os parâmetros de LoRa.
-
-
Fórmula de DPO LoRa
A seguir é apresentada uma fórmula para DPO LoRa.
## 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]
Limitações
A DPO tem as seguintes limitações:
-
Os pontos de verificação intermediários não são salvos para avaliação e não é possível retomar a partir de um ponto de verificação intermediário. Somente o último ponto de verificação é salvo.
-
Não é possível usar o registro em log do MLflow.
-
Para ajustar os hiperparâmetros, siga as orientações em Selecionar hiperparâmetros.