

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

# Reinforcement Fine-Tuning (RFT) con modelli Amazon Nova
<a name="nova-reinforcement-fine-tuning"></a>

## Panoramica di
<a name="nova-rft-overview"></a>

**Che cos'è RFT?**

Il Reinforcement Fine-Tuning (RFT) migliora le prestazioni del modello addestrandosi sui segnali di feedback (punteggi misurabili o premi che indicano le prestazioni del modello) anziché sulle risposte esatte e corrette. A differenza della messa a punto supervisionata che apprende dalle coppie input-output, RFT utilizza le funzioni di ricompensa per valutare le risposte del modello e ottimizza iterativamente il modello per massimizzare tali ricompense. Questo approccio eccelle quando è difficile definire l'output esatto e corretto, ma è possibile misurare in modo affidabile la qualità della risposta.

**Quando usare RFT**

Usa RFT quando puoi definire criteri di successo chiari e misurabili ma hai difficoltà a fornire risultati esatti e corretti per la formazione. È ideale per:
+ Attività in cui la qualità è soggettiva o multiforme (scrittura creativa, ottimizzazione del codice, ragionamento complesso)
+ Scenari con più soluzioni valide in cui alcune sono chiaramente migliori di altre
+ Applicazioni che richiedono miglioramento iterativo, personalizzazione o rispetto di regole aziendali complesse
+ Casi in cui la raccolta di esempi etichettati di alta qualità è costosa o poco pratica

**I migliori casi d'uso**

RFT eccelle nei settori in cui la qualità dell'output può essere misurata oggettivamente, ma le risposte ottimali sono difficili da definire in anticipo:
+ Risoluzione di problemi matematici e generazione di codice
+ Ragionamento scientifico e analisi strutturata dei dati
+ Compiti che richiedono step-by-step ragionamento o risoluzione di problemi a più turni
+ Applicazioni che bilanciano più obiettivi (precisione, efficienza, stile)
+ Scenari in cui il successo può essere verificato a livello di codice attraverso i risultati di esecuzione o le metriche delle prestazioni

**Modelli supportati**

Nova Lite 2.0

## Panoramica del formato dei dati
<a name="nova-rft-data-format"></a>

