Optimización de preferencias directas (DPO)
La optimización de preferencias directas (DPO) es un método de refinamiento eficiente para modelos básicos que utiliza datos de comparación emparejados para alinear los resultados del modelo con las preferencias humanas. Este enfoque habilita la optimización directa del comportamiento del modelo en función de la valoración humana sobre cuáles son las respuestas más deseables.
Hay disponibles tanto una DPO de rango completo como una DPO con adaptador de bajo rango (LoRA).
Requisitos del formato de los datos
Los requisitos de formato de datos de entrenamiento para DPO de rango completo y LoRA son similares a los de SFT. Sin embargo, en el caso de DPO, el último turno debe tener pares de preferencias. Este es un ejemplo de formato de datos de 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 es otro ejemplo de texto de DPO completa:
{ "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" } ] } ], }
Esta es una imagen de ejemplo de DPO completa:
{ "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" } ] } ], }
Se aplican otras restricciones a los conjuntos de datos de entrada. Para obtener más información, consulte Restricciones del conjunto de datos. Es recomendable incluir un mínimo de 1000 pares de preferencias para un entrenamiento efectivo. Los datos de preferencias de alta calidad producen resultados más eficientes.
Recomendamos utilizar la DPO en las siguientes situaciones:
-
Optimización para obtener resultados subjetivos que exigen una alineación con preferencias humanas específicas.
-
Modificación del tono, el estilo o las características del contenido del modelo para que coincidan con los patrones de respuesta deseados.
-
Realización de mejoras específicas en un modelo existente en función de los comentarios de los usuarios y el análisis de errores.
-
Mantenimiento de calidad de salida uniforme en diferentes casos de uso.
-
Implementación de barreras de protección a través de los patrones de respuesta preferidos.
-
Entrenamiento con aprendizaje reforzado sin recompensas.
-
Uso exclusivo de datos de preferencias en lugar de datos calificados o etiquetados.
-
Mejoramiento del modelo en tareas de alineación matizadas, como la utilidad, la inocuidad o la honestidad.
DPO de rango completo
Parámetros de Amazon Nova disponibles para DPO de rango completo:
-
Ejecutar configuración
-
name: nombre descriptivo para el trabajo de entrenamiento. Ayuda a identificar el trabajo en la Consola de administración de AWS. -
model_type: variante del modelo de Nova que desea utilizar. Las opciones disponibles sonamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300kyamazon.nova-pro-v1:0:300k. -
model_name_or_path: ruta al modelo base. Seleccione el modelo desde el que desee utilizarnova-micro/prod,nova-lite/prodynova-pro/prod, o la ruta de S3 para el punto de comprobación posterior al entrenamiento (s3://<escrow bucket>/<job id>/outputs/checkpoints). -
replicas: número de instancias de computación que desea utilizar para entrenamiento distribuido. Los valores disponibles varían en función del modelo elegido. Amazon Nova Micro admite 2, 4 u 8 réplicas. Amazon Nova Lite admite 4, 8, 16 o 32 réplicas. Amazon Nova Pro admite 6, 12 o 24 réplicas. -
data_s3_path: ubicación de S3 del conjunto de datos de entrenamiento, que es un archivo JSONL. Este archivo debe residir en la misma cuenta y región que el clúster. Todas las ubicaciones de S3 proporcionadas deben estar en la misma cuenta y región. -
validation_data_s3_path: la ubicación de S3 del conjunto de datos de validación, que es un archivo JSONL. Este archivo debe residir en la misma Cuenta de AWS y región que el clúster. Todas las ubicaciones de S3 proporcionadas deben estar en la misma cuenta y región.
-
-
Configuración de entrenamiento
-
max_length: longitud máxima de secuencia en tokens. Determina el tamaño de la ventana de contexto para entrenamiento. El valor máximo admitido es de 32 768 tokens para DPO.Las secuencias más largas mejorarán la eficiencia del entrenamiento a costa de aumentar los requisitos de memoria. Es recomendable que el parámetro
max_lengthcoincida con la distribución de datos.
-
-
Ajustes del entrenador
-
max_epochs: número de pasadas completas por el conjunto de datos de entrenamiento. El valor máximo es 5.En general, los conjuntos de datos grandes requieren menos épocas para converger, mientras que los conjuntos de datos pequeños requieren un mayor número de épocas. Le recomendamos que ajuste el número de épocas en función del tamaño de los datos.
-
-
Ajustes de modelos
-
hidden_dropout: probabilidad de eliminar salidas de estado ocultas. Aumente este valor aproximadamente 0,0-0,2 para reducir el ajuste excesivo en conjuntos de datos más pequeños. Los valores válidos van de 0 a 1, ambos inclusive. -
attention_dropout: probabilidad de perder ponderaciones de atención. Este parámetro puede ayudar en la generalización. Los valores válidos van de 0 a 1, ambos inclusive. -
ffn_dropout: probabilidad de que disminuyan las salidas de red de prealimentada. Los valores válidos van de 0 a 1, ambos inclusive.
-
-
Configuración del optimizador
-
lr: tasa de aprendizaje, que controla el tamaño de los pasos durante la optimización. Recomendamos valores entre 1e-6-1e-4 para un buen rendimiento. Los valores válidos van de 0 a 1, ambos inclusive. -
name: algoritmo optimizador. En la actualidad, solo se admitedistributed_fused_adam. -
weight_decay: fuerza de regularización de L2. Los valores más altos (entre 0,01 y 0,1) aumentan la regularización. -
warmup_steps: número de pasos para aumentar gradualmente la tasa de aprendizaje. Mejora la estabilidad del entrenamiento. Los valores válidos van de 1 a 20, ambos inclusive. -
min_lr: tasa mínima de aprendizaje al final de la degradación. Los valores válidos van de 0 a 1, ambos inclusive, pero deben ser inferiores a la tasa de aprendizaje.
-
-
Configuración de DPO
-
beta: determina en qué grado debe ajustarse el modelo a los datos de entrenamiento o al modelo original. Los valores válidos van de 0,001 a 0,5, ambos inclusive.Especifique valores más altos (por ejemplo, 0,5) para conservar más comportamiento del modelo de referencia y aprender más lentamente las nuevas preferencias. Especifique valores más bajos (por ejemplo, 0,01-0,05) para aprender más rápidamente las nuevas preferencias con el riesgo de desviarse del comportamiento del modelo de referencia.
-
Fórmula de DPO de rango completo
A continuación se ofrece una fórmula de rango completo 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 rango bajo
Los parámetros de Amazon Nova disponibles para DPO de adaptador de rango bajo son los siguientes:
-
Ejecutar configuración
-
name: nombre descriptivo para el trabajo de entrenamiento. Ayuda a identificar el trabajo en la Consola de administración de AWS. -
model_type: variante del modelo de Nova que desea utilizar. Las opciones disponibles sonamazon.nova-micro-v1:0:128k,amazon.nova-lite-v1:0:300kyamazon.nova-pro-v1:0:300k. -
model_name_or_path: ruta al modelo base. Seleccione el modelo desde el que desee utilizarnova-micro/prod,nova-lite/prodynova-pro/prod, o la ruta de S3 para el punto de comprobación posterior al entrenamiento (s3://<escrow bucket>/<job id>/outputs/checkpoints). -
replicas: número de instancias de computación que desea utilizar para entrenamiento distribuido. Los valores disponibles varían en función del modelo elegido. Amazon Nova Micro admite 2, 4 u 8 réplicas. Amazon Nova Lite admite 4, 8, 16 o 32 réplicas. Amazon Nova Pro admite 6, 12 o 24 réplicas.
-
-
Configuración de entrenamiento
-
max_length: longitud máxima de secuencia en tokens. Determina el tamaño de la ventana de contexto para entrenamiento. El valor máximo admitido es de 32 768 tokens para DPO.Las secuencias más largas mejorarán la eficiencia del entrenamiento a costa de aumentar los requisitos de memoria. Es recomendable que el parámetro
max_lengthcoincida con la distribución de datos.
-
-
Ajustes del entrenador
-
max_epochs: número de pasadas completas por el conjunto de datos de entrenamiento. El valor máximo es 5.En general, los conjuntos de datos grandes requieren menos épocas para converger, mientras que los conjuntos de datos pequeños requieren un mayor número de épocas. Le recomendamos que ajuste el número de épocas en función del tamaño de los datos.
-
-
Ajustes de modelos
-
hidden_dropout: probabilidad de eliminar salidas de estado ocultas. Aumente este valor aproximadamente 0,0-0,2 para reducir el ajuste excesivo en conjuntos de datos más pequeños. Los valores válidos van de 0 a 1, ambos inclusive. -
attention_dropout: probabilidad de perder ponderaciones de atención. Este parámetro puede ayudar en la generalización. Los valores válidos van de 0 a 1, ambos inclusive. -
ffn_dropout: probabilidad de que disminuyan las salidas de red de prealimentada. Los valores válidos van de 0 a 1, ambos inclusive.
-
-
Configuración del optimizador
-
lr: tasa de aprendizaje, que controla el tamaño de los pasos durante la optimización. Recomendamos valores entre 1e-6-1e-4 para un buen rendimiento. Los valores válidos van de 0 a 1, ambos inclusive. -
name: algoritmo optimizador. En la actualidad, solo se admitedistributed_fused_adam. -
weight_decay: fuerza de regularización de L2. Los valores más altos (entre 0,01 y 0,1) aumentan la regularización. -
warmup_steps: número de pasos para aumentar gradualmente la tasa de aprendizaje. Mejora la estabilidad del entrenamiento. Los valores válidos van de 1 a 20, ambos inclusive. -
min_lr: tasa mínima de aprendizaje al final de la degradación. Los valores válidos van de 0 a 1, ambos inclusive, pero deben ser inferiores a la tasa de aprendizaje.
-
-
Configuración de DPO
-
beta: determina en qué grado debe ajustarse el modelo a los datos de entrenamiento o al modelo original. Los valores válidos van de 0,001 a 0,5, ambos inclusive.Especifique valores más altos (por ejemplo, 0,5) para conservar más comportamiento del modelo de referencia y aprender más lentamente las nuevas preferencias. Especifique valores más bajos (por ejemplo, 0,01-0,05) para aprender más rápidamente las nuevas preferencias con el riesgo de desviarse del comportamiento del modelo de referencia.
-
-
Parámetros de configuración de LoRA
-
peft_scheme: establezca comolorapara habilitar adaptación de rango bajo, que genera un modelo de salida más pequeño y eficiente. También están disponibles estas propiedades específicas de LoRA:-
alpha: factor de escalado para ponderaciones de LoRA. Generalmente se establece con el mismo valor queadapter_dim. -
adapter_dropout: parámetro de regularización de los parámetros de LoRA.
-
-
Fórmula de DPO de LoRA
A continuación se ofrece una fórmula para DPO de 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]
Limitaciones
DPO presenta las siguientes restricciones:
-
Los puntos de comprobación intermedios no se guardan para su evaluación y no se pueden reanudar desde un punto de comprobación intermedio. Solo se guarda el último punto de comprobación.
-
No se admite el registro de MLflow.
-
Para ajustar los hiperparámetros, siga las instrucciones de Selección de hiperparámetros.