

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

# Formazione per i modelli Amazon Nova
Addestramento

La formazione dei modelli Amazon Nova su SageMaker Training Jobs supporta Supervised Fine-Tuning (SFT) e Reinforcement Fine-Tuning (RFT). Ogni tecnica soddisfa esigenze di personalizzazione diverse e può essere applicata a diverse versioni del modello Amazon Nova.

**Topics**
+ [

# Ottimizza Nova 2.0
](nova-fine-tune-2.md)
+ [

# Reinforcement Fine-Tuning (RFT) con modelli Amazon Nova
](nova-reinforcement-fine-tuning.md)

# Ottimizza Nova 2.0
Fine-tuning supervisionato (SFT)

## Prerequisiti
Prerequisiti

Prima di avviare un job di addestramento, verifica i seguenti requisiti.
+ Bucket Amazon S3 per archiviare i dati di input e output dei job di addestramento. È possibile utilizzare un bucket per entrambi o bucket distinti per ogni tipo di dati. Assicurati che i tuoi bucket siano gli stessi in Regione AWS cui crei tutte le altre risorse per la formazione. Per ulteriori informazioni, consulta [Creating a general purpose bucket](https://docs.aws.amazon.com//AmazonS3/latest/userguide/create-bucket-overview.html).
+ Un ruolo IAM con autorizzazioni per eseguire un job di addestramento. Assicurati di collegare una policy IAM con `AmazonSageMakerFullAccess`. Per ulteriori informazioni, consulta [Come utilizzare i ruoli di esecuzione dell' SageMaker IA](https://docs.aws.amazon.com//sagemaker/latest/dg/sagemaker-roles.html).
+ Ricette base di Amazon Nova; consulta [Recupero di ricette Amazon Nova](nova-model-recipes.md#nova-model-get-recipes).

## Che cos'è SFT?


Il Supervised Fine-Tuning (SFT) addestra un modello linguistico utilizzando coppie di input-output etichettate. Il modello apprende da esempi dimostrativi costituiti da suggerimenti e risposte, perfezionando le proprie capacità per allinearsi a attività, istruzioni o comportamenti desiderati specifici.

## Preparazione dei dati


### Panoramica di


I dati SFT di Nova 2.0 utilizzano lo stesso formato API Converse di Nova 1.0, con l'aggiunta di campi di contenuto opzionali di ragionamento. Per le specifiche complete del formato, consulta:
+ Contenuto del ragionamento: [ReasoningContentBlock](https://docs.aws.amazon.com/bedrock/latest/APIReference/API_runtime_ReasoningContentBlock.html)
+ [Schema dell'API Converse: API Converse](https://docs.aws.amazon.com/bedrock/latest/userguide/conversation-inference-call.html)
+ [Vincoli del set di dati: vincoli del set di dati](https://docs.aws.amazon.com/nova/latest/userguide/fine-tune-prepare-data-understanding.html)

### Funzionalità supportate

+ **Tipi di input**: testo, immagine o video nei blocchi di contenuti utente
+ **Contenuti dell'assistente**: risposte di solo testo e contenuti di ragionamento
+ **Composizione del set di dati**: deve essere omogenea. Scegli una delle seguenti opzioni:
  + Turni di solo testo
  + Testo \$1 giri di immagini
  + Svoltare testo e video (supporta la comprensione dei documenti)

**Importante**  
Non è possibile combinare immagini e video all'interno dello stesso set di dati o in turni diversi.

### Limitazioni attuali

+ Contenuto di **ragionamento multimodale: sebbene il formato Converse supporti contenuti** di ragionamento basati su immagini, Nova 2.0 SFT supporta solo contenuti di ragionamento basati su testo nel campo ReasoningText.
+ Set di convalida: non è possibile fornire un set di dati di **convalida** per SFT con Nova 2.0. Se fornite un set di dati di convalida, questo viene ignorato durante l'addestramento. Questa limitazione si applica sia agli invii di lavoro basati sull'interfaccia utente che a quelli programmatici.

### Formati multimediali supportati

+ **Immagini**: PNG, JPEG, GIF
+ **Video**: MOV, MKV, MP4

### Esempi di formati di dati


------
#### [ Text-only (Nova 1.0 compatible) ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a digital assistant with a friendly personality"  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "text": "What country is right next to Australia?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "text": "The closest country is New Zealand"  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Text with reasoning (Nova 2.0) ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a digital assistant with a friendly personality"  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "text": "What country is right next to Australia?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I need to use my world knowledge of geography to answer this question"  
            }  
          }  
        },  
        {  
          "text": "The closest country to Australia is New Zealand, located to the southeast across the Tasman Sea."  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Image \$1 text input ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a helpful assistant."  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "image": {  
            "format": "jpeg",  
            "source": {  
              "s3Location": {  
                "uri": "s3://your-bucket/your-path/your-image.jpg",  
                "bucketOwner": "your-aws-account-id"  
              }  
            }  
          }  
        },  
        {  
          "text": "Which country is highlighted in the image?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I will determine the highlighted country by examining its location on the map and using my geographical knowledge"  
            }  
          }  
        },  
        {  
          "text": "The highlighted country is New Zealand"  
        }  
      ]  
    }  
  ]  
}
```

------
#### [ Video \$1 text input ]

```
{  
  "schemaVersion": "bedrock-conversation-2024",  
  "system": [  
    {  
      "text": "You are a helpful assistant."  
    }  
  ],  
  "messages": [  
    {  
      "role": "user",  
      "content": [  
        {  
          "video": {  
            "format": "mp4",  
            "source": {  
              "s3Location": {  
                "uri": "s3://your-bucket/your-path/your-video.mp4",  
                "bucketOwner": "your-aws-account-id"  
              }  
            }  
          }  
        },  
        {  
          "text": "What is shown in this video?"  
        }  
      ]  
    },  
    {  
      "role": "assistant",  
      "content": [  
        {  
          "reasoningContent": {  
            "reasoningText": {  
              "text": "I will analyze the video content to identify key elements"  
            }  
          }  
        },  
        {  
          "text": "The video shows a map with New Zealand highlighted"  
        }  
      ]  
    }  
  ]  
}
```

------

## Chiamata di strumenti


Nova 2.0 SFT supporta modelli di addestramento sui modelli di chiamata degli strumenti, consentendo al modello di apprendere quando e come richiamare strumenti o funzioni esterni.

### Formato dati per la chiamata degli strumenti


I dati di addestramento sulla chiamata agli strumenti includono una `toolConfig` sezione che definisce gli strumenti disponibili, oltre a turni di conversazione che mostrano i modelli di utilizzo 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?"  
        }  
      ]  
    }  
  ]  
}
```

