Refinamiento de Nova 2.0
Requisitos previos
Antes de empezar un trabajo de entrenamiento, tenga en cuenta lo siguiente.
-
Buckets de Amazon S3 para almacenar sus datos de entrada y la salida de los trabajos de entrenamiento. Puede utilizar un bucket para ambos o buckets separados para cada tipo de datos. Asegúrese de que sus buckets estén en la misma región Región de AWS donde creó el resto de recursos para el entrenamiento. Para obtener más información, consulte Creación de un bucket de uso general.
-
Un rol de IAM con permisos para ejecutar un trabajo de entrenamiento. Asegúrese de asociar una política de IAM con
AmazonSageMakerFullAccess. Para obtener más información, consulte How to use SageMaker AI execution roles. -
Fórmulas básicas de Amazon Nova, consulte Obtención de fórmulas de Amazon Nova.
¿Qué es el SFT?
El refinamiento supervisado (SFT) entrena un modelo de lenguaje mediante pares de entrada y salida etiquetados. El modelo aprende a partir de ejemplos de demostración que consisten en peticiones y respuestas, y refina sus capacidades para alinearlas con tareas, instrucciones o comportamientos deseados específicos.
Preparación de datos
Descripción general
Los datos del SFT de Nova 2.0 utilizan el mismo formato de API de Converse que Nova 1.0, con la adición de campos de contenido de razonamiento opcionales. Para ver las especificaciones de formato completas, consulte:
-
Contenido de razonamiento: ReasoningContentBlock
-
Esquema de la API de Converse: API de Converse
-
Restricciones del conjunto de datos: Restricciones del conjunto de datos
Características admitidas
-
Tipos de entrada: texto, imagen o video en bloques de contenido del usuario
-
Contenido del asistente: respuestas y contenido de razonamiento de solo texto
-
Composición del conjunto de datos: debe ser homogéneo. Elija una de las siguientes opciones:
-
Turnos de solo texto
-
Turnos de texto e imagen
-
Turnos de texto y video (admite la comprensión de documentos)
-
importante
No se pueden mezclar imágenes y videos en el mismo conjunto de datos ni en turnos diferentes.
Limitaciones actuales
-
Contenido de razonamiento multimodal: aunque el formato Converse admite contenido de razonamiento basado en imágenes, el SFT de Nova 2.0 solo admite contenido de razonamiento basado en texto en el campo reasoningText.
-
Conjuntos de validación: no puede proporcionar ningún conjunto de datos de validación para el SFT con Nova 2.0. Si proporciona un conjunto de datos de validación, se ignorará durante el entrenamiento. Esta limitación se aplica tanto a envíos de trabajos basados en interfaz de usuario como programáticos.
Formatos multimedia compatibles
-
Imágenes: PNG, JPEG, GIF
-
Videos: MOV, MKV, MP4
Ejemplos de formato de datos
Llamada a herramientas
El SFT de Nova 2.0 admite modelos de entrenamiento en patrones de uso de herramientas, lo que permite al modelo aprender cuándo y cómo debe invocar herramientas o funciones externas.
Formato de datos para llamadas a herramientas
Los datos de entrenamiento de llamada a herramientas incluyen una sección toolConfig que define las herramientas disponibles, junto con turnos de conversación que muestran los patrones de uso de las herramientas.
Ejemplo de entrada
{ "schemaVersion": "bedrock-conversation-2024", "system": [ { "text": "You are an expert in composing function calls." } ], "toolConfig": { "tools": [ { "toolSpec": { "name": "getItemCost", "description": "Retrieve the cost of an item from the catalog", "inputSchema": { "json": { "type": "object", "properties": { "item_name": { "type": "string", "description": "The name of the item to retrieve cost for" }, "item_id": { "type": "string", "description": "The ASIN of item to retrieve cost for" } }, "required": [ "item_id" ] } } } }, { "toolSpec": { "name": "getItemAvailability", "description": "Retrieve whether an item is available in a given location", "inputSchema": { "json": { "type": "object", "properties": { "zipcode": { "type": "string", "description": "The zipcode of the location to check in" }, "quantity": { "type": "integer", "description": "The number of items to check availability for" }, "item_id": { "type": "string", "description": "The ASIN of item to check availability for" } }, "required": [ "item_id", "zipcode" ] } } } } ] }, "messages": [ { "role": "user", "content": [ { "text": "I need to check whether there are twenty pieces of the following item available. Here is the item ASIN on Amazon: id-123. Please check for the zipcode 94086" } ] }, { "role": "assistant", "content": [ { "reasoningContent": { "reasoningText": { "text": "The user wants to check how many pieces of the item with ASIN id-123 are available in the zipcode 94086" } } }, { "toolUse": { "toolUseId": "getItemAvailability_0", "name": "getItemAvailability", "input": { "zipcode": "94086", "quantity": 20, "item_id": "id-123" } } } ] }, { "role": "user", "content": [ { "toolResult": { "toolUseId": "getItemAvailability_0", "content": [ { "text": "[{\"name\": \"getItemAvailability\", \"results\": {\"availability\": true}}]" } ] } } ] }, { "role": "assistant", "content": [ { "text": "Yes, there are twenty pieces of item id-123 available at 94086. Would you like to place an order or know the total cost?" } ] } ] }
Requisitos de las llamadas a herramientas
Al crear los datos de entrenamiento de llamada a herramientas, siga estos requisitos:
| Requisito | Descripción |
|---|---|
| Colocación de ToolUse | ToolUse solo debe aparecer en los turnos del asistente. |
| Colocación de ToolResult | ToolResult solo debe aparecer en los turnos del usuario. |
| Formato de ToolResult | ToolResult debe ser solo texto o JSON. Los modelos de Nova no admiten otras modalidades. |
| Formato de inputSchema | inputSchema en toolSpec debe ser un objeto de esquema JSON válido |
| Coincidencia de toolUseId | Cada ToolResult debe hacer referencia a un toolUseId válido de un ToolUse de asistente anterior, y cada toolUseId debe usarse exactamente una vez por conversación. |
Notas importantes
-
Asegúrese de que las definiciones de las herramientas sean coherentes en todos los ejemplos de entrenamiento.
-
El modelo aprende los patrones de invocación de las herramientas a partir de las demostraciones que usted proporciona.
-
Incluya varios ejemplos de cuándo se debe usar cada herramienta y cuándo no se deben usar herramientas.
Comprensión de documentos
El SFT de Nova 2.0 admite el entrenamiento en tareas basadas en documentos, lo que permite al modelo aprender a analizar y responder a preguntas sobre documentos PDF.
Formato de datos para la comprensión de documentos
Los datos de entrenamiento sobre la comprensión de documentos incluyen referencias a los documentos en los bloques de contenido del usuario. El modelo aprende a extraer y razonar sobre el contenido de documentos.
Ejemplo de entrada
{ { "schemaVersion": "bedrock-conversation-2024", "messages": [ { "role": "user", "content": [ { "text": "What are the ways in which a customer can experience issues during checkout on Amazon?" }, { "document": { "format": "pdf", "source": { "s3Location": { "uri": "s3://my-bucket-name/path/to/documents/customer_service_debugging.pdf", "bucketOwner": "123456789012" } } } } ] }, { "role": "assistant", "content": [ { "reasoningContent": { "reasoningText": { "text": "I need to find the relevant section in the document to answer the question." } } }, { "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?" } ] } ] } }
Limitaciones de la comprensión de documentos
| Limitación | Details |
|---|---|
| Formato admitidos | Solo archivos PDF |
| Tamaño máximo del documento | 10 MB |
| Mezcla de modalidades | Una muestra puede tener documentos y texto, pero no puede tener documentos mezclados con otras modalidades (imágenes, videos) |
Prácticas recomendadas para la comprensión de documentos
-
Asegúrese de que los documentos tengan un formato claro y que el texto sea extraíble.
-
Proporcione varios ejemplos que abarquen diferentes tipos de documentos y formatos de preguntas.
-
Incluya contenido de razonamiento para ayudar al modelo a aprender los patrones de análisis de documentos.
Comprensión de videos
El SFT de Nova 2.0 admite el entrenamiento en tareas basadas en videos, lo que permite al modelo aprender a analizar y responder a preguntas sobre contenido de videos.
Formato de datos para la comprensión de videos
Los datos de entrenamiento sobre la comprensión de videos incluyen referencias a los videos en los bloques de contenido del usuario. El modelo aprende a extraer información y razonar sobre el contenido de videos.
Ejemplo de entrada
{ "schemaVersion": "bedrock-conversation-2024", "messages": [ { "role": "user", "content": [ { "text": "What are the ways in which a customer can experience issues during checkout on Amazon?" }, { "video": { "format": "mp4", "source": { "s3Location": { "uri": "s3://my-bucket-name/path/to/videos/customer_service_debugging.mp4", "bucketOwner": "123456789012" } } } } ] }, { "role": "assistant", "content": [ { "reasoningContent": { "reasoningText": { "text": "I need to find the relevant section in the video to answer the question." } } }, { "text": "Customers can experience issues with 1. Data entry, 2. Payment methods, 3. Connectivity while placing the order. Which one would you like to dive into?" } ] } ] }
Limitaciones de la comprensión de video
| Limitación | Details |
|---|---|
| Tamaño máximo del video | 50 MB |
| Duración máxima del video | 15 minutos |
| Videos por muestra | Solo se permite un video por muestra. No se admiten varios videos en la misma muestra. |
| Mezcla de modalidades | Una muestra puede tener video y texto, pero no puede tener videos combinados con otras modalidades (imágenes, documentos). |
Formatos de video admitidos
-
MOV
-
MKV
-
MP4
Prácticas recomendadas para la comprensión de videos
-
Mantenga los videos concisos y centrados en el contenido relevante para la tarea.
-
Asegúrese de que la calidad del video sea suficiente para que el modelo extraiga información significativa.
-
Proporcione preguntas claras que hagan referencia a aspectos específicos del contenido de videos.
-
Incluya varios ejemplos que abarquen diferentes tipos de videos y formatos de preguntas.
Modos de razonamiento y sin razonamiento
Descripción del contenido de razonamiento
El contenido de razonamiento (conocido también como cadena de pensamiento) captura los pasos de pensamiento intermedios del modelo antes de generar una respuesta final. En el turno del assistant, use el campo reasoningContent para incluir estos rastros de razonamiento.
¿Cómo se calcula la pérdida?
-
Con contenido de razonamiento: la pérdida de entrenamiento incluye tanto los tokens de razonamiento como los de salida final.
-
Sin contenido de razonamiento: la pérdida de entrenamiento se calcula solo en los tokens de salida final.
Puedes incluir reasoningContent en varios turnos del asistente en conversaciones de varios turnos.
Directrices de formato
-
Use texto sin formato para contenido de razonamiento.
-
Evite las etiquetas de marcado como
<thinking>y</thinking>a menos que la tarea lo requiera específicamente. -
Asegúrese de que el contenido de razonamiento sea claro y relevante para el proceso de resolución de problemas.
¿Cuándo se debe habilitar el modo de razonamiento?
Establezca reasoning_enabled: true en la configuración de entrenamiento cuando:
-
Los datos de entrenamiento tengan tokens de razonamiento.
-
Quiera que el modelo genere tokens de pensamiento antes de producir las salidas finales.
-
Necesite mejorar el rendimiento en tareas de razonamiento complejas.
Se permita entrenar a Nova con un conjunto de datos que no sea de razonamiento con reasoning_enabled = true. Sin embargo, hacerlo puede provocar que el modelo pierda sus capacidades de razonamiento, ya que Nova aprende principalmente a generar las respuestas presentadas en los datos sin aplicar el razonamiento. Si desea entrenar a Nova con un conjunto de datos sin razonamiento, pero aun así espera razonamiento durante la inferencia, puede deshabilitar el razonamiento durante el entrenamiento (reasoning_enabled = false), pero habilitarlo para la inferencia. Si bien este enfoque permite utilizar el razonamiento en el momento de la inferencia, no garantiza un rendimiento mejorado en comparación con la inferencia sin razonamiento. En general, habilite el razonamiento tanto para el entrenamiento como para la inferencia cuando utilice conjuntos de datos de razonamiento y desactívelo para ambos cuando utilice conjuntos de datos sin razonamiento.
Establezca reasoning_enabled: false cuando:
-
Los datos de entrenamiento no tengan tokens de razonamiento.
-
Entrene en tareas sencillas que no se beneficien de pasos de razonamiento explícitos.
-
Quiera optimizar la velocidad y reducir el uso de tokens.
Generación de datos de razonamiento
Si el conjunto de datos carece de rastros de razonamiento, puede crearlos con un modelo con capacidad de razonamiento como Nova Premier. Proporcione los pares de entrada y salida al modelo y capture el proceso de razonamiento para crear un conjunto de datos con razonamiento aumentado.
Uso de tokens de razonamiento para el entrenamiento
Al entrenar con el modo de razonamiento habilitado, el modelo aprende a separar el razonamiento interno de la respuesta final. El proceso de entrenamiento:
-
Organiza los datos en tríos: entrada, razonamiento y respuesta.
-
Optimiza el uso de la pérdida de predicción estándar del siguiente token de los tokens de razonamiento y respuesta.
-
Anima al modelo a razonar internamente antes de generar respuestas.
Contenido de razonamiento eficaz
El contenido de razonamiento de alta calidad debe incluir lo siguiente:
-
Pensamientos y análisis intermedios
-
Deducciones lógicas y pasos de inferencia
-
Enfoques de resolución de problemas paso a paso
-
Conexiones explícitas entre los pasos y las conclusiones
Esto ayuda al modelo a desarrollar la capacidad de “pensar antes de responder”.
Directrices de preparación de conjuntos de datos
Tamaño y calidad
-
Tamaño recomendado: entre 2000 y 10 000 muestras
-
Muestras mínimas: 200
-
Prioridad: calidad por encima de cantidad. Asegúrese de que los ejemplos sean precisos y estén bien anotados.
-
Alineación de las aplicaciones: el conjunto de datos debe reflejar de cerca los casos de uso de producción.
Diversidad
Incluya varios ejemplos que:
-
Cubran la gama completa de entradas esperadas.
-
Representen diferentes niveles de dificultad.
-
Incluyan casos extremos y variantes.
-
Eviten el sobreajuste a patrones estrechos.
Formato de salida
Especifique claramente el formato de salida deseado en las respuestas del asistente:
-
estructuras JSON
-
Tablas
-
formato CSV
-
Formatos personalizados específicos para la aplicación
Conversaciones de varios turnos
Para conjuntos de datos de varios turnos, recuerde lo siguiente:
-
La pérdida se calcula solo en los turnos del asistente, no en los del usuario.
-
Cada respuesta del asistente debe tener el formato correcto.
-
Mantenga la coherencia en todos los turnos de la conversación.
Lista de comprobación de la calidad
-
Tamaño del conjunto de datos suficiente (entre 2000 y 10 000 muestras)
-
Varios ejemplos que cubren todos los casos de uso
-
Formato de salida claro y coherente
-
Etiquetas y anotaciones precisas
-
Representación de escenarios de producción
-
Sin contradicciones ni ambigüedades
Cargar los datos
Los conjuntos de datos deben cargarse en un bucket al que puedan acceder los trabajos de entrenamiento de SageMaker. Para obtener información sobre cómo establecer los permisos adecuados, consulte Requisitos previos.
Inicio de un trabajo de entrenamiento
Selección de hiperparámetros y actualización de la fórmula
La configuración de Nova 2.0 es prácticamente la misma que la de Nova 1.0. Una vez que los datos de entrada se hayan cargado en S3, utilice la fórmula de la carpeta Refinamiento de Fórmulas de SageMaker HyperPod708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-SFT-V2-latest para ejecutar un trabajo de refinamiento SFT.
Utilice la versión 2.254.1 del PySDK de SageMaker AI para garantizar una compatibilidad estricta con el entrenamiento de Nova. Si se actualiza el SDK a la versión 3.0, se producirán cambios importantes. La compatibilidad con la versión 3 del PySDK de SageMaker AI estará disponible próximamente.
Ejemplo de entrada
!pip install sagemaker==2.254.1
run: name: {peft_recipe_job_name} model_type: amazon.nova-2-lite-v1:0:256k model_name_or_path: {peft_model_name_or_path} data_s3_path: {train_dataset_s3_path} # SageMaker HyperPod (SMHP) only and not compatible with SageMaker Training jobs. Note replace my-bucket-name with your real bucket name for SMHP job replicas: 4 # Number of compute instances for training, allowed values are 4, 8, 16, 32 output_s3_path: "" # Output artifact path (Hyperpod job-specific; not compatible with standard SageMaker Training jobs). Note replace my-bucket-name with your real bucket name for SMHP job training_config: max_steps: 10 # Maximum training steps. Minimal is 4. save_steps: 10 # How many training steps the checkpoint will be saved. Should be less than or equal to max_steps save_top_k: 1 # Keep top K best checkpoints. Note supported only for SageMaker HyperPod jobs. Minimal is 1. max_length: 32768 # Sequence length (options: 8192, 16384, 32768 [default], 65536) global_batch_size: 32 # Global batch size (options: 32, 64, 128) reasoning_enabled: true # If data has reasoningContent, set to true; otherwise False lr_scheduler: warmup_steps: 15 # Learning rate warmup steps. Recommend 15% of max_steps min_lr: 1e-6 # Minimum learning rate, must be between 0.0 and 1.0 optim_config: # Optimizer settings lr: 1e-5 # Learning rate, must be between 0.0 and 1.0 weight_decay: 0.0 # L2 regularization strength, must be between 0.0 and 1.0 adam_beta1: 0.9 # Exponential decay rate for first-moment estimates, must be between 0.0 and 1.0 adam_beta2: 0.95 # Exponential decay rate for second-moment estimates, must be between 0.0 and 1.0 peft: # Parameter-efficient fine-tuning (LoRA) peft_scheme: "lora" # Enable LoRA for PEFT lora_tuning: alpha: 64 # Scaling factor for LoRA weights ( options: 32, 64, 96, 128, 160, 192), lora_plus_lr_ratio: 64.0
La fórmula también contiene prácticamente los mismos hiperparámetros que Nova 1.0. Los hiperparámetros más destacados son:
-
max_steps: número de pasos para los que quiere ejecutar el trabajo. Por lo general, para una época (una ejecución de todo el conjunto de datos), el número de pasos es igual al número de muestras de datos dividido entre el tamaño del lote global. Cuanto mayor sea el número de pasos y menor sea el tamaño del lote global, más tardará en ejecutarse el trabajo. -
reasoning_enabled: controla el modo de razonamiento del conjunto de datos. Opciones:-
true: habilita el modo de razonamiento (equivalente a un razonamiento alto). -
false: deshabilita el modo de razonamiento.
Nota: En el caso del SFT, no existe ningún control detallado sobre los niveles de esfuerzo de razonamiento. Al configurar
reasoning_enabled: true, se habilita una capacidad de razonamiento completa. -
-
peft.peft_scheme: al configurarlo como “lora”, se permite un refinamiento basado en PEFT. Al configurarlo en nulo (sin comillas), se habilita el refinamiento de rango completo.
Inicio del trabajo de entrenamiento
from sagemaker.pytorch import PyTorch # define OutputDataConfig path if default_prefix: output_path = f"s3://{bucket_name}/{default_prefix}/{sm_training_job_name}" else: output_path = f"s3://{bucket_name}/{sm_training_job_name}" output_kms_key = "<KMS key arn to encrypt trained model in Amazon-owned S3 bucket>" # optional, leave blank for Amazon managed encryption recipe_overrides = { "run": { "replicas": instance_count, # Required "output_s3_path": output_path }, } estimator = PyTorch( output_path=output_path, base_job_name=sm_training_job_name, role=role, disable_profiler=True, debugger_hook_config=False, instance_count=instance_count, instance_type=instance_type, training_recipe=training_recipe, recipe_overrides=recipe_overrides, max_run=432000, sagemaker_session=sagemaker_session, image_uri=image_uri, output_kms_key=output_kms_key, tags=[ {'Key': 'model_name_or_path', 'Value': model_name_or_path}, ] ) print(f"\nsm_training_job_name:\n{sm_training_job_name}\n") print(f"output_path:\n{output_path}")
from sagemaker.inputs import TrainingInput train_input = TrainingInput( s3_data=train_dataset_s3_path, distribution="FullyReplicated", s3_data_type="Converse", ) estimator.fit(inputs={"validation": val_input}, wait=False)
nota
No se admite la transferencia de un conjunto de datos de validación para el refinamiento supervisado de Nova 2.0.
Para comenzar el trabajo:
-
Actualice la fórmula con las rutas e hiperparámetros del conjunto de datos.
-
Ejecute las celdas especificadas en el cuaderno para enviar el trabajo de entrenamiento.
El cuaderno gestiona el envío de trabajos y proporciona un seguimiento del estado.