

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

# Personalizzazione dei modelli con Amazon SageMaker AI
<a name="customize-model"></a>

La personalizzazione dei modelli di SageMaker intelligenza artificiale di Amazon è una funzionalità che trasforma il processo tradizionalmente complesso e dispendioso in termini di tempo di personalizzazione dei modelli di intelligenza artificiale da un'attività lunga mesi a un flusso di lavoro semplificato che può essere completato in pochi giorni. Questa funzionalità affronta la sfida critica affrontata dagli sviluppatori di intelligenza artificiale che devono personalizzare i modelli di base con dati proprietari per creare esperienze clienti altamente differenziate. La documentazione dettagliata sulla personalizzazione, incluse step-by-step guide e opzioni di configurazione avanzate, è fornita in questa SageMaker guida sull'intelligenza artificiale. Per una breve panoramica sulla personalizzazione del modello Nova, consulta [Personalizza e ottimizza con SageMaker](https://docs.aws.amazon.com/nova/latest/userguide/customize-fine-tune-sagemaker.html) nella Amazon Nova User Guide.

La funzionalità include una nuova interfaccia utente guidata che comprende i requisiti del linguaggio naturale, con una suite completa di tecniche avanzate di personalizzazione dei modelli, il tutto basato su un'infrastruttura serverless che elimina il sovraccarico operativo della gestione delle risorse di calcolo. Che tu stia sviluppando applicazioni di ricerca legale, migliorando i chatbot del servizio clienti o sviluppando agenti di intelligenza artificiale specifici del dominio, questa funzionalità accelera il percorso dall'implementazione in produzione. proof-of-concept

Le funzionalità di Model Customization offerte da Amazon Bedrock Evaluations possono trasmettere in modo sicuro i dati Regioni AWS all'interno della tua area geografica per l'elaborazione. Per ulteriori informazioni, accedi alla [documentazione di Amazon Bedrock Evaluations](https://docs.aws.amazon.com/bedrock/latest/userguide/evaluation-judge.html).

## Concetti chiave
<a name="model-customize-concepts"></a>

**Formazione senza server**

Un'infrastruttura di elaborazione completamente gestita che elimina tutta la complessità dell'infrastruttura, consentendoti di concentrarti esclusivamente sullo sviluppo del modello. Ciò include il provisioning automatico delle istanze GPU (P5, P4de, P4d, G5) in base alle dimensioni del modello e ai requisiti di formazione, ricette di formazione preottimizzate che incorporano le migliori pratiche per ogni tecnica di personalizzazione, il monitoraggio in tempo reale con metriche e log in tempo reale accessibili tramite l'interfaccia utente e la pulizia automatica delle risorse dopo il completamento della formazione per ottimizzare i costi.

**Tecniche di personalizzazione dei modelli**

Set completo di metodi avanzati tra cui la messa a punto supervisionata (SFT), l'ottimizzazione delle preferenze dirette (DPO), l'apprendimento per rinforzo con ricompense verificabili (RLVR) e l'apprendimento per rinforzo con feedback AI (RLAIF).

**Modello personalizzato**

Una versione specializzata di un modello base di base che è stato adattato a un caso d'uso specifico addestrandolo sui dati dell'utente. Il risultato è un modello di intelligenza artificiale che mantiene le funzionalità generali del modello di base originale e aggiunge conoscenze, terminologia, stile o comportamento specifici del dominio, personalizzati in base alle esigenze dell'utente.

**Risorse per la personalizzazione dei modelli di intelligenza artificiale**

Risorse e artefatti utilizzati per addestrare, perfezionare e valutare i modelli personalizzati durante il processo di personalizzazione dei modelli. Queste risorse includono **set** di dati, che sono raccolte di esempi di formazione (coppie di risposta rapida, testo specifico del dominio o dati etichettati) utilizzati per mettere a punto un modello di base per apprendere comportamenti, conoscenze o stili specifici, e **valutatori, che sono meccanismi per valutare** e migliorare le prestazioni del modello attraverso ***funzioni di ricompensa*** (logica basata sul codice che assegna un punteggio ai risultati del modello in base a criteri specifici, utilizzati nella formazione RLVR e nella valutazione dei punteggi personalizzati) oppure ***richieste di ricompensa*** ( istruzioni in linguaggio naturale che guidano un LLM a giudicare la qualità delle risposte modello, utilizzate nella formazione e nella LLM-as-a-judge valutazione RLAIF).

**Gruppo di pacchetti modello**

Un contenitore di raccolta che tiene traccia di tutti i modelli registrati durante i processi di formazione, fornendo una posizione centralizzata per le versioni dei modelli e la loro derivazione.

**Modello registrato**

L'output creato dall' SageMaker intelligenza artificiale durante l'esecuzione di lavori di formazione senza server. Può trattarsi di un modello perfezionato (processo riuscito), di un checkpoint (processo fallito con checkpoint) o di metadati associati (processo fallito senza checkpoint).

**Modello registrato**

Un modello registrato che è stato contrassegnato per scopi formali di tracciamento e governance, che consente la gestione completa del lignaggio e del ciclo di vita.

**Lineaggio**

Le relazioni acquisite automaticamente tra lavori di formazione, set di dati di input, modelli di output, lavori di valutazione e implementazioni su AI SageMaker e Amazon Bedrock.

**Condivisione tra account**

La possibilità di condividere modelli, set di dati e valutatori tra AWS account utilizzando AWS Resource Access Manager (RAM) mantenendo al contempo la visibilità completa del lignaggio.

# Personalizzazione dei modelli Amazon Nova su Amazon SageMaker AI
<a name="nova-model"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Personalizzazione dei modelli Amazon Nova su Amazon SageMaker AI nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-model.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model.html).

# Ricette Amazon Nova
<a name="nova-model-recipes"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta le ricette di Amazon Nova nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-model-recipes.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model-recipes.html).

# Personalizzazione di Amazon Nova per i lavori SageMaker di formazione
<a name="nova-model-training-job"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta la personalizzazione di Amazon Nova sui lavori di SageMaker formazione nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-model-training-job.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model-training-job.html).

**Topics**
+ [Distillazione Amazon Nova](nova-distillation.md)
+ [SDK di personalizzazione Nova](nova-customization-sdk.md)
+ [Ottimizzazione dei modelli SageMaker Amazon Nova mediante processi di formazione](nova-fine-tuning-training-job.md)
+ [Monitoraggio dei progressi tra le iterazioni](nova-model-monitor.md)
+ [Valutazione del tuo modello basato sull'intelligenza artificiale SageMaker](nova-model-evaluation.md)

# Distillazione Amazon Nova
<a name="nova-distillation"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Amazon Nova distillation nella [guida per l'utente di Amazon Nova 1.0](https://docs.aws.amazon.com//nova/latest/userguide/nova-distillation.html).

# SDK di personalizzazione Nova
<a name="nova-customization-sdk"></a>

L'Amazon Nova Customization SDK è un SDK Python completo per personalizzare i modelli Amazon Nova durante l'intero ciclo di vita, dalla formazione e valutazione alla distribuzione e all'inferenza.

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Nova Customization SDK nella guida per l'utente di [Amazon Nova 1.0 o nella guida per l'utente](https://docs.aws.amazon.com//nova/latest/userguide/nova-customization-sdk.html) di [Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-customization-sdk.html).

# Ottimizzazione dei modelli SageMaker Amazon Nova mediante processi di formazione
<a name="nova-fine-tuning-training-job"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta la sezione Ottimizzazione dei modelli Amazon Nova SageMaker utilizzando i lavori di formazione nella guida per l'utente di [Amazon Nova 1.0 o nella guida per l'utente](https://docs.aws.amazon.com//nova/latest/userguide/nova-fine-tune-1.html) di [Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/smtj-training.html).

# Monitoraggio dei progressi tra le iterazioni
<a name="nova-model-monitor"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Monitoring Progress Across Iterations nella guida per [l'utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-model-monitor.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model-monitor.html).

# Valutazione del tuo modello basato sull'intelligenza artificiale SageMaker
<a name="nova-model-evaluation"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta la sezione Valutazione del tuo modello SageMaker addestrato all'intelligenza artificiale nella guida per l'utente di [Amazon Nova 1.0 o nella guida per l'utente](https://docs.aws.amazon.com//nova/latest/userguide/nova-model-evaluation.html) di [Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model-evaluation.html).

# Personalizzazione di Amazon Nova su Amazon SageMaker HyperPod
<a name="nova-hp"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta la personalizzazione di Amazon Nova su Amazon SageMaker HyperPod nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-hp.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp.html).

# SDK di personalizzazione Nova
<a name="nova-hp-customization-sdk"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Nova Customization SDK nella guida per l'utente di [Amazon Nova 1.0 o nella guida per l'utente](https://docs.aws.amazon.com//nova/latest/userguide/nova-hp-customization-sdk.html) di [Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-customization-sdk.html).

# Guida ai comandi HyperPod essenziali di Amazon
<a name="nova-hp-essential-commands-guide"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta la SageMaker HyperPod Essential Commands Guide nella guida per [l'utente di Amazon Nova 1.0 o la guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-hp-essential-commands-guide.html) per [l'utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-essential-commands-guide.html).

# Creazione di un cluster HyperPod EKS con gruppo di istanze ristrette (RIG)
<a name="nova-hp-cluster"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Creazione di un cluster SageMaker HyperPod EKS con RIG nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-hp-cluster.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-cluster.html).

# Accesso e configurazione di Nova Forge per l'intelligenza artificiale SageMaker HyperPod
<a name="nova-forge-hp-access"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta l'accesso e la configurazione di Nova Forge per l' SageMaker intelligenza artificiale HyperPod nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-forge-hp-access.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-forge-hp-access.html).

# Formazione per i modelli Amazon Nova
<a name="nova-hp-training"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Training for Amazon Nova models nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-hp-training.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-training.html).

# Ottimizzazione dei modelli Amazon Nova su Amazon SageMaker HyperPod
<a name="nova-hp-fine-tune"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta la sezione Ottimizzazione dei modelli Amazon Nova su SageMaker HyperPod Amazon nella guida per l'utente di [Amazon Nova 1.0](https://docs.aws.amazon.com//nova/latest/userguide/nova-hp-fine-tune.html).

# Valutazione di un modello addestrato
<a name="nova-hp-evaluate"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Evaluating your training model nella guida per l'[utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-hp-evaluate.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-hp-evaluate.html).

# Formazione iterativa
<a name="nova-iterative-training"></a>

La formazione iterativa consente di migliorare le prestazioni del modello attraverso più cicli di formazione, basandosi sui checkpoint precedenti per affrontare sistematicamente le modalità di errore e adattarsi alle mutevoli esigenze.

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Iterative Training nella guida per l'[utente di Amazon Nova 1.0 o la guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-iterative-training.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-iterative-training.html).

