

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

# Fine-tuning supervisionato (SFT)
<a name="nova-fine-tune"></a>

Il processo di formazione SFT consiste in due fasi principali:
+ **Preparazione dei dati**: segui le linee guida stabilite per creare, pulire o riformattare i set di dati nella struttura richiesta. Assicurati che gli input, gli output e le informazioni ausiliarie (come tracce di ragionamento o metadati) siano allineati e formattati correttamente.
+ **Configurazione dell'addestramento**: definisci come verrà addestrato il modello. Quando viene utilizzata, questa configurazione è scritta in un file di ricette YAML che include:
  + Percorsi di origine dei dati (set di dati di formazione e convalida)
  + Iperparametri chiave (epoche, frequenza di apprendimento, dimensione del batch)
  + Componenti opzionali (parametri di allenamento distribuiti, ecc.)

## Confronto e selezione dei modelli Nova
<a name="nova-model-comparison"></a>

Amazon Nova 2.0 è un modello addestrato su un set di dati più ampio e diversificato rispetto ad Amazon Nova 1.0. I miglioramenti includono:
+ **Capacità di ragionamento avanzate con supporto della** modalità di ragionamento esplicito
+ Prestazioni **multilingue più ampie in altre lingue**
+ **Prestazioni migliorate su attività complesse,** tra cui la codifica e l'uso degli strumenti
+ **Gestione estesa del contesto** con maggiore precisione e stabilità a lunghezze di contesto più lunghe

## Quando usare Nova 1.0 rispetto a Nova 2.0
<a name="nova-model-selection"></a>

Scegli Amazon Nova 2.0 quando:
+ Sono necessarie prestazioni superiori con funzionalità di ragionamento avanzate
+ È necessario un supporto multilingue o una gestione di attività complesse
+ Sono necessari risultati migliori in termini di codifica, utilizzo di strumenti o attività analitiche

# SFT su Nova 2.0
<a name="nova-sft-2-fine-tune"></a>

Amazon Nova Lite 2.0 offre funzionalità avanzate per la regolazione fine supervisionata, tra cui la modalità di ragionamento avanzato, una migliore comprensione multimodale e una gestione estesa del contesto. SFT su Nova 2.0 ti consente di adattare queste potenti funzionalità ai tuoi casi d'uso specifici, mantenendo al contempo le prestazioni superiori del modello in attività complesse.

Le caratteristiche principali di SFT su Nova 2.0 includono:
+ **Supporto in modalità di ragionamento**: addestra i modelli per generare tracce di ragionamento esplicite prima delle risposte finali per funzionalità analitiche avanzate.
+ **Formazione multimodale avanzata**: perfeziona la comprensione dei documenti (PDF), la comprensione dei video e le attività basate su immagini con una maggiore precisione.
+ **Funzionalità di richiamo degli strumenti**: addestrate i modelli a utilizzare efficacemente strumenti esterni e richiamare funzioni per flussi di lavoro complessi.
+ **Supporto contestuale esteso**: sfrutta finestre contestuali più lunghe con maggiore stabilità e precisione per applicazioni che richiedono un uso intensivo di documenti.

**Nota**  
Per ulteriori informazioni sulle immagini dei contenitori o sulle ricette di esempio da utilizzare, consulta le [ricette di Amazon Nova](nova-model-recipes.md).

