

# Entrenamiento previo continuo (CPT)
<a name="nova-cpt"></a>

El entrenamiento previo continuo (CPT) es una técnica de entrenamiento que amplía la fase de entrenamiento previo de un modelo básico exponiéndolo a texto adicional sin etiquetar de dominios o corpus específicos. A diferencia del refinamiento supervisado, que requiere combinaciones de entradas y salidas etiquetadas, el CPT entrena con documentos sin procesar para ayudar al modelo a adquirir un conocimiento más profundo de nuevos dominios, aprender terminología y patrones de escritura específicos de cada dominio y adaptarse a tipos de contenido o áreas temáticas particulares.

Este enfoque es particularmente valioso cuando se tienen grandes volúmenes (decenas de miles de millones de tokens) de datos de texto específicos de un dominio, como documentos legales, bibliografía médica, documentación técnica o contenido empresarial patentado, y se desea que el modelo desarrolle una fluidez nativa en ese dominio. Por lo general, después de la fase de CPT, el modelo tiene que pasar por etapas adicionales de ajuste mediante instrucciones para poder utilizar el conocimiento recién adquirido y completar tareas útiles.

**Modelos compatibles**  
El CPT está disponible para los siguientes modelos de Amazon Nova:
+ Nova 1.0 (Micro, Lite, Pro)
+ Nova 2.0 (Lite)

Elija Nova 1.0 cuando en los siguientes casos de uso:
+ Su caso de uso requiere una comprensión del lenguaje estándar sin un razonamiento avanzado.
+ Desea optimizar el proceso para reducir los costos derivados del entrenamiento y la inferencia.
+ Su objetivo es enseñar al modelo conocimientos y comportamientos específicos del dominio, en lugar de realizar tareas de razonamiento complejas.
+ Ya ha validado el rendimiento en Nova 1.0 y no necesita capacidades adicionales.

**nota**  
El modelo más grande no siempre es mejor. Tenga en cuenta la relación costo-rendimiento y los requisitos específicos de su empresa cuando tenga que elegir entre los modelos de Nova 1.0 y Nova 2.0.

# CPT en Nova 1.0
<a name="nova-cpt-1"></a>

Debe utilizar el CPT en las siguientes situaciones:
+ Dispone de datos a gran escala y sin etiquetar que son específicos de un dominio (por ejemplo, medicina o finanzas).
+ Desea que el modelo conserve las capacidades lingüísticas generales y, al mismo tiempo, mejore el contenido específico de un dominio.
+ Desea mejorar el rendimiento desde cero y con pocos pasos en áreas especializadas sin necesidad de realizar refinamientos exhaustivos y específicos de la tarea.

**Requisitos del formato de los datos**  
Es recomendable que se cumplan los siguientes requisitos del conjunto de datos al realizar CPT:
+ **Diversidad**: los datos deben cubrir una amplia variedad de expresiones en el dominio de destino para evitar un ajuste excesivo.
+ **Representación**: los datos deben reflejar la distribución a la que se enfrentará el modelo durante la inferencia.
+ **Limpieza**: el ruido y la redundancia de los datos pueden reducir el rendimiento. La desduplicación y la normalización del texto mejoran el entrenamiento del modelo.
+ **Escalabilidad**: los grandes conjuntos de datos ayudan, pero si se supera cierto umbral (por ejemplo, si se ejecutan varias épocas con datos limitados), aumentan los riesgos de ajuste excesivo.

Los conjuntos de datos de entrenamiento y validación deben ser archivos JSONL que siguen el formato que se muestra más abajo, donde cada línea contiene un objeto JSON que representa una conversación con la estructura y los campos requeridos. A continuación se muestra un ejemplo:

```
{"text": "AWS stands for Amazon Web Services"}
{"text": "Amazon SageMaker is a fully managed machine learning service"}
{"text": "Amazon Bedrock is a fully managed service for foundation models"}
```

Las entradas de texto deben incluir contenido fluido y de alta calidad que represente el dominio de destino.

**Validación del conjunto de datos**  
Para validar el conjunto de datos antes de enviar el trabajo de CPT, compruebe las siguientes condiciones:
+ Cada línea también debe contener un objeto JSON válido.
+ Cada objeto tiene un campo de “texto” que contiene datos de cadena.
+ Todos los campos son de “texto”.
+ El archivo tiene la extensión `.jsonl`.

**Horas de entrenamiento**  
La cantidad de tiempo dedicado al entrenamiento depende en gran medida del tamaño del conjunto de datos, la cantidad de instancias utilizadas y el modelo que se esté entrenando. Se espera que los tiempos de entrenamiento se escalen linealmente. La siguiente tabla muestra algunos ejemplos de tiempos de entrenamiento para varios modelos.


| Tipo de modelo | GBS | Número de muestras en el conjunto de datos | Número de instancias P5 | `max_length`Valor de  | Tiempo aproximado de entrenamiento en horas | 
| --- |--- |--- |--- |--- |--- |
| Amazon Nova Micro | 256 | 100 000 | 8 | 8 192 | 4 | 
| Amazon Nova Lite | 256 | 100 000 | 16 | 8 192 | 4 | 
| Amazon Nova Pro | 256 | 100 000 | 24 | 8 192 | 10 | 

Los conjuntos de datos de entrenamiento y validación deben ser archivos JSONL que siguen el formato que se muestra más abajo, donde cada línea contiene un objeto JSON que representa una conversación con la estructura y los campos requeridos.

Parámetros de Amazon Nova disponibles para el ajuste con CPT:
+ **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. 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://customer-escrow-bucket-unique_id/training_run_name`).
  + `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.
  + `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 proporcionadas 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 proporcionadas 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 proporcionadas deben estar en la misma Cuenta de AWS y Región de AWS.
+ **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 8192 tokens para CPT.

    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**
  + `global_batch_size`: número total de muestras de entrenamiento procesadas juntas en una sola pasada hacia delante o hacia atrás en todos los dispositivos y trabajadores.

    Este valor multiplica el tamaño del lote por dispositivo y el número de dispositivos. Afecta a la estabilidad del entrenamiento y al rendimiento. Le recomendamos que comience con un tamaño de lote que se ajuste fácilmente a la memoria y, a partir de ahí, se escale verticalmente. En el caso de datos específicos de un dominio, es posible que los lotes de mayor tamaño suavicen en exceso los gradientes.
  + `max_epochs`: número de pasadas completas por el conjunto de datos de entrenamiento.

    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 para evitar el ajuste excesivo.
+ **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.

**Fórmula de CPT**  
A continuación se ofrece una fórmula para CPT.

```
## Run config
run:
  name: "my-cpt-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, allowed values are 4, 8, 16
  data_s3_path: [S3_PATH_TO_TRAIN_DATASET]
  validation_data_s3_path: (OPTIONAL)[S3_PATH_TO_VALIDATION_DATASET]
  output_s3_path: [S3_PATH_TO_STORE_MANIFEST]

## Training specific configs
training_config:
  max_length: 8192               # Maximum context window size (tokens).
  global_batch_size: 256           # Global batch size, allowed values are 32, 64, 128, 256.

  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
```

**Limitaciones**  
CPT presenta las siguientes limitaciones:
+ No admite conjuntos de datos multimodales.
+ Los puntos de comprobación intermedios no se guardan para su evaluación y no es posible reanudar desde un punto de comprobación intermedio. Solo se guarda el último punto de comprobación.