### Requisiti di chiamata degli strumenti


Quando create dati di addestramento per le chiamate agli strumenti, attenetevi ai seguenti requisiti:


| Requisito | Description | 
| --- | --- | 
| ToolUse collocamento | ToolUse deve apparire solo nei turni degli assistenti | 
| ToolResult collocamento | ToolResult deve apparire solo nei turni degli utenti | 
| ToolResult formato | ToolResult deve essere solo testo o JSON. Altre modalità non sono supportate per i modelli Nova | 
| Formato InputSchema | L'inputSchema all'interno di ToolSpec deve essere un oggetto Schema JSON valido | 
| toolUseId corrispondente | Ciascuno ToolResult deve fare riferimento a un assistente valido toolUseId di un precedente ToolUse, e ognuno deve toolUseId essere usato esattamente una volta per conversazione | 

### Note importanti

+ Assicurati che le definizioni degli strumenti siano coerenti in tutti gli esempi di formazione
+ Il modello apprende i modelli di invocazione degli strumenti dalle dimostrazioni fornite
+ Includi diversi esempi di quando usare ogni strumento e quando non usare gli strumenti

## Comprensione dei documenti


Nova 2.0 SFT supporta la formazione sulle attività basate su documenti, consentendo al modello di imparare ad analizzare e rispondere alle domande sui documenti PDF.

### Formato dei dati per la comprensione dei documenti


I dati di formazione sulla comprensione dei documenti includono riferimenti ai documenti nei blocchi di contenuti utente, mentre il modello impara a estrarre e ragionare sul contenuto del documento.

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

### Limiti alla comprensione dei documenti



| Limitazione | Informazioni | 
| --- | --- | 
| Formato supportato | Solo file PDF | 
| Dimensione massima del documento | 10 MB | 
| Miscelazione delle modalità | Un campione può contenere documenti e testo, ma non può contenere documenti mescolati con altre modalità (immagini, video) | 

### Le migliori pratiche per la comprensione dei documenti