**Topics**
+ [Selezione della modalità di ragionamento (solo Nova 2.0)](#nova-sft-2-reasoning-mode)
+ [Strumento che chiama il formato dei dati](#nova-sft-2-tool-calling)
+ [Comprensione del documento, formato dei dati](#nova-sft-2-document-understanding)
+ [Video Understanding for SFT](#nova-sft-2-video-understanding)
+ [Istruzioni per il caricamento dei dati](#nova-sft-2-data-upload)
+ [Creazione di un Fine-Tuning Job](#nova-sft-2-creating-job)
+ [Parametri di ottimizzazione SFT](#nova-sft-2-tuning-parameters)
+ [Guida agli iperparametri](#nova-sft-2-hyperparameters)

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

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

```
run:
  name: my-full-rank-sft-run
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://my-bucket-name/train.jsonl  #  only and not compatible with SageMaker Training Jobs
  replicas: 4                                     # Number of compute instances for training, allowed values are 4, 8, 16, 32
  output_s3_path: s3://my-bucket-name/outputs/    # Output artifact path (HyperPod job-specific; not compatible with standard SageMaker Training Jobs)
  mlflow_tracking_uri: ""                         # Required for MLFlow
  mlflow_experiment_name: "my-full-rank-sft-experiment"  # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-full-rank-sft-run"         # Optional for MLFlow. Note: leave this field non-empty

training_config:
  max_steps: 100                    # Maximum training steps. Minimal is 4.
  save_steps: ${oc.select:training_config.max_steps}  # How many training steps the checkpoint will be saved
  save_top_k: 5                     # Keep top K best checkpoints. Note supported only for  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
    adam_beta2: 0.95                 # Exponential decay rate for second-moment estimates

  peft:                             # Parameter-efficient fine-tuning (LoRA)
    peft_scheme: "null"             # Disable LoRA for PEFT
```

## Selezione della modalità di ragionamento (solo Nova 2.0)
<a name="nova-sft-2-reasoning-mode"></a>

Amazon Nova 2.0 supporta la modalità di ragionamento per funzionalità analitiche avanzate:
+ **Modalità di ragionamento (abilitata)**:
  + Impostata `reasoning_enabled: true` nella configurazione di allenamento
  + Modella i treni per generare tracce di ragionamento prima delle risposte finali
  + Migliora le prestazioni in attività di ragionamento complesse
+ **Modalità non ragionata (disabilitata)**:
  + Imposta `reasoning_enabled: false` o ometti il parametro (impostazione predefinita)
  + SFT standard senza ragionamento esplicito
  + Adatto per attività che non traggono vantaggio dal ragionamento step-by-step

**Nota**  
Quando il ragionamento è abilitato, funziona con un elevato sforzo di ragionamento. Non esiste un'opzione di ragionamento basso per SFT.
Il contenuto di ragionamento multimodale non è supportato per SFT. La modalità di ragionamento si applica agli input di solo testo.

### Utilizzo della modalità di ragionamento con set di dati non ragionanti
<a name="nova-sft-2-reasoning-non-reasoning-data"></a>

È consentito addestrare Amazon Nova su un set di dati non ragionevoli con`reasoning_enabled: true`. Tuttavia, così facendo il modello potrebbe perdere le sue capacità di ragionamento, poiché Amazon Nova impara principalmente a generare le risposte presentate nei dati senza applicare il ragionamento.

Se si esegue l'addestramento di Amazon Nova su un set di dati non ragionante ma si desidera comunque utilizzare il ragionamento durante l'inferenza:

1. Disattiva il ragionamento durante l'allenamento () `reasoning_enabled: false`

1. Abilita il ragionamento in un secondo momento durante l'inferenza

Sebbene questo approccio consenta il ragionamento in fase di inferenza, non garantisce prestazioni migliori rispetto all'inferenza senza ragionamento.

Procedura **ottimale:** abilita il ragionamento sia per l'addestramento che per l'inferenza quando si utilizzano set di dati di ragionamento e disabilitalo per entrambi quando si utilizzano set di dati non di ragionamento.

**Nota**  
Per ulteriori informazioni sulle immagini dei contenitori o sulle ricette di esempio da utilizzare, consulta le [ricette di Amazon Nova](nova-model-recipes.md).

## Strumento che chiama il formato dei dati
<a name="nova-sft-2-tool-calling"></a>

SFT supporta modelli di addestramento all'uso degli strumenti (chiamata di funzioni). Di seguito è riportato un esempio di formato di input per la chiamata degli strumenti:

**Esempio di input:**

```
{
  "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?"
        }
      ]
    }
  ]
}
```

Considerazioni importanti per i dati di chiamata degli strumenti:
+ ToolUse deve comparire solo nei turni degli assistenti
+ ToolResult deve apparire solo nei turni degli utenti
+ ToolResult deve essere solo testo o JSON; altre modalità non sono attualmente supportate per i modelli Amazon Nova
+ L'InputSchema all'interno di ToolSpec deve essere un oggetto JSON Schema valido
+ Ciascuno ToolResult deve fare riferimento a un assistente valido toolUseId di un precedente ToolUse, e ognuno deve essere usato esattamente una volta per conversazione toolUseId 

**Nota**  
Per ulteriori informazioni sulle immagini dei contenitori o sulle ricette di esempio da utilizzare, consulta le [ricette di Amazon Nova](nova-model-recipes.md).

## Comprensione del documento, formato dei dati
<a name="nova-sft-2-document-understanding"></a>

SFT supporta modelli di formazione sulle attività di comprensione dei documenti. Di seguito è riportato un esempio di formato di input:

**Esempio di input**

```
{
  "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": [
        {
          "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?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the document to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

Considerazioni importanti per la comprensione dei documenti:
+ Sono supportati solo i file PDF
+ La dimensione massima del documento è di 10 MB
+ Un esempio può contenere documenti e testo, ma non può combinare documenti con altre modalità (come immagini o video)

**Nota**  
Per ulteriori informazioni sulle immagini dei contenitori o sulle ricette di esempio da utilizzare, consulta le [ricette di Amazon Nova](nova-model-recipes.md).

## Video Understanding for SFT
<a name="nova-sft-2-video-understanding"></a>

SFT supporta modelli di ottimizzazione per le attività di comprensione video. Di seguito è riportato un esempio di formato di input:

**Esempio di input**

```
{
  "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": [
        {
          "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?"
        }
      ],
      "reasoning_content": [
        {
          "text": "I need to find the relevant section in the video to answer the question.",
          "type": "text"
        }
      ]
    }
  ]
}
```

Considerazioni importanti per la comprensione dei video:
+ I video possono avere una dimensione massima di 50 MB
+ I video possono avere una durata massima di 15 minuti
+ È consentito un solo video per campione; non sono supportati più video nello stesso campione
+ Un campione può contenere video e testo, ma non può combinare video con altre modalità (come immagini o documenti)

**Nota**  
Per ulteriori informazioni sulle immagini dei contenitori o sulle ricette di esempio da utilizzare, consulta le [ricette di Amazon Nova](nova-model-recipes.md).

## Istruzioni per il caricamento dei dati
<a name="nova-sft-2-data-upload"></a>

Carica i set di dati di formazione e convalida in un bucket S3. Specificate queste posizioni nel blocco della ricetta: `run`

```
## Run config
run:
  ...
  data_s3_path: "s3://<bucket-name>/<training-directory>/<training-file>.jsonl"
```

**Nota**: sostituisci `<bucket-name>``<training-directory>`, `<validation-directory>``<training-file>`, e `<validation-file>` con percorsi S3 effettivi.

**Nota**: i set di dati di convalida non sono attualmente supportati per SFT con Amazon Nova 2.0. Se viene fornito un set di dati di convalida, questo verrà ignorato.

## Creazione di un Fine-Tuning Job
<a name="nova-sft-2-creating-job"></a>

Definisci il modello base utilizzando i `model_name_or_path` campi `model_type` e nel blocco: `run`

```
## Run config
run:
  ...
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  ...
```

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

I parametri disponibili per la regolazione con SFT includono:

**Configurazione delle esecuzioni**  

+ **name: 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 dell'esecuzione.** MLFlow 

**Configurazione dell'allenamento**  

+ **max\$1steps**: il numero di fasi di allenamento da eseguire. Ogni fase addestrerà il modello con il `global_batch_size` numero di elementi.
+ **save\$1steps**: La frequenza (in fasi) con cui salvare i checkpoint del modello durante l'allenamento.
+ **save\$1top\$1k**: il numero massimo di migliori checkpoint da conservare in base alle metriche di convalida.
+ **max\$1length:** la lunghezza massima della sequenza in token. Determina la dimensione della finestra di contesto per l’addestramento. Il valore massimo supportato è 32768 token per SFT.

  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.
+ **reasoning\$1enabled: flag booleano per abilitare** le funzionalità di ragionamento durante l'allenamento.

**Learning Rate Scheduler**  

+ **warmup\$1steps**: Il numero di passaggi per aumentare gradualmente il tasso di apprendimento. Migliora la stabilità dell’addestramento.
+ **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.

**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.
+ **weight\$1decay**: La forza di regolarizzazione L2. Valori maggiori (compresi tra 0,01 e 0,1) aumentano la regolarizzazione.
+ **adam\$1beta1**: Il tasso di decadimento esponenziale per le stime del primo momento in Adam Optimizer. L'impostazione predefinita è 0,9.
+ **adam\$1beta2**: il tasso di decadimento esponenziale per le stime del secondo momento in Adam Optimizer. Il valore predefinito è 0,95.

**Configurazione PEFT**  

+ **peft\$1scheme: lo schema di regolazione fine** efficiente in termini di parametri da utilizzare. Le opzioni sono `'null'` per la messa a punto completa o per la regolazione di precisione basata su LoRa. `lora`

**LoRa Tuning (quando peft\$1scheme è 'lora')**  

+ **alpha**: Il parametro di scala LoRa. Controlla l'entità dell'adattamento di basso rango. I valori tipici vanno da 8 a 128.
+ **lora\$1plus\$1lr\$1ratio: Il rapporto del tasso di apprendimento per l'ottimizzazione di LoRA\$1**. Questo moltiplicatore regola il tasso di apprendimento in modo specifico per i parametri LoRa.

## Guida agli iperparametri
<a name="nova-sft-2-hyperparameters"></a>

Utilizza i seguenti iperparametri consigliati in base all'approccio di allenamento:

**Allenamento di livello completo**
+ **Epoche: 1**
+ **Tasso di apprendimento (lr**): 1e-5
+ **Tasso minimo di apprendimento (min\$1lr)**: 1e-6

**LoRa (adattamento a basso rango)**
+ **Epoche**: 2
+ **Tasso di apprendimento (lr**): 5e-5
+ **Tasso minimo di apprendimento (min\$1lr)**: 1e-6

**Nota**: modifica questi valori in base alle dimensioni del set di dati e alle prestazioni di convalida. Monitora le metriche di allenamento per evitare un sovradimensionamento.