Refinamiento supervisado (SFT) - Amazon SageMaker AI

Refinamiento supervisado (SFT)

En las siguientes secciones se describe el proceso de refinamiento supervisado (SFT), tanto SFT de rango completo como SFT con eficiencia de parámetros.

Refinamiento supervisado de rango completo (SFT)

El refinamiento supervisado (SFT) es el proceso mediante el cual se proporciona una colección de pares de respuesta de peticiones a un modelo fundacional para mejorar el rendimiento de un modelo fundacional previamente entrenado en una tarea específica. Los ejemplos etiquetados tienen formato de pares de petición-respuesta y están redactados como instrucciones. Este proceso de ajuste modifica las ponderaciones del modelo.

Debe usar la SFT cuando tenga datos específicos de un dominio que requieran proporcionar pares específicos de pronta petición para obtener resultados óptimos.

Tenga en cuenta que sus conjuntos de datos de entrada de entrenamiento y validación deben residir en buckets propiedad del cliente, no en buckets de depósito en garantía o buckets de S3 administrados por el servicio.

Requisitos de datos

Para SFT de rango completo y SFT de adaptador de bajo rango (LoRA), los datos deben seguir el formato operativo Converse de Amazon Bedrock. Para ver ejemplos y restricciones de este formato, consulte Preparación de datos para el refinamiento de modelos de comprensión.

Para validar el formato del conjunto de datos antes de enviarlo, le recomendamos que utilice el script de validación del repositorio de muestras de Amazon Bedrock. Esta herramienta de validación ayuda a garantizar que los archivos JSONL cumplan las especificaciones de formato requeridas y a identificar cualquier posible problema antes de enviar el trabajo de refinamiento.

Parámetros de Amazon Nova disponibles para el ajuste con SFT:

  • 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 Amazon Nova que desea utilizar. Las opciones disponibles son amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k y amazon.nova-pro-v1:0:300k.

    • model_name_or_path: ruta al modelo base que desea utilizar para el entrenamiento. Seleccione el modelo desde el que desee utilizar nova-micro/prod, nova-lite/prod y nova-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 de AWS y región que el clúster. Todas las ubicaciones de S3 de la ruta de S3 proporcionada deben estar en la misma cuenta y región.

    • validation_data_s3_path: (Opcional) Ubicación de S3 del conjunto de datos de validación, 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 de la ruta de S3 proporcionada deben estar en la misma cuenta y región.

    • output_s3_path: ubicación de S3 donde se almacenan el manifiesto y los registros de TensorBoard. Todas las ubicaciones de S3 de la ruta de S3 proporcionada 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 65 536 tokens para SFT.

      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_length coincida 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. Los valores válidos están entre 1e-6-1e-3, ambos inclusive. Recomendamos valores entre 1e-6-1e-4 para un buen rendimiento.

    • name: algoritmo optimizador. En la actualidad, solo se admite distributed_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.

Inicio rápido con una fórmula de SFT de rango completo

A continuación se ofrece una fórmula para SFT de rango completo diseñada para que pueda iniciar rápidamente un trabajo de SFT en un clúster de HyperPod. Esta fórmula también da por sentado que se ha conectado al clúster de HyperPod con las credenciales de AWS correctas.

run: name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs model_type: "amazon.nova-micro-v1:0:128k" model_name_or_path: "nova-micro/prod" replicas: 2 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 save_steps: 100000 replicas: ${recipes.run.replicas} micro_batch_size: 1 task_type: sft global_batch_size: 64 weights_only: True allow_percentage_invalid_samples: 10 exp_manager: exp_dir: null create_wandb_logger: False create_tensorboard_logger: True project: null name: null checkpoint_callback_params: monitor: step save_top_k: 10 mode: max every_n_train_steps: ${recipes.training_config.save_steps} save_last: True create_early_stopping_callback: True early_stopping_callback_params: min_delta: 0.001 mode: min monitor: "val_loss" patience: 2 trainer: log_every_n_steps: 1 max_epochs: -1 max_steps: 16 val_check_interval: 100 limit_test_batches: 0 gradient_clip_val: 1.0 num_nodes: ${recipes.training_config.replicas} model: 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. sequence_parallel: True optim: lr: 1e-5 name: distributed_fused_adam bucket_cap_mb: 10 contiguous_grad_buffer: False overlap_param_sync: False contiguous_param_buffer: False overlap_grad_sync: False adam_w_mode: true eps: 1e-06 weight_decay: 0.0 betas: - 0.9 - 0.999 sched: name: CosineAnnealing warmup_steps: 10 constant_steps: 0 min_lr: 1e-6 mm_cfg: llm: freeze: false image_projector: freeze: true require_newline: true video_projector: freeze: true require_newline: false peft: peft_scheme: null training_validation: loader: args: data_loader_workers: 1 prefetch_factor: 2 collator: args: force_image_at_turn_beginning: false
Ejemplo de fórmula de rango completo

A continuación se ofrece un ejemplo de fórmula de SFT de rango completo con todos los componentes configurados correctamente.

## Run config run: name: "my-sft-run" # A descriptive name for your training job model_type: "amazon.nova-lite-v1:0:300k" # Model variant specification model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training 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) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 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 peft: peft_scheme: null # Set to null for full-parameter fine-tuning
Limitaciones

No se admite la publicación de métricas en Weights & Biases ni en MLFlow.

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.

Para ajustar los hiperparámetros, siga las instrucciones de Selección de hiperparámetros.