+ Assicurati che i documenti siano formattati in modo chiaro e che il testo sia estraibile
+ Fornisci diversi esempi che coprono diversi tipi di documenti e formati di domande
+ Includi contenuti di ragionamento per aiutare il modello ad apprendere i modelli di analisi dei documenti

## Comprensione dei video


Nova 2.0 SFT supporta la formazione sulle attività basate su video, consentendo al modello di imparare ad analizzare e rispondere alle domande sui contenuti video.

### Formato dei dati per la comprensione dei video


I dati di formazione sulla comprensione dei video includono riferimenti video nei blocchi di contenuti utente, mentre il modello impara a estrarre informazioni e ragionare sui contenuti video.

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

### Limitazioni sulla comprensione dei video



| Limitazione | Informazioni | 
| --- | --- | 
| Dimensione massima del video | 50 MB | 
| Durata massima del video | 15 minuti | 
| Video per campione | È consentito un solo video per campione. Non sono supportati più video nello stesso campione | 
| Miscelazione delle modalità | Un campione può contenere video e testo, ma non può combinare video con altre modalità (immagini, documenti) | 

### Formati video supportati

+ MOV
+ MKV
+ MP4

### Le migliori pratiche per la comprensione dei video

+ Mantieni i video concisi e incentrati sui contenuti pertinenti alla tua attività
+ Assicurati che la qualità video sia sufficiente per consentire al modello di estrarre informazioni significative
+ Fornisci domande chiare che facciano riferimento ad aspetti specifici dei contenuti video
+ Includi diversi esempi che coprono diversi tipi di video e formati di domande

## Modalità di ragionamento e non ragionamento


### Comprensione del contenuto del ragionamento


Il contenuto del ragionamento (chiamato anche chain-of-thought) cattura le fasi di pensiero intermedie del modello prima di generare una risposta finale. A `assistant` sua volta, usa il `reasoningContent` campo per includere queste tracce di ragionamento.

**Come viene calcolata la perdita**
+ **Con contenuto di ragionamento**: la perdita di formazione include sia i token di ragionamento che i token di output finale
+ **Senza contenuti di ragionamento**: la perdita di formazione viene calcolata solo sui token di output finali

Puoi includere più turni di assistente `reasoningContent` in conversazioni a turni multipli.

**Linee guida per la formattazione**
+ Usa testo semplice per ragionare i contenuti
+ Evita i tag di markup come `<thinking>` e `</thinking>` a meno che non siano specificamente richiesti dalla tua attività
+ Assicurati che il contenuto del ragionamento sia chiaro e pertinente al processo di risoluzione dei problemi

### Quando abilitare la modalità di ragionamento


Imposta `reasoning_enabled: true` nella configurazione di allenamento quando:
+ I tuoi dati di allenamento contengono token di ragionamento
+ Volete che il modello generi token di pensiero prima di produrre gli output finali
+ È necessario migliorare le prestazioni in attività di ragionamento complesse

È consentito addestrare 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é Nova impara principalmente a generare le risposte presentate nei dati senza applicare il ragionamento. Se vuoi addestrare Nova su un set di dati non ragionante ma ti aspetti comunque un ragionamento durante l'inferenza, puoi disabilitare il ragionamento durante l'addestramento () ma abilitarlo per l'inferenza. `reasoning_enabled = false` Sebbene questo approccio consenta di utilizzare il ragionamento in fase di inferenza, non garantisce prestazioni migliori rispetto all'inferenza senza ragionamento. In generale, 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.

Imposta quando: `reasoning_enabled: false`
+ I tuoi dati di allenamento non dispongono di token di ragionamento
+ Ti stai allenando su attività semplici che non traggono vantaggio da passaggi di ragionamento espliciti
+ Vuoi ottimizzare la velocità e ridurre l'utilizzo dei token

### Generazione di dati di ragionamento


Se il tuo set di dati non contiene tracce di ragionamento, puoi crearle utilizzando un modello in grado di ragionare come Nova Premier. Fornisci le tue coppie di input-output al modello e acquisisci il relativo processo di ragionamento per creare un set di dati basato sul ragionamento.

### Utilizzo di token di ragionamento per la formazione


