Preaddestramento continuo (CPT) - Amazon SageMaker AI

Preaddestramento continuo (CPT)

Il preaddestramento continuo (CPT, Continued Pre-Training) è il processo di addestramento avanzato di un modello di fondazione preaddestrato su nuovi dati utilizzando gli stessi obiettivi non supervisionati (come la modellazione del linguaggio mascherato o la modellazione del linguaggio causale). Conserva le funzionalità linguistiche generali precedentemente apprese, adattandosi al contempo a nuovi domini o cambiamenti distributivi.

CPT non comporta modifiche a livello di architettura, né fine-tuning per specifiche attività downstream. Estende invece la capacità di comprensione del linguaggio del modello in modo compatibile con il dominio.

È consigliabile utilizzare CPT nei seguenti scenari:

  • In presenza di dati non etichettati su larga scala, specifici di un dominio (ad esempio, medicina o finanza).

  • In presenza di un modello che debba mantenere le funzionalità linguistiche generali, migliorando al contempo i contenuti specifici del dominio.

  • In caso si intenda migliorare le prestazioni zero-shot e few-shot in aree specializzate, senza eseguire il fine-tuning esteso e specifico per attività.

Requisiti per il formato dei dati

È consigliabile attenersi alle seguenti caratteristiche del set di dati durante l’esecuzione di CPT:

  • Diversità: i dati devono coprire un’ampia gamma di espressioni all’interno del dominio di destinazione per evitare l’overfitting.

  • Rappresentazione: i dati devono riflettere la distribuzione a cui viene sottoposto il modello durante l’inferenza.

  • Pulizia: rumore e ridondanza dei dati possono ridurre le prestazioni. La deduplicazione e la normalizzazione del testo migliorano l’addestramento dei modelli.

  • Dimensionamento: i set di dati più grandi sono utili ma, oltre una certa soglia (ad esempio, l’esecuzione di più epoch su dati limitati), aumentano i rischi di overfitting.

I set di dati di addestramento e convalida devono essere file JSONL in formato Converse, in cui ogni riga contiene un oggetto JSON che rappresenta una conversazione con i campi e la struttura richiesti. Ecco un esempio:

{"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"}

Le voci di testo devono contenere contenuti fluidi in modo naturale e di alta qualità che rappresentino il dominio di destinazione.

Convalida di set di dati

Per convalidare il set di dati prima di inviare il processo CPT, verifica le seguenti condizioni:

  • Ogni riga deve contenere un oggetto JSON valido.

  • Ogni oggetto ha un campo “text” che contiene dati di tipo stringa.

  • Non sono presenti campi diversi da “text”.

  • Il file è un’estensione .jsonl.

Tempi di addestramento

La quantità di tempo dedicata all’addestramento dipende in larga misura dalla dimensione del set di dati, dal numero di istanze utilizzate e dal modello da addestrare. I tempi di addestramento dovrebbero essere scalabili in modo lineare. La tabella seguente mostra alcuni esempi di tempi di addestramento per vari modelli.

Tipo di modello

GBS

Numero di campioni nel set di dati

Numero di istanze P5

max_length value

Tempo di addestramento approssimativo in ore

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

I set di dati di addestramento e convalida devono essere file JSONL conformi al formato operativo Amazon Bedrock Converse, in cui ogni riga contiene un oggetto JSON che rappresenta una conversazione con i campi e la struttura richiesti.