Refinamiento con eficiencia de parámetros (PEFT)

El refinamiento con eficiencia de parámetros (PEFT) implica el reentrenamiento de un número reducido de ponderaciones adicionales para adaptar un modelo fundacional a nuevas tareas o dominios. En concreto, el adaptador de bajo rango (LoRA) PEFT refina de forma eficiente los modelos fundacionales al introducir matrices de ponderaciones de bajo rango y entrenables en capas específicas del modelo, lo que reduce la cantidad de parámetros entrenables pero mantiene la calidad del modelo.

Un adaptador de LoRA PEFT mejora el modelo fundacional al incorporar capas adaptadoras ligeras que modifican las ponderaciones del modelo durante la inferencia, al tiempo que mantienen intactos los parámetros del modelo original. Este enfoque también se considera una de las técnicas de refinamiento más rentables. Para obtener más información, consulte Refinamiento de modelos con componentes de inferencia del adaptador.

Debe utilizar LoRA PEFT en las siguientes situaciones:

  • Desea comenzar con un procedimiento de entrenamiento rápido.

  • El rendimiento del modelo fundacional ya es satisfactorio. En este caso, el objetivo de LoRa PEFT es la mejora de sus capacidades en múltiples tareas relacionadas, como el resumen de textos o la traducción de idiomas. Las propiedades de regularización de LoRA PEFT ayudan a evitar el ajuste excesivo y a mitigar los riesgos de que el modelo “olvide” el dominio de origen. Esto garantiza que el modelo mantenga su versatilidad y adaptabilidad a diversas aplicaciones.

  • Desea realizar escenarios de refinamiento de instrucciones con conjuntos de datos relativamente pequeños. LoRA PEFT funciona mejor con conjuntos de datos más pequeños y específicos para tareas en comparación con conjuntos de datos más amplios y grandes.

  • Tiene conjuntos de datos grandes y etiquetados que superan los límites de datos de personalización de Amazon Bedrock. En este caso, puede utilizar LoRA PEFT en SageMaker AI para generar mejores resultados.

  • Si ya ha obtenido resultados prometedores gracias al refinamiento de Amazon Bedrock, LoRA PEFT en SageMaker AI puede ayudarle a optimizar aún más los hiperparámetros del modelo.

Parámetros de Amazon Nova disponibles con LoRA PEFT:

  • 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 son amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k y amazon.nova-pro-v1:0:300k.

    • model_name_or_path: ruta al modelo base que desea utilizar para el entrenamiento. Seleccione el modelo que desee utilizar. Las opciones disponibles son nova-micro/prod, nova-lite/prod y nova-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 que elija. 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.

    • output_s3_path: ubicación de S3 donde se almacenan el manifiesto y los registros de TensorBoard. Todas las ubicaciones de S3 de la ruta de S3 proporcionada 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 65 536 tokens para LoRA PEFT.

      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_length coincida con la distribución de datos.

  • Ajustes del entrenador

    • max_epochs: número de pasadas completas por el conjunto de datos de entrenamiento. Puede configurar max_steps o max_epochs, pero no recomendamos configurar ambas opciones. 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 admite distributed_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.

  • Parámetros de configuración de LoRA

    • peft_scheme: configure como lora para habilitar adaptación de bajo rango.

    • alpha: factor de escalado para ponderaciones de LoRA. Generalmente se establece con el mismo valor que adapter_dim.

    • adaptor_dropout: parámetro de regularización de LoRA.

Fórmula de PEFT

A continuación se ofrece una fórmula para LoRA PEFT.

## 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 model_name_or_path: "nova-lite/prod" # Base model path replicas: 4 # Number of compute instances for training output_s3_path: [S3_PATH_TO_STORE_MANIFEST] ## Training specific configs training_config: max_length: 32768 # Maximum context window size (tokens) trainer: max_epochs: 2 # Number of training epochs model: hidden_dropout: 0.0 # Dropout for hidden states attention_dropout: 0.0 # Dropout for attention weights ffn_dropout: 0.0 # Dropout for feed-forward networks optim: lr: 1e-5 # Learning rate name: distributed_fused_adam # Optimizer algorithm adam_w_mode: true # Enable AdamW mode eps: 1e-06 # Epsilon for numerical stability weight_decay: 0.0 # L2 regularization strength betas: # Adam optimizer betas - 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 peft: peft_scheme: "lora" # Enable LoRA for parameter-efficient fine-tuning lora_tuning: loraplus_lr_ratio: 8.0 # LoRA+ learning rate scaling factor alpha: 32 # Scaling factor for LoRA weights adapter_dropout: 0.01 # Regularization for LoRA parameters
Limitaciones

PEFT presenta las limitaciones siguientes:

  • La configuración de entrenamiento proporcionada anteriormente tiene los valores recomendados para cada parámetro.

  • 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.

Solución de problemas

Utilice la siguiente información para resolver los problemas que puedan surgir:

  • El conjunto de datos de entrada de entrenamiento y validación debe residir en buckets propiedad del cliente, no en buckets de depósito en garantía o buckets de S3 administrados por el servicio.

  • Si aparece un error de Región no encontrada en la AWS CLI, vuelva a enviar el trabajo con la región precedida del comando start-job. Por ejemplo: AWS_REGION=us-east-1 hyperpod start-job ...Job Parameters.

  • Para ajustar los hiperparámetros, siga las instrucciones de Selección de hiperparámetros.