Quando si allena con la modalità di ragionamento abilitata, il modello impara a separare il ragionamento interno dalla risposta finale. Il processo di formazione:
+ Organizza i dati in tre parti: input, ragionamento e risposta
+ Ottimizza l'utilizzo degli standard di previsione del token successivo (perdita derivante sia dai token di ragionamento che da quelli di risposta)
+ Incoraggia il modello a ragionare internamente prima di generare risposte

### Contenuti di ragionamento efficaci


I contenuti di ragionamento di alta qualità dovrebbero includere:
+ Pensieri e analisi intermedi
+ Deduzioni logiche e fasi di inferenza
+ Step-by-step approcci per la risoluzione dei problemi
+ Connessioni esplicite tra fasi e conclusioni

Questo aiuta il modello a sviluppare la capacità di «pensare prima di rispondere».

## Linee guida per la preparazione dei dataset


### Dimensioni e qualità

+ **Dimensione consigliata**: 2.000-10.000 campioni
+ **Campioni minimi: 200**
+ **Priorità**: qualità rispetto alla quantità. Assicurati che gli esempi siano accurati e ben annotati
+ **Allineamento delle applicazioni**: il set di dati deve rispecchiare fedelmente i casi d'uso in produzione

### Diversità


Includi diversi esempi che:
+ Copre l'intera gamma di input previsti
+ Rappresenta diversi livelli di difficoltà
+ Includi casi limite e varianti
+ Evita l'eccessivo adattamento a modelli ristretti

### Formattazione dell'output


Specificate chiaramente il formato di output desiderato nelle risposte dell'assistente:
+ Strutture JSON
+ Tabelle
+ Formato CSV
+ Formati personalizzati specifici per la tua applicazione

### Conversazioni a più turni


Per set di dati a turni multipli, ricorda:
+ La perdita viene calcolata solo in base ai turni degli assistenti, non ai turni degli utenti
+ Ogni risposta dell'assistente deve essere formattata correttamente
+ Mantieni la coerenza nei turni di conversazione

### Lista di controllo della qualità

+ Dimensioni sufficienti del set di dati (campioni da 2K-10K)
+ Diversi esempi che coprono tutti i casi d'uso
+ Formattazione di output chiara e coerente
+ Etichette e annotazioni accurate
+ Rappresentante degli scenari di produzione
+ Liberi da contraddizioni o ambiguità

### Caricamento dei dati