# Inferenza di Amazon Bedrock
<a name="nova-model-bedrock-inference"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta l'inferenza di Amazon Bedrock nella guida per [l'utente di Amazon Nova 1.0 o nella guida](https://docs.aws.amazon.com//nova/latest/userguide/nova-model-bedrock-inference.html) per l'[utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model-bedrock-inference.html).

# Limitazioni della personalizzazione dei modelli Amazon Nova
<a name="nova-model-limitations"></a>

Questo argomento è stato spostato. Per le informazioni più recenti, consulta Limitazioni della personalizzazione dei modelli Amazon Nova nella [guida per l'utente di Amazon Nova 2.0](https://docs.aws.amazon.com//nova/latest/nova2-userguide/nova-model-limitations.html).

# Personalizzazione del modello Open Weight
<a name="model-customize-open-weight"></a>

Questa sezione illustra la procedura per iniziare a personalizzare il modello a peso aperto.

**Topics**
+ [Prerequisiti](model-customize-open-weight-prereq.md)
+ [Creazione di risorse per la personalizzazione del modello nell'interfaccia utente](model-customize-open-weight-create-assets-ui.md)
+ [Invio di lavori di personalizzazione del modello AI](model-customize-open-weight-job.md)
+ [Valutazione del modello, invio di un lavoro](model-customize-open-weight-evaluation.md)
+ [Implementazione di modelli](model-customize-open-weight-deployment.md)
+ [Set di dati e valutatori di esempio](model-customize-open-weight-samples.md)

# Prerequisiti
<a name="model-customize-open-weight-prereq"></a>

Prima di iniziare, completa i seguenti prerequisiti:
+ Accedi a un dominio SageMaker AI con accesso a Studio. Se non disponi delle autorizzazioni per impostare Studio come esperienza predefinita per il dominio, contatta l’amministratore. Per ulteriori informazioni, consulta la [panoramica dei domini Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-studio-onboard.html).
+ Aggiorna il AWS CLI seguendo la procedura descritta in [Installazione della AWS CLI versione corrente](https://docs.aws.amazon.com/cli/latest/userguide/install-cliv1.html#install-tool-bundled).
+ Dal computer locale, esegui `aws configure` e inserisci le tue credenziali AWS . Per informazioni sulle AWS credenziali, consulta [Comprendere e ottenere le AWS credenziali](https://docs.aws.amazon.com/IAM/latest/UserGuide/security-creds.html).

## Autorizzazioni IAM richieste
<a name="model-customize-open-weight-iam"></a>

SageMaker La personalizzazione del modello AI richiede l'aggiunta di autorizzazioni appropriate all'esecuzione del dominio AI SageMaker . Per fare ciò, puoi creare una policy di autorizzazioni IAM in linea e collegarla al ruolo IAM. Per informazioni sull'aggiunta di policy, consulta [Aggiungere e rimuovere le autorizzazioni di identità IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) nella *AWS Identity and Access Management User Guide*.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowNonAdminStudioActions",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreatePresignedDomainUrl",
                "sagemaker:DescribeDomain",
                "sagemaker:DescribeUserProfile",
                "sagemaker:DescribeSpace",
                "sagemaker:ListSpaces",
                "sagemaker:DescribeApp",
                "sagemaker:ListApps"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:domain/*",
                "arn:aws:sagemaker:*:*:user-profile/*",
                "arn:aws:sagemaker:*:*:app/*",
                "arn:aws:sagemaker:*:*:space/*"
             ]
        },
        {
            "Sid": "LambdaListPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:ListFunctions"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "LambdaPermissionsForRewardFunction",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:InvokeFunction",
                "lambda:GetFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:*SageMaker*",
                "arn:aws:lambda:*:*:function:*sagemaker*",
                "arn:aws:lambda:*:*:function:*Sagemaker*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "LambdaLayerForAWSSDK",
            "Effect": "Allow",
            "Action": [
                "lambda:GetLayerVersion"
            ],
            "Resource": [
                "arn:aws:lambda:*:336392948345:layer:AWSSDK*"
            ]
        },
        {
            "Sid": "SageMakerPublicHubPermissions",
            "Effect": "Allow",
            "Action": [
                "sagemaker:ListHubContents"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:aws:hub/SageMakerPublicHub"
            ]
        },
        {
            "Sid": "SageMakerHubPermissions",
            "Effect": "Allow",
            "Action": [
                "sagemaker:ListHubs",
                "sagemaker:ListHubContents",
                "sagemaker:DescribeHubContent",
                "sagemaker:DeleteHubContent",
                "sagemaker:ListHubContentVersions",
                "sagemaker:Search"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "JumpStartAccess",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::jumpstart*"
            ]
        },
        {
            "Sid": "ListMLFlowOperations",
            "Effect": "Allow",
            "Action": [
                "sagemaker:ListMlflowApps",
                "sagemaker:ListMlflowTrackingServers"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "MLFlowAccess",
            "Effect": "Allow",
            "Action": [
                "sagemaker:UpdateMlflowApp",
                "sagemaker:DescribeMlflowApp",
                "sagemaker:CreatePresignedMlflowAppUrl",
                "sagemaker:CallMlflowAppApi",
                "sagemaker-mlflow:*"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:mlflow-app/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "BYODataSetS3Access",
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::*SageMaker*",
                "arn:aws:s3:::*Sagemaker*",
                "arn:aws:s3:::*sagemaker*"
            ]
        },
        {
            "Sid": "AllowHubPermissions",
            "Effect": "Allow",
            "Action": [
                "sagemaker:ImportHubContent"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:hub/*",
                "arn:aws:sagemaker:*:*:hub-content/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "PassRoleForSageMaker",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/service-role/AmazonSageMaker-ExecutionRole-*"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "sagemaker.amazonaws.com",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "PassRoleForAWSLambda",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/service-role/AmazonSageMaker-ExecutionRole-*"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "lambda.amazonaws.com",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "PassRoleForBedrock",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/service-role/AmazonSageMaker-ExecutionRole-*"
            ],
            "Condition": {
                "StringEquals": {
                    "iam:PassedToService": "bedrock.amazonaws.com",
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "TrainingJobRun",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateTrainingJob",
                "sagemaker:DescribeTrainingJob",
                "sagemaker:ListTrainingJobs"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:training-job/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "ModelPackageAccess",
            "Effect": "Allow",
            "Action": [
                "sagemaker:CreateModelPackage",
                "sagemaker:DescribeModelPackage",
                "sagemaker:ListModelPackages",
                "sagemaker:CreateModelPackageGroup",
                "sagemaker:DescribeModelPackageGroup",
                "sagemaker:ListModelPackageGroups",
                "sagemaker:CreateModel"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model-package-group/*",
                "arn:aws:sagemaker:*:*:model-package/*",
                "arn:aws:sagemaker:*:*:model/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "TagsPermission",
            "Effect": "Allow",
            "Action": [
                "sagemaker:AddTags",
                "sagemaker:ListTags"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:model-package-group/*",
                "arn:aws:sagemaker:*:*:model-package/*",
                "arn:aws:sagemaker:*:*:hub/*",
                "arn:aws:sagemaker:*:*:hub-content/*",
                "arn:aws:sagemaker:*:*:training-job/*",
                "arn:aws:sagemaker:*:*:model/*",
                "arn:aws:sagemaker:*:*:endpoint/*",
                "arn:aws:sagemaker:*:*:endpoint-config/*",
                "arn:aws:sagemaker:*:*:pipeline/*",
                "arn:aws:sagemaker:*:*:inference-component/*",
                "arn:aws:sagemaker:*:*:action/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "LogAccess",
            "Effect": "Allow",
            "Action": [
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:GetLogEvents"
            ],
            "Resource": [
                "arn:aws:logs:*:*:log-group*",
                "arn:aws:logs:*:*:log-group:/aws/sagemaker/TrainingJobs:log-stream:*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "BedrockDeploy",
            "Effect": "Allow",
            "Action": [
                "bedrock:CreateModelImportJob"
            ],
            "Resource": [
                "arn:aws:bedrock:*:*:*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "BedrockOperations",
            "Effect": "Allow",
            "Action": [
                "bedrock:GetModelImportJob",
                "bedrock:GetImportedModel",
                "bedrock:ListProvisionedModelThroughputs",
                "bedrock:ListCustomModelDeployments",
                "bedrock:ListCustomModels",
                "bedrock:ListModelImportJobs",
                "bedrock:GetEvaluationJob",
                "bedrock:CreateEvaluationJob", 
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:*:*:evaluation-job/*",
                "arn:aws:bedrock:*:*:imported-model/*",
                "arn:aws:bedrock:*:*:model-import-job/*",
                "arn:aws:bedrock:*:*:foundation-model/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "BedrockFoundationModelOperations",
            "Effect": "Allow",
            "Action": [
                "bedrock:GetFoundationModelAvailability",
                "bedrock:ListFoundationModels"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "SageMakerPipelinesAndLineage",
            "Effect": "Allow",
            "Action": [
                "sagemaker:ListActions",
                "sagemaker:ListArtifacts",
                "sagemaker:QueryLineage",
                "sagemaker:ListAssociations",
                "sagemaker:AddAssociation",
                "sagemaker:DescribeAction",
                "sagemaker:AddAssociation",
                "sagemaker:CreateAction",
                "sagemaker:CreateContext",
                "sagemaker:DescribeTrialComponent"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:artifact/*",
                "arn:aws:sagemaker:*:*:action/*",
                "arn:aws:sagemaker:*:*:context/*",
                "arn:aws:sagemaker:*:*:action/*",
                "arn:aws:sagemaker:*:*:model-package/*",
                "arn:aws:sagemaker:*:*:context/*",
                "arn:aws:sagemaker:*:*:pipeline/*",
                "arn:aws:sagemaker:*:*:experiment-trial-component/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "ListOperations",
            "Effect": "Allow",
            "Action": [
                "sagemaker:ListInferenceComponents",
                "sagemaker:ListWorkforces"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "SageMakerInference",
            "Effect": "Allow",
            "Action": [
                "sagemaker:DescribeInferenceComponent",
                "sagemaker:CreateEndpoint",
                "sagemaker:CreateEndpointConfig",
                "sagemaker:DescribeEndpoint",
                "sagemaker:DescribeEndpointConfig",
                "sagemaker:ListEndpoints"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:inference-component/*",
                "arn:aws:sagemaker:*:*:endpoint/*",
                "arn:aws:sagemaker:*:*:endpoint-config/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "SageMakerPipelines",
            "Effect": "Allow",
            "Action": [
                "sagemaker:DescribePipelineExecution",
                "sagemaker:ListPipelineExecutions",
                "sagemaker:ListPipelineExecutionSteps",
                "sagemaker:CreatePipeline",
                "sagemaker:UpdatePipeline",
                "sagemaker:StartPipelineExecution"
            ],
            "Resource": [
                "arn:aws:sagemaker:*:*:pipeline/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        }
    ]
}
```

Se hai associato il [AmazonSageMakerFullAccessPolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html)al tuo ruolo di esecuzione, puoi aggiungere questa policy ridotta:

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "LambdaListPermissions",
            "Effect": "Allow",
            "Action": [
                "lambda:ListFunctions"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "LambdaPermissionsForRewardFunction",
            "Effect": "Allow",
            "Action": [
                "lambda:CreateFunction",
                "lambda:DeleteFunction",
                "lambda:InvokeFunction",
                "lambda:GetFunction"
            ],
            "Resource": [
                "arn:aws:lambda:*:*:function:*SageMaker*",
                "arn:aws:lambda:*:*:function:*sagemaker*",
                "arn:aws:lambda:*:*:function:*Sagemaker*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "LambdaLayerForAWSSDK",
            "Effect": "Allow",
            "Action": [
                "lambda:GetLayerVersion"
            ],
            "Resource": [
                "arn:aws:lambda:*:336392948345:layer:AWSSDK*"
            ]
        },
        {
            "Sid": "S3Access",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::*SageMaker*",
                "arn:aws:s3:::*Sagemaker*",
                "arn:aws:s3:::*sagemaker*",
                "arn:aws:s3:::jumpstart*"
            ]
        },
        {
            "Sid": "PassRoleForSageMakerAndLambdaAndBedrock",
            "Effect": "Allow",
            "Action": [
                "iam:PassRole"
            ],
            "Resource": [
                "arn:aws:iam::*:role/service-role/AmazonSageMaker-ExecutionRole-*"
            ],
            "Condition": { 
                "StringEquals": { 
                    "iam:PassedToService": [ 
                        "lambda.amazonaws.com", 
                        "bedrock.amazonaws.com"
                     ],
                     "aws:ResourceAccount": "${aws:PrincipalAccount}" 
                 } 
            }
        },
        {
            "Sid": "BedrockDeploy",
            "Effect": "Allow",
            "Action": [
                "bedrock:CreateModelImportJob"
            ],
            "Resource": [
                "*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "BedrockOperations",
            "Effect": "Allow",
            "Action": [
                "bedrock:GetModelImportJob",
                "bedrock:GetImportedModel",
                "bedrock:ListProvisionedModelThroughputs",
                "bedrock:ListCustomModelDeployments",
                "bedrock:ListCustomModels",
                "bedrock:ListModelImportJobs",
                "bedrock:GetEvaluationJob",
                "bedrock:CreateEvaluationJob",
                "bedrock:InvokeModel"
            ],
            "Resource": [
                "arn:aws:bedrock:*:*:evaluation-job/*",
                "arn:aws:bedrock:*:*:imported-model/*",
                "arn:aws:bedrock:*:*:model-import-job/*",
                "arn:aws:bedrock:*:*:foundation-model/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:ResourceAccount": "${aws:PrincipalAccount}"
                }
            }
        },
        {
            "Sid": "BedrockFoundationModelOperations",
            "Effect": "Allow",
            "Action": [
                "bedrock:GetFoundationModelAvailability",
                "bedrock:ListFoundationModels"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}
```

Devi quindi fare clic su **Modifica politica di fiducia** e sostituirla con la seguente politica, quindi fare clic su **Aggiorna politica**.

```
{
    "Version": "2012-10-17",		 	 	                    
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                 "Service": "lambda.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Effect": "Allow",
            "Principal": {
                   "Service": "sagemaker.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        },
        {
            "Effect": "Allow",
            "Principal": {
                  "Service": "bedrock.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

# Creazione di risorse per la personalizzazione del modello nell'interfaccia utente
<a name="model-customize-open-weight-create-assets-ui"></a>

È possibile creare e gestire il set di dati e le risorse di valutazione che è possibile utilizzare per la personalizzazione del modello nell'interfaccia utente.

## Asset
<a name="model-customize-open-weight-assets"></a>

Seleziona **Assets** nel pannello a sinistra e nell'interfaccia utente di Amazon SageMaker Studio, quindi seleziona **Datasets.**

![\[Un'immagine contenente l'accesso alla personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-16.png)


Scegli **Carica set** di dati per aggiungere il set di dati che utilizzerai nei lavori di personalizzazione del modello. Scegliendo il **formato di input dei dati richiesto**, puoi accedere a un riferimento del formato del set di dati da utilizzare.

![\[Un'immagine contenente l'accesso alla personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-15.png)


## Valutatori
<a name="model-customize-open-weight-evaluators"></a>

Puoi anche aggiungere **Reward Functions e Reward** **Prompt per i** tuoi lavori di personalizzazione del Reinforcement Learning.

![\[Un'immagine contenente l'accesso alla personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-14.png)


L'interfaccia utente fornisce anche indicazioni sul formato richiesto per la funzione di ricompensa o la richiesta di ricompensa.

![\[Un'immagine contenente l'accesso alla personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-13.png)


## Risorse per la personalizzazione del modello tramite SDK AWS
<a name="model-customize-open-weight-create-assets-sdk"></a>

Puoi anche usare SageMaker AI Python SDK per creare risorse. Vedi il frammento di codice di esempio riportato di seguito:

```
from sagemaker.ai_registry.air_constants import REWARD_FUNCTION, REWARD_PROMPT
from sagemaker.ai_registry.dataset import DataSet, CustomizationTechnique
from sagemaker.ai_registry.evaluator import Evaluator

# Creating a dataset example
dataset = DataSet.create(
            name="sdkv3-gen-ds2",
            source="s3://sample-test-bucket/datasets/training-data/jamjee-sft-ds1.jsonl", # or use local filepath as source.
            customization_technique=CustomizationTechnique.SFT
        )

# Refreshes status from hub
dataset.refresh()
pprint(dataset.__dict__)

# Creating an evaluator. Method : Lambda
evaluator = Evaluator.create(
                name = "sdk-new-rf11",
                source="arn:aws:lambda:us-west-2:<>:function:<function-name>8",
                type=REWARD_FUNCTION
        )

# Creating an evaluator. Method : Bring your own code
evaluator = Evaluator.create(
                name = "eval-lambda-test",
                source="/path_to_local/eval_lambda_1.py",
                type = REWARD_FUNCTION
        )

# Optional wait, by default we have wait = True during create call.
evaluator.wait()

evaluator.refresh()
pprint(evaluator)
```

# Invio di lavori di personalizzazione del modello AI
<a name="model-customize-open-weight-job"></a>

È possibile accedere alla funzionalità di personalizzazione del modello SageMaker AI dalla pagina Modelli di Amazon SageMaker Studio nel pannello di sinistra. Puoi anche trovare la pagina Assets in cui puoi creare e gestire set di dati e valutatori per la personalizzazione del modello.

![\[Un'immagine contenente l'accesso alla personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-12.png)


Per iniziare l'invio di un lavoro di personalizzazione del modello, seleziona l'opzione Modelli per accedere alla scheda Jumpstart Base Models:

![\[Un'immagine contenente come scegliere il modello base.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-11.png)


Puoi fare clic direttamente su Personalizza modello nella scheda del modello oppure puoi cercare qualsiasi modello su Meta che ti interessa personalizzare.

![\[Un'immagine contenente la scheda del modello e spiega come scegliere il modello da personalizzare.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-10.png)


Facendo clic sulla scheda del modello, è possibile accedere alla pagina dei dettagli del modello e avviare il processo di personalizzazione facendo clic su Personalizza modello e quindi selezionando Personalizza con interfaccia utente per avviare la configurazione del lavoro RLVR.

![\[Un'immagine che mostra come avviare il processo di personalizzazione.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-9.png)


È quindi possibile inserire il nome del modello personalizzato, selezionare la tecnica di personalizzazione del modello da utilizzare e configurare gli iperparametri del lavoro:

![\[Un'immagine contenente una selezione di tecniche di personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-8.png)


![\[Un'immagine contenente una selezione di tecniche di personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-7.png)


## Invio di lavori di personalizzazione del modello AI tramite SDK
<a name="model-customize-open-weight-job-sdk"></a>

Puoi anche utilizzare SageMaker AI Python SDK per inviare un lavoro di personalizzazione del modello:

```
# Submit a DPO model customization job

from sagemaker.modules.train.dpo_trainer import DPOTrainer
from sagemaker.modules.train.common import TrainingType

trainer = DPOTrainer(
    model=BASE_MODEL,
    training_type=TrainingType.LORA,
    model_package_group_name=MODEL_PACKAGE_GROUP_NAME,
    training_dataset=TRAINING_DATASET,
    s3_output_path=S3_OUTPUT_PATH,
    sagemaker_session=sagemaker_session,
    role=ROLE_ARN
)
```

## Monitoraggio del processo di personalizzazione
<a name="model-customize-open-weight-monitor"></a>

Subito dopo aver inviato il lavoro, verrai reindirizzato alla pagina del lavoro di formazione sulla personalizzazione dei modelli.

![\[Un'immagine contenente una selezione di tecniche di personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-6.png)


Una volta completato il lavoro, puoi andare alla pagina dei dettagli del modello personalizzato facendo clic sul pulsante Vai al **modello personalizzato** nell'angolo in alto a destra.

![\[Un'immagine contenente una selezione di tecniche di personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-5.png)


Nella pagina dei dettagli del modello personalizzato puoi lavorare ulteriormente con il tuo modello personalizzato nei seguenti modi:

1. Controllo delle informazioni sulle prestazioni, sulla posizione degli artefatti generati, sugli iperparametri della configurazione di allenamento e sui registri di allenamento.

1. Avvia un processo di valutazione con un set di dati diverso (personalizzazione continua).

1. Implementa il modello utilizzando gli endpoint SageMaker AI Inference o Amazon Bedrock Custom Model Import.  
![\[Un'immagine contenente una selezione di tecniche di personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-4.png)

# Valutazione del modello, invio di un lavoro
<a name="model-customize-open-weight-evaluation"></a>

Questa sezione descrive la valutazione di modelli personalizzati a peso aperto. Ti consente di iniziare una procedura dettagliata del processo di valutazione e invio del lavoro. Sono disponibili risorse aggiuntive per casi d'uso più avanzati di invio di lavori di valutazione.

**Topics**
+ [Nozioni di base](model-customize-evaluation-getting-started.md)
+ [Tipi di valutazione e Job Submission](model-customize-evaluation-types.md)
+ [Formati delle metriche di valutazione](model-customize-evaluation-metrics-formats.md)
+ [Formati di set di dati supportati per attività Bring-Your-Own-Dataset (BYOD)](model-customize-evaluation-dataset-formats.md)
+ [Valuta con punteggi preimpostati e personalizzati](model-customize-evaluation-preset-custom-scorers.md)

# Nozioni di base
<a name="model-customize-evaluation-getting-started"></a>

## Invia un lavoro di valutazione tramite SageMaker Studio
<a name="model-customize-evaluation-studio"></a>

### Passaggio 1: accedi alla valutazione dalla tua scheda modello
<a name="model-customize-evaluation-studio-step1"></a>

Dopo aver personalizzato il modello, accedi alla pagina di valutazione dalla scheda del modello.

Per informazioni sull'allenamento con modelli personalizzati a pesi aperti: [https://docs.aws.amazon.com/sagemaker/latest/dg/model- .html customize-open-weight-job](https://docs.aws.amazon.com/sagemaker/latest/dg/model-customize-open-weight-job.html)

SageMaker visualizza il tuo modello personalizzato nella scheda I miei modelli:

![\[pagina della scheda modello registrata\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/getting-started-registered-model-card.png)


Scegli Visualizza la versione più recente, quindi scegli Valuta:

![\[Pagina di personalizzazione del modello\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/getting-started-evaluate-from-model-card.png)


### Fase 2: Invia il tuo Job di valutazione
<a name="model-customize-evaluation-studio-step2"></a>

Scegli il pulsante Invia e invia il tuo lavoro di valutazione. Questo invia un lavoro di benchmark MMLU minimo.

Per informazioni sui tipi di processi di valutazione supportati, vedere. [Tipi di valutazione e Job Submission](model-customize-evaluation-types.md)

![\[Pagina di invio del lavoro di valutazione\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/getting-started-benchmark-submission.png)


### Fase 3: Monitora lo stato di avanzamento del tuo Job di valutazione
<a name="model-customize-evaluation-studio-step3"></a>

L'avanzamento del lavoro di valutazione viene monitorato nella scheda Fasi di valutazione:

![\[Lo stato di avanzamento del processo di valutazione\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/getting-started-benchmark-tracking.png)


### Fase 4: Visualizzazione dei risultati del Job di valutazione
<a name="model-customize-evaluation-studio-step4"></a>

I risultati del lavoro di valutazione vengono visualizzati nella scheda Risultati della valutazione:

![\[Le metriche del tuo lavoro di valutazione\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/getting-started-benchmark-results.png)


### Fase 5: Visualizza le valutazioni completate
<a name="model-customize-evaluation-studio-step5"></a>

Il lavoro di valutazione completato viene visualizzato nella scheda Valutazioni del modello:

![\[I tuoi lavori di valutazione completati\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/getting-started-benchmark-completed-model-card.png)


## Invia il tuo lavoro di valutazione tramite SageMaker Python SDK
<a name="model-customize-evaluation-sdk"></a>

### Passaggio 1: crea il tuo BenchMarkEvaluator
<a name="model-customize-evaluation-sdk-step1"></a>

Passa il modello addestrato registrato, la posizione di output AWS S3 e l'ARN della MLFlow risorsa e quindi `BenchMarkEvaluator` inizializzali.

```
from sagemaker.train.evaluate import BenchMarkEvaluator, Benchmark  
  
evaluator = BenchMarkEvaluator(  
    benchmark=Benchmark.MMLU,  
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",  
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",  
    mlflow_resource_arn="arn:aws:sagemaker:<region>:<account-id>:mlflow-tracking-server/<tracking-server-name>",  
    evaluate_base_model=False  
)
```

### Fase 2: Invia il tuo Job di valutazione
<a name="model-customize-evaluation-sdk-step2"></a>

Chiama il `evaluate()` metodo per inviare il lavoro di valutazione.

```
execution = evaluator.evaluate()
```

### Fase 3: Monitora lo stato di avanzamento del tuo Job di valutazione
<a name="model-customize-evaluation-sdk-step3"></a>

Richiama il `wait()` metodo di esecuzione per ottenere un aggiornamento in tempo reale sullo stato di avanzamento del lavoro di valutazione.

```
execution.wait(target_status="Succeeded", poll=5, timeout=3600)
```

### Fase 4: Visualizzazione dei risultati del Job di valutazione
<a name="model-customize-evaluation-sdk-step4"></a>

Richiama il `show_results()` metodo per visualizzare i risultati del lavoro di valutazione.

```
execution.show_results()
```

# Tipi di valutazione e Job Submission
<a name="model-customize-evaluation-types"></a>

## Analisi comparativa con set di dati standardizzati
<a name="model-customize-evaluation-benchmarking"></a>

Utilizza il tipo Benchmark Evaluation per valutare la qualità del tuo modello su set di dati di benchmark standardizzati, inclusi set di dati popolari come MMLU e BBH.


| Benchmark | Set di dati personalizzato supportato | Modalità | Description | Metriche | Strategia | Sottoattività disponibile | 
| --- | --- | --- | --- | --- | --- | --- | 
| mmlu | No | Testo | Massive Multitask Language Understanding (MMLU) - Verifica la conoscenza di 57 materie. | accuratezza | zs\$1cot | Sì | 
| mmlu\$1pro | No | Testo | MMLU - Sottoinsieme professionale - Incentrato su domini professionali come legge, medicina, contabilità e ingegneria. | accuratezza | zs\$1cot | No | 
| bbh | No | Testo | Attività di ragionamento avanzato - Una raccolta di problemi impegnativi che mettono alla prova le capacità cognitive e di risoluzione dei problemi di livello superiore. | accuratezza | fs\$1cot | Sì | 
| gpqa | No | Testo | Risposta a domande di fisica generale - Valuta la comprensione di concetti di fisica e le relative capacità di risoluzione dei problemi. | accuratezza | zs\$1cot | No | 
| matematica | No | Testo | Risoluzione di problemi matematici - Misura il ragionamento matematico su argomenti quali algebra, calcolo e problemi testuali. | exact\$1match | zs\$1cot | Sì | 
| strong\$1reject | No | Testo | Attività di controllo della qualità: verifica la capacità del modello di rilevare e rifiutare contenuti inappropriati, dannosi o errati. | deflection | zs | Sì | 
| ifeval | No | Testo | Valutazione che segue istruzioni - Misura la precisione con cui un modello segue le istruzioni fornite e completa le attività secondo le specifiche. | accuratezza | zs | No | 

Per ulteriori informazioni sui formati BYOD, vedere. [Formati di set di dati supportati per attività Bring-Your-Own-Dataset (BYOD)](model-customize-evaluation-dataset-formats.md)

### Sottoattività disponibili
<a name="model-customize-evaluation-benchmarking-subtasks"></a>

Di seguito sono elencate le sottoattività disponibili per la valutazione del modello in più domini, tra cui MMLU (Massive Multitask Language Understanding), BBH (Big Bench Hard) e MATH. StrongReject Queste sottoattività consentono di valutare le prestazioni del modello in base a funzionalità e aree di conoscenza specifiche.

**Sottoattività MMLU**

```
MMLU_SUBTASKS = [
    "abstract_algebra",
    "anatomy",
    "astronomy",
    "business_ethics",
    "clinical_knowledge",
    "college_biology",
    "college_chemistry",
    "college_computer_science",
    "college_mathematics",
    "college_medicine",
    "college_physics",
    "computer_security",
    "conceptual_physics",
    "econometrics",
    "electrical_engineering",
    "elementary_mathematics",
    "formal_logic",
    "global_facts",
    "high_school_biology",
    "high_school_chemistry",
    "high_school_computer_science",
    "high_school_european_history",
    "high_school_geography",
    "high_school_government_and_politics",
    "high_school_macroeconomics",
    "high_school_mathematics",
    "high_school_microeconomics",
    "high_school_physics",
    "high_school_psychology",
    "high_school_statistics",
    "high_school_us_history",
    "high_school_world_history",
    "human_aging",
    "human_sexuality",
    "international_law",
    "jurisprudence",
    "logical_fallacies",
    "machine_learning",
    "management",
    "marketing",
    "medical_genetics",
    "miscellaneous",
    "moral_disputes",
    "moral_scenarios",
    "nutrition",
    "philosophy",
    "prehistory",
    "professional_accounting",
    "professional_law",
    "professional_medicine",
    "professional_psychology",
    "public_relations",
    "security_studies",
    "sociology",
    "us_foreign_policy",
    "virology",
    "world_religions"
]
```

**Sottoattività BBH**

```
BBH_SUBTASKS = [
    "boolean_expressions",
    "causal_judgement",
    "date_understanding",
    "disambiguation_qa",
    "dyck_languages",
    "formal_fallacies",
    "geometric_shapes",
    "hyperbaton",
    "logical_deduction_five_objects",
    "logical_deduction_seven_objects",
    "logical_deduction_three_objects",
    "movie_recommendation",
    "multistep_arithmetic_two",
    "navigate",
    "object_counting",
    "penguins_in_a_table",
    "reasoning_about_colored_objects",
    "ruin_names",
    "salient_translation_error_detection",
    "snarks",
    "sports_understanding",
    "temporal_sequences",
    "tracking_shuffled_objects_five_objects",
    "tracking_shuffled_objects_seven_objects",
    "tracking_shuffled_objects_three_objects",
    "web_of_lies",
    "word_sorting"
]
```

**Sottoattività matematiche**

```
MATH_SUBTASKS = [
    "algebra", 
    "counting_and_probability", 
    "geometry",
    "intermediate_algebra", 
    "number_theory", 
    "prealgebra", 
    "precalculus"
]
```

**StrongReject Sottoattività**

```
STRONG_REJECT_SUBTASKS = [
    "gcg_transfer_harmbench", 
    "gcg_transfer_universal_attacks",
    "combination_3", 
    "combination_2", 
    "few_shot_json", 
    "dev_mode_v2",
    "dev_mode_with_rant",
    "wikipedia_with_title", 
    "distractors",
    "wikipedia",
     "style_injection_json", 
    "style_injection_short",
    "refusal_suppression", 
    "prefix_injection", 
    "distractors_negated",
    "poems", 
    "base64", 
    "base64_raw", "
    base64_input_only",
    "base64_output_only", 
    "evil_confidant", 
    "aim", 
    "rot_13",
    "disemvowel", 
    "auto_obfuscation", 
    "auto_payload_splitting", 
    "pair",
    "pap_authority_endorsement", 
    "pap_evidence_based_persuasion",
    "pap_expert_endorsement", 
    "pap_logical_appeal", 
    "pap_misrepresentation"
]
```

### Invia il tuo lavoro di riferimento
<a name="model-customize-evaluation-benchmarking-submit"></a>

------
#### [ SageMaker Studio ]

![\[Una configurazione minima per il benchmarking tramite Studio SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/benchmark-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.train.evaluate import get_benchmarks
from sagemaker.train.evaluate import BenchMarkEvaluator

Benchmark = get_benchmarks()

# Create evaluator with MMLU benchmark
evaluator = BenchMarkEvaluator(
benchmark=Benchmark.MMLU,
model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
s3_output_path="s3://<bucket-name>/<prefix>/",
evaluate_base_model=False
)

execution = evaluator.evaluate()
```

Per ulteriori informazioni sull'invio di lavori di valutazione tramite SageMaker Python SDK, consulta: [https://sagemaker.readthedocs.io/en/stable/model\$1customization/evaluation.html](https://sagemaker.readthedocs.io/en/stable/model_customization/evaluation.html)

------

## Valutazione del Large Language Model as a Judge (LLMAJ)
<a name="model-customize-evaluation-llmaj"></a>

Utilizza la valutazione LLM-as-a-judge (LLMAJ) per sfruttare un altro modello di frontiera per valutare le risposte del modello target. Puoi utilizzare i modelli AWS Bedrock come giudici chiamando l'`create_evaluation_job`API per avviare il processo di valutazione.

[Per ulteriori informazioni sui modelli di arbitro supportati, consulta: -supported.html https://docs.aws.amazon.com/bedrock/ latest/userguide/models](https://docs.aws.amazon.com/bedrock/latest/userguide/models-supported.html)

È possibile utilizzare 2 diversi formati metrici per definire la valutazione:
+ Metriche **integrate: sfrutta le metriche** integrate di AWS Bedrock per analizzare la qualità delle risposte di inferenza del modello. [Per ulteriori informazioni, consulta: - .html https://docs.aws.amazon.com/bedrock/ latest/userguide/model evaluation-type-judge-prompt](https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-type-judge-prompt.html)
+ **Metriche personalizzate:** definisci le tue metriche personalizzate nel formato metrico personalizzato di Bedrock Evaluation per analizzare la qualità delle risposte di inferenza del tuo modello utilizzando le tue istruzioni. [Per ulteriori informazioni, vedete: - -formats.html https://docs.aws.amazon.com/bedrock/ latest/userguide/model evaluation-custom-metrics-prompt](https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html)

### Invia un job LLMAJ con metriche integrate
<a name="model-customize-evaluation-llmaj-builtin"></a>

------
#### [ SageMaker Studio ]

![\[Una configurazione minima per il benchmarking LLMAJ tramite Studio SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/llmaj-as-judge-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.train.evaluate import LLMAsJudgeEvaluator

evaluator = LLMAsJudgeEvaluator(
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    evaluator_model="<bedrock-judge-model-id>",
    dataset="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl",
    builtin_metrics=["<builtin-metric-1>", "<builtin-metric-2>"],
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

Per ulteriori informazioni sull'invio di lavori di valutazione tramite SageMaker Python SDK, consulta: [https://sagemaker.readthedocs.io/en/stable/model\$1customization/evaluation.html](https://sagemaker.readthedocs.io/en/stable/model_customization/evaluation.html)

------

### Invia un job LLMAJ con metriche personalizzate
<a name="model-customize-evaluation-llmaj-custom"></a>

Definisci le tue metriche personalizzate:

```
{
    "customMetricDefinition": {
        "name": "PositiveSentiment",
        "instructions": (
            "You are an expert evaluator. Your task is to assess if the sentiment of the response is positive. "
            "Rate the response based on whether it conveys positive sentiment, helpfulness, and constructive tone.\n\n"
            "Consider the following:\n"
            "- Does the response have a positive, encouraging tone?\n"
            "- Is the response helpful and constructive?\n"
            "- Does it avoid negative language or criticism?\n\n"
            "Rate on this scale:\n"
            "- Good: Response has positive sentiment\n"
            "- Poor: Response lacks positive sentiment\n\n"
            "Here is the actual task:\n"
            "Prompt: {{prompt}}\n"
            "Response: {{prediction}}"
        ),
        "ratingScale": [
            {"definition": "Good", "value": {"floatValue": 1}},
            {"definition": "Poor", "value": {"floatValue": 0}}
        ]
    }
}
```

Per ulteriori informazioni, consulta: [https://docs.aws.amazon.com/bedrock/latest/userguide/model- -formats.html evaluation-custom-metrics-prompt](https://docs.aws.amazon.com/bedrock/latest/userguide/model-evaluation-custom-metrics-prompt-formats.html)

------
#### [ SageMaker Studio ]

![\[Carica la metrica personalizzata tramite Metriche personalizzate > Aggiungi metriche personalizzate\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/custom-llmaj-metrics-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
evaluator = LLMAsJudgeEvaluator(
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    evaluator_model="<bedrock-judge-model-id>",
    dataset="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl",
    custom_metrics=custom_metric_dict = {
        "customMetricDefinition": {
            "name": "PositiveSentiment",
            "instructions": (
                "You are an expert evaluator. Your task is to assess if the sentiment of the response is positive. "
                "Rate the response based on whether it conveys positive sentiment, helpfulness, and constructive tone.\n\n"
                "Consider the following:\n"
                "- Does the response have a positive, encouraging tone?\n"
                "- Is the response helpful and constructive?\n"
                "- Does it avoid negative language or criticism?\n\n"
                "Rate on this scale:\n"
                "- Good: Response has positive sentiment\n"
                "- Poor: Response lacks positive sentiment\n\n"
                "Here is the actual task:\n"
                "Prompt: {{prompt}}\n"
                "Response: {{prediction}}"
            ),
            "ratingScale": [
                {"definition": "Good", "value": {"floatValue": 1}},
                {"definition": "Poor", "value": {"floatValue": 0}}
            ]
        }
    },
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)
```

------

## Scorer personalizzati
<a name="model-customize-evaluation-custom-scorers"></a>

Definisci la tua funzione di punteggio personalizzata per avviare un processo di valutazione. Il sistema fornisce due marcatori integrati: Prime math e Prime code. Puoi anche utilizzare la tua funzione scorer. Puoi copiare direttamente il codice della funzione scorer o portare la tua definizione di funzione Lambda utilizzando l'ARN associato. Per impostazione predefinita, entrambi i tipi di scorer producono risultati di valutazione che includono metriche standard come F1 score, ROUGE e BLEU.

Per ulteriori informazioni sui marcatori integrati e personalizzati e sui rispettivi requisiti/contratti, vedere. [Valuta con punteggi preimpostati e personalizzati](model-customize-evaluation-preset-custom-scorers.md)

### Registra il tuo set di dati
<a name="model-customize-evaluation-custom-scorers-register-dataset"></a>

Porta il tuo set di dati per lo scorer personalizzato registrandolo come Hub Content Dataset. SageMaker 

------
#### [ SageMaker Studio ]

In Studio, carica il tuo set di dati utilizzando la pagina Datasets dedicata.

![\[Set di dati di valutazione registrato in Studio SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/dataset-registration-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

In SageMaker Python SDK, carica il tuo set di dati utilizzando la pagina Datasets dedicata.

```
from sagemaker.ai_registry.dataset import DataSet

dataset = DataSet.create(
    name="your-bring-your-own-dataset",
    source="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl"
)
dataset.refresh()
```

------

### Invia un lavoro di scorer integrato
<a name="model-customize-evaluation-custom-scorers-builtin"></a>

------
#### [ SageMaker Studio ]

![\[Scegli tra esecuzioni di codice o risposte matematiche per un punteggio personalizzato integrato\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/builtin-scorer-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.train.evaluate import CustomScorerEvaluator
from sagemaker.train.evaluate import get_builtin_metrics

BuiltInMetric = get_builtin_metrics()

evaluator_builtin = CustomScorerEvaluator(
    evaluator=BuiltInMetric.PRIME_MATH,
    dataset="arn:aws:sagemaker:<region>:<account-id>:hub-content/<hub-content-id>/DataSet/your-bring-your-own-dataset/<version>",
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

Seleziona da `BuiltInMetric.PRIME_MATH` o `BuiltInMetric.PRIME_CODE` per Built-In Scoring.

------

### Invia un lavoro di marcatore personalizzato
<a name="model-customize-evaluation-custom-scorers-custom"></a>

Definisci una funzione di ricompensa personalizzata. Per ulteriori informazioni, consulta [Scorer personalizzati (Bring Your Own Metrics)](model-customize-evaluation-preset-custom-scorers.md#model-customize-evaluation-custom-scorers-byom).

**Registra la funzione di ricompensa personalizzata**

------
#### [ SageMaker Studio ]

![\[Passa a SageMaker Studio > Assets > Evaluator > Crea valutatore > Crea funzione di ricompensa\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/custom-scorer-submission-sagemaker-studio.png)


![\[Inviate il lavoro di valutazione Custom Scorer facendo riferimento alla funzione di ricompensa preimpostata registrata in Custom Scorer > Metriche personalizzate\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/custom-scorer-benchmark-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
from sagemaker.ai_registry.evaluator import Evaluator
from sagemaker.ai_registry.air_constants import REWARD_FUNCTION

evaluator = Evaluator.create(
    name = "your-reward-function-name",
    source="/path_to_local/custom_lambda_function.py",
    type = REWARD_FUNCTION
)
```

```
evaluator = CustomScorerEvaluator(
    evaluator=evaluator,
    dataset="s3://<bucket-name>/<prefix>/<dataset-file>.jsonl",
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

------

# Formati delle metriche di valutazione
<a name="model-customize-evaluation-metrics-formats"></a>

Valutazione della qualità del modello in base a questi formati metrici:
+ Riepilogo della valutazione del modello
+ MLFlow
+ TensorBoard

## Riepilogo della valutazione del modello
<a name="model-customize-evaluation-metrics-summary"></a>

Quando invii il lavoro di valutazione, specifichi una posizione di output AWS S3. SageMaker carica automaticamente il file.json di riepilogo della valutazione nella posizione. Il percorso S3 di riepilogo del benchmark è il seguente:

```
s3://<your-provide-s3-location>/<training-job-name>/output/output/<evaluation-job-name>/eval_results/
```

**Passa la posizione S3 AWS **

------
#### [ SageMaker Studio ]

![\[Passa alla posizione dell'artefatto di output (AWS URI S3)\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/s3-output-path-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
evaluator = BenchMarkEvaluator(
    benchmark=Benchmark.MMLU,
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

------

Leggilo direttamente `.json` dalla posizione AWS S3 o visualizzato automaticamente nell'interfaccia utente:

```
{
  "results": {
    "custom|gen_qa_gen_qa|0": {
      "rouge1": 0.9152812653966208,
      "rouge1_stderr": 0.003536439199232507,
      "rouge2": 0.774569918517409,
      "rouge2_stderr": 0.006368825746765958,
      "rougeL": 0.9111255645823356,
      "rougeL_stderr": 0.003603841524881021,
      "em": 0.6562150055991042,
      "em_stderr": 0.007948251702846893,
      "qem": 0.7522396416573348,
      "qem_stderr": 0.007224355240883467,
      "f1": 0.8428757602152095,
      "f1_stderr": 0.005186300690881584,
      "f1_score_quasi": 0.9156170336744968,
      "f1_score_quasi_stderr": 0.003667700152375464,
      "bleu": 100.00000000000004,
      "bleu_stderr": 1.464411857851008
    },
    "all": {
      "rouge1": 0.9152812653966208,
      "rouge1_stderr": 0.003536439199232507,
      "rouge2": 0.774569918517409,
      "rouge2_stderr": 0.006368825746765958,
      "rougeL": 0.9111255645823356,
      "rougeL_stderr": 0.003603841524881021,
      "em": 0.6562150055991042,
      "em_stderr": 0.007948251702846893,
      "qem": 0.7522396416573348,
      "qem_stderr": 0.007224355240883467,
      "f1": 0.8428757602152095,
      "f1_stderr": 0.005186300690881584,
      "f1_score_quasi": 0.9156170336744968,
      "f1_score_quasi_stderr": 0.003667700152375464,
      "bleu": 100.00000000000004,
      "bleu_stderr": 1.464411857851008
    }
  }
}
```

![\[Esempi di metriche prestazionali per un benchmark gen-qa personalizzato visualizzato in Studio SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/gen-qa-metrics-visualization-sagemaker-studio.png)


## MLFlow registrazione
<a name="model-customize-evaluation-metrics-mlflow"></a>

**Fornisci la tua SageMaker MLFlow risorsa ARN**

SageMaker Studio utilizza l' MLFlow app predefinita che viene fornita su ogni dominio Studio quando si utilizza la funzionalità di personalizzazione del modello per la prima volta. SageMaker Studio utilizza l'ARN associato all' MLflow app predefinita per l'invio del lavoro di valutazione.

Puoi anche inviare il tuo lavoro di valutazione e fornire esplicitamente un ARN di MLFlow risorsa per trasmettere le metriche a detto server/app tracciamento associato per l'analisi in tempo reale.

**SageMaker SDK Python**

```
evaluator = BenchMarkEvaluator(
    benchmark=Benchmark.MMLU,
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",
    mlflow_resource_arn="arn:aws:sagemaker:<region>:<account-id>:mlflow-tracking-server/<tracking-server-name>",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

Visualizzazione metrica a livello di modello e di sistema:

![\[Errore e precisione a livello di modello di esempio per l'attività di benchmarking MMLU\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-metrics-mlflow.png)


![\[Esempi di metriche integrate per l'attività di benchmarking LLMAJ\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/llmaj-metrics-mlflow.png)


![\[Esempi di metriche a livello di sistema per l'attività di benchmarking MMLU\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/system-metrics-mlflow.png)


## TensorBoard
<a name="model-customize-evaluation-metrics-tensorboard"></a>

Invia il tuo lavoro di valutazione con una postazione di output S3 AWS . SageMaker carica automaticamente un TensorBoard file nella posizione.

SageMaker carica il TensorBoard file su AWS S3 nella seguente posizione:

```
s3://<your-provide-s3-location>/<training-job-name>/output/output/<evaluation-job-name>/tensorboard_results/eval/
```

**Passa la posizione AWS S3 come segue**

------
#### [ SageMaker Studio ]

![\[Passa alla posizione dell'artefatto di output (AWS URI S3)\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/s3-output-path-submission-sagemaker-studio.png)


------
#### [ SageMaker Python SDK ]

```
evaluator = BenchMarkEvaluator(
    benchmark=Benchmark.MMLU,
    model="arn:aws:sagemaker:<region>:<account-id>:model-package/<model-package-name>/<version>",
    s3_output_path="s3://<bucket-name>/<prefix>/eval/",
    evaluate_base_model=False
)

execution = evaluator.evaluate()
```

------

**Esempio di metriche a livello di modello**

![\[SageMaker TensorBoard visualizzazione dei risultati di un lavoro di benchmarking\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/metrics-in-tensorboard.png)


# Formati di set di dati supportati per attività Bring-Your-Own-Dataset (BYOD)
<a name="model-customize-evaluation-dataset-formats"></a>

I tipi Custom Scorer e di LLM-as-judge valutazione richiedono un file JSONL del set di dati personalizzato che si trova in S3. AWS È necessario fornire il file come file JSON Lines conforme a uno dei seguenti formati supportati. Gli esempi contenuti in questo documento sono stati ampliati per motivi di chiarezza.

Ogni formato ha le sue sfumature, ma come minimo tutti richiedono un prompt da parte dell'utente.


**Campi obbligatori**  

| Campo | Richiesto | 
| --- | --- | 
| Richiesta dell'utente | Sì | 
| Prompt di sistema | No | 
| Verità fondamentale | Solo per Custom Scorer | 
| Categoria | No | 

**1. Formato OpenAI**

```
{
    "messages": [
        {
            "role": "system",    # System prompt (looks for system role)
            "content": "You are a helpful assistant."
        },
        {
            "role": "user",       # Query (looks for user role)
            "content": "Hello!"
        },
        {
            "role": "assistant",  # Ground truth (looks for assistant role)
            "content": "Hello to you!"
        }
    ]
}
```

**2. SageMaker **Valutazione

```
{
   "system":"You are an English major with top marks in class who likes to give minimal word responses: ",
   "query":"What is the symbol that ends the sentence as a question",
   "response":"?", # Ground truth
   "category": "Grammar"
}
```

**3. HuggingFace Completamento rapido**

Sono supportati sia i formati standard che quelli conversazionali.

```
# Standard

{
    "prompt" : "What is the symbol that ends the sentence as a question", # Query
    "completion" : "?" # Ground truth
}

# Conversational
{
    "prompt": [
        {
            "role": "user", # Query (looks for user role)
            "content": "What is the symbol that ends the sentence as a question"
        }
    ],
    "completion": [
        {
            "role": "assistant", # Ground truth (looks for assistant role)
            "content": "?"
        }
    ]
}
```

**4. HuggingFace Preferenza**

Support sia per il formato standard (stringa) che per il formato conversazionale (array di messaggi).

```
# Standard: {"prompt": "text", "chosen": "text", "rejected": "text"}
{
     "prompt" : "The sky is", # Query
     "chosen" : "blue", # Ground truth
     "rejected" : "green"
}

# Conversational:
{
    "prompt": [
        {
            "role": "user", # Query (looks for user role)
            "content": "What color is the sky?"
        }
    ],
    "chosen": [
        {
            "role": "assistant", # Ground truth (looks for assistant role)
            "content": "It is blue."
        }
    ],
    "rejected": [
        {
            "role": "assistant",
            "content": "It is green."
        }
    ]
}
```

**5. Formato Verl**

Il formato Verl (sia i formati attuali che quelli precedenti) è supportato per i casi d'uso del reinforcement learning. Documenti Verl come riferimento: [https://verl.readthedocs.io/en/latest/preparation/prepare\$1data.html](https://verl.readthedocs.io/en/latest/preparation/prepare_data.html)

Gli utenti del formato VERL in genere non forniscono una risposta di base. Se vuoi comunque fornirne una, usa uno dei campi `extra_info.answer` oppure`reward_model.ground_truth`; ha la `extra_info` precedenza.

SageMaker conserva i seguenti campi specifici di Verl come metadati, se presenti:
+ `id`
+ `data_source`
+ `ability`
+ `reward_model`
+ `extra_info`
+ `attributes`
+ `difficulty`

```
# Newest VERL format where `prompt` is an array of messages.
{
  "data_source": "openai/gsm8k",
  "prompt": [
    {
      "content": "You are a helpful math tutor who explains solutions to questions step-by-step.",
      "role": "system"
    },
    {
      "content": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? Let's think step by step and output the final answer after \"####\".",
      "role": "user"
    }
  ],
  "ability": "math",
  "extra_info": {
    "answer": "Natalia sold 48/2 = <<48/2=24>>24 clips in May.\nNatalia sold 48+24 = <<48+24=72>>72 clips altogether in April and May.\n#### 72",
    "index": 0,
    "question": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?",
    "split": "train"
  },
  "reward_model": {
    "ground_truth": "72" # Ignored in favor of extra_info.answer
  }
}

# Legacy VERL format where `prompt` is a string. Also supported.
{
  "data_source": "openai/gsm8k",
  "prompt": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? Let's think step by step and output the final answer after \"####\".",
  "extra_info": {
    "answer": "Natalia sold 48/2 = <<48/2=24>>24 clips in May.\nNatalia sold 48+24 = <<48+24=72>>72 clips altogether in April and May.\n#### 72",
    "index": 0,
    "question": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?",
    "split": "train"
  }
}
```

# Valuta con punteggi preimpostati e personalizzati
<a name="model-customize-evaluation-preset-custom-scorers"></a>

Quando si utilizza il tipo di valutazione Custom Scorer, SageMaker Evaluation supporta due scorer integrati (denominati anche «funzioni di ricompensa») Prime Math e Prime Code presi dalla libreria di formazione [volcengine/verl RL](https://github.com/volcengine/verl), o il proprio scorer personalizzato implementato come funzione Lambda.

## Scorer integrati
<a name="model-customize-evaluation-builtin-scorers"></a>

**Prime Math**

Prime Math Scorer si aspetta un set di dati JSONL personalizzato contenente una domanda di matematica e la prompt/query risposta corretta come verità fondamentale. Il set di dati può essere uno dei formati supportati menzionati in. [Formati di set di dati supportati per attività Bring-Your-Own-Dataset (BYOD)](model-customize-evaluation-dataset-formats.md)

Esempio di inserimento del set di dati (ampliato per maggiore chiarezza):

```
{
    "system":"You are a math expert: ",
    "query":"How many vertical asymptotes does the graph of $y=\\frac{2}{x^2+x-6}$ have?",
    "response":"2" # Ground truth aka correct answer
}
```

**Codice principale**

Il primo code scorer prevede un set di dati JSONL personalizzato di voci contenenti un problema di codifica e casi di test specificati nel campo. `metadata` Struttura i casi di test con il nome della funzione previsto per ogni voce, gli input di esempio e gli output previsti.

Esempio di inserimento del set di dati (ampliato per maggiore chiarezza):

```
{
    "system":"\\nWhen tackling complex reasoning tasks, you have access to the following actions. Use them as needed to progress through your thought process.\\n\\n[ASSESS]\\n\\n[ADVANCE]\\n\\n[VERIFY]\\n\\n[SIMPLIFY]\\n\\n[SYNTHESIZE]\\n\\n[PIVOT]\\n\\n[OUTPUT]\\n\\nYou should strictly follow the format below:\\n\\n[ACTION NAME]\\n\\n# Your action step 1\\n\\n# Your action step 2\\n\\n# Your action step 3\\n\\n...\\n\\nNext action: [NEXT ACTION NAME]\\n\\n",
    "query":"A number N is called a factorial number if it is the factorial of a positive integer. For example, the first few factorial numbers are 1, 2, 6, 24, 120,\\nGiven a number N, the task is to return the list/vector of the factorial numbers smaller than or equal to N.\\nExample 1:\\nInput: N = 3\\nOutput: 1 2\\nExplanation: The first factorial number is \\n1 which is less than equal to N. The second \\nnumber is 2 which is less than equal to N,\\nbut the third factorial number is 6 which \\nis greater than N. So we print only 1 and 2.\\nExample 2:\\nInput: N = 6\\nOutput: 1 2 6\\nExplanation: The first three factorial \\nnumbers are less than equal to N but \\nthe fourth factorial number 24 is \\ngreater than N. So we print only first \\nthree factorial numbers.\\nYour Task:  \\nYou don't need to read input or print anything. Your task is to complete the function factorialNumbers() which takes an integer N as an input parameter and return the list/vector of the factorial numbers smaller than or equal to N.\\nExpected Time Complexity: O(K), Where K is the number of factorial numbers.\\nExpected Auxiliary Space: O(1)\\nConstraints:\\n1<=N<=10^{18}\\n\\nWrite Python code to solve the problem. Present the code in \\n```python\\nYour code\\n```\\nat the end.",
    "response": "", # Dummy string for ground truth. Provide a value if you want NLP metrics like ROUGE, BLEU, and F1.
    ### Define test cases in metadata field
    "metadata": {
        "fn_name": "factorialNumbers",
        "inputs": ["5"],
        "outputs": ["[1, 2]"]
    }
}
```

## Scorer personalizzati (Bring Your Own Metrics)
<a name="model-customize-evaluation-custom-scorers-byom"></a>

Personalizza completamente il flusso di lavoro di valutazione del modello con una logica di post-elaborazione personalizzata che ti consente di calcolare metriche personalizzate su misura per le tue esigenze. È necessario implementare lo scorer personalizzato come una funzione AWS Lambda che accetta le risposte del modello e restituisce punteggi di ricompensa.

### Esempio di payload di ingresso Lambda
<a name="model-customize-evaluation-custom-scorers-lambda-input"></a>

La tua AWS Lambda personalizzata prevede input nel formato OpenAI. Esempio:

```
{
    "id": "123",
    "messages": [
        {
            "role": "user",
            "content": "Do you have a dedicated security team?"
        },
        {
            "role": "assistant",
            "content": "As an AI developed by Amazon, I do not have a dedicated security team..."
        }
    ],
    "reference_answer": {
        "compliant": "No",
        "explanation": "As an AI developed by Company, I do not have a traditional security team..."
    }
}
```

### Esempio di payload di uscita Lambda
<a name="model-customize-evaluation-custom-scorers-lambda-output"></a>

Il contenitore di SageMaker valutazione si aspetta che le risposte Lambda seguano questo formato:

```
{
    "id": str,                              # Same id as input sample
    "aggregate_reward_score": float,        # Overall score for the sample
    "metrics_list": [                       # OPTIONAL: Component scores
        {
            "name": str,                    # Name of the component score
            "value": float,                 # Value of the component score
            "type": str                     # "Reward" or "Metric"
        }
    ]
}
```

### Definizione Lambda personalizzata
<a name="model-customize-evaluation-custom-scorers-lambda-definition"></a>

[Trova un esempio di scorer personalizzato completamente implementato con input di esempio e output previsto su: - .html\$1 -example https://docs.aws.amazon.com/sagemaker/ latest/dg/nova implementing-reward-functions nova-reward-llm-judge](https://docs.aws.amazon.com/sagemaker/latest/dg/nova-implementing-reward-functions.html#nova-reward-llm-judge-example)

Utilizzate lo scheletro seguente come punto di partenza per la vostra funzione.

```
def lambda_handler(event, context):
    return lambda_grader(event)

def lambda_grader(samples: list[dict]) -> list[dict]:
    """
    Args:
        Samples: List of dictionaries in OpenAI format
            
        Example input:
        {
            "id": "123",
            "messages": [
                {
                    "role": "user",
                    "content": "Do you have a dedicated security team?"
                },
                {
                    "role": "assistant",
                    "content": "As an AI developed by Company, I do not have a dedicated security team..."
                }
            ],
            # This section is the same as your training dataset
            "reference_answer": {
                "compliant": "No",
                "explanation": "As an AI developed by Company, I do not have a traditional security team..."
            }
        }
        
    Returns:
        List of dictionaries with reward scores:
        {
            "id": str,                              # Same id as input sample
            "aggregate_reward_score": float,        # Overall score for the sample
            "metrics_list": [                       # OPTIONAL: Component scores
                {
                    "name": str,                    # Name of the component score
                    "value": float,                 # Value of the component score
                    "type": str                     # "Reward" or "Metric"
                }
            ]
        }
    """
```

### Campi di input e output
<a name="model-customize-evaluation-custom-scorers-fields"></a>

**Campi di input**


| Campo | Description | Note aggiuntive | 
| --- | --- | --- | 
| id | Identificatore univoco per il campione | Ripreso in uscita. Formato delle stringhe | 
| messages | Cronologia chat ordinata in formato OpenAI | Matrice di oggetti di messaggio | 
| messages [] .role | Relatore del messaggio | Valori comuni: «utente», «assistente», «sistema» | 
| messaggi [] .content | Contenuto testuale del messaggio | Stringa normale | 
| metadati | Informazioni in formato libero per facilitare la valutazione | Oggetto; campi opzionali trasmessi dai dati di addestramento | 

**Campi di output**


**Campi di output**  

| Campo | Description | Note aggiuntive | 
| --- | --- | --- | 
| id | Stesso identificatore del campione di input | Deve corrispondere all'input | 
| aggregate\$1reward\$1score | Punteggio complessivo del campione | Float (ad esempio, 0,0—1,0 o intervallo definito dall'attività) | 
| metrics\$1list | Punteggi dei componenti che compongono l'aggregato | Matrice di oggetti metrici | 

### Autorizzazioni richieste
<a name="model-customize-evaluation-custom-scorers-permissions"></a>

Assicurati che il ruolo di SageMaker esecuzione che usi per eseguire la valutazione disponga delle autorizzazioni AWS Lambda.

```
{
    "Version": "2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "lambda:InvokeFunction"
            ],
            "Resource": "arn:aws:lambda:region:account-id:function:function-name"
        }
    ]
}
```

Assicurati che il ruolo di esecuzione della tua funzione AWS Lambda disponga delle autorizzazioni di esecuzione Lambda di base, oltre alle autorizzazioni aggiuntive che potresti richiedere per qualsiasi chiamata downstream. AWS 

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "logs:CreateLogGroup",
        "logs:CreateLogStream",
        "logs:PutLogEvents"
      ],
      "Resource": "arn:aws:logs:*:*:*"
    }
  ]
}
```

# Implementazione di modelli
<a name="model-customize-open-weight-deployment"></a>

Dalla pagina dei dettagli dei modelli personalizzati puoi anche distribuire il tuo modello personalizzato utilizzando gli endpoint SageMaker AI Inference o Amazon Bedrock.

![\[Un'immagine contenente una selezione di tecniche di personalizzazione del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/screenshot-open-model-1.png)


# Set di dati e valutatori di esempio
<a name="model-customize-open-weight-samples"></a>

## Fine tuning supervisionato (SFT)
<a name="model-customize-open-weight-samples-sft"></a>
+ Nome: TAT-QA
+ Licenza: CC-BY-4.0
+ [Collegamento: https://huggingface. co/datasets/next-tat/TAT-QA](https://huggingface.co/datasets/next-tat/TAT-QA)
+ Preelaborazione - Formattazione

**Un esempio**

```
{
    "prompt": "Given a table and relevant text descriptions, answer the following question.\n\nTable:\n<table border=\"1\" class=\"dataframe\">\n  <tbody>\n    <tr>\n      <td></td>\n      <td>2019</td>\n      <td>2018</td>\n    </tr>\n    <tr>\n      <td></td>\n      <td>$'000</td>\n      <td>$'000</td>\n    </tr>\n    <tr>\n      <td>Revenue from external customers</td>\n      <td></td>\n      <td></td>\n    </tr>\n    <tr>\n      <td>Australia</td>\n      <td>144,621</td>\n      <td>129,431</td>\n    </tr>\n    <tr>\n      <td>New Zealand</td>\n      <td>13,036</td>\n      <td>8,912</td>\n    </tr>\n    <tr>\n      <td>Total</td>\n      <td>157,657</td>\n      <td>138,343</td>\n    </tr>\n  </tbody>\n</table>\n\nParagraphs:\n    4. SEGMENT INFORMATION\n\n    During the 2019 and 2018 financial years, the Group operated wholly within one business segment being the operation and management of storage centres in Australia and New Zealand.\n\n    The Managing Director is the Group\u2019s chief operating decision maker and monitors the operating results on a portfolio wide basis. Monthly management reports are evaluated based upon the overall performance of NSR consistent with the presentation within the consolidated financial statements. The Group\u2019s financing (including finance costs and finance income) are managed on a Group basis and not allocated to operating segments.\n\n    The operating results presented in the statement of profit or loss represent the same segment information as reported in internal management information.\n\n    The revenue information above excludes interest income and is based on the location of storage centres.\n\nQuestion: How many business segments were present in 2019 and 2018?\n\nAnswer:",
    "completion": "one",
    "data_idx": "2951"
}
```

## Ottimizzazione diretta delle preferenze (DPO)
<a name="model-customize-open-weight-samples-dpo"></a>
+ Nome: Ultrafeedback
+ Licenza: MIT
+ Link: [https://huggingface. co/datasets/openbmb/UltraFeedback](https://huggingface.co/datasets/openbmb/UltraFeedback)
+ Fasi di preelaborazione: formattazione e sottocampionamento.

**Un campione**

```
{
    "source": "evol_instruct",
    "prompt": "Can you write a C++ program that prompts the user to enter the name of a country and checks if it borders the Mediterranean Sea? Here's some starter code to help you out:\n#include <iostream>\n#include <string>\nusing namespace std;\nint main() {\n    string country;\n    // prompt user for input\n    cout << \"Enter the name of a country: \";\n    cin >> country;\n    // check if country borders the Mediterranean Sea\n    // [C++ code]\n    return 0;\n}",
    "chosen": "Here's a C++ program that prompts the user to enter the name of a country and checks if it borders the Mediterranean Sea:\n\n#include <iostream>\n#include <string>\n#include <set>\n#include <map>\n#include <algorithm>\n\nusing namespace std;\n\nint main() {\n    // store countries and their bordering seas in a map\n    map<string, set<string>> countries;\n    countries[\"Algeria\"] = {\"Mediterranean Sea\", \"North African Coast\"};\n    countries[\"France\"] = {\"Mediterranean Sea\", \"English Channel\"};\n    countries[\"Italy\"] = {\"Mediterranean Sea\", \"Adriatic Sea\"};\n    countries[\"Malta\"] = {\"Mediterranean Sea\", \"North African Coast\"};\n    countries[\"Spain\"] = {\"Mediterranean Sea\", \"Atlantic Ocean\"};\n    countries[\"Tunisia\"] = {\"Mediterranean Sea\", \"North African Coast\"};\n\n    string country;\n    cout << \"Enter the name of a country: \";\n    cin >> country;\n\n    // check if country is in the map\n    if (countries.find(country)!= countries.end()) {\n        // check if country borders the Mediterranean Sea\n        set<string> borders = countries.at(country);\n        if (borders.find(\"Mediterranean Sea\")!= borders.end()) {\n            cout << country << \" borders the Mediterranean Sea.\" << endl;\n        } else {\n            cout << country << \" does not border the Mediterranean Sea.\" << endl;\n        }\n    } else {\n        cout << country << \" is not a recognized country.\" << endl;\n    }\n\n    return 0;\n}\n\nIn this program, we first define a map called countries that stores each country's name as a key and a set of its surrounding seas as the value. We use a set to store each sea name so that we can easily check if a country borders a certain sea.\n\nWe then present the user with a prompt to enter the name of a country. We use a while loop to ensure that the user enters a valid country name. We check if the country is in the map, and if so, we retrieve its bordering seas from the map.\n\nFinally, we check if the Mediterranean Sea is among the set of borders. If it is, we inform the user that the country borders the Mediterranean Sea. If not, we inform the user that the country does not border the Mediterranean Sea.",
    "chosen-rating": 5.0,
    "chosen-model": "starchat",
    "rejected": "Sure, here is the program using the C++11 algorithm \"cds::algorithm::GreaterEqual\":\n#include <iostream>\n#include <string>\n#include <algorithm>\n#include <vector>\n#include <cctype>\n\nusing namespace std;\n\nint main() {\n    string country;\n    cout << \"Enter the name of a country: \";\n    cin >> country;\n    std::vector<string> vec;\n    vec.push_back(country);\n    size_t index = std::find_if(vec.begin(), vec.end(), [](const string& s) {\n        return std::any_of(s.begin(), s.end(), [](const char& c) {\n            return c == '}}';\n    });\n    if (index != vec.end()) {\n        if ((*index)[0] == 'M') {\n            cout << \"Country is bordered by the Mediterranean Sea.\" << endl;\n        } else {\n            cout << \"Country does not border the Mediterranean Sea.\" << endl;\n        }\n    } else {\n        cout << \"Country is not found.\" << endl;\n    }\n    return 0;\n}",
    "rejected-rating": 1.25,
    "rejected-model": "pythia-12b"
}
```

## Apprendimento per rinforzo basato sul feedback dell'intelligenza artificiale (RLAIF) - Giudizio a coppie
<a name="model-customize-open-weight-samples-rlaif"></a>

**Set di dati di input**

[Set di dati di origine: PandALM https://github.com/WeOpenML/](https://github.com/WeOpenML/PandaLM)

**Un campione**

```
{
    "data_source": "WeOpenML/PandaLM",
    "prompt": [
        {
            "role": "user",
            "content": "Below are two responses for a given task. The task is defined by the Instruction with an Input that provides further context. Evaluate the responses and generate a reference answer for the task.\n\n
            ### Instruction:\nCompare the given products.\n\n### Input:\niPhone 11 and Google Pixel 4\n\n
            ### Response 1:\nThe iPhone 11 has a larger screen size and a longer battery life than the Google Pixel 4.\n\n
            ### Response 2:\nThe iPhone 11 and Google Pixel 4 are both flagship smartphones released in 2018. The iPhone 11 has a 6.1-inch LCD display, while the Google Pixel 4 has a 5.7-inch OLED display. The iPhone 11 has an A13 Bionic chipset, while the Google Pixel 4 has a Qualcomm Snapdragon 845 chipset. The iPhone 11 has a dual-camera system, while the Google Pixel 4 has a single camera system. The iPhone 11 has a longer battery life, while the Google Pixel 4 has a faster processor.\n\n### Evaluation:\n"
        }
    ],
    "ability": "pairwise-judging",
    "reward_model": {
        "style": "llmj",
        "ground_truth": "2\n\n### Reason: Response 2 provides a more detailed and comprehensive comparison of the two products, including their specifications and features. Response 1 only mentions two aspects of the products and does not provide as much information.\n\n### Reference: The iPhone 11 and Google Pixel 4 are both flagship smartphones released in 2018. The iPhone 11 has a 6.1-inch LCD display, while the Google Pixel 4 has a 5.7-inch OLED display. The iPhone 11 has an A13 Bionic chipset, while the Google Pixel 4 has a Qualcomm Snapdragon 845 chipset. The iPhone 11 has a dual-camera system, while the Google Pixel 4 has a single camera system. The iPhone 11 has a longer battery life, while the Google Pixel 4 has a faster processor."
    },
    "extra_info": {
        "split": "train",
        "index": 0,
        "raw_output_sequence": "2\n\n### Reason: Response 2 provides a more detailed and comprehensive comparison of the two products, including their specifications and features. Response 1 only mentions two aspects of the products and does not provide as much information.\n\n### Reference: The iPhone 11 and Google Pixel 4 are both flagship smartphones released in 2018. The iPhone 11 has a 6.1-inch LCD display, while the Google Pixel 4 has a 5.7-inch OLED display. The iPhone 11 has an A13 Bionic chipset, while the Google Pixel 4 has a Qualcomm Snapdragon 845 chipset. The iPhone 11 has a dual-camera system, while the Google Pixel 4 has a single camera system. The iPhone 11 has a longer battery life, while the Google Pixel 4 has a faster processor.\n",
        "llmj": {
            "question": "Below are two responses for a given task. The task is defined by the Instruction with an Input that provides further context. Evaluate the responses and generate a reference answer for the task.\n\n### Instruction:\nCompare the given products.\n\n### Input:\niPhone 11 and Google Pixel 4\n\n### Response 1:\nThe iPhone 11 has a larger screen size and a longer battery life than the Google Pixel 4.\n\n### Response 2:\nThe iPhone 11 and Google Pixel 4 are both flagship smartphones released in 2018. The iPhone 11 has a 6.1-inch LCD display, while the Google Pixel 4 has a 5.7-inch OLED display. The iPhone 11 has an A13 Bionic chipset, while the Google Pixel 4 has a Qualcomm Snapdragon 845 chipset. The iPhone 11 has a dual-camera system, while the Google Pixel 4 has a single camera system. The iPhone 11 has a longer battery life, while the Google Pixel 4 has a faster processor.\n\n### Evaluation:\n",
            "ground_truth": "2\n\n### Reason: Response 2 provides a more detailed and comprehensive comparison of the two products, including their specifications and features. Response 1 only mentions two aspects of the products and does not provide as much information.\n\n### Reference: The iPhone 11 and Google Pixel 4 are both flagship smartphones released in 2018. The iPhone 11 has a 6.1-inch LCD display, while the Google Pixel 4 has a 5.7-inch OLED display. The iPhone 11 has an A13 Bionic chipset, while the Google Pixel 4 has a Qualcomm Snapdragon 845 chipset. The iPhone 11 has a dual-camera system, while the Google Pixel 4 has a single camera system. The iPhone 11 has a longer battery life, while the Google Pixel 4 has a faster processor.",
            "document_in_context": null
        },
        "sample_size": 1980
    }
}
```

## RLAIF - Catena di pensiero
<a name="model-customize-open-weight-samples-rlaif2"></a>

**Set di dati di input**

Dati di origine: [https://huggingface. co/datasets/thesven/gsm8k-reasoning/tree/main/data](https://huggingface.co/datasets/thesven/gsm8k-reasoning/tree/main/data)

**Un campione**

```
{
    "data_source": "openai/gsm8k",
    "prompt": [
        {
            "role": "system",
            "content": "\nYou are an AI assistant that uses a Chain of Thought (CoT) approach with reflection to answer queries.\n\nFollow these steps:\n- Think through the problem step by step within the ‹thinking> tags.\n- Reflect on your thinking\n\nto check for any errors or improvements within the ‹reflection› tags.\n- Make any necessary adjustments based on your reflection.\n- Provide your final, concise answer within the ‹output> tags.\n\nImportant: The <thinking> and ‹reflection› sections are for your internal reasoning process only.\nDo not include any part of the final answer in these sections.\nThe actual response to the query must be entirely contained within the ‹output› tags.\n\nUse the following format for your response:\n<thinking>\n[Your initial thought process goes here]\n</thinking›\n\n<reasoning>\n[Your step-by-step reasoning goes here. This is your internal thought process, not the final answer. You can create as many reasoning steps as necessary in your process.]\n</reasoning>\n\n‹reflection>\n[Your reflection on your reasoning, checking for errors or improvements. You can create as many reflection steps as necessary in your process.]\n</ reflection>\n\n<adjustment>\n[Any adjustments to your thinking based on your reflection]\n</adjustment>\n\n<output>\n[Your final, concise answer to the query. This is the only part that will be shown to the user.]\n</output>\n"
        },
        {
            "role": "user",
            "content": "A craft store makes a third of its sales in the fabric section, a quarter of its sales in the jewelry section, and the rest in the stationery section. They made 36 sales today. How many sales were in the stationery section?"
        }
    ],
    "ability": "chain-of-thought",
    "reward_model": {
        "style": "llmj-cot",
        "ground_truth": "Thus, there were 36 - 12 - 9 = <<36-12-9=15>>15 sales in the stationery section."
    },
    "extra_info": {
        "split": "train",
        "index": 0,
        "question": "A craft store makes a third of its sales in the fabric section, a quarter of its sales in the jewelry section, and the rest in the stationery section. They made 36 sales today. How many sales were in the stationery section?",
        "short_answer": "15",
        "model_output": "<thinking>\nTo find the number of sales in the stationery section, I need to first calculate the number of sales in the fabric and jewelry sections. The store makes a third of its sales in the fabric section, which is 1/3 of 36 sales. I can calculate this as 36 * 1/3 = 12 sales in the fabric section. The store makes a quarter of its sales in the jewelry section, which is 1/4 of 36 sales. I can calculate this as 36 * 1/4 = 9 sales in the jewelry section. Since the rest of the sales are in the stationery section, I can subtract the sales from the other two sections from the total number of sales to find the number of sales in the stationery section.\n</thinking>\n\n<reasoning>\n1. Calculate the number of sales in the fabric section: 36 * 1/3 = 12\n2. Calculate the number of sales in the jewelry section: 36 * 1/4 = 9\n3. Calculate the number of sales in the stationery section: 36 - 12 - 9 = 15\n</reasoning>\n\n‹reflection>\nUpon reviewing my reasoning, I noticed that my calculations seem correct, but I should ensure that I understand the question correctly. The question asks for the number of sales in the stationery section, and I believe I have correctly calculated that. However, I should double-check my math to make sure it's accurate.\n</reflection>\n\n<adjustment>\nUpon re-examining my math, I am confident that my calculations are correct. The fabric section makes up 1/3 of the sales, the jewelry section makes up 1/4, and the rest is the stationery section. My math checks out, and I am confident in my answer.\n</adjustment>\n\n<output>\n15\n</output>"
    }
}
```

## RAIF - Fedeltà
<a name="model-customize-open-weight-samples-rlaif3"></a>

**Set di dati di input**

Fonte: [https://huggingface. co/datasets/rajpurkar/squad\$1v2/blob/main/squad\$1v2/train-00000-di-00001.parquet](https://huggingface.co/datasets/rajpurkar/squad_v2/blob/main/squad_v2/train-00000-of-00001.parquet)

**Un campione**

```
{
    "data_source": "squad_v2",
    "prompt": [
        {
            "role": "system",
            "content": "You are a helpful assistant that answers questions based on the provided context. Only use information from the context."
        },
        {
            "role": "user",
            "content": "Context: Beyoncé Giselle Knowles-Carter (/biːˈjɒnseɪ/ bee-YON-say) (born September 4, 1981) is an American singer, songwriter, record producer and actress. Born and raised in Houston, Texas, she performed in various singing and dancing competitions as a child, and rose to fame in the late 1990s as lead singer of R&B girl-group Destiny's Child. Managed by her father, Mathew Knowles, the group became one of the world's best-selling girl groups of all time. Their hiatus saw the release of Beyoncé's debut album, Dangerously in Love (2003), which established her as a solo artist worldwide, earned five Grammy Awards and featured the Billboard Hot 100 number-one singles \"Crazy in Love\" and \"Baby Boy\".\n\nQuestion: When did Beyonce start becoming popular?"
        }
    ],
    "ability": "faithfulness",
    "reward_model": {
        "style": "llmj-faithfulness",
        "ground_truth": "Beyoncé Giselle Knowles-Carter (/biːˈjɒnseɪ/ bee-YON-say) (born September 4, 1981) is an American singer, songwriter, record producer and actress. Born and raised in Houston, Texas, she performed in various singing and dancing competitions as a child, and rose to fame in the late 1990s as lead singer of R&B girl-group Destiny's Child. Managed by her father, Mathew Knowles, the group became one of the world's best-selling girl groups of all time. Their hiatus saw the release of Beyoncé's debut album, Dangerously in Love (2003), which established her as a solo artist worldwide, earned five Grammy Awards and featured the Billboard Hot 100 number-one singles \"Crazy in Love\" and \"Baby Boy\"."
    },
    "extra_info": {
        "question": "When did Beyonce start becoming popular?",
        "split": "train",
        "index": 0
    }
}
```

## RLAIF - Riepilogo
<a name="model-customize-open-weight-samples-rlaif4"></a>

**Set di dati di input**

[Fonte: set di dati gsm8k pulito https://huggingface. co/datasets/thesven/gsm8k-reasoning/tree/main/data](https://huggingface.co/datasets/thesven/gsm8k-reasoning/tree/main/data)

**Un campione**

```
{
    "data_source": "cnn_dailymail",
    "prompt": [
        {
            "role": "system",
            "content": "You are a helpful assistant that creates concise, accurate summaries of news articles. Focus on the key facts and main points."
        },
        {
            "role": "user",
            "content": "Summarize the following article:\n\nLONDON, England (Reuters) -- Harry Potter star Daniel Radcliffe gains access to a reported £20 million ($41.1 million) fortune as he turns 18 on Monday, but he insists the money won't cast a spell on him. Daniel Radcliffe as Harry Potter in \"Harry Potter and the Order of the Phoenix\" To the disappointment of gossip columnists around the world, the young actor says he has no plans to fritter his cash away on fast cars, drink and celebrity parties. \"I don't plan to be one of those people who, as soon as they turn 18, suddenly buy themselves a massive sports car collection or something similar,\" he told an Australian interviewer earlier this month. \"I don't think I'll be particularly extravagant. \"The things I like buying are things that cost about 10 pounds -- books and CDs and DVDs.\" At 18, Radcliffe will be able to gamble in a casino, buy a drink in a pub or see the horror film \"Hostel: Part II,\" currently six places below his number one movie on the UK box office chart. Details of how he'll mark his landmark birthday are under wraps. His agent and publicist had no comment on his plans. \"I'll definitely have some sort of party,\" he said in an interview. \"Hopefully none of you will be reading about it.\" Radcliffe's earnings from the first five Potter films have been held in a trust fund which he has not been able to touch. Despite his growing fame and riches, the actor says he is keeping his feet firmly on the ground. \"People are always looking to say 'kid star goes off the rails,'\" he told reporters last month. \"But I try very hard not to go that way because it would be too easy for them.\" His latest outing as the boy wizard in \"Harry Potter and the Order of the Phoenix\" is breaking records on both sides of the Atlantic and he will reprise the role in the last two films.  Watch I-Reporter give her review of Potter's latest » . There is life beyond Potter, however. The Londoner has filmed a TV movie called \"My Boy Jack,\" about author Rudyard Kipling and his son, due for release later this year. He will also appear in \"December Boys,\" an Australian film about four boys who escape an orphanage. Earlier this year, he made his stage debut playing a tortured teenager in Peter Shaffer's \"Equus.\" Meanwhile, he is braced for even closer media scrutiny now that he's legally an adult: \"I just think I'm going to be more sort of fair game,\" he told Reuters. E-mail to a friend . Copyright 2007 Reuters. All rights reserved.This material may not be published, broadcast, rewritten, or redistributed."
        }
    ],
    "ability": "summarization",
    "reward_model": {
        "style": "llmj-summarization",
        "ground_truth": "Harry Potter star Daniel Radcliffe gets £20M fortune as he turns 18 Monday .\nYoung actor says he has no plans to fritter his cash away .\nRadcliffe's earnings from first five Potter films have been held in trust fund ."
    },
    "extra_info": {
        "question": "LONDON, England (Reuters) -- Harry Potter star Daniel Radcliffe gains access to a reported £20 million ($41.1 million) fortune as he turns 18 on Monday, but he insists the money won't cast a spell on him. Daniel Radcliffe as Harry Potter in \"Harry Potter and the Order of the Phoenix\" To the disappointment of gossip columnists around the world, the young actor says he has no plans to fritter his cash away on fast cars, drink and celebrity parties. \"I don't plan to be one of those people who, as soon as they turn 18, suddenly buy themselves a massive sports car collection or something similar,\" he told an Australian interviewer earlier this month. \"I don't think I'll be particularly extravagant. \"The things I like buying are things that cost about 10 pounds -- books and CDs and DVDs.\" At 18, Radcliffe will be able to gamble in a casino, buy a drink in a pub or see the horror film \"Hostel: Part II,\" currently six places below his number one movie on the UK box office chart. Details of how he'll mark his landmark birthday are under wraps. His agent and publicist had no comment on his plans. \"I'll definitely have some sort of party,\" he said in an interview. \"Hopefully none of you will be reading about it.\" Radcliffe's earnings from the first five Potter films have been held in a trust fund which he has not been able to touch. Despite his growing fame and riches, the actor says he is keeping his feet firmly on the ground. \"People are always looking to say 'kid star goes off the rails,'\" he told reporters last month. \"But I try very hard not to go that way because it would be too easy for them.\" His latest outing as the boy wizard in \"Harry Potter and the Order of the Phoenix\" is breaking records on both sides of the Atlantic and he will reprise the role in the last two films.  Watch I-Reporter give her review of Potter's latest » . There is life beyond Potter, however. The Londoner has filmed a TV movie called \"My Boy Jack,\" about author Rudyard Kipling and his son, due for release later this year. He will also appear in \"December Boys,\" an Australian film about four boys who escape an orphanage. Earlier this year, he made his stage debut playing a tortured teenager in Peter Shaffer's \"Equus.\" Meanwhile, he is braced for even closer media scrutiny now that he's legally an adult: \"I just think I'm going to be more sort of fair game,\" he told Reuters. E-mail to a friend . Copyright 2007 Reuters. All rights reserved.This material may not be published, broadcast, rewritten, or redistributed.",
        "split": "train",
        "index": 0,
        "source_id": "42c027e4ff9730fbb3de84c1af0d2c50"
    }
}
```

## RLAIF - Richiesta personalizzata
<a name="model-customize-open-weight-samples-rlaif5"></a>

In questo esempio, parliamo di come un prompt jinja personalizzato può sostituire uno dei prompt preimpostati. [RLAIF - Catena di pensiero](#model-customize-open-weight-samples-rlaif2)

**Di seguito è riportato un esempio di prompt personalizzato per CoT:**

```
You are an expert logical reasoning evaluator specializing in Chain-of-Thought (CoT) analysis. 

Given: A problem prompt and a model's reasoning-based response. 

Goal: Assess the quality and structure of logical reasoning, especially for specialized domains (law, medicine, finance, etc.).

Scoring rubric (start at 0.0, then add or subtract):

Core Components:

Structural Completeness (0.3 max)
- Clear problem statement: +0.05
- Defined variables/terminology: +0.05
- Organized given information: +0.05
- Explicit proof target: +0.05
- Step-by-step reasoning: +0.05
- Clear conclusion: +0.05

Logical Quality (0.4 max)
- Valid logical flow: +0.1
- Proper use of if-then relationships: +0.1
- Correct application of domain principles: +0.1
- No logical fallacies: +0.1

Technical Accuracy (0.3 max)
- Correct use of domain terminology: +0.1
- Accurate application of domain rules: +0.1
- Proper citation of relevant principles: +0.1

Critical Deductions:
A. Invalid logical leap: -0.3
B. Missing critical steps: -0.2
C. Incorrect domain application: -0.2
D. Unclear/ambiguous reasoning: -0.1

Additional Instructions:
- Verify domain-specific terminology and principles
- Check for logical consistency throughout
- Ensure conclusions follow from premises
- Flag potential domain-specific compliance issues
- Consider regulatory/professional standards where applicable

Return EXACTLY this JSON (no extra text):
{
    "score": <numerical score 0.0-1.0>,
    "component_scores": {
        "structural_completeness": <score>,
        "logical_quality": <score>,
        "technical_accuracy": <score>
    },
    "steps_present": {
        "problem_statement": <true/false>,
        "variable_definitions": <true/false>,
        "given_information": <true/false>,
        "proof_target": <true/false>,
        "step_reasoning": <true/false>,
        "conclusion": <true/false>
    },
    "reasoning": "<explain scoring decisions and identify any logical gaps>",
    "domain_flags": ["<any domain-specific concerns or compliance issues>"]
}

### (Prompt field from dataset)
Problem Prompt: {{ prompt }}

Model's Response: {{ model_output }}

### Ground truth (if applicable):
{{ ground_truth }}
```

## Apprendimento per rinforzo con Verifiable Rewards (RLVR) - Exact Match
<a name="model-customize-open-weight-samples-RLVR"></a>

**Set di dati di input**

Fonte: [https://huggingface. co/datasets/openai/gsm8k](https://huggingface.co/datasets/openai/gsm8k)

**Esempio**

```
{
  "data_source": "openai/gsm8k",
  "prompt": [
    {
      "content": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May? Let\'s think step by step and output the final answer after \\"####\\".",
      "role": "user"
    }
  ],
  "ability": "math",
  "reward_model": {
    "ground_truth": "72",
    "style": "rule"
  },
  "extra_info": {
    "answer": "Natalia sold 48\\/2 = <<48\\/2=24>>24 clips in May.\\nNatalia sold 48+24 = <<48+24=72>>72 clips altogether in April and May.\\n#### 72",
    "index": 0,
    "question": "Natalia sold clips to 48 of her friends in April, and then she sold half as many clips in May. How many clips did Natalia sell altogether in April and May?",
    "split": "train"
  }
}
```

## RLVR - Esecuzione del codice
<a name="model-customize-open-weight-samples-RLVR2"></a>

**Set di dati di input**

Fonte: [https://huggingface. co/datasets/open-r1/codeforces](https://huggingface.co/datasets/open-r1/codeforces)

**Esempio**

```
{
  "data_source": "codeforces",
  "prompt": [
    {
      "content": "\nWhen tackling complex reasoning tasks, you have access to the following actions. Use them as needed to progress through your thought process.\n\n[ASSESS]\n\n[ADVANCE]\n\n[VERIFY]\n\n[SIMPLIFY]\n\n[SYNTHESIZE]\n\n[PIVOT]\n\n[OUTPUT]\n\nYou should strictly follow the format below:\n\n[ACTION NAME]\n\n# Your action step 1\n\n# Your action step 2\n\n# Your action step 3\n\n...\n\nNext action: [NEXT ACTION NAME]\n\n",
      "role": "system"
    },
    {
      "content": "Title: Zebras\n\nTime Limit: None seconds\n\nMemory Limit: None megabytes\n\nProblem Description:\nOleg writes down the history of the days he lived. For each day he decides if it was good or bad. Oleg calls a non-empty sequence of days a zebra, if it starts with a bad day, ends with a bad day, and good and bad days are alternating in it. Let us denote bad days as 0 and good days as 1. Then, for example, sequences of days 0, 010, 01010 are zebras, while sequences 1, 0110, 0101 are not.\n\nOleg tells you the story of days he lived in chronological order in form of string consisting of 0 and 1. Now you are interested if it is possible to divide Oleg's life history into several subsequences, each of which is a zebra, and the way it can be done. Each day must belong to exactly one of the subsequences. For each of the subsequences, days forming it must be ordered chronologically. Note that subsequence does not have to be a group of consecutive days.\n\nInput Specification:\nIn the only line of input data there is a non-empty string *s* consisting of characters 0 and 1, which describes the history of Oleg's life. Its length (denoted as |*s*|) does not exceed 200<=000 characters.\n\nOutput Specification:\nIf there is a way to divide history into zebra subsequences, in the first line of output you should print an integer *k* (1<=\u2264<=*k*<=\u2264<=|*s*|), the resulting number of subsequences. In the *i*-th of following *k* lines first print the integer *l**i* (1<=\u2264<=*l**i*<=\u2264<=|*s*|), which is the length of the *i*-th subsequence, and then *l**i* indices of days forming the subsequence. Indices must follow in ascending order. Days are numbered starting from 1. Each index from 1 to *n* must belong to exactly one subsequence. If there is no way to divide day history into zebra subsequences, print -1.\n\nSubsequences may be printed in any order. If there are several solutions, you may print any of them. You do not have to minimize nor maximize the value of *k*.\n\nDemo Input:\n['0010100\\n', '111\\n']\n\nDemo Output:\n['3\\n3 1 3 4\\n3 2 5 6\\n1 7\\n', '-1\\n']\n\nNote:\nnone\n\nWrite Python code to solve the problem. Present the code in \n```python\nYour code\n```\nat the end.",
      "role": "user"
    }
  ],
  "ability": "code",
  "reward_model": {
    "ground_truth": "{\"inputs\": [\"0010100\", \"111\", \"0\", \"1\", \"0101010101\", \"010100001\", \"000111000\", \"0101001000\", \"0000001000\", \"0101\", \"000101110\", \"010101010\", \"0101001010\", \"0100101100\", \"0110100000\", \"0000000000\", \"1111111111\", \"0010101100\", \"1010000\", \"0001110\", \"0000000000011001100011110101000101000010010111000100110110000011010011110110001100100001001001010010\", \"01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010\", \"0010011100000000\"], \"outputs\": [\"3\\n1 1\\n5 2 3 4 5 6\\n1 7\", \"-1\", \"1\\n1 1\", \"-1\", \"-1\", \"-1\", \"3\\n3 1 6 7\\n3 2 5 8\\n3 3 4 9\", \"4\\n5 1 2 3 4 5\\n3 6 7 8\\n1 9\\n1 10\", \"8\\n1 1\\n1 2\\n1 3\\n1 4\\n1 5\\n3 6 7 8\\n1 9\\n1 10\", \"-1\", \"-1\", \"1\\n9 1 2 3 4 5 6 7 8 9\", \"2\\n5 1 2 3 4 5\\n5 6 7 8 9 10\", \"2\\n5 1 2 3 8 9\\n5 4 5 6 7 10\", \"-1\", \"10\\n1 1\\n1 2\\n1 3\\n1 4\\n1 5\\n1 6\\n1 7\\n1 8\\n1 9\\n1 10\", \"-1\", \"2\\n3 1 8 9\\n7 2 3 4 5 6 7 10\", \"-1\", \"-1\", \"22\\n1 1\\n1 2\\n1 3\\n1 4\\n1 5\\n1 6\\n1 7\\n1 8\\n7 9 24 25 26 27 28 29\\n7 10 13 14 17 18 23 30\\n11 11 12 15 16 19 22 31 32 33 34 35\\n3 20 21 36\\n3 37 46 47\\n9 38 39 40 45 48 57 58 75 76\\n17 41 42 43 44 49 50 51 54 55 56 59 72 73 74 77 80 81\\n9 52 53 60 71 78 79 82 83 84\\n7 61 64 65 66 67 70 85\\n5 62 63 68 69 86\\n3 87 88 89\\n3 90 91 92\\n5 93 94 95 96 97\\n3 98 99 100\", \"1\\n245 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 ...\", \"8\\n3 1 8 9\\n5 2 3 4 7 10\\n3 5 6 11\\n1 12\\n1 13\\n1 14\\n1 15\\n1 16\"]}",
    "style": "rule"
  },
  "extra_info": {
    "index": 49,
    "split": "train"
  }
}
```

**Funzione di ricompensa**

Funzione di ricompensa: [https://github.com/volcengine/verl/tree/main/verl/utils/reward\$1score/prime\$1code](https://github.com/volcengine/verl/tree/main/verl/utils/reward_score/prime_code)

## RLVR - Risposta matematica
<a name="model-customize-open-weight-samples-RLVR3"></a>

**Set di dati di input**

[Fonte: set di dati gsm8k pulito https://huggingface. co/datasets/thesven/gsm8k-reasoning/tree/main/data](https://huggingface.co/datasets/thesven/gsm8k-reasoning/tree/main/data)

**Esempio**

```
[
    {
        "content": "\nYou are an AI assistant that uses a Chain of Thought (CoT) approach with reflection to answer queries...",
        "role": "system"
    },
    {
        "content": "A craft store makes a third of its sales in the fabric section, a quarter of its sales in the jewelry section, and the rest in the stationery section. They made 36 sales today. How many sales were in the stationery section?",
        "role": "user"
    },
    {
        "content": "\nTo find the number of sales in the stationery section, I need to first calculate the number of sales in the fabric and jewelry sections...\n\n\n<reasoning>\n1. Calculate the number of sales in the fabric section: 36 * 1/3 = 12\n2. Calculate the number of sales in the jewelry section: 36 * 1/4 = 9\n3. Calculate the number of sales in the stationery section: 36 - 12 - 9 = 15\n</reasoning>\n\n<reflection>\nUpon reviewing my reasoning, I noticed that my calculations seem correct...\n</reflection>\n\n<adjustment>\nUpon re-examining my math, I am confident that my calculations are correct...\n</adjustment>\n\n<output>\n15\n</output>",
        "role": "assistant"
    }
]
```

**Calcolo della ricompensa**

Funzione di ricompensa: [https://github.com/volcengine/verl/blob/main/verl/utils/reward\$1score/gsm8k.py](https://github.com/volcengine/verl/blob/main/verl/utils/reward_score/gsm8k.py)

## RLVR - Lambda personalizzata
<a name="model-customize-open-weight-samples-RLVR4"></a>

**Set di dati di input**

[Fonte: set di dati gsm8k pulito https://huggingface. co/datasets/thesven/gsm8k-reasoning/tree/main/data](https://huggingface.co/datasets/thesven/gsm8k-reasoning/tree/main/data)

**Esempio**

```
[
  {
    "content": "\nYou are an AI assistant that uses a Chain of Thought (CoT) approach with reflection to answer queries.\n\nFollow these steps:\n- Think through the problem step by step within the ‹thinking> tags.\n- Reflect on your thinking\n\nto check for any errors or improvements within the ‹reflection› tags.\n- Make any necessary adjustments based on your reflection.\n- Provide your final, concise answer within the ‹output> tags.\n\nImportant: The <thinking> and ‹reflection› sections are for your internal reasoning process only.\nDo not include any part of the final answer in these sections.\nThe actual response to the query must be entirely contained within the ‹output› tags.\n\nUse the following format for your response:\n<thinking>\n[Your initial thought process goes here]\n</thinking›\n\n<reasoning>\n[Your step-by-step reasoning goes here. This is your internal thought process, not the final answer. You can create as many reasoning steps as necessary in your process.]\n</reasoning>\n\n‹reflection>\n[Your reflection on your reasoning, checking for errors or improvements. You can create as many reflection steps as necessary in your process.]\n</ reflection>\n\n<adjustment>\n[Any adjustments to your thinking based on your reflection]\n</adjustment>\n\n<output>\n[Your final, concise answer to the query. This is the only part that will be shown to the user.]\n</output>\n",
    "role": "system"
  },
  {
    "content": "A craft store makes a third of its sales in the fabric section, a quarter of its sales in the jewelry section, and the rest in the stationery section. They made 36 sales today. How many sales were in the stationery section?",
    "role": "user"
  },
  {
    "content": "<thinking>\nTo find the number of sales in the stationery section, I need to first calculate the number of sales in the fabric and jewelry sections. The store makes a third of its sales in the fabric section, which is 1/3 of 36 sales. I can calculate this as 36 * 1/3 = 12 sales in the fabric section. The store makes a quarter of its sales in the jewelry section, which is 1/4 of 36 sales. I can calculate this as 36 * 1/4 = 9 sales in the jewelry section. Since the rest of the sales are in the stationery section, I can subtract the sales from the other two sections from the total number of sales to find the number of sales in the stationery section.\n</thinking>\n\n<reasoning>\n1. Calculate the number of sales in the fabric section: 36 * 1/3 = 12\n2. Calculate the number of sales in the jewelry section: 36 * 1/4 = 9\n3. Calculate the number of sales in the stationery section: 36 - 12 - 9 = 15\n</reasoning>\n\n‹reflection>\nUpon reviewing my reasoning, I noticed that my calculations seem correct, but I should ensure that I understand the question correctly. The question asks for the number of sales in the stationery section, and I believe I have correctly calculated that. However, I should double-check my math to make sure it's accurate.\n</reflection>\n\n<adjustment>\nUpon re-examining my math, I am confident that my calculations are correct. The fabric section makes up 1/3 of the sales, the jewelry section makes up 1/4, and the rest is the stationery section. My math checks out, and I am confident in my answer.\n</adjustment>\n\n<output>\n15\n</output>",
    "role": "assistant"
  }
]
```

**Esempio di calcolo della ricompensa**

```
# RLVR Evaluator for OSS

# lambda_grader.py
import json
import re
import uuid
from typing import Any, Dict, List
 
def custom_reward(assistant_answer: str, ground_truth: str) -> float:
    """
    Add custom reward computation here
 
    Example:-
    Reward = fraction of ground-truth words that are correct
    in the correct position.
 
    Example:
      gt:   "the cat sat"
      ans:  "the dog sat"
 
      word-by-word:
        "the" == "the"  -> correct
        "dog" != "cat"  -> wrong
        "sat" == "sat"  -> correct
 
      correct = 2 out of 3 -> reward = 2/3 ≈ 0.67
    """
    ans_words = assistant_answer.strip().lower().split()
    gt_words = ground_truth.strip().lower().split()
 
    if not gt_words:
        return 0.0
 
    correct = 0
    for aw, gw in zip(ans_words, gt_words):
        if aw == gw:
            correct += 1
 
    return correct / len(gt_words)
 
 
# Lambda utility functions
def _ok(body: Any, code: int = 200) -> Dict[str, Any]:
    return {
        "statusCode": code,
        "headers": {
            "content-type": "application/json",
            "access-control-allow-origin": "*",
            "access-control-allow-methods": "POST,OPTIONS",
            "access-control-allow-headers": "content-type",
        },
        "body": json.dumps(body),
    }
 
def _assistant_text(sample: Dict[str, Any]) -> str:
    """Extract assistant text from sample messages."""
    for m in reversed(sample.get("messages", [])):
        if m.get("role") == "assistant":
            return (m.get("content") or "").strip()
    return ""
 
def _sample_id(sample: Dict[str, Any]) -> str:
    """Generate or extract sample ID."""
    if isinstance(sample.get("id"), str) and sample["id"]:
        return sample["id"]
 
    return str(uuid.uuid4())
 
def _ground_truth(sample: Dict[str, Any]) -> str:
    """Extract ground truth from sample or metadata if available"""
 
    if isinstance(sample.get("reference_answer"), str) and sample["reference_answer"]:
        return sample["reference_answer"].strip()
 
    md = sample.get("metadata") or {}
    gt = md.get("reference_answer", None) or md.get("ground_truth", None)
    if gt is None:
        return ""
    return str(gt).strip()
 
 
def _score_and_metrics(sample: Dict[str, Any]) -> Dict[str, Any]:
    sid = _sample_id(sample)
    solution_text = _assistant_text(sample)
 
    # Extract ground truth
    gt = _ground_truth(sample)
 
    metrics_list: List[Dict[str, Any]] = []
 
    # Custom rlvr scoring
    if solution_text and gt:
        
        # Compute score
        reward_score = custom_reward(
            assistant_answer=solution_text,
            ground_truth=gt
        )
        
        # Add detailed metrics
        metrics_list.append({
            "name": "custom_reward_score", 
            "value": float(reward_score), 
            "type": "Reward"
        })
       
        # The aggregate reward score is the custom reward score
        aggregate_score = float(reward_score)
        
    else:
        # No solution text or ground truth - default to 0
        aggregate_score = 0.0
        metrics_list.append({
            "name": "default_zero", 
            "value": 0.0, 
            "type": "Reward"
        })
    print("detected score", {
        "id": sid,
        "aggregate_reward_score": float(aggregate_score),
        "metrics_list": metrics_list,
    })
    return {
        "id": sid,
        "aggregate_reward_score": float(aggregate_score),
        "metrics_list": metrics_list,
    }
 
def lambda_handler(event, context):
    """AWS Lambda handler for custom reward lambda grading."""
    # CORS preflight
    if event.get("requestContext", {}).get("http", {}).get("method") == "OPTIONS":
        return _ok({"ok": True})
 
    # Body may be a JSON string (API GW/Function URL) or already a dict (Invoke)
    raw = event.get("body") or "{}"
    try:
        body = json.loads(raw) if isinstance(raw, str) else raw
    except Exception as e:
        return _ok({"error": f"invalid JSON body: {e}"}, 400)
 
    # Accept top-level list, {"batch":[...]}, or single sample object
    if isinstance(body, dict) and isinstance(body.get("batch"), list):
        samples = body["batch"]
    else:
        return _ok({
            "error": "Send a sample object, or {'batch':[...]} , or a top-level list of samples."
        }, 400)
 
    try:
        results = [_score_and_metrics(s) for s in samples]
    except Exception as e:
        return _ok({"error": f"Custom scoring failed: {e}"}, 500)
 
    return _ok(results)
```

**Esempio di codice della funzione di ricompensa**

```
# RLVR Evaluator for OSS
# lambda_grader.py

import json
import re
import uuid from typing 
import Any, Dict, List
 
def custom_reward(assistant_answer: str, ground_truth: str) -> float:
    """
    Add custom reward computation here
 
    Example:-
    Reward = fraction of ground-truth words that are correct
    in the correct position.
 
    Example:
      gt:   "the cat sat"
      ans:  "the dog sat"
 
      word-by-word:
        "the" == "the"  -> correct
        "dog" != "cat"  -> wrong
        "sat" == "sat"  -> correct
 
      correct = 2 out of 3 -> reward = 2/3 ≈ 0.67
    """
    ans_words = assistant_answer.strip().lower().split()
    gt_words = ground_truth.strip().lower().split()
 
    if not gt_words:
        return 0.0
 
    correct = 0
    for aw, gw in zip(ans_words, gt_words):
        if aw == gw:
            correct += 1
 
    return correct / len(gt_words)
 
 
# Lambda utility functions
def _ok(body: Any, code: int = 200) -> Dict[str, Any]:
    return {
        "statusCode": code,
        "headers": {
            "content-type": "application/json",
            "access-control-allow-origin": "*",
            "access-control-allow-methods": "POST,OPTIONS",
            "access-control-allow-headers": "content-type",
        },
        "body": json.dumps(body),
    }
 
def _assistant_text(sample: Dict[str, Any]) -> str:
    """Extract assistant text from sample messages."""
    for m in reversed(sample.get("messages", [])):
        if m.get("role") == "assistant":
            return (m.get("content") or "").strip()
    return ""
 
def _sample_id(sample: Dict[str, Any]) -> str:
    """Generate or extract sample ID."""
    if isinstance(sample.get("id"), str) and sample["id"]:
        return sample["id"]
 
    return str(uuid.uuid4())
 
def _ground_truth(sample: Dict[str, Any]) -> str:
    """Extract ground truth from sample or metadata if available"""
 
    if isinstance(sample.get("reference_answer"), str) and sample["reference_answer"]:
        return sample["reference_answer"].strip()
 
    md = sample.get("metadata") or {}
    gt = md.get("reference_answer", None) or md.get("ground_truth", None)
    if gt is None:
        return ""
    return str(gt).strip()
 
 
def _score_and_metrics(sample: Dict[str, Any]) -> Dict[str, Any]:
    sid = _sample_id(sample)
    solution_text = _assistant_text(sample)
 
    # Extract ground truth
    gt = _ground_truth(sample)
 
    metrics_list: List[Dict[str, Any]] = []
 
    # Custom rlvr scoring
    if solution_text and gt:
        
        # Compute score
        reward_score = custom_reward(
            assistant_answer=solution_text,
            ground_truth=gt
        )
        
        # Add detailed metrics
        metrics_list.append({
            "name": "custom_reward_score", 
            "value": float(reward_score), 
            "type": "Reward"
        })
       
        # The aggregate reward score is the custom reward score
        aggregate_score = float(reward_score)
        
    else:
        # No solution text or ground truth - default to 0
        aggregate_score = 0.0
        metrics_list.append({
            "name": "default_zero", 
            "value": 0.0, 
            "type": "Reward"
        })
    print("detected score", {
        "id": sid,
        "aggregate_reward_score": float(aggregate_score),
        "metrics_list": metrics_list,
    })
    return {
        "id": sid,
        "aggregate_reward_score": float(aggregate_score),
        "metrics_list": metrics_list,
    }
 
def lambda_handler(event, context):
    """AWS Lambda handler for custom reward lambda grading."""
    # CORS preflight
    if event.get("requestContext", {}).get("http", {}).get("method") == "OPTIONS":
        return _ok({"ok": True})
 
    # Body may be a JSON string (API GW/Function URL) or already a dict (Invoke)
    raw = event.get("body") or "{}"
    try:
        body = json.loads(raw) if isinstance(raw, str) else raw
    except Exception as e:
        return _ok({"error": f"invalid JSON body: {e}"}, 400)
 
    # Accept top-level list, {"batch":[...]}, or single sample object
    if isinstance(body, dict) and isinstance(body.get("batch"), list):
        samples = body["batch"]
    else:
        return _ok({
            "error": "Send a sample object, or {'batch':[...]} , or a top-level list of samples."
        }, 400)
 
    try:
        results = [_score_and_metrics(s) for s in samples]
    except Exception as e:
        return _ok({"error": f"Custom scoring failed: {e}"}, 500)
 
    return _ok(results)
```

**Esempio di richiesta di ricompensa**

```
You are an expert RAG response evaluator specializing in faithfulness and relevance assessment.
Given: Context documents, a question, and response statements.
Goal: Evaluate both statement-level faithfulness and overall response relevance to the question.

Scoring rubric (start at 0.0, then add or subtract):

Core Components:

Faithfulness Assessment (0.6 max)
Per statement evaluation:
- Direct support in context: +0.2
- Accurate inference from context: +0.2
- No contradictions with context: +0.2
Deductions:
- Hallucination: -0.3
- Misrepresentation of context: -0.2
- Unsupported inference: -0.1

Question Relevance (0.4 max)
- Direct answer to question: +0.2
- Appropriate scope/detail: +0.1
- Proper context usage: +0.1
Deductions:
- Off-topic content: -0.2
- Implicit/meta responses: -0.2
- Missing key information: -0.1

Critical Flags:
A. Complete hallucination
B. Context misalignment
C. Question misinterpretation
D. Implicit-only responses

Additional Instructions:
- Evaluate each statement independently
- Check for direct textual support
- Verify logical inferences
- Assess answer completeness
- Flag any unsupported claims

Return EXACTLY this JSON (no extra text):
{
    "statements_evaluation": [
        {
            "statement": "<statement_text>",
            "verdict": <0 or 1>,
            "reason": "<detailed explanation>",
            "context_support": "<relevant context quote or 'None'>"
        }
    ],
    "overall_assessment": {
        "question_addressed": <0 or 1>,
        "reasoning": "<explanation>",
        "faithfulness_score": <0.0-1.0>,
        "relevance_score": <0.0-1.0>
    },
    "flags": ["<any critical issues>"]
}

## Current Evaluation Task

### Context
{{ ground_truth }}

### Question
{{ extra_info.question }}

### Model's Response
{{ model_output }}
```

# Nota di rilascio
<a name="model-customize-release-note"></a>

**Le immagini di personalizzazione del modello SageMaker AI**

**Piano di supporto**
+ Versioni principali: 12 mesi dopo la prossima release principale
+ Versioni minori: 6 mesi dopo la prossima versione secondaria
+ Versioni delle patch: nessun supporto garantito (aggiornamento alla patch più recente)

Di seguito sono riportate le note di rilascio per Base Deep Learning Containers for Amazon EKS (EKS) e SageMaker AI training jobs (SMTJ):


****  

| Versione | Tipo | Servizio | URL dell'immagine | 
| --- | --- | --- | --- | 
|  1.0.0  | CUDA | EKS |  `652744875666.dkr.ecr.amazonaws.com/hyperpod-model-customization:verl-eks-v1.0.0`  | 
|  1.0.0  | CUDA | SMTJ |  `652744875666.dkr.ecr.amazonaws.com/hyperpod-model-customization:verl-smtj-v1.0.0`  | 
|  1.0.0  | CUDA | SMIT |  `652744875666.dkr.ecr.amazonaws.com/hyperpod-model-customization:v1-v1.0.0`  | 
|  1.0.0  | CUDA | SMTJ |  `652744875666.dkr.ecr.amazonaws.com/hyperpod-model-customization:llama-90b-v1.0.0`  | 

**Regioni AWS supporto**


****  

| Region | Codice | supporto SMTJ senza server | 
| --- | --- | --- | 
| Asia Pacifico (Mumbai) | ap-south-1 | no | 
| Asia Pacifico (Singapore) | ap-southeast-1 | no | 
| Asia Pacifico (Sydney) | ap-southeast-2 | no | 
| Asia Pacifico (Tokyo) | ap-northeast-1 | sì | 
| Europa (Francoforte) | eu-central-1 | no | 
| Europa (Irlanda) | eu-west-1 | sì | 
| Europa (Stoccolma) | eu-north-1 | no | 
| Sud America (San Paolo) | sa-east-1 | no | 
| Stati Uniti orientali (Virginia settentrionale) | us-east-1 | sì | 
| Stati Uniti orientali (Ohio) | us-east-2 | no | 
| Stati Uniti occidentali (California settentrionale) | us-west-1 | no | 
| Stati Uniti occidentali (Oregon) | us-west-2 | sì | 