

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

# SFT su Nova 1.0
<a name="nova-sft-1"></a>

Il fine-tuning supervisionato (SFT, Supervised Fine-Tuning) è il processo in base al quale viene fornita una raccolta di coppie prompt-risposta a un modello di fondazione per migliorare le prestazioni di un modello preaddestrato su un’attività specifica. Gli esempi etichettati sono formattati come coppie prompt-risposta e formulati come istruzioni. Questo processo di fine-tuning modifica i pesi del modello.

È consigliabile utilizzare SFT in presenza di dati specifici del dominio che richiedono di fornire coppie prompt-risposta specifiche per risultati ottimali.

I set di dati di input per l’addestramento e la convalida devono risiedere in bucket di proprietà del cliente, non in bucket escrow o bucket S3 gestiti dal servizio.

## Requisiti dei dati
<a name="nova-sft-1-data-requirements"></a>

Per SFT a dimensionalità completa e Low-Rank Adapter (LoRA), i dati devono seguire il [formato operativo di Amazon Bedrock Converse](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_Converse.html). Per esempi e vincoli di questo formato, consulta [Preparing data for fine-tuning Understanding models](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html).

Per convalidare il formato del set di dati prima dell’invio, è consigliabile utilizzare lo [script di convalida dal repository di esempi di Amazon Bedrock](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/bedrock-finetuning/understanding/dataset_validation/nova_ft_dataset_validator.py). Questo strumento di convalida aiuta a garantire che i file JSONL rispettino le specifiche di formato richieste e a identificare eventuali problemi potenziali prima di inviare il processo di fine-tuning.

I parametri di Amazon Nova disponibili per l’ottimizzazione con SFT sono i seguenti:
+ **Configurazione run**
  + `name`: un nome descrittivo per il job di addestramento. Questo aiuta a identificare il tuo lavoro in. 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. Seleziona il modello da utilizzare tra `nova-micro/prod`, `nova-lite/prod`, `nova-pro/prod` o il percorso S3 per il checkpoint post-addestramento (`s3://<escrow bucket>/<job id>/outputs/checkpoints`).
  + `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 risiedere nella stessa Account AWS regione del cluster. Tutte le posizioni S3 nel percorso S3 fornito 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 nel percorso S3 fornito devono trovarsi nello stesso account e nella stessa Regione.
  + `output_s3_path`: La posizione S3 in cui sono archiviati il manifesto e TensorBoard i log. Tutte le posizioni S3 nel percorso S3 fornito devono trovarsi nello stesso account e nella stessa Regione.
+ **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 65.536 token per SFT.

    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**
  + `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.
+ **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. I valori validi sono compresi tra 1e-6 e 1e-3, entrambi inclusi. Sono consigliabili valori compresi tra 1e-6 e 1e-4 per ottenere buone prestazioni.
  + `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.

## Avvio rapido con una ricetta per SFT a dimensionalità completa
<a name="nova-sft-1-quick-start"></a>

Di seguito è riportata una ricetta per l'SFT completo destinata all'avvio rapido di un job SFT su un cluster. SageMaker HyperPod Questa ricetta presuppone inoltre che vi siate connessi al SageMaker HyperPod cluster utilizzando le credenziali corrette. AWS 

```
run:
  name: "my-sft-micro-job" # gets appended with a unique ID for HP jobs
  model_type: "amazon.nova-micro-v1:0:128k"
  model_name_or_path: "nova-micro/prod"
  replicas: 2
  data_s3_path: s3:{{Replace with your S3 bucket name}}/input.jsonl
  validation_data_s3_path: {{[OPTIONAL] s3:your S3 bucket name}}/input.jsonl
  output_s3_path: {{[S3_PATH_TO_STORE_MANIFEST]}}

