

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

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

La formazione continua (CPT) è una tecnica di formazione che estende la fase di pre-formazione di un modello base esponendolo a testo aggiuntivo senza etichetta proveniente da domini o corpora specifici. A differenza della messa a punto supervisionata, che richiede coppie di input-output etichettate, il CPT si basa su documenti non elaborati per aiutare il modello ad acquisire una conoscenza più approfondita di nuovi domini, apprendere la terminologia e gli schemi di scrittura specifici del dominio e adattarsi a particolari tipi di contenuti o aree tematiche.

Questo approccio è particolarmente utile quando si dispone di grandi volumi (decine di miliardi di token) di dati di testo specifici del dominio, come documenti legali, letteratura medica, documentazione tecnica o contenuti aziendali proprietari, e si desidera che il modello sviluppi la fluidità nativa in quel dominio. In genere, dopo la fase CPT, il modello deve essere sottoposto a ulteriori fasi di ottimizzazione delle istruzioni per consentire al modello di utilizzare le nuove conoscenze acquisite e completare attività utili.

**Modelli supportati**  
Il CPT è disponibile per i seguenti modelli Amazon Nova:
+ Nova 1.0 (Micro, Lite, Pro)
+ Nova 2.0 (versione leggera)

**Quando usare Nova 1.0 rispetto a Nova 2.0**  
La famiglia di modelli Amazon Nova offre diversi punti operativi in termini di rapporto prezzo/prestazioni per ottimizzare precisione, velocità e costi.

Scegli Nova 2.0 quando hai bisogno di quanto segue:
+ Funzionalità di ragionamento avanzate per attività analitiche complesse
+ Prestazioni superiori nella codifica, nella matematica e nella risoluzione di problemi scientifici
+ Supporto per una maggiore durata del contesto
+ Migliori prestazioni multilingue

**Nota**  
Il modello più grande non è sempre migliore. Considerate il compromesso tra costi e prestazioni e i vostri requisiti aziendali specifici nella scelta tra i modelli Nova 1.0 e Nova 2.0.

# CPT su Nova 2.0
<a name="nova-cpt-2"></a>

Amazon Nova Lite 2.0 è un modello di ragionamento basato su set di dati più grandi e diversificati rispetto a Nova Lite 1.0. Nonostante sia un modello più grande, Nova Lite 2.0 offre un'inferenza più rapida rispetto a Nova Lite 1.0, offrendo al contempo funzionalità di ragionamento avanzate, lunghezze di contesto più lunghe e prestazioni multilingue migliorate.

Il CPT su Nova 2.0 consente di estendere queste funzionalità avanzate con i dati specifici del dominio, consentendo al modello di sviluppare competenze approfondite in aree specializzate pur mantenendo le sue capacità analitiche e di ragionamento superiori.

## Esempio di ricetta CPT
<a name="nova-cpt-2-sample-recipe"></a>

Di seguito è riportato un esempio di ricetta per CPT. Puoi trovare questa ricetta e altre nell'archivio delle [ricette](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/training/nova).

```
# Note:
# This recipe can run on p5.48xlarge
# Run config
run:
  name: "my-cpt-run"                           # A descriptive name for your training job
  model_type: "amazon.nova-2-lite-v1:0:256k"   # Model variant specification, do not change
  model_name_or_path: "nova-lite-2/prod"        # Base model path, do not change
  replicas: 8                                   # Number of compute instances for training, allowed values are 4, 8, 16, 32
  data_s3_path: ""                              # Customer data paths
  validation_data_s3_path: ""                   # Customer validation data paths
  output_s3_path: ""                            # Output artifact path,  job-specific configuration - not compatible with standard SageMaker Training Jobs
  mlflow_tracking_uri: ""                       # Required for MLFlow
  mlflow_experiment_name: "my-cpt-experiment"   # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-cpt-run"                 # Optional for MLFlow. Note: leave this field non-empty

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

  trainer:
    max_steps: 10                               # The number of training steps to run total
    val_check_interval: 10                      # The number of steps between running validation. Integer count or float percentage
    limit_val_batches: 2                        # Batches of the validation set to use each trigger

  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

  optim:
    optimizer: adam
    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
    adam_beta1: 0.9                             # Beta1 for Adam optimizer
    adam_beta2: 0.95                            # Beta2 for Adam optimizer
    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
```