I set di dati devono essere caricati in un bucket accessibile dai corsi di formazione. SageMaker [Per informazioni sull'impostazione delle autorizzazioni corrette, consulta Prerequisiti.](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-model-general-prerequisites.html)

## Avvio di un lavoro di formazione


### Selezione degli iperparametri e aggiornamento della ricetta


La configurazione di Nova 2.0 è in gran parte la stessa di Nova 1.0. Una volta che i dati di input sono stati caricati su S3, usa la ricetta contenuta nella cartella [SageMaker HyperPod Recipes](https://github.com/aws/sagemaker-hyperpod-recipes/tree/main/recipes_collection/recipes/fine-tuning/nova) nella cartella Fine tuning. Per Nova 2.0, di seguito sono riportati alcuni degli iperparametri chiave che è possibile aggiornare in base al caso d'uso. Di seguito è riportato un esempio della ricetta Nova 2.0 SFT PEFT. Per l'URI dell'immagine del contenitore, utilizzare `708977205387.dkr.ecr.us-east-1.amazonaws.com/nova-fine-tune-repo:SM-TJ-SFT-V2-latest` per eseguire un processo di ottimizzazione SFT.

Utilizza la versione 2.254.1 di SageMaker AI PySDK per una stretta compatibilità con Nova Training. L'aggiornamento dell'SDK alla versione v3.0 comporterà modifiche sostanziali. Il supporto per la versione 3 di SageMaker AI PySDK sarà presto disponibile.

**Esempio di input**

```
!pip install sagemaker==2.254.1
```

```
run:  
  name: {peft_recipe_job_name}  
  model_type: amazon.nova-2-lite-v1:0:256k  
  model_name_or_path: {peft_model_name_or_path}  
  data_s3_path: {train_dataset_s3_path} # SageMaker HyperPod (SMHP) only and not compatible with SageMaker Training jobs. Note replace my-bucket-name with your real bucket name for SMHP job  
  replicas: 4                      # Number of compute instances for training, allowed values are 4, 8, 16, 32  
  output_s3_path: ""               # Output artifact path (Hyperpod job-specific; not compatible with standard SageMaker Training jobs). Note replace my-bucket-name with your real bucket name for SMHP job  
  
training_config:  
  max_steps: 10                   # Maximum training steps. Minimal is 4.  
  save_steps: 10                      # How many training steps the checkpoint will be saved. Should be less than or equal to max_steps  
  save_top_k: 1                    # Keep top K best checkpoints. Note supported only for SageMaker HyperPod 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, must be between 0.0 and 1.0  
    adam_beta2: 0.95               # Exponential decay rate for second-moment estimates, must be between 0.0 and 1.0  
  
  peft:                            # Parameter-efficient fine-tuning (LoRA)  
    peft_scheme: "lora"            # Enable LoRA for PEFT  
    lora_tuning:  
      alpha: 64                    # Scaling factor for LoRA weights ( options: 32, 64, 96, 128, 160, 192),  
      lora_plus_lr_ratio: 64.0
```

La ricetta contiene anche in gran parte gli stessi iperparametri di Nova 1.0. Gli iperparametri più importanti sono:
+ `max_steps`— Il numero di passaggi per i quali si desidera eseguire il processo. In genere, per un'epoca (una analisi dell'intero set di dati), il numero di passaggi = numero di campioni di dati/dimensione globale del batch. Maggiore è il numero di passaggi e minore è la dimensione del batch globale, maggiore sarà il tempo necessario per l'esecuzione del processo.
+ `reasoning_enabled`— Controlla la modalità di ragionamento per il set di dati. Opzioni:
  + `true`: abilita la modalità di ragionamento (equivalente al ragionamento elevato)
  + `false`: disabilita la modalità di ragionamento

  Nota: per SFT, non esiste un controllo granulare sui livelli di sforzo di ragionamento. L'impostazione `reasoning_enabled: true` consente la piena capacità di ragionamento.
+ `peft.peft_scheme`— L'impostazione su «lora» consente la regolazione fine basata su PEFT. L'impostazione su null (senza virgolette) abilita la regolazione fine Full-Rank.

### Inizia il lavoro di formazione


```
from sagemaker.pytorch import PyTorch  
  
# define OutputDataConfig path  
if default_prefix:  
    output_path = f"s3://{bucket_name}/{default_prefix}/{sm_training_job_name}"  
else:  
    output_path = f"s3://{bucket_name}/{sm_training_job_name}"  

output_kms_key = "<KMS key arn to encrypt trained model in Amazon-owned S3 bucket>" # optional, leave blank for Amazon managed encryption
  
recipe_overrides = {  
    "run": {  
        "replicas": instance_count,  # Required  
        "output_s3_path": output_path  
    },  
}  
  
estimator = PyTorch(  
    output_path=output_path,  
    base_job_name=sm_training_job_name,  
    role=role,  
    disable_profiler=True,  
    debugger_hook_config=False,  
    instance_count=instance_count,  
    instance_type=instance_type,  
    training_recipe=training_recipe,  
    recipe_overrides=recipe_overrides,  
    max_run=432000,  
    sagemaker_session=sagemaker_session,  
    image_uri=image_uri,
    output_kms_key=output_kms_key,
    tags=[  
        {'Key': 'model_name_or_path', 'Value': model_name_or_path},  
    ]  
)  
  
print(f"\nsm_training_job_name:\n{sm_training_job_name}\n")  
print(f"output_path:\n{output_path}")
```

```
from sagemaker.inputs import TrainingInput  
  
train_input = TrainingInput(  
    s3_data=train_dataset_s3_path,  
    distribution="FullyReplicated",  
    s3_data_type="Converse",  
)  
  
estimator.fit(inputs={"validation": val_input}, wait=False)
```

**Nota**  
Il passaggio di un set di dati di convalida non è supportato per la regolazione fine supervisionata di Nova 2.0.

Per dare il via al lavoro:
+ Aggiorna la ricetta con i percorsi e gli iperparametri del set di dati
+ Esegui le celle specificate nel notebook per inviare il lavoro di formazione

Il notebook gestisce l'invio dei lavori e ne monitora lo stato.

# Reinforcement Fine-Tuning (RFT) con modelli Amazon Nova
Ottimizzazione fine del rinforzo (RFT)

## Panoramica di


**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


[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


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


**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


**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


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


**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


### Panoramica di


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


**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


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


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


**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


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


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


**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


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


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