Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Optimización de políticas proximales (PPO)
La optimización de políticas proximales (PPO) es el proceso de utilizar varios modelos de machine learning para entrenar y otorgar una puntuación a un modelo. Los siguientes modelos forman parte del proceso de PPO:
-
Formación de actores o modelo de políticas: un modelo de ajuste supervisado (SFT) que se ajusta y actualiza en cada época. Las actualizaciones se realizan mediante el muestreo de peticiones, la generación de respuestas completas y la actualización de las ponderaciones mediante un objetivo sustituto recortado. Esto limita el cambio de rentabilidad logarítmica por token, de modo que cada paso de la política es próximo al anterior, y se preserva la estabilidad del entrenamiento.
-
Modelo de generación de actores: un modelo que genera respuestas o finalizaciones de peticiones para ser juzgado por el modelo de recompensa y el modelo crítico. Las ponderaciones de este modelo se actualizan a partir del modelo de entrenamiento de actores o modelo de políticas en cada época.
-
Modelo de recompensa: un modelo con pesos congelados que se utiliza para puntuar el modelo de generación de actores.
-
Modelo crítico: un modelo con pesos descongelados que se utiliza para puntuar el modelo de generación de actores. Esta puntuación suele considerarse una estimación de la recompensa total que recibe el actor al generar las fichas restantes.
-
Modelo de anclaje: modelo SFT con pesos congelados que se utiliza para calcular la divergencia KL entre el modelo de tren de actores y el modelo base. El modelo de anclaje garantiza que las actualizaciones del modelo de actor no sean demasiado drásticas en comparación con el modelo base. Los cambios drásticos pueden provocar inestabilidad o una degradación del rendimiento.
Los datos de entrenamiento deben estar en formato JSONL, donde cada línea contenga un único objeto JSON que represente un ejemplo de entrenamiento. A continuación se muestra un ejemplo:
{ "turns": ["string", "string", ...], // Required "turns_to_mask": [integer, integer, ...], // Required "reward_category": "string", // Required "meta_data": {} // Optional }
-
turns
es una matriz de matrices de cadenas de conversación que representan la secuencia de diálogo. Esta línea contiene las indicaciones del sistema, los mensajes de los usuarios y las respuestas de los bots. Los mensajes de usuario suelen terminar con «Bot:» para indicar dónde comienza la salida del modelo. Por ejemplo,[["System prompt"], ["User: Question Bot:"], ["Bot response"]]
. -
turns_to_mask
es una matriz de índices basados en 0 que identifica qué giros no deberían recibir actualizaciones de gradiente. Los giros enmascarados suelen ser instrucciones del sistema y turnos del usuario. Por ejemplo,[0, 1, 3]
oculta el mensaje del sistema y los mensajes del usuario (el primer y el tercer mensaje). -
reward_category
es una cadena que identifica qué aspectos del rendimiento del modelo se deben evaluar. Se utiliza para seleccionar la categoría de modelo de recompensa adecuada durante el entrenamiento. La categoría de recompensas está disponible para las siguientes categorías de recompensas:default
math
coding
,if
,rag
, yrai
. -
meta_data
es un objeto opcional que contiene información contextual o básica adicional. Esto puede incluir identificadores, información de origen o contexto de conversación. La estructura es flexible en función de las necesidades del conjunto de datos.
Este es un ejemplo de registro:
{ "turns": ["You are a helpful AI assistant.", "User: What is ML? Bot:", "Machine learning is...", "User: Examples? Bot:", "Email spam filtering is..." ], "turns_to_mask": [0, 1, 3], "reward_category": "default", "meta_data": { "messages": [{ "role": "system", "content": "You are a helpful AI assistant." }, { "role": "user", "content": "What is ML?" }, { "role": "assistant", "content": "Machine learning is..." }, { "role": "user", "content": "Examples?" }, { "role": "assistant", "content": "Email spam filtering is..." } ] } }
El marco de modelado de recompensas implementa la optimización multidimensional en distintos objetivos categóricos para facilitar una sólida convergencia de modelos. La categoría de recompensa debe seleccionarse en función de la tarea para la que se debe optimizar el modelo.
Recomendamos las siguientes pautas para seleccionar el marco adecuado para sus tareas:
-
default
: un optimizador de uso general para tareas de conversación estándar e interacciones básicas. Se utiliza para conversaciones y debates generales, tareas básicas de escritura, respuestas sencillas a preguntas y consultas de conocimientos no especializados.A continuación se muestra un ejemplo:
{ "turns": ["Write a summary of climate change"], "turns_to_mask": [0], "reward_category": "default" }
-
math
: un optimizador especializado para cálculos matemáticos y tareas de razonamiento numérico. Se utiliza para la resolución de problemas matemáticos, los cálculos aritméticos, las ecuaciones algebraicas, los problemas geométricos y el análisis estadístico.A continuación se muestra un ejemplo:
{ "turns": ["Calculate the derivative of x²"], "turns_to_mask": [0], "reward_category": "math" }
-
coding
: una categoría dedicada a consultas relacionadas con la programación y el desarrollo de software. Se utiliza para la implementación de código, la asistencia en la depuración, el diseño de algoritmos, la documentación técnica y las preguntas sobre la arquitectura del sistema.A continuación se muestra un ejemplo:
{ "turns": ["Write a function to check if a string is palindrome"], "turns_to_mask": [0], "reward_category": "coding" }
-
if
: una categoría para las tareas que requieren una ejecución y una step-by-step orientación precisas de los procedimientos. Se utiliza para procedimientos de varios pasos, instrucciones secuenciales, descomposición de tareas complejas y documentación de procesos.A continuación se muestra un ejemplo:
{ "turns": ["Provide steps to deploy a web application"], "turns_to_mask": [0], "reward_category": "if" }
-
rag
: una categoría de recompensa para las tareas que requieren responder a consultas basadas específicamente en la información contextual recuperada. Se usa cuando las respuestas deben derivarse directamente de los materiales de referencia proporcionados, sintetizando el contenido fáctico sin ir más allá del alcance de la información recuperada, garantizando que las respuestas se basen en el contexto proporcionado y no en el conocimiento general.A continuación se muestra un ejemplo:
{ "turns": ["The Synthesis Report integrates findings from all six IPCC assessment cycles, revealing that global surface temperature has increased 1.1°C from 1850-1900 to 2011-2020, with human activities unequivocally identified as the cause of this warming. Alarmingly, current policies put the world on track for 3.2°C warming by 2100. The document identifies 5 key climate system "tipping points" approaching and emphasizes that greenhouse gas emissions must decline 43% by 2030 (compared to 2019 levels) to limit warming to 1.5°C. Climate-related risks will escalate with every increment of warming, with loss and damage disproportionately affecting vulnerable populations. Despite some progress, climate adaptation remains uneven with significant gaps, and financial flows continue to fall below levels needed for mitigation goals.", "What were the key findings of the latest IPCC climate report?"], "turns_to_mask": [0, 0], "reward_category": "rag" }
-
rai
: una categoría de recompensa para las tareas que requieren la aplicación de principios responsables de la IA, como la imparcialidad, la transparencia y la ética. Se utiliza para evaluar los posibles sesgos en los sistemas de IA, garantizar las consideraciones de privacidad, abordar los dilemas éticos y promover principios de diseño inclusivos.A continuación se muestra un ejemplo:
{ "turns": ["Identify potential bias concerns when developing a loan approval algorithm and suggest mitigation strategies"], "turns_to_mask": [0], "reward_category": "rai" }
Enmascarar turnos
En los conjuntos de datos de entrenamiento, el turns_to_mask
parámetro es crucial para controlar qué turnos de conversación reciben actualizaciones graduales durante el entrenamiento. Este conjunto de índices determina qué partes del diálogo debe aprender a generar el modelo y qué partes deben tratarse únicamente como parte del contexto. El enmascaramiento adecuado garantiza que el modelo aprenda los patrones de respuesta adecuados y, al mismo tiempo, evita la formación con las indicaciones del sistema o las entradas del usuario que podrían degradar el rendimiento.
Recomendamos la siguiente guía para el enmascaramiento:
-
Enmascare siempre el índice 0: las solicitudes del sistema nunca deberían recibir actualizaciones de degradado.
-
Oculte siempre los turnos de los usuarios: evite que el modelo aprenda a generar entradas de usuario.
-
Coherencia de patrones: utilice patrones de enmascaramiento idénticos para estructuras de conversación similares, como (0, 1, 3, 5) para diálogos de varios turnos.
-
Capacitación selectiva: oculte las respuestas iniciales de los bots para centrar la capacitación en mejorar las respuestas finales.
-
Chain-of-thought preservación: solo oculte los giros del sistema y del usuario cuando se entrena con secuencias de razonamiento.
-
Filtrado de calidad: oculte las respuestas de los asistentes de baja calidad para evitar la degradación del rendimiento.
-
Optimización del contexto: asegúrate de que los turnos enmascarados no eliminen el contexto esencial necesario para las respuestas posteriores.
La clave para un enmascaramiento efectivo es monitorear las métricas de entrenamiento y el rendimiento de la validación para identificar si su estrategia de enmascaramiento preserva el contexto necesario y, al mismo tiempo, centra las actualizaciones graduales en los resultados deseados del modelo.
Habilite la pérdida de divergencia KL
Para permitir la pérdida de divergencia KL, el servidor de anclaje debe estar habilitado para calcular la divergencia entre la política actual y la distribución original. Es necesario especificar el tipo de pérdida KL y los coeficientes deben tener un valor distinto de cero. Los valores de coeficientes más altos ayudan al modelo a no desviarse mucho de la política original, lo que se traduce en cambios menores en el rendimiento general. Los valores de coeficientes más bajos permiten desviaciones mayores con respecto a la política anterior, lo que se traduce en un mejor rendimiento de las métricas objetivo, pero repercute en el rendimiento general.
ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 32 ppo_actor_train: model: ######## Use KL in actor loss ######## kl_loss_type: low_var_kl kl_loss_coeff: 0.1 ######## Use KL in reward model ###### kl_reward_penalty_coeff: 0.1
Tasa de aprendizaje
La tasa de aprendizaje de los modelos críticos y políticos se puede ajustar, siendo 3e-6 la opción equilibrada por defecto. Las tasas de aprendizaje más altas suelen provocar inestabilidades en la formación, que pueden identificarse a través de los picos de divergencia de la enseñanza primaria y del comportamiento errático de las políticas. Las tasas de aprendizaje más bajas pueden provocar problemas de convergencia y un aprendizaje lento, como lo demuestran el estancamiento de las recompensas y las actualizaciones mínimas de las políticas. El monitoreo regular de la divergencia de aprendizaje, la puntuación de recompensa y la pérdida de valor ayuda a determinar si se debe ajustar la tasa de aprendizaje durante el entrenamiento.
ppo_critic: model: optim: lr: 3e-6 ppo_actor_train: model: optim: lr: 3e-06
Tamaño de lote global
El tamaño de los lotes globales afecta significativamente al rendimiento de la PPO en Amazon Nova, ya que los lotes más grandes generalmente mejoran la estabilidad del entrenamiento y la estimación del gradiente, al tiempo que permiten un procesamiento en paralelo más eficiente. Sin embargo, los lotes muy grandes pueden provocar una disminución de la rentabilidad y pueden verse limitados por la memoria disponible, lo que requiere un equilibrio cuidadoso con la tasa de aprendizaje y otros hiperparámetros.
ppo_actor_train: model: global_batch_size: 160
Los parámetros de Amazon Nova que están disponibles para ajustarse con PPO incluyen:
-
Ejecute la configuración
-
actor_train_replicas
: El número de instancias de cómputo que se utilizarán para el modelo de tren de actores. Los valores disponibles varían en función del modelo elegido. Amazon Nova Micro admite 1 o 2 réplicas. Amazon Nova Lite admite 1, 2 ó 4 réplicas. Amazon Nova Pro admite 3, 6 o 12 réplicas. -
rm_replicas
: el número de instancias informáticas utilizadas para el modelo de recompensas. Le recomendamos que utilice una réplica para cualquier tamaño de modelo. -
cm_replicas
: el número de instancias de cómputo utilizadas para el modelo crítico. Se recomienda utilizar una réplica para cualquier tamaño de modelo. -
actor_generation_replicas
: el número de instancias informáticas utilizadas para la generación de actores. Los valores disponibles varían en función del modelo elegido. Amazon Nova Micro admite 1 réplica. Amazon Nova Lite admite 1 o 2 réplicas. Amazon Nova Pro admite 1 o 2 réplicas. -
am_replicas
: el número de instancias informáticas utilizadas para el modelo de anclaje. Se recomienda utilizar una réplica para cualquier tamaño de modelo.
-
-
Configuración del tren de actores (configuración de políticas)
-
max_steps
: El número máximo de pasos para ajustar o entrenar el modelo de tren de actores. En este caso, un paso se define como el despliegue, seguido del entrenamiento del modelo de tren de actores con unglobal_batch_size
número de muestras. Una época se define como.global_batch_size * trajectory_buffer_scale
El valor elegido aquí variará en función del caso de uso y de la complejidad del conjunto de datos. Recomendamos empezar con 65 épocas o 520 pasos, que es el número de épocas multiplicado por el valor de.
trajectory_buffer_scale
Sin embargo, algunas tareas requieren un tiempo de entrenamiento PPO más prolongado para lograr el mismo rendimiento.En el caso de la PPO, las métricas de entrenamiento, como la saturación de la puntuación del modelo de recompensas y la duración media de las acciones obtenidas mediante la consola ml-flow, pueden ayudar a identificar los puntos óptimos para la evaluación.
-
actor_model_max_length
: La longitud máxima de los datos de entrada que se envían al componente de generación de actores para generar las terminaciones. -
reward_model_max_length
: La longitud máxima de los datos de entrada que se envían al servidor de recompensas para puntuar las finalizaciones. -
trajectory_buffer_scale
: Este búfer representa el número de despliegues generados con el antiguo modelo de tren de actores (políticas) antes de actualizar las ponderaciones y generar los nuevos despliegues. Los valores admitidos son 1, 2, 4, 8 y 16.Si
trajectory_buffer_scale
es 1, entonces la formación se basa en la política. Esto significa que los despliegues se generan con los pesos de modelo más actualizados, pero el rendimiento se ve afectado. Si es 16, significa que el modelo se aparta ligeramente de la política, pero el rendimiento es mayor. Recomendamos empezar con 8 para cada modelo. -
kl_reward_penalty_coeff
: Este es el término de divergencia KL que garantiza que las actualizaciones no sean demasiado drásticas y que la política no se base en el modelo base o en el modelo SFT. -
kl_loss_coeff
: Este valor controla en qué medida la penalización por divergencia de KL influye en el objetivo general del entrenamiento en PPO. -
kl_loss_type
: Este valor especifica cómo calcular la divergencia entre las distribuciones políticas actuales y las de referencia. Loskl_loss_types
disponibles sonkl
(divergencia KL estándar),mse
(error cuadrático medio), (diferencia absoluta entre probabilidades logarítmicas) yabs
low_var_kl
(aproximación KL de baja varianza). -
model.clip_ratio
: La proporción de clips de actores (α) en PPO es un hiperparámetro que limita los cambios que puede sufrir la política durante cada actualización. -
model.optim.lr
: La tasa de aprendizaje utilizada para el entrenamiento de pérdida del modelo sustituto en el modelo actor. -
model.lam
: Forma parte del proceso de estimación de ventajas. Un λ más alto da más peso a las recompensas a largo plazo, pero con una mayor varianza, mientras que un λ más bajo se centra más en las recompensas inmediatas con menor varianza pero con más sesgo. -
model.ent_coeff
: La pérdida de entropía en las PPO fomenta la exploración, ya que penaliza la política cuando se vuelve demasiado determinista (es decir, siempre opta por las mismas acciones con mucha confianza).
-
-
Configuración del modelo de recompensas
-
global_batch_size
: El tamaño del lote para puntuar las finalizaciones mediante el modelo de recompensas. Sippo_actor_train.model.global_batch_size
es mayor queppo_reward.model.global_batch_size
, se procesan en varios lotes. Tenga en cuenta queppo_actor_train.model.global_batch_size % ppo_reward.model.global_batch_size
debe ser igual a 0. -
max_length
: La longitud máxima del contexto del modelo de recompensa. Debería ser igual queppo_actor_train.model.max_length
.
-
-
Configuración crítica del modelo
-
global_batch_size
: El tamaño del lote del valor crítico del modelo. El modelo crítico proporcionará estimaciones del valor de cada ficha en las respuestas proporcionadas por el modelo actor. El tamaño del lote se utiliza tanto para la inferencia como para el entrenamiento.Tenga en cuenta que
ppo_actor_train.model.global_batch_size % ppo_critic.model.global_batch_size
debe ser igual a 0 y.ppo_actor_train.model.global_batch_size * ppo_actor_train.model.trajectory_buffer_size % ppo_critic.model.global_batch_size == 0
-
max_length
: La longitud máxima del contexto del modelo crítico. Debería ser igual queppo_actor_train.model.max_length
. -
model.optim.lr
: La tasa de aprendizaje utilizada para el entrenamiento de pérdida del modelo sustituto en el modelo actor.
-
-
Configuración del modelo de anclaje
-
global_batch_size
: El tamaño del lote para generar el logotipo del modelo SFT o ancla congelado. Tenga en cuenta queppo_actor_train.model.global_batch_size % ppo_anchor.model.global_batch_size
debe ser igual a 0. -
max_length
: La longitud máxima del contexto del modelo de recompensa. Debería ser igual queppo_actor_train.model.max_length
.
-
-
Configuración del modelo de generación de actores
-
actor_model_max_length
: La longitud máxima del contexto del componente de generación del modelo de actor. Debería ser igual queppo_actor_train.model.max_length
.
-
Receta PPO
La siguiente es una receta para la PPO.
## Run config run: name: ndry-ppo-pro model_type: amazon.nova-pro-v1:0:300k model_name_or_path: nova-pro/prod data_s3_path: s3://testing/train.jsonl # Your training data S3 path actor_train_replicas: 6 # Actor train model replicas rm_replicas: 1 # Reward model replicas cm_replicas: 1 # Critic model replicas actor_generation_replicas: 2 # Actor generation model replicas am_replicas: 1 # Anchor model replicas ## Training config for each PPO component ppo_reward: max_length: 8192 # model architecture max length trainer: num_nodes: ${recipes.run.rm_replicas} model: global_batch_size: 16 ppo_critic: max_length: 8192 trainer: num_nodes: ${recipes.run.cm_replicas} model: global_batch_size: 16 optim: lr: 3e-6 name: distributed_fused_adam adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 ppo_anchor: max_length: 8192 trainer: num_nodes: ${recipes.run.am_replicas} model: global_batch_size: 16 ppo_actor_generation: actor_model_max_length: 8192 trainer: num_nodes: ${recipes.run.actor_generation_replicas} ppo_actor_train: max_length: 8192 max_steps: 520 # Stopping criteria Desired epoch num * trajectory_buffer_scale actor_model_max_length: 8192 # truncate input data to max length reward_model_max_length: 8192 # truncate input data to max length trajectory_buffer_scale: 8 trainer: num_nodes: ${recipes.run.actor_train_replicas} model: global_batch_size: 160 ent_coeff: 0 clip_ratio: 0.2 lam: 1 kl_loss_coeff: 0.0 kl_loss_type: low_var_kl kl_reward_penalty_coeff: 0.0 hidden_dropout: 0.0 # Dropout probability for hidden state transformer. attention_dropout: 0.0 # Dropout probability in the attention layer. ffn_dropout: 0.0 # Dropout probability in the feed-forward layer. optim: lr: 3e-06 name: distributed_fused_adam # only this one is available for p0. adam_w_mode: true eps: 1e-08 weight_decay: 0.0 betas: - 0.9 - 0.999
Limitaciones
La PPO tiene las siguientes limitaciones:
-
Los puntos de control intermedios no se guardan para su evaluación y no se puede reanudar desde un punto de control intermedio. Solo se guarda el último punto de control.
-
No se admiten conjuntos de datos multimodales.
-
Los trabajos de formación no se detienen automáticamente. Debe detener el trabajo mediante la HyperPod CLI.
-
MLflow no se admite el registro.
-
No se admiten las métricas de formación de críticos TensorBoard.
-
Para ajustar los hiperparámetros, siga las instrucciones de la sección Selección de hiperparámetros.