## training specific configs
training_config:
  max_length: 32768
  save_steps: 100000
  replicas: ${recipes.run.replicas}
  micro_batch_size: 1
  task_type: sft
  global_batch_size: 64
  weights_only: True
  allow_percentage_invalid_samples: 10

  exp_manager:
    exp_dir: null
    create_wandb_logger: False
    create_tensorboard_logger: True
      project: null
      name: null
    checkpoint_callback_params:
      monitor: step
      save_top_k: 10
      mode: max
      every_n_train_steps: ${recipes.training_config.save_steps}
      save_last: True
    create_early_stopping_callback: True
    early_stopping_callback_params:
      min_delta: 0.001
      mode: min
      monitor: "val_loss"
      patience: 2

  trainer:
    log_every_n_steps: 1
    max_epochs: -1
    max_steps: 16
    limit_test_batches: 0
    gradient_clip_val: 1.0
    num_nodes: ${recipes.training_config.replicas}

  model:
    hidden_dropout: 0.0 # Dropout probability for hidden state transformer.
    attention_dropout: 0.0 # Dropout probability in the attention layer.
    ffn_dropout: 0.0 # Dropout probability in the feed-forward layer.
    sequence_parallel: True
    optim:
      lr: 1e-5
      name: distributed_fused_adam
      bucket_cap_mb: 10
      contiguous_grad_buffer: False
      overlap_param_sync: False
      contiguous_param_buffer: False
      overlap_grad_sync: False
      adam_w_mode: true
      eps: 1e-06
      weight_decay: 0.0
      betas:
        - 0.9
        - 0.999
      sched:
        name: CosineAnnealing
        warmup_steps: 10
        constant_steps: 0
        min_lr: 1e-6

    mm_cfg:
      llm:
        freeze: false
      image_projector:
        freeze: true
        require_newline: true
      video_projector:
        freeze: true
        require_newline: false

    peft:
      peft_scheme: null

    training_validation:
      loader:
        args:
          data_loader_workers: 1
          prefetch_factor: 2
      collator:
        args:
          force_image_at_turn_beginning: false
```

## Esempio di ricetta per SFT a dimensionalità completa
<a name="nova-sft-1-sample-recipe"></a>

Di seguito è riportato un esempio di ricetta per il processo SFT a dimensionalità completa con tutti i componenti configurati correttamente.

```
## Run config
run:
    name: "my-sft-run"              # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    data_s3_path: s3:{{Replace with your S3 bucket name}}/input.jsonl
    validation_data_s3_path: {{[OPTIONAL] s3:your S3 bucket name}}/input.jsonl
    output_s3_path: {{[S3_PATH_TO_STORE_MANIFEST]}}

## Training specific configs
training_config:
    max_length: 32768               # Maximum context window size (tokens)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 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

        peft:
            peft_scheme: null        # Set to null for full-parameter fine-tuning
```

## Limitazioni
<a name="nova-sft-1-limitations"></a>

La pubblicazione di metriche su Weights & Biases non è supportata.

Per regolare gli iperparametri, segui le istruzioni riportate in [Selecting hyperparameters](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html).

## Fine-tuning efficiente in termini di parametri (PEFT)
<a name="nova-fine-tune-peft"></a>

Il fine-tuning efficiente in termini di parametri (PEFT, Parameter-Efficient Fine-Tuning) prevede il riaddestramento di un numero limitato di pesi aggiuntivi per adattare un modello di fondazione a nuovi domini o attività. In particolare, il processo PEFT Low-Rank Adapter (LoRA) esegue in modo efficiente il fine-tuning dei modelli di fondazione introducendo matrici di pesi addestrabili a bassa dimensionalità in livelli specifici del modello, riducendo il numero di parametri addestrabili e mantenendo la qualità del modello.

Un adattatore PEFT LoRA amplia il modello di fondazione incorporando livelli di adattatori leggeri che modificano i pesi del modello durante l’inferenza, mantenendo intatti i parametri del modello originale. Questo approccio è anche considerato una delle tecniche di fine-tuning più convenienti. Per ulteriori informazioni, consulta [Fine-tune models with adapter inference components](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-adapt.html).

È consigliabile utilizzare il processo PEFT di tipo LoRA nei seguenti scenari:
+ Per iniziare con una procedura di addestramento rapida.
+ Le prestazioni del modello base sono già soddisfacenti. In questo caso, l’obiettivo di PEFT LoRA è quello di migliorare le sue capacità in molteplici attività correlate, come la sintesi testuale o la traduzione linguistica. Le proprietà di regolarizzazione di PEFT LoRA contribuiscono a prevenire l’overfitting e riducono il rischio che il modello “dimentichi” il dominio di origine. Ciò garantisce che il modello rimanga versatile e adattabile a varie applicazioni.
+ Per eseguire scenari di fine-tuning delle istruzioni con set di dati relativamente piccoli. PEFT LoRA offre prestazioni migliori con set di dati di dimensioni ridotte e specifici per attività rispetto a set di dati più ampi e più grandi.
+ In presenza di set di dati di grandi dimensioni ed etichettati che superano i limiti di personalizzazione di Amazon Bedrock. In questo caso, puoi utilizzare LoRa PEFT sull' SageMaker intelligenza artificiale per generare risultati migliori.
+ Se hai già ottenuto risultati promettenti tramite la messa a punto di Amazon Bedrock, LoRa PEFT in SageMaker AI può aiutarti a ottimizzare ulteriormente gli iperparametri del modello.

I parametri Amazon Nova disponibili per PEFT LoRA includono:
+ **Configurazione run**
  + `name`: un nome descrittivo per il job di addestramento. Questo aiuta a identificare il tuo lavoro in. Console di gestione AWS
  + `model_type`: la variante del modello 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. Seleziona il modello da utilizzare. Le opzioni disponibili sono `nova-micro/prod`, `nova-lite/prod`, `nova-pro/prod` o il percorso S3 per il checkpoint post-addestramento (`s3://<escrow bucket>/<job id>/outputs/checkpoints`).
  + `replicas`: il numero di istanze di calcolo da utilizzare per l’addestramento distribuito. I valori disponibili variano in base al modello utilizzato. 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.
  + `output_s3_path`: La posizione S3 in cui sono archiviati il manifesto e TensorBoard i log. Tutte le posizioni S3 nel percorso S3 fornito devono trovarsi nello stesso account e nella stessa Regione.