I parametri di Amazon Nova disponibili per l’ottimizzazione con CPT includono:

  • Configurazione run

    • name: un nome descrittivo per il job di addestramento. Consente di identificare il job nella Console di gestione AWS.

    • model_type: la variante del modello Amazon Nova da utilizzare. Le opzioni disponibili sono amazon.nova-micro-v1:0:128k, amazon.nova-lite-v1:0:300k oppure amazon.nova-pro-v1:0:300k.

    • model_name_or_path: il percorso del modello di base da utilizzare per l’addestramento. Le opzioni disponibili sono nova-micro/prod, nova-lite/prod, nova-pro/prod o il percorso S3 per il checkpoint post-addestramento (s3://customer-escrow-bucket-unique_id/training_run_name).

    • replicas: il numero di istanze di calcolo da utilizzare per l’addestramento distribuito. I valori disponibili variano in base al modello scelto. Amazon Nova Micro supporta 2, 4 oppure 8 repliche. Amazon Nova Lite supporta 4, 8, 16 oppure 32 repliche. Amazon Nova Pro supporta 6, 12 oppure 24 repliche.

    • data_s3_path: la posizione S3 del set di dati di addestramento, ovvero un file JSONL. Questo file deve trovarsi nello stesso Account AWS e nella stessa Regione del cluster. Tutte le posizioni S3 fornite devono trovarsi nello stesso account e nella stessa Regione.

    • validation_data_s3_path: (facoltativo) la posizione S3 del set di dati di convalida, ovvero un file JSONL. Questo file deve trovarsi nello stesso account e nella stessa Regione del cluster. Tutte le posizioni S3 fornite devono trovarsi nello stesso account e nella stessa Regione.

    • output_s3_path: la posizione S3 in cui sono archiviati il manifesto e i log TensorBoard. Tutte le posizioni S3 fornite devono trovarsi nello stesso Account AWS e nella stessa Regione AWS.

  • Configurazione di addestramento

    • max_length: la lunghezza massima della sequenza in token. Determina la dimensione della finestra di contesto per l’addestramento. Il valore massimo supportato è di 8.192 token per CPT.

      Sequenze più lunghe migliorano l’efficienza di addestramento a scapito di maggiori requisiti di memoria. È consigliabile che il parametro max_length corrisponda alla distribuzione dei dati.

  • Impostazioni di addestramento

    • global_batch_size: il numero totale di campioni di addestramento elaborati insieme in un unico passaggio avanti o indietro su tutti i dispositivi e i worker.

      Questo valore moltiplica la dimensione del batch per dispositivo e il numero di dispositivi. Influisce sulla stabilità dell’addestramento e sul throughput. È consigliabile iniziare con un batch di dimensioni idonee per la memoria e quindi aumentare verticalmente. Per i dati specifici del dominio, batch di dimensioni maggiori potrebbero rendere i gradienti eccessivamente uniformi.

    • max_epochs: il numero di passaggi completi nel set di dati di addestramento.

      In generale, set di dati di dimensioni maggiori richiedono meno epoch per la convergenza, mentre set di dati di dimensioni minori prevedono più epoch. È consigliabile regolare il numero di epoch in base alla dimensione dei dati per evitare l’overfitting.

  • Impostazioni del modello

    • hidden_dropout: la probabilità di eliminare output di stato nascosti. Aumenta questo valore di circa 0,0-0,2 per ridurre l’overfitting su set di dati più piccoli. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • attention_dropout: la probabilità di eliminare pesi di attenzione. Questo parametro può agevolare la generalizzazione. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • ffn_dropout: la probabilità di eliminare output di rete feed-forward. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

  • Configurazione optimizer

    • lr: il tasso di apprendimento, che controlla la dimensione del passaggio durante l’ottimizzazione. Sono consigliabili valori compresi tra 1e-6 e 1e-4 per ottenere buone prestazioni. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

    • name: l’algoritmo dell’ottimizzatore. Attualmente è supportato solo distributed_fused_adam.

    • weight_decay: la potenza di regolarizzazione L2. Valori maggiori (compresi tra 0,01 e 0,1) aumentano la regolarizzazione.

    • warmup_steps: il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Migliora la stabilità dell’addestramento. I valori validi sono compresi tra 1 e 20, entrambi inclusi.

    • min_lr: il tasso minimo di apprendimento alla fine del decadimento. I valori validi sono compresi tra 0 e 1, entrambi inclusi, ma devono essere inferiori al tasso di apprendimento.

Ricetta CPT

Di seguito è riportata una ricetta per 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
Limitazioni

CPT presenta le seguenti limitazioni:

  • I set di dati multimodali non sono supportati.

  • I checkpoint intermedi non vengono salvati per la valutazione e non è possibile riprendere da un checkpoint intermedio. Viene salvato solo l’ultimo checkpoint.

  • La registrazione di log MLflow non è supportata.