[I dati di addestramento RFT devono seguire il formato OpenAI Reinforcement Fine-Tuning.](https://platform.openai.com/docs/api-reference/fine-tuning/reinforcement-input) Ogni esempio di addestramento è un oggetto JSON contenente:
+ Un `messages` array con turni di conversazione, utilizzo e ruoli `system` `user`
+ Un `reference_answer` campo contenente l'output previsto o i criteri di valutazione per il calcolo della ricompensa

**Limitazioni attuali**
+ Solo testo

### Esempi di formati di dati
<a name="nova-rft-data-examples"></a>

Ogni esempio deve essere su una sola riga del file JSONL, con un oggetto JSON per riga.

------
#### [ Chemistry problem ]

```
{
  "id": "chem-01",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful chemistry assistant"
    },
    {
      "role": "user",
      "content": "Calculate the molecular weight of caffeine (C8H10N4O2)"
    }
  ],
  "reference_answer": {
    "molecular_weight": 194.19,
    "unit": "g/mol",
    "calculation": "8(12.01) + 10(1.008) + 4(14.01) + 2(16.00) = 194.19"
  }
}
```

------
#### [ Math problem ]

```
{
  "id": "sample-001",  // Optional
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  }
}
```

------
#### [ Code problem ]

```
{
  "id": "code-002",
  "messages": [
    {
      "role": "system",
      "content": "You are a helpful programming assistant"
    },
    {
      "role": "user",
      "content": "Write a Python function that reverses a string without using built-in reverse methods"
    }
  ],
  "reference_answer": {
    "code": "def reverse_string(s):  \n    result = ''  \n    for i in range(len(s) - 1, -1, -1):  \n        result += s[i]  \n    return result",
    "test_cases": [
      {
        "input": "hello",
        "expected_output": "olleh"
      },
      {
        "input": "",
        "expected_output": ""
      },
      {
        "input": "a",
        "expected_output": "a"
      },
      {
        "input": "Python123",
        "expected_output": "321nohtyP"
      }
    ],
    "all_tests_pass": true
  }
}
```

------

Il `reference_answer` campo contiene l'output previsto o i criteri di valutazione utilizzati dalla funzione di ricompensa per assegnare un punteggio alla risposta del modello. Non si limita agli output strutturati, ma può contenere qualsiasi formato che aiuti la funzione di ricompensa a valutare la qualità.

## Consigli sulle dimensioni dei set di dati
<a name="nova-rft-dataset-size"></a>

**Punto di partenza**
+ Minimo 100 esempi di formazione
+ Minimo 100 esempi di valutazione

**Approccio basato sulla valutazione**

Prima di investire nella formazione RFT su larga scala, valuta le prestazioni di base del tuo modello:
+ **Prestazioni elevate (ricompensa superiore al 95%)**: la tecnologia RFT potrebbe non essere necessaria: il modello offre già buone prestazioni
+ **Prestazioni molto scarse (ricompensa dello 0%)**: passate innanzitutto a SFT per stabilire le funzionalità di base
+ **Prestazioni moderate**: la tecnologia RFT è probabilmente appropriata

Iniziare con un set di dati di piccole dimensioni consente di:
+ Verifica che la tua funzione di ricompensa sia priva di bug
+ Conferma che RFT è l'approccio giusto per il tuo caso d'uso
+ Identifica e risolvi tempestivamente i problemi
+ Testa il flusso di lavoro prima di ampliarlo

Una volta convalidato, puoi espanderlo a set di dati più grandi per migliorare ulteriormente le prestazioni.

## Caratteristiche dei dati di allenamento efficaci
<a name="nova-rft-effective-data"></a>

**Chiarezza e coerenza**

I buoni esempi RFT richiedono dati di input chiari e inequivocabili che consentano un calcolo accurato della ricompensa tra i diversi output del modello. Evita il rumore nei tuoi dati, tra cui:
+ Formattazione non coerente
+ Etichette o istruzioni contraddittorie
+ Istruzioni ambigue
+ Risposte di riferimento contrastanti

Qualsiasi ambiguità indurrà in errore il processo di formazione e indurrà il modello ad apprendere comportamenti non intenzionali.

**Diversità**

Il tuo set di dati dovrebbe catturare l'intera diversità dei casi d'uso di produzione per garantire solide prestazioni nel mondo reale. Include:
+ Diversi formati di input e custodie periferiche
+ Mappa i modelli effettivi di utilizzo della produzione sulla base dei log e delle analisi degli utenti
+ Esamina diversi tipi di utenti, aree geografiche e variazioni stagionali
+ Includi livelli di difficoltà da problemi semplici a complessi

**Considerazioni sulla funzione di ricompensa**

Progetta la tua funzione di ricompensa per un allenamento efficiente:
+ Esegui in pochi secondi (non in minuti)
+ Parallelizza efficacemente con Lambda
+ Restituisci punteggi coerenti e affidabili
+ Gestisci con eleganza diversi tipi di output del modello

Le funzioni di ricompensa veloci e scalabili consentono un'iterazione rapida e una sperimentazione conveniente.

## Proprietà aggiuntive
<a name="nova-rft-additional-properties"></a>

Il formato di dati RFT supporta campi personalizzati oltre ai requisiti di base dello schema (e). `messages` `reference_answer` Questa flessibilità consente di aggiungere tutti i dati aggiuntivi necessari alla funzione di ricompensa per una corretta valutazione.

**Nota**  
Non è necessario configurarlo nella ricetta: il formato dei dati supporta intrinsecamente campi aggiuntivi. Basta includerli nei dati di allenamento JSON e verranno passati alla funzione di ricompensa sul campo. `metadata`

**Proprietà aggiuntive comuni**

Campi di metadati di esempio:
+ `task_id`— Identificatore univoco per il tracciamento
+ `difficulty_level`— Indicatore di complessità del problema
+ `domain`— Area o categoria tematica
+ `expected_reasoning_steps`— Numero di passaggi della soluzione

**Esempio con proprietà aggiuntive**

```
{
  "messages": [
    {
      "role": "system",
      "content": "You are a math tutor"
    },
    {
      "role": "user",
      "content": "Solve: 2x + 5 = 13"
    }
  ],
  "reference_answer": {
    "solution": "x = 4",
    "steps": ["2x = 13 - 5", "2x = 8", "x = 4"]
  },
  "task_id": "algebra_001",
  "difficulty_level": "easy",
  "domain": "algebra",
  "expected_reasoning_steps": 3
}
```

Questi campi aggiuntivi vengono passati alla funzione di ricompensa durante la valutazione, abilitando una sofisticata logica di punteggio personalizzata in base al caso d'uso specifico.

## Configurazione di addestramento
<a name="nova-rft-training-config"></a>

**Ricetta di esempio**

```
# Note:
# This recipe can run on p5.48xlarge and p5en.48xlarge instance types.
run:
  name: "my-rft-run"                           # Unique run name (appears in logs/artifacts).
  model_type: amazon.nova-2-lite-v1:0:256k
  model_name_or_path: nova-lite-2/prod
  data_s3_path: s3://<bucket>/<data file>      # Training dataset in JSONL;
  replicas: 4
  reward_lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>

  ## MLFlow configs
  mlflow_tracking_uri: "" # Required for MLFlow
  mlflow_experiment_name: "my-rft-experiment" # Optional for MLFlow. Note: leave this field non-empty
  mlflow_run_name: "my-rft-run" # Optional for MLFlow. Note: leave this field non-empty

## SMTJ GRPO Training specific configs
training_config:
  max_length: 8192                              # Context window (tokens) for inputs+prompt;
  global_batch_size: 16                         # Total samples per optimizer step across all replicas (16/32/64/128/256).
  reasoning_effort: high                        # Enables reasoning mode high / low / or null for non-reasoning

  rollout:                                      # How responses are generated for GRPO/advantage calc.
    advantage_strategy:
      number_generation: 2                      # N samples per prompt to estimate advantages (variance vs cost).
    generator:
      max_new_tokens: 6000                      # Cap on tokens generated per sample
      set_random_seed: true                     # Seed generation for reproducibility across runs.
      temperature: 1                            # Softmax temperature;
      top_k: 1                                  # Sample only from top-K logits
    rewards:
      preset_reward_function: null              # Usage of preset reward functions [exact_match]
      api_endpoint:
        lambda_arn: arn:aws:lambda:<region>:<account-id>:function:<function-name>
        lambda_concurrency_limit: 12             # Max concurrent Lambda invocations (throughput vs. throttling).

  trainer:
    max_steps: 2                                 # Steps to train for. One Step = global_batch_size
    save_steps: 5
    test_steps: 1

    # RL parameters
    ent_coeff: 0.0                              # A bonus added to the policy loss that rewards higher-output entropy.
    kl_loss_coef: 0.001                         # Weight on the KL penalty between the actor (trainable policy) and a frozen reference model

    optim_config:                    # Optimizer settings
        lr: 5e-5                       # Learning rate
        weight_decay: 0.0              # L2 regularization strength (0.0–1.0)
        adam_beta1: 0.9
        adam_beta2: 0.95

    peft:                            # Parameter-efficient fine-tuning (LoRA)
        peft_scheme: "lora"            # Enable LoRA for PEFT
        lora_tuning:
            alpha: 32
            lora_plus_lr_ratio: 64.0     # LoRA+ learning rate scaling factor (0.0–100.0)
```

## Formazione RFT utilizzando LLM come giudice
<a name="nova-rft-llm-judge"></a>

### Panoramica di
<a name="nova-rft-llm-judge-overview"></a>

I modelli linguistici di grandi dimensioni (LLMs) vengono sempre più utilizzati come giudici nei flussi di lavoro di reinforcement fine-tuning (RFT), che forniscono segnali di ricompensa automatici che guidano l'ottimizzazione dei modelli. In questo approccio, un LLM valuta i risultati del modello in base a criteri specifici, che si tratti di valutare la correttezza, la qualità, l'aderenza allo stile o l'equivalenza semantica, e assegna premi che guidano il processo di reinforcement learning.

Ciò è particolarmente utile per le attività in cui le funzioni di ricompensa tradizionali sono difficili da definire programmaticamente, come determinare se rappresentazioni diverse (come «1/3", «0,333" e «un terzo») sono semanticamente equivalenti o valutare qualità sfumate come coerenza e pertinenza. Utilizzando i giudici basati su LLM come funzioni di ricompensa, puoi scalare RFT su domini complessi senza richiedere ampie annotazioni umane, consentendo una rapida iterazione e il miglioramento continuo dei tuoi modelli in diversi casi d'uso oltre ai tradizionali problemi di allineamento.

### Selezione della modalità di ragionamento
<a name="nova-rft-reasoning-mode"></a>

**Modalità disponibili**
+ none — Nessun ragionamento (ometti il campo reasoning\$1effort)
+ low — Sovraccarico minimo di ragionamento
+ high — Capacità massima di ragionamento (impostazione predefinita quando è specificato reasoning\$1effort)

**Nota**  
Non esiste un'opzione media per RFT. Se il campo reasoning\$1effort non è presente nella configurazione, il ragionamento è disabilitato. Quando il ragionamento è abilitato, è necessario `max_new_tokens` impostarlo su 32768 per accogliere output di ragionamento estesi.

**Quando usare ciascuna modalità**

Usa un ragionamento elevato per:
+ Compiti analitici complessi
+ Risoluzione di problemi matematici
+ Deduzione logica in più fasi
+ Attività in cui il step-by-step pensiero aggiunge valore

Usa none (ometti reasoning\$1effort) o low reasoning per:
+ Semplici domande fattuali
+ Classificazioni dirette
+ Ottimizzazione della velocità e dei costi
+ Risposta semplice alle domande

**Compromessi in termini di costi e prestazioni**

Aumentano le modalità di ragionamento più elevate:
+ Tempi e costi della formazione
+ Latenza e costi dell'inferenza
+ Capacità di modellazione per attività di ragionamento complesse

### Convalida del tuo giudice LLM
<a name="nova-rft-validating-judge"></a>

Prima di implementarne uno LLM-as-a-judge in produzione, verifica che le valutazioni del modello arbitrale siano in linea con il giudizio umano. Questa operazione prevede:
+ Misurazione dei tassi di concordanza tra il giudice del LLM e i valutatori umani su campioni rappresentativi del vostro compito
+ Garantire che l'accordo del LLM con gli esseri umani soddisfi o superi i tassi di accordo interumani
+ Identificazione di potenziali pregiudizi nel modello del giudice
+ Acquisire la fiducia che il segnale di ricompensa guidi il modello nella direzione prevista

Questa fase di convalida aiuta a garantire che il processo di valutazione automatizzato produca modelli che soddisfino i criteri di qualità della produzione.

### Configurazione Lambda per LLM judge
<a name="nova-rft-lambda-config"></a>

L'utilizzo di un LLM come giudice è un'estensione dell'utilizzo delle funzioni Lambda per il Reinforcement Learning with Verifiable Rewards (RLVR). All'interno della funzione Lambda, effettui una chiamata a uno dei modelli ospitati in Amazon Bedrock.

**Requisiti di configurazione importanti:**


| Configurazione | Requisito | Informazioni | 
| --- | --- | --- | 
| Produttività di Amazon Bedrock | Quota sufficiente | Assicurati che la tua quota di throughput per il modello Amazon Bedrock utilizzato sia sufficiente per il tuo carico di lavoro di formazione | 
| Timeout Lambda | Timeout prolungato | Configura il timeout della funzione Lambda fino a un massimo di 15 minuti. L'impostazione predefinita è di 3 secondi, il che non è sufficiente per le risposte del modello Amazon Bedrock | 
| Simultaneità Lambda | Maggiore concorrenza | La Lambda viene richiamata in parallelo durante l'allenamento. Aumenta la concorrenza per massimizzare la velocità effettiva disponibile | 
| Configurazione della ricetta | Abbina le impostazioni Lambda | Il limite di concorrenza deve essere configurato nella ricetta | 

## Creazione ed esecuzione di lavori
<a name="nova-rft-creating-jobs"></a>

**Avvio di un lavoro di formazione**

Usa il modello di taccuino per i lavori di SageMaker formazione: [https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-fine-tuning-training-job.html#nova-model-training-jobs-notebook)

**Requisiti dell'ist**

Il contenitore supporta sia la formazione Full-Rank che quella LoRa:
+ **Formazione LoRa**: istanze 2/4/6/8 × p5.48xlarge o p5en.48xlarge
+ **Formazione completa** - istanze 2/4/6/8 × p5.48xlarge (obbligatorio)

## Monitoraggio della formazione
<a name="nova-rft-monitoring"></a>

I registri di formazione includono metriche complete per ogni fase. Categorie metriche chiave:

**Metriche sulle ricompense**
+ `critic/rewards/mean`,`critic/rewards/max`, `critic/rewards/min` — Distribuzione dei premi
+ `val-score/rewards/mean@1`— Premi di convalida

**Comportamento del modello**
+ `actor/entropy`— Variazione delle politiche (maggiore = più esplorativa)

**Formazione e salute**
+ `actor/pg_loss`— Perdita del gradiente politico
+ `actor/pg_clipfrac`— Frequenza degli aggiornamenti interrotti
+ `actor/grad_norm`— Magnitudine del gradiente

**Caratteristiche di risposta**
+ `prompt_length/mean`,`prompt_length/max`, `prompt_length/min` — Statistiche sui token di input
+ `response_length/mean`,`response_length/max`, `response_length/min` — Statistiche sui token di output
+ `response/aborted_ratio`— Frequenza di generazione incompleta (0 = tutto completato)

**Prestazioni**
+ `perf/throughput`— Produttività della formazione
+ `perf/time_per_step`— Tempo per fase di allenamento
+ `timing_per_token_ms/*`— Tempi di elaborazione per token

**Utilizzo delle risorse**
+ `perf/max_memory_allocated_gb`, `perf/max_memory_reserved_gb` — Memoria GPU
+ `perf/cpu_memory_used_gb`— memoria CPU

## Utilizzo di modelli ottimizzati
<a name="nova-rft-using-models"></a>

Al termine dell'addestramento, il checkpoint finale del modello viene salvato nella posizione di output specificata. Il percorso del checkpoint è disponibile in:
+ Registri di allenamento
+ `manifest.json`file nella posizione di output di Amazon S3 (definita `output_s3_uri` nel notebook)

## Limitazioni e best practice
<a name="nova-rft-limitations"></a>

**Limitazioni**
+ **Timeout Lambda**: le funzioni Reward devono essere completate entro 15 minuti (previene processi inutili e gestisce i costi)
+ **Solo turno singolo**: le conversazioni a turni multipli non sono supportate
+ **Requisiti in materia di dati**: richiede una diversità sufficiente; ha difficoltà con ricompense scarse (esempi positivi inferiori al 5%)
+ **Costo computazionale**: più costoso della messa a punto supervisionata
+ **Nessun dato multimodale: è supportato solo il tipo di dati** di testo

**Best practice**

**Inizia in piccolo**
+ Inizia con 100-200 esempi
+ Convalida la correttezza della funzione di ricompensa
+ Scala gradualmente in base ai risultati

**Valutazione pre-allenamento**
+ Verifica le prestazioni del modello di base prima di RFT
+ Se i premi sono costantemente pari allo 0%, utilizza prima SFT per stabilire le funzionalità di base
+ Se i premi sono superiori al 95%, la RFT potrebbe non essere necessaria

**Monitora la formazione**
+ Tieni traccia dei punteggi e della distribuzione medi dei premi
+ Fai attenzione all'overfitting (i premi di formazione aumentano mentre i premi di convalida diminuiscono)
+ Cerca i modelli riguardanti:
  + I premi si stabilizzano al di sotto di 0,15
  + Aumento della varianza delle ricompense nel tempo
  + Diminuzione delle prestazioni di convalida

**Ottimizza le funzioni di ricompensa**
+ Esegui in pochi secondi (non in minuti)
+ Riduci al minimo le chiamate API esterne
+ Utilizza algoritmi efficienti
+ Implementa una corretta gestione degli errori
+ Sfrutta la scalabilità parallela di Lambda

**Strategia di iterazione**

Se le ricompense non migliorano:
+ Modifica il design della funzione di ricompensa
+ Aumenta la diversità dei set di dati
+ Aggiungi altri esempi rappresentativi
+ Verifica che i segnali di ricompensa siano chiari e coerenti

## Funzionalità avanzate: Nova Forge
<a name="nova-rft-advanced"></a>

Per gli utenti che richiedono funzionalità avanzate oltre ai limiti RFT standard, Nova Forge è disponibile come servizio di abbonamento a pagamento che offre:
+ Supporto per conversazioni a turni
+ Funzioni di ricompensa con un tempo di esecuzione superiore a 15 minuti
+ Algoritmi e opzioni di ottimizzazione aggiuntivi
+ Modifiche personalizzate alla ricetta di allenamento
+ State-of-the-art Tecniche di intelligenza artificiale

Nova Forge funziona SageMaker HyperPod ed è progettata per supportare i clienti aziendali nella creazione dei propri modelli di frontiera.

## Comandi e suggerimenti utili
<a name="nova-rft-useful-commands"></a>

È disponibile una raccolta di [script di osservabilità](https://github.com/aws-samples/amazon-nova-samples/tree/main/customization/SageMakerUilts/SageMakerJobsMonitoring) per aiutare a monitorare lo stato e l'avanzamento dei lavori di formazione.

Gli script disponibili sono:
+ Attivazione delle notifiche e-mail per gli aggiornamenti sullo stato dei lavori di formazione
+ Ottenere stime dei tempi di formazione in base alle configurazioni dei lavori
+ Ottenere approssimazioni sulla durata prevista della formazione per i lavori in corso

**Installazione**

**Nota**  
Assicurati di aggiornare AWS le tue credenziali prima di utilizzare uno dei seguenti script.

```
pip install boto3
git clone https://github.com/aws-samples/amazon-nova-samples.git
cd amazon-nova-samples/customization/SageMakerUilts/SageMakerJobsMonitoring/
```

**Utilizzo di base**

```
# Enabling email notifications for training job status updates
python enable_sagemaker_job_notifs.py --email test@amazon.com test2@gmail.com --region us-east-1 --platform SMTJ

Creating resources........
Please check your email for a subscription confirmation email, and click 'Confirm subscription' to start receiving job status email notifications!
You'll receive the confirmation email within a few minutes.
```

```
# Obtaining training time estimates based on job configurations
python get_training_time_estimate.py
```

```
# Obtaining approximations for how long training is expected to take for in-progress jobs
python get-training-job-progress.py --region us-east-1 --job-name my-training-job --num-dataset-samples 1000
```

Per ulteriori dettagli ed esempi, consulta [questa](https://github.com/aws-samples/amazon-nova-samples/blob/main/customization/SageMakerUilts/SageMakerJobsMonitoring/README.md) pagina.