+ **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 65.536 token per PEFT LoRA.

    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**
  + `max_epochs`: il numero di passaggi completi nel set di dati di addestramento. È possibile impostare `max_steps` oppure `max_epochs`, ma non è consigliabile impostare entrambi i parametri. Il valore massimo è 5.

    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.
+ **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.
+ **Parametri di configurazione LoRA**
  + `peft_scheme`: impostato su `lora` per abilitare l’adattamento a bassa dimensionalità. 
  + `alpha`: il fattore di dimensionamento per i pesi LoRA. In genere è impostato sullo stesso valore di `adapter_dim`.
  + `adaptor_dropout`: il parametro di regolarizzazione per LoRA.

### Ricetta per PEFT
<a name="nova-sft-1-peft-recipe"></a>

Di seguito è riportata una ricetta per PEFT LoRA.

```
## Run config
run:
    name: "my-lora-run"             # A descriptive name for your training job
    model_type: "amazon.nova-lite-v1:0:300k"  # Model variant specification
    model_name_or_path: "nova-lite/prod"      # Base model path
    replicas: 4                     # Number of compute instances for training
    output_s3_path: {{[S3_PATH_TO_STORE_MANIFEST]}}

## Training specific configs
training_config:
    max_length: 32768               # Maximum context window size (tokens)

    trainer:
        max_epochs: 2               # Number of training epochs

    model:
        hidden_dropout: 0.0          # Dropout for hidden states
        attention_dropout: 0.0       # Dropout for attention weights
        ffn_dropout: 0.0             # Dropout for feed-forward networks

        optim:
            lr: 1e-5                 # Learning rate
            name: distributed_fused_adam  # Optimizer algorithm
            adam_w_mode: true        # Enable AdamW mode
            eps: 1e-06               # Epsilon for numerical stability
            weight_decay: 0.0        # L2 regularization strength
            betas:                   # Adam optimizer betas
                - 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

        peft:
            peft_scheme: "lora"      # Enable LoRA for parameter-efficient fine-tuning
            lora_tuning:
                loraplus_lr_ratio: 8.0  # LoRA+ learning rate scaling factor
                alpha: 32            # Scaling factor for LoRA weights
                adapter_dropout: 0.01  # Regularization for LoRA parameters
```

### Risoluzione dei problemi
<a name="nova-sft-1-troubleshooting"></a>

Utilizza le informazioni seguenti per risolvere i problemi che possono verificarsi:
+ Il set di dati di input per l’addestramento e la convalida deve risiedere in bucket di proprietà del cliente, non in bucket escrow o bucket S3 gestiti dal servizio.
+ Se ricevete un errore Region not found in AWS CLI, inviate nuovamente il lavoro con la regione anteposta al comando start-job. Ad esempio: `AWS_REGION=us-east-1 hyperpod start-job ...{{Job Parameters}}`.
+ Per regolare gli iperparametri, segui le istruzioni riportate in [Selecting hyperparameters](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-hyperparameters.html).