## Preparazione dei dati per CPT su 2.0
<a name="nova-cpt-2-data-prep"></a>

**Requisiti per il formato dei dati**  
I set di dati di addestramento e convalida devono essere file JSONL secondo il formato mostrato di seguito, 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.

Verifica che i dati possano essere convertiti nel [formato Arrow](https://huggingface.co/docs/datasets/en/about_arrow). Usa lo script python qui sotto per aiutarti. Assicurati che venga utilizzata la `datasets==2.18.0` versione minima:

```
from datasets import load_dataset, load_from_disk
from pathlib import Path

input_path = Path("<Your jsonl file>")
output_path = Path("<Your output directory>")

dataset = load_dataset("json", data_files=str(input_path), split="train")
dataset.save_to_disk(str(output_path), max_shard_size="1GB")

try:
  test_dataset = datasets.load_from_disk(output_dir)
  print(f"Dataset loaded successfully ✅! Contains {len(test_dataset)} samples")
except Exception as e:
  print(e)
```

Dovrebbe stampare lo stesso numero di righe presenti nel file JSONL.

Quando usi il datamixing, esegui il primo lavoro con. `max_steps=2` Ciò contribuirà a creare ottimizzazioni nel cluster per l'accesso ai dati e a verificare la disponibilità di tutti i datamix.

**Come preparare i dati per il CPT**  
I dati di formazione sono il fattore determinante più importante per il successo della formazione preliminare continua. Sebbene i dati CPT siano spesso descritti come «non etichettati», la realtà è molto più sfumata. Il modo in cui i dati sono strutturati, formattati e presentati determina se il modello acquisirà le conoscenze e le competenze necessarie per il caso d'uso aziendale.

### Preparazione di set di dati aziendali strutturati per CPT
<a name="nova-cpt-2-structured-data"></a>

Questa è una sfida comune per le aziende e le organizzazioni che costruiscono modelli di base specializzati nel loro settore. La maggior parte delle aziende dispone di ricchi archivi di dati strutturati: cataloghi di prodotti, profili utente, registri delle transazioni, invio di moduli, chiamate API e metadati operativi. A prima vista, questo sembra molto diverso dal testo web non strutturato tipicamente utilizzato nella formazione preliminare standard.

Per imparare in modo efficace dai dati aziendali strutturati, rifletti attentamente sulle attività a valle e progetta la presentazione dei dati in modo da forzare il modello ad apprendere le giuste relazioni predittive.

Per sfruttare appieno il potenziale della formazione preliminare continua, prendi in considerazione:
+ Quali attività deve svolgere il modello al momento dell'inferenza
+ Quali informazioni sono presenti nei dati grezzi
+ Come strutturare i dati in modo che il modello impari a estrarre e manipolare le informazioni correttamente

Il semplice inserimento di dati strutturati nella formazione non insegnerà al modello a ragionare al riguardo. Modella attivamente la presentazione dei dati per guidare ciò che il modello apprende.

Nelle sezioni seguenti, è riportata una rassegna della letteratura che dimostra l'importanza dell'aumento dei dati e fornisce esempi di strategie di aumento per dati aziendali strutturati che forniranno idee utili su come trattare e organizzare i set di dati aziendali per il CPT.

**Dati strutturati per il CPT in letteratura**  
Il CPT può inserire informazioni sul dominio nel modello, ma spesso non riesce a renderle recuperabili e manipolabili quando gli input o le attività cambiano. Esperimenti controllati dimostrano che, senza ricorrere a diversi miglioramenti durante il pre-allenamento, i modelli memorizzano i dati in modi fragili che restano difficili da estrarre anche dopo una successiva regolazione delle istruzioni, e raccomandano di iniettare istruzioni come segnali nelle prime fasi dell'allenamento. Per i dati semistrutturati, la serializzazione randomizzata e altri miglioramenti riducono il sovradimensionamento dello schema, motivo per cui il CPT dovrebbe essere affiancato alle attività in stile istruzione anziché essere eseguito prima e IFT dopo. Un lavoro incentrato sulla finanza rileva inoltre che la combinazione congiunta di dati CPT e di istruzioni in batch migliora la generalizzazione e riduce l'oblio rispetto alla ricetta sequenziale. Il report tecnico di Qwen converge sullo stesso modello integrando dati di istruzioni di alta qualità nella formazione preliminare stessa, che favorisce l'apprendimento contestuale e preserva le istruzioni seguite acquisendo nuove conoscenze di dominio.

L'aumento dei dati per corpora semistrutturati è una leva fondamentale. Il CPT, compatibile con i grafici sintetici, espande piccoli set di domini in corpora collegati a entità che insegnano esplicitamente le relazioni e i composti con recupero al momento dell'inferenza. La combinazione congiunta di istruzioni CPT plus offre prestazioni superiori alle pipeline sequenziali nel settore finanziario e del bilanciamento con dati generali riduce il degrado delle competenze generali. Il CPT per domini su larga scala è inoltre in grado di mantenere ampie capacità e persino di consentire compromessi tramite la fusione dei modelli, ma ritiene comunque che l'ottimizzazione delle istruzioni sia un passo successivo essenziale, rafforzando l'importanza dell'introduzione di segnali di istruzione durante il CPT.

**Iniettare la diversità attraverso la randomizzazione e il rimescolamento**  
Una strategia generale che aiuta a insegnare in modo efficace i modelli a partire dai set di dati strutturati e semistrutturati consiste nel mescolare l'ordine dei campi nei set di dati e persino eliminare casualmente alcune chiavi.

Mescola i campi costringe il modello a leggere il significato di ogni valore anziché dove appare e ad apprendere le relazioni tra tutti i campi. Ad esempio, nel caso di un videogioco pubblicato su Amazon Store, quando «Titolo», «Piattaforma», «Prezzo», «Condizione» ed «Edizione» arrivano in diverse permutazioni, il modello non può basarsi sul principio «il terzo slot è la piattaforma»; deve associare le etichette ai valori e apprendere le relazioni bilaterali tra gli attributi: title ⇄ platform, platform ⇄ price, condition ⇄ price. Quindi può, ad esempio, dedurre una probabile piattaforma dal nome di un gioco e da un prezzo osservato, o stimare una fascia di prezzo plausibile dati un titolo e una piattaforma.

L'eliminazione casuale delle chiavi durante la serializzazione si comporta come la perdita di funzionalità: impedisce il co-adattamento su qualsiasi campo e costringe il modello a recuperare le informazioni mancanti dalle prove rimanenti. Se «Piattaforma» è assente, il modello deve recuperarlo dalla stringa del titolo o dal testo di compatibilità; se «Prezzo» è nascosto, deve triangolarlo tra piattaforma, edizione e condizione. Questo crea simmetria (A→B e B→A), robustezza per elenchi disordinati del mondo reale e invarianza dello schema quando i campi sono mancanti, rinominati o riordinati.

Un esempio in stile shopping lo rende concreto. Serializza lo stesso articolo in diversi modi: «Titolo: 'Elden Ring' \$1 Piattaforma: PlayStation 5 \$1 Condizione: Usato—Come nuovo \$1 Prezzo: \$134,99" e una permutazione come «Prezzo: \$134,99 \$1 Titolo: 'Elden Ring' \$1 Condizione: Usato—Come nuovo \$1 Piattaforma: PlayStation 5", e in alcuni passaggi elimina «Piattaforma» lasciando «Compatibile con» nella descrizione. PS5 Addestra obiettivi complementari come la previsione della piattaforma da \$1title, price\$1 e la previsione di un intervallo di prezzo da \$1title, platform\$1. Poiché l'ordine e persino la presenza delle chiavi variano, l'unica strategia stabile consiste nell'apprendere le vere relazioni tra gli attributi anziché memorizzare un modello.

### Il modo in cui i dati vengono presentati è importante
<a name="nova-cpt-2-data-presentation"></a>

LLMs impara prevedendo il token successivo in base a ciò che hanno già visto. Quindi l'ordine dei campi e degli eventi mostrati durante l'allenamento decide cosa può imparare il modello. Se il formato dell'allenamento corrisponde al compito reale, la perdita ricade sugli esatti token decisionali. Se i campi vengono messi insieme senza struttura, il modello impara le scorciatoie da tastiera o memorizza la popolarità e poi fallisce quando gli viene chiesto di scegliere tra le opzioni.

Mostra prima la situazione, poi le opzioni e poi la decisione. Se il modello deve anche conoscere i risultati o le spiegazioni, inseriscili dopo la decisione.

### Esempi di imballaggio per CPT
<a name="nova-cpt-2-packing"></a>

**Che cos'è l'imballaggio?**  
Significa semplicemente riempire ogni finestra di sequenza dei dati di addestramento con più esempi interi in modo che la finestra sia densa di token reali, non di riempimento.

**Perché è importante**  
Durante l'allenamento viene impostata una lunghezza massima del contesto, ad esempio 8.192 token. I batch sono modellati in base a [dimensione del batch × lunghezza del contesto]. Se un esempio di allenamento è più corto della lunghezza del contesto, le posizioni rimanenti vengono riempite. Il padding continua a pesare sull'attenzione e sui kernel MLP anche se la perdita è mascherata, quindi l'elaborazione viene pagata per i token che non trasmettono alcun segnale di apprendimento.

**Come fare l'imballaggio?**  
Per imballare più campioni, concatena più campioni di addestramento con un ` [DOC] ` separatore intermedio (nota lo spazio prima e dopo il [DOC]) in modo che l'intera lunghezza dei campioni sia inferiore alla lunghezza del contesto desiderata.

Un esempio di documento compresso sarebbe simile al seguente:

```
{"text": "training sample 1 [DOC] training sample 2 [DOC] training sample 3"}
```

### Parametri di ottimizzazione CPT
<a name="nova-cpt-2-tuning-parameters"></a>

I parametri disponibili per la regolazione fine con CPT includono:

**Configurazione delle esecuzioni**  

+ **nome**: Un nome descrittivo per il tuo lavoro di formazione. Questo aiuta a identificare il tuo lavoro nella console AWS di gestione.
+ **model\$1type**: la variante del modello Amazon Nova da utilizzare. Le opzioni disponibili sono. `amazon.nova-2-lite-v1:0:256k`
+ **model\$1name\$1or\$1path: il percorso verso** il modello base da utilizzare per l'allenamento. Le opzioni disponibili sono `nova-lite-2/prod` o il percorso S3 per il checkpoint post-allenamento (). `s3://customer-escrow-bucket-unique_id/training_run_name`
+ **repliche**: il numero di istanze di calcolo da utilizzare per l'addestramento distribuito. I valori disponibili variano in base al modello scelto. Amazon Nova Lite 2.0 supporta 4, 8, 16 o 32 repliche.
+ **data\$1s3\$1path**: la posizione S3 del set di dati di addestramento, che è un file JSONL. Questo file deve risiedere nello stesso account e nella stessa regione del cluster. AWS Tutte le posizioni S3 fornite devono trovarsi nello stesso account e nella stessa Regione.
+ **validation\$1data\$1s3\$1path**: (Facoltativo) La posizione S3 del set di dati di convalida, che è 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\$1s3\$1path: la posizione S3 in cui sono archiviati il manifest e i log.** TensorBoard Tutte le sedi S3 fornite devono trovarsi nello stesso account e nella stessa regione. AWS AWS 
+ **mlflow\$1tracking\$1uri**: L'ARN dell'app da utilizzare per la registrazione MLFlow MLFlow 
+ ** MLFlow mlflow\$1experiment\$1name**: nome dell'esperimento
+ **mlflow\$1run\$1name: nome** MLFlow dell'esecuzione

**Configurazione dell'allenamento**  

+ **max\$1length**: 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. Ti consigliamo di abbinare il parametro max\$1length alla distribuzione dei dati.
+ **global\$1batch\$1size**: il numero totale di esempi di formazione elaborati insieme in un unico passaggio avanti o indietro su tutti i dispositivi e gli operatori.

  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.

**Impostazioni del trainer**  

+ **max\$1steps**: il numero di fasi di allenamento da eseguire. Ogni passaggio addestrerà il modello con il `global_batch_size` numero di elementi

**Impostazioni del modello**  

+ **hidden\$1dropout**: La probabilità di eliminare gli 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\$1dropout**: La probabilità di far cadere i pesi di attenzione. Questo parametro può agevolare la generalizzazione. I valori validi sono compresi tra 0 e 1, entrambi inclusi.

**Configurazione dell'ottimizzatore**  

+ **lr**: Il tasso di apprendimento, che controlla la dimensione del passo 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.
+ **nome**: L'algoritmo di ottimizzazione. Attualmente è supportato solo `distributed_fused_adam`.
+ **weight\$1decay**: La forza di regolarizzazione L2. Valori maggiori (compresi tra 0,01 e 0,1) aumentano la regolarizzazione.
+ **warmup\$1steps: 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\$1lr**: 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.