

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

# Implementa modelli per l'inferenza
<a name="deploy-model"></a>

Con Amazon SageMaker AI, puoi iniziare a ottenere previsioni o *inferenze* dai tuoi modelli di machine learning addestrati. SageMaker L'intelligenza artificiale offre un'ampia selezione di infrastrutture ML e opzioni di implementazione dei modelli per aiutarti a soddisfare tutte le tue esigenze di inferenza ML. Con SageMaker AI Inference, puoi scalare l'implementazione dei modelli, gestirli in modo più efficace in produzione e ridurre il carico operativo. SageMaker L'intelligenza artificiale offre varie opzioni di inferenza, come endpoint in tempo reale per ottenere inferenze a bassa latenza, endpoint serverless per un'infrastruttura completamente gestita e l'auto-scaling e endpoint asincroni per batch di richieste. Sfruttando l’opzione di inferenza appropriata per il tuo caso d’uso, puoi garantire un’implementazione e un’inferenza efficienti del modello.

## Scelta di una funzionalità.
<a name="deploy-model-choose"></a>

Esistono diversi casi SageMaker d'uso per l'implementazione di modelli di machine learning con l'intelligenza artificiale. Questa sezione descrive questi casi d'uso, oltre alla funzionalità di SageMaker intelligenza artificiale che consigliamo per ogni caso d'uso. 

### Casi d’uso
<a name="deploy-model-use-cases"></a>

Di seguito sono riportati i principali casi d'uso per l'implementazione di modelli di machine learning con SageMaker AI.
+ **Caso d’uso 1: implementazione di un modello di machine learning in un ambiente low code o no code.** Per i principianti o per chi è alle prime armi con l' SageMaker intelligenza artificiale, puoi distribuire modelli pre-addestrati SageMaker JumpStart utilizzando Amazon tramite l'interfaccia di Amazon SageMaker Studio, senza la necessità di configurazioni complesse.
+ **Caso d’uso 2: utilizzare il codice per implementare modelli di machine learning con livelli più elevati di flessibilità e controllo.** I professionisti esperti di ML possono implementare i propri modelli con impostazioni personalizzate per le proprie esigenze applicative utilizzando la `ModelBuilder` classe dell'SDK AI SageMaker Python, che fornisce un controllo dettagliato su varie impostazioni, come i tipi di istanze, l'isolamento della rete e l'allocazione delle risorse.
+ **Caso d’uso 3: implementazione di modelli di machine learning su larga scala.** Per gli utenti e le organizzazioni avanzati che desiderano gestire modelli su larga scala durante la produzione, utilizza l'Infrastructure as Code (IaC) AWS SDK per Python (Boto3) e CloudFormation gli strumenti desiderati per fornire risorse e automatizzare la gestione delle risorse. CI/CD 

### Funzionalità consigliate
<a name="deploy-model-recommended"></a>

La tabella seguente descrive le considerazioni e i compromessi chiave per le funzionalità di SageMaker intelligenza artificiale corrispondenti a ciascun caso d'uso.


|  | Caso d'uso 1 | Caso d'uso 2 | Caso d'uso 3 | 
| --- | --- | --- | --- | 
| SageMaker Funzionalità AI | [ JumpStart Utilizzala in Studio](jumpstart-foundation-models-use-studio-updated.md) per accelerare l'implementazione del modello di base. | Distribuisci modelli utilizzando [ModelBuilder SageMaker Python SDK](how-it-works-modelbuilder-creation.md). |  [Implementa e gestisci modelli](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/AWS_SageMaker.html) su larga scala con. CloudFormation | 
| Description | Utilizza l’interfaccia utente di Studio per implementare modelli preaddestrati da un catalogo a endpoint di inferenza preconfigurati. Questa opzione è ideale per i citizen data scientist o per chiunque desideri implementare un modello senza configurare impostazioni complesse. | Usa la ModelBuilder classe dell'SDK Amazon SageMaker AI Python per distribuire il tuo modello e configurare le impostazioni di distribuzione. Questa opzione è ideale per data scientist esperti o per chiunque abbia un proprio modello da implementare e richieda un controllo granulare. | Usa CloudFormation and Infrastructure as Code (IaC) per il controllo programmatico e l'automazione per l'implementazione e la gestione di modelli di intelligenza artificiale. SageMaker Questa opzione è ideale per utenti avanzati che richiedono implementazioni coerenti e ripetibili. | 
| Ottimizzata per | Implementazioni rapide e semplificate dei modelli open source più diffusi | Implementazione di modelli personali | Gestione continua dei modelli in produzione | 
| Considerazioni | Mancanza di personalizzazione per le impostazioni dei container e le esigenze specifiche delle applicazioni | Nessuna interfaccia utente, richiede una certa competenza nello sviluppo e nella manutenzione del codice Python | Richiede la gestione dell'infrastruttura e risorse organizzative e richiede anche familiarità con o con i AWS SDK per Python (Boto3) modelli. CloudFormation  | 
| Ambiente consigliato | Un dominio SageMaker AI | Un ambiente di sviluppo Python configurato con AWS le tue credenziali e l'SDK SageMaker Python installato o un IDE AI come SageMaker [SageMaker JupyterLab](studio-updated-jl.md) | Poi AWS CLI, un ambiente di sviluppo locale e Infrastructure as Code (IaC) e strumenti CI/CD  | 

### Opzioni aggiuntive
<a name="deploy-model-additional"></a>

SageMaker L'intelligenza artificiale offre diverse opzioni per i casi d'uso dell'inferenza, consentendoti di scegliere in base all'ampiezza e alla profondità tecnica delle tue implementazioni:
+ **Implementazione di un modello su un endpoint.** Durante l’implementazione del modello, valuta le seguenti opzioni:
  + [Inferenza in tempo reale](realtime-endpoints.md). L’inferenza in tempo reale è ideale per carichi di lavoro di inferenza in cui sono previsti requisiti interattivi e a bassa latenza.
  + [Implementa modelli con Amazon SageMaker Serverless Inference](serverless-endpoints.md). Utilizza l’inferenza serverless per implementare modelli senza configurare o gestire alcuna infrastruttura sottostante. Questa opzione è ideale per carichi di lavoro che presentano periodi di inattività tra picchi di traffico e possono tollerare avvii a freddo.
  + [Inferenza asincrona](async-inference.md). Mette in coda le richieste in entrata e le elabora in modo asincrono. Questa opzione è ideale per richieste con payload di grandi dimensioni (fino a 1 GB), tempi di elaborazione lunghi (fino a un'ora) e requisiti di latenza quasi in tempo reale.
+ **Ottimizzazione dei costi.** Per ottimizzare i costi di inferenza, valuta le seguenti opzioni:
  + [Ottimizzazione delle prestazioni dei modelli con SageMaker Neo](neo.md). Usa SageMaker Neo per ottimizzare ed eseguire i tuoi modelli di machine learning con prestazioni ed efficienza migliori, aiutandoti a ridurre al minimo i costi di elaborazione ottimizzando automaticamente i modelli per l'esecuzione in ambienti come i chip AWS Inferentia.
  + [Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon](endpoint-auto-scaling.md). Ricorri alla scalabilità automatica per regolare dinamicamente le risorse di calcolo per i tuoi endpoint in base ai modelli di traffico in entrata, contribuendo a ottimizzare i costi pagando solo le risorse che utilizzi in un determinato momento.

# Opzioni di implementazione dei modelli in Amazon SageMaker AI
<a name="how-it-works-deployment"></a>

Dopo aver addestrato il tuo modello di machine learning, puoi implementarlo utilizzando Amazon SageMaker AI per effettuare previsioni. Amazon SageMaker AI supporta i seguenti modi per implementare un modello, a seconda del caso d’uso:
+ Per endpoint persistenti e in tempo reale che effettuano una previsione alla volta, utilizza i servizi di hosting in tempo reale SageMaker AI. Consultare [Inferenza in tempo reale](realtime-endpoints.md).
+ I carichi di lavoro che presentano periodi di inattività tra picchi di traffico e possono tollerare avvii a freddo utilizzano Inferenza serverless. Consultare [Implementa modelli con Amazon SageMaker Serverless Inference](serverless-endpoints.md).
+ Le richieste con carichi di lavoro di grandi dimensioni fino a 1 GB, lunghi tempi di elaborazione e requisiti di latenza quasi in tempo reale, utilizzano Inferenza asincrona Amazon SageMaker. Consultare [Inferenza asincrona](async-inference.md).
+ Per ottenere previsioni per un intero set di dati, utilizza la trasformazione in batch di SageMaker AI. Consultare [Trasformazione in batch per l'inferenza con Amazon SageMaker AI](batch-transform.md).

SageMaker AI fornisce anche funzionalità per la gestione delle risorse e l’ottimizzazione delle prestazioni di inferenza durante l’implementazione di modelli di machine learning:
+ Per gestire modelli su dispositivi edge in modo da ottimizzare, proteggere, monitorare e mantenere modelli di machine learning su parchi di dispositivi edge, consulta [Implementazione di modelli all'edge con Edge Manager SageMaker](edge.md). Questo vale per i dispositivi edge come fotocamere intelligenti, robot, personal computer e dispositivi mobili.
+ Per ottimizzare i modelli Gluon, Keras, MXNet, PyTorch, TensorFlow, Tensorflow-Lite e ONNX per l'inferenza su macchine Android, Linux e Windows basate su processori Ambarella, ARM, Intel, Nvidia, NXP, Qualcomm, Texas Instruments e Xilinx, consulta [Ottimizzazione delle prestazioni dei modelli con SageMaker Neo](neo.md).

Per ulteriori informazioni su tutte le opzioni di implementazione, consulta [Implementa modelli per l'inferenza](deploy-model.md).

# Comprendi le opzioni per distribuire modelli e ottenere inferenze in Amazon AI SageMaker
<a name="deploy-model-get-started"></a>

Per aiutarti a iniziare a usare SageMaker AI Inference, consulta le seguenti sezioni che spiegano le opzioni a tua disposizione per implementare il tuo modello nell' SageMaker IA e ottenere inferenze. La sezione [Opzioni di inferenza in Amazon SageMaker AI](deploy-model-options.md) può aiutarti a determinare quale funzionalità è più adatta al tuo caso d’uso per l’inferenza.

Puoi fare riferimento alla [Risorse](inference-resources.md) sezione per ulteriori informazioni sulla risoluzione dei problemi e di riferimento, blog ed esempi comuni per aiutarti a iniziare. FAQs

**Topics**
+ [Prima di iniziare](#deploy-model-prereqs)
+ [Fasi per l’implementazione di un modello](#deploy-model-steps)
+ [Opzioni di inferenza in Amazon SageMaker AI](deploy-model-options.md)
+ [Opzioni endpoint avanzate per l'inferenza con Amazon AI SageMaker](deploy-model-advanced.md)
+ [I prossimi passi per l'inferenza con Amazon SageMaker AI](deploy-model-next-steps.md)

## Prima di iniziare
<a name="deploy-model-prereqs"></a>

Questi argomenti presuppongono che tu abbia creato e preparato uno o più modelli di machine learning e che siano pronti per la distribuzione. Non è necessario addestrare il modello all' SageMaker intelligenza artificiale per implementarlo nell' SageMaker intelligenza artificiale e ottenere inferenze. Se non disponi di un tuo modello, puoi anche utilizzare [gli algoritmi integrati dell' SageMaker IA o](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html) i modelli preaddestrati.

Se non conosci l' SageMaker intelligenza artificiale e non hai ancora scelto un modello da implementare, segui i passaggi del tutorial [Get Started with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/gs.html). Usa il tutorial per acquisire familiarità con il modo in cui l' SageMaker intelligenza artificiale gestisce il processo di data science e come gestisce l'implementazione dei modelli. Per ulteriori informazioni sull'addestramento di un modello, consulta [Addestramento di modelli](https://docs.aws.amazon.com/sagemaker/latest/dg/train-model.html).

Per ulteriori informazioni, riferimenti ed esempi, consulta [Risorse](inference-resources.md).

## Fasi per l’implementazione di un modello
<a name="deploy-model-steps"></a>

Per gli endpoint di inferenza, il flusso di lavoro generale comprende:
+ Crea un modello in SageMaker AI Inference indicando gli artefatti del modello archiviati in Amazon S3 e un'immagine del contenitore.
+ Selezionare un'opzione di inferenza. Per ulteriori informazioni, consulta [Opzioni di inferenza in Amazon SageMaker AI](deploy-model-options.md).
+ Crea una configurazione dell'endpoint SageMaker AI Inference scegliendo il tipo di istanza e il numero di istanze necessarie per l'endpoint. Puoi utilizzare [Amazon SageMaker Inference Recommender](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender.html) per ottenere consigli sui tipi di istanze. Per inferenza serverless, devi solo fornire la configurazione di memoria necessaria in base alle dimensioni del modello. 
+ Crea un endpoint SageMaker AI Inference.
+ Richiama il tuo endpoint per ricevere come risposta un'inferenza.

Il diagramma mostra il precedente flusso di lavoro:

![\[Il flusso di lavoro descritto nel paragrafo precedente che mostra come ottenere inferenze dall'IA. SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference-workflow-flowchart.png)


È possibile eseguire queste azioni utilizzando la AWS console AWS SDKs, l'SDK SageMaker Python o il CloudFormation . AWS CLI

Per l'inferenza in batch con la trasformazione in batch, punti agli artefatti del modello e ai dati di input e crei un processo di inferenza in batch. Invece di ospitare un endpoint per l'inferenza, l' SageMaker intelligenza artificiale invia le inferenze in una posizione Amazon S3 di tua scelta.

# Opzioni di inferenza in Amazon SageMaker AI
<a name="deploy-model-options"></a>

SageMaker L'intelligenza artificiale offre diverse opzioni di inferenza in modo da poter scegliere l'opzione più adatta al tuo carico di lavoro:
+ [Inferenza in tempo reale](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html): *l'inferenza in tempo reale* è ideale per inferenze online che hanno requisiti di bassa latenza o di elevati di throughput. Utilizza l'inferenza in tempo reale per un endpoint persistente e completamente gestito (API REST) in grado di gestire un traffico sostenuto, supportato dal tipo di istanza che preferisci. L’inferenza in tempo reale può supportare payload di dimensioni fino a 25 MB e tempi di elaborazione di 60 secondi per le risposte normali e di 8 minuti per le risposte in streaming.
+ Inferenza [senza server: l'inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html) *serverless è ideale quando si hanno modelli di traffico* intermittenti o imprevedibili. SageMaker L'intelligenza artificiale gestisce tutta l'infrastruttura sottostante, quindi non è necessario gestire istanze o politiche di scalabilità. Verrà effettuato l'addebito solo per l'uso effettivo e non per il tempo di inattività. Può supportare payload di dimensioni fino a 4 MB e tempi di elaborazione fino a 60 secondi.
+ [Trasformazione in batch](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html): la *trasformazione in batch* è adatta per l'elaborazione offline quando sono disponibili in anticipo grandi quantità di dati e non è necessario un endpoint persistente. Inoltre puoi utilizzare la trasformazione in batch per la pre-elaborazione dei set di dati. Può supportare set di dati di grandi dimensioni e con tempi GBs di elaborazione di giorni.
+ [Inferenza asincrona](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference.html): *l'inferenza asincrona* è ideale quando si desidera mettere in coda le richieste e disporre di payload di grandi dimensioni con tempi di elaborazione lunghi. L'inferenza asincrona può supportare payload fino a 1 GB e tempi di elaborazione lunghi fino a un'ora. Inoltre puoi ridimensionare l'endpoint a 0 quando non ci sono richieste da elaborare.

# Opzioni endpoint avanzate per l'inferenza con Amazon AI SageMaker
<a name="deploy-model-advanced"></a>

Con l'inferenza in tempo reale, puoi ottimizzare ulteriormente le prestazioni e i costi con le seguenti opzioni di inferenza avanzate:
+ [Endpoint multi-modello](multi-model-endpoints.md): scegli questa opzione se disponi di più modelli che utilizzano lo stesso framework e puoi condividere un container. Questa opzione consente di ottimizzare i costi migliorando l'utilizzo degli endpoint e riducendo il sovraccarico di implementazione.
+ [Endpoint multi-container](multi-container-endpoints.md): scegli questa opzione se disponi di più modelli che utilizzano framework diversi e richiedono un container separato. Otterrai molti dei vantaggi offerti dagli endpoint multi-modello e potrai implementare vari framework e modelli.
+ [Pipeline di inferenza seriale](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html): utilizza questa opzione se desideri ospitare modelli con logica di pre-elaborazione e post-elaborazione su un endpoint. Le pipeline di inferenza sono completamente gestite dall' SageMaker intelligenza artificiale e offrono una latenza inferiore perché tutti i contenitori sono ospitati sulle stesse istanze Amazon EC2.

# I prossimi passi per l'inferenza con Amazon SageMaker AI
<a name="deploy-model-next-steps"></a>

Dopo aver creato un endpoint e aver compreso il flusso di lavoro di inferenza generale, puoi utilizzare le seguenti funzionalità dell' SageMaker intelligenza artificiale per migliorare il flusso di lavoro di inferenza.

## Monitoraggio
<a name="deploy-model-next-steps-monitoring"></a>

Per tracciare il modello nel tempo attraverso parametri come la precisione e la deviazione del modello, è possibile utilizzare Monitoraggio modello. Con Monitoraggio modello, puoi impostare avvisi che ti notificano quando ci sono deviazioni nella qualità del tuo modello. Per ulteriori informazioni, consultare la [documentazione di Monitoraggio modello](https://docs.aws.amazon.com/sagemaker/latest/dg/model-monitor.html). 

Per ulteriori informazioni sugli strumenti che possono essere utilizzati per monitorare le implementazioni dei modelli e gli eventi che modificano l'endpoint, consulta Monitor [Amazon](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-overview.html) AI. SageMaker Ad esempio, puoi monitorare lo stato dell'endpoint attraverso parametri quali errori di invocazione e latenza del modello utilizzando i parametri di Amazon. CloudWatch Le [metriche di chiamata degli endpoint SageMaker AI possono fornirti informazioni preziose sulle prestazioni dell'](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation)endpoint.

## CI/CD per la distribuzione di un modello
<a name="deploy-model-next-steps-cicd"></a>

[Per mettere insieme soluzioni di machine learning nell' SageMaker IA, puoi usare l'IA. SageMaker MLOps](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects.html) È possibile utilizzare questa funzione per automatizzare le fasi del flusso di lavoro di machine learning ed esercitarsi con CI/CD. Puoi utilizzare i [modelli di MLOps progetto](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-templates.html) per facilitare la configurazione e l'implementazione di MLOps progetti di SageMaker intelligenza artificiale. SageMaker L'intelligenza artificiale supporta anche l'utilizzo del proprio [repository Git di terze parti](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-projects-walkthrough-3rdgit.html) per la creazione di un CI/CD sistema.

Per le tue pipeline ML, usa [Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html) per gestire le versioni, la distribuzione e l'automazione dei tuoi modelli.

## Guardrail di implementazione
<a name="deploy-model-next-steps-guardrails"></a>

Se desideri aggiornare il modello mentre è in produzione senza influire sulla produzione stessa, puoi utilizzare i guardrail di implementazione. I guardrail di implementazione sono un insieme di opzioni di implementazione dei modelli in SageMaker AI Inference per aggiornare i modelli di machine learning in produzione. Utilizzando le opzioni di implementazione completamente gestite, è possibile controllare il passaggio dal modello corrente in produzione a uno nuovo. Le modalità di trasferimento del traffico ti offrono un controllo granulare sul processo di trasferimento del traffico e le protezioni integrate come il rollback automatico ti aiutano a individuare tempestivamente i problemi. 

Per ulteriori informazioni sui guardrail di implementazione, consulta la [documentazione sui guardrail di implementazione](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails.html).

## Inferentia
<a name="deploy-model-next-steps-inferentia"></a>

Se devi eseguire applicazioni di machine learning e deep learning su larga scala, puoi utilizzare un’istanza `Inf1` con un endpoint in tempo reale. Questo tipo di istanza è indicato per casi d’uso come riconoscimento di immagini o vocale, elaborazione del linguaggio naturale (NLP), personalizzazione, previsione o rilevamento di frodi.

`Inf1`le istanze sono create per supportare applicazioni di inferenza di apprendimento automatico e dispongono dei chip Inferentia. AWS `Inf1`le istanze offrono un throughput più elevato e un costo per inferenza inferiore rispetto alle istanze basate su GPU.

Per implementare un modello sulle `Inf1` istanze, compila il tuo modello con SageMaker Neo e scegli un'istanza per la tua opzione di implementazione. `Inf1` Per saperne di più, consulta [Ottimizzare le prestazioni del modello utilizzando](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) Neo. SageMaker 

## Ottimizzazione delle prestazioni del modello
<a name="deploy-model-next-steps-optimize"></a>

SageMaker L'intelligenza artificiale fornisce funzionalità per gestire le risorse e ottimizzare le prestazioni di inferenza durante l'implementazione di modelli di apprendimento automatico. Puoi utilizzare [gli algoritmi e i modelli predefiniti](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html) dell' SageMaker IA, nonché [immagini Docker predefinite, sviluppate](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers-prebuilt.html) per l'apprendimento automatico.

[Per addestrare i modelli e ottimizzarli per l'implementazione, consulta le [immagini Docker predefinite](https://docs.aws.amazon.com/sagemaker/latest/dg/docker-containers-prebuilt.html) Ottimizza le prestazioni dei modelli usando Neo. SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) Con SageMaker Neo puoi addestrare TensorFlow, Apache MXNet PyTorch, ONNX e modelli. XGBoost per poi ottimizzarli e implementarli su processori ARM, Intel e Nvidia.

## Dimensionamento automatico
<a name="deploy-model-next-steps-autoscaling"></a>

Se la quantità di traffico verso gli endpoint è variabile, potresti provare il dimensionato automaticamente. Ad esempio, durante le ore di picco, potresti aver bisogno di più istanze per elaborare le richieste. Nei periodi di traffico ridotto, invece, potresti voler ridurre l’uso delle risorse di calcolo. Per regolare dinamicamente il numero di istanze assegnate in risposta alle modifiche nel carico di lavoro, consulta [Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon](endpoint-auto-scaling.md).

Se il traffico è imprevedibile o se non desideri impostare policy di dimensionamento, puoi anche utilizzare l’inferenza serverless per un endpoint. Quindi, l' SageMaker intelligenza artificiale gestisce la scalabilità automatica per te. Nei periodi di traffico ridotto, l' SageMaker intelligenza artificiale ridimensiona l'endpoint e, se il traffico aumenta, l' SageMaker IA ridimensiona l'endpoint. Per ulteriori informazioni, consulta la documentazione [Implementa modelli con Amazon SageMaker Serverless Inference](serverless-endpoints.md).

# Crea un modello in Amazon SageMaker AI con ModelBuilder
<a name="how-it-works-modelbuilder-creation"></a>

La preparazione del modello per l'implementazione su un endpoint SageMaker AI richiede diversi passaggi, tra cui la scelta di un'immagine del modello, la configurazione dell'endpoint, la codifica delle funzioni di serializzazione e deserializzazione per trasferire dati da e verso server e client, l'identificazione delle dipendenze del modello e il caricamento su Amazon S3. `ModelBuilder`può ridurre la complessità della configurazione e della distribuzione iniziali per aiutarti a creare un modello implementabile in un unico passaggio.

`ModelBuilder` esegue automaticamente le seguenti attività: 
+ Converte i modelli di machine learning addestrati utilizzando vari framework simili XGBoost o PyTorch in modelli implementabili in un unico passaggio.
+ Esegue la selezione automatica del container in base al framework del modello, in modo da non doverlo specificare manualmente. È comunque possibile importare un container personale passando l’URI a `ModelBuilder`.
+ Gestisce la serializzazione dei dati sul lato client prima di inviarli al server per l’inferenza e la deserializzazione dei risultati restituiti dal server. I dati vengono formattati correttamente senza elaborazione manuale.
+ Consente l’acquisizione automatica delle dipendenze e crea un pacchetto del modello in base alle aspettative del server del modello. L’acquisizione automatica delle dipendenze da parte di `ModelBuilder` è l’approccio ottimale per caricare le dipendenze in modo dinamico. È consigliabile testare l’acquisizione automatica a livello locale e aggiornare le dipendenze in base alle esigenze.
+ Per i casi d'uso di modelli LLM (Large Language Model), esegue facoltativamente l'ottimizzazione locale dei parametri delle proprietà di servizio che possono essere implementate per prestazioni migliori durante l'hosting su un endpoint AI. SageMaker 
+ Supporta la maggior parte dei modelli di server e container più diffusi come Triton e TorchServe TGI container. DJLServing 

## Costruisci il tuo modello con ModelBuilder
<a name="how-it-works-modelbuilder-creation-mb"></a>

`ModelBuilder`è una classe Python che accetta un modello di framework, come XGBoost or PyTorch, o una specifica di inferenza specificata dall'utente e lo converte in un modello implementabile. `ModelBuilder`fornisce una funzione di compilazione che genera gli artefatti per la distribuzione. L’artefatto del modello generato è specifico del server del modello, che è anche possibile specificare come uno degli input. Per ulteriori dettagli sulla `ModelBuilder` classe, vedere. [ModelBuilder](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.builder.model_builder.ModelBuilder)

Il diagramma seguente illustra il flusso di lavoro generale per la creazione del modello in caso di utilizzo di `ModelBuilder`. `ModelBuilder` accetta un modello o una specifica di inferenza insieme allo schema per creare un modello implementabile che è possibile testare localmente prima dell’implementazione.

![\[Flusso di creazione e implementazione del modello mediante ModelBuilder.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-builder-flow.png)


`ModelBuilder` è in grado di gestire qualsiasi personalizzazione da applicare. Tuttavia, per implementare un modello di framework, il generatore di modelli prevede almeno un modello, un input e un output di esempio e il ruolo. Nel seguente esempio di codice, `ModelBuilder` viene chiamato con un modello di framework e un’istanza di `SchemaBuilder` con argomenti minimi (per dedurre le funzioni corrispondenti per la serializzazione e la deserializzazione dell’input e dell’output dell’endpoint). Non viene specificato alcun contenitore e non vengono passate dipendenze pacchettizzate: l'SageMaker IA deduce automaticamente queste risorse quando si crea il modello. 

```
from sagemaker.serve.builder.model_builder import ModelBuilder
from sagemaker.serve.builder.schema_builder import SchemaBuilder

model_builder = ModelBuilder(
    model=model,
    schema_builder=SchemaBuilder(input, output),
    role_arn="execution-role",
)
```

Il seguente esempio di codice invoca `ModelBuilder` con una specifica di inferenza (come un’istanza di `InferenceSpec`) anziché con un modello, con personalizzazione aggiuntiva. In questo caso, la chiamata al generatore di modelli include un percorso per archiviare gli artefatti del modello e attiva anche l’acquisizione automatica di tutte le dipendenze disponibili. Per ulteriori dettagli su `InferenceSpec`, consulta [Personalizzare il caricamento del modello e la gestione delle richieste](#how-it-works-modelbuilder-creation-is).

```
model_builder = ModelBuilder(
    mode=Mode.LOCAL_CONTAINER,
    model_path=model-artifact-directory,
    inference_spec=your-inference-spec,
    schema_builder=SchemaBuilder(input, output),
    role_arn=execution-role,
    dependencies={"auto": True}
)
```

## Definire i metodi di serializzazione e deserializzazione
<a name="how-it-works-modelbuilder-creation-sb"></a>

Quando si richiama un endpoint SageMaker AI, i dati vengono inviati tramite payload HTTP con diversi tipi MIME. Ad esempio, un’immagine inviata all’endpoint per l’inferenza deve essere convertita in byte sul lato client e inviata tramite un payload HTTP all’endpoint. Quando l’endpoint riceve il payload, deve deserializzare la stringa di byte riportandola al tipo di dati previsto dal modello (processo noto anche come deserializzazione lato server). Dopo che il modello ha terminato la previsione, è inoltre necessario serializzare i risultati in byte che possono essere inviati nuovamente all’utente o al client tramite il payload HTTP. Una volta ricevuti i dati dei byte di risposta, il client deve eseguire la deserializzazione lato client per riconvertire i dati in byte nel formato di dati previsto, ad esempio JSON. Come condizione minima, è necessario convertire i dati per le seguenti attività:

1. Serializzazione della richiesta di inferenza (gestita dal client)

1. Deserializzazione della richiesta di inferenza (gestita dal server o dall’algoritmo)

1. Invocazione del modello con il payload e invio del payload di risposta

1. Serializzazione della risposta di inferenza (gestita dal server o dall’algoritmo)

1. Deserializzazione della risposta di inferenza (gestita dal client)

Il diagramma seguente mostra i processi di serializzazione e deserializzazione che si verificano quando si invoca l’endpoint.

![\[Diagramma della serializzazione e deserializzazione dei dati da client a server.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-builder-serialization.png)


Quando vengono forniti input e output di esempio a `SchemaBuilder`, il generatore di schemi genera le funzioni di marshalling corrispondenti per la serializzazione e la deserializzazione dell’input e dell’output. È possibile personalizzare ulteriormente le funzioni di serializzazione con `CustomPayloadTranslator`. Nella maggior parte dei casi, tuttavia, è sufficiente un serializzatore semplice come il seguente:

```
input = "How is the demo going?"
output = "Comment la démo va-t-elle?"
schema = SchemaBuilder(input, output)
```

Per ulteriori dettagli in merito, vedere. `SchemaBuilder` [SchemaBuilder](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.builder.schema_builder.SchemaBuilder)

Il seguente frammento di codice illustra un esempio in cui si desidera personalizzare le funzioni di serializzazione e deserializzazione sui lati client e server. È possibile definire specifici convertitori di richieste e risposte con `CustomPayloadTranslator` e passare questi convertitori a `SchemaBuilder`.

Includendo gli input e gli output con i convertitori, il generatore di modelli può estrarre il formato di dati previsto dal modello. Ad esempio, si supponga che l’input di esempio sia un’immagine non elaborata e che i convertitori personalizzati ritaglino l’immagine e la inviino al server come tensore. `ModelBuilder` necessita sia dell’input non elaborato che di qualsiasi codice di pre-elaborazione o post-elaborazione personalizzato per ricavare un metodo per convertire i dati sui lati client e server.

```
from sagemaker.serve import CustomPayloadTranslator

# request translator
class MyRequestTranslator(CustomPayloadTranslator):
    # This function converts the payload to bytes - happens on client side
    def serialize_payload_to_bytes(self, payload: object) -> bytes:
        # converts the input payload to bytes
        ... ...
        return  //return object as bytes

    # This function converts the bytes to payload - happens on server side
    def deserialize_payload_from_stream(self, stream) -> object:
        # convert bytes to in-memory object
        ... ...
        return //return in-memory object

# response translator
class MyResponseTranslator(CustomPayloadTranslator):
    # This function converts the payload to bytes - happens on server side
    def serialize_payload_to_bytes(self, payload: object) -> bytes:
        # converts the response payload to bytes
        ... ...
        return //return object as bytes

    # This function converts the bytes to payload - happens on client side
    def deserialize_payload_from_stream(self, stream) -> object:
        # convert bytes to in-memory object
        ... ...
        return //return in-memory object
```

L’input e l’output di esempio vengono passati insieme ai convertitori personalizzati definiti in precedenza durante la creazione dell’oggetto `SchemaBuilder`, come illustrato nell’esempio seguente:

```
my_schema = SchemaBuilder(
    sample_input=image,
    sample_output=output,
    input_translator=MyRequestTranslator(),
    output_translator=MyResponseTranslator()
)
```

Quindi, l’input e l’output di esempio, insieme ai convertitori personalizzati definiti in precedenza, vengono passati all’oggetto `SchemaBuilder`. 

```
my_schema = SchemaBuilder(
    sample_input=image,
    sample_output=output,
    input_translator=MyRequestTranslator(),
    output_translator=MyResponseTranslator()
)
```

Le sezioni seguenti spiegano in dettaglio come generare un modello `ModelBuilder` e utilizzare le relative classi di supporto per personalizzare l’esperienza in base al caso d’uso.

**Topics**
+ [Costruisci il tuo modello con ModelBuilder](#how-it-works-modelbuilder-creation-mb)
+ [Definire i metodi di serializzazione e deserializzazione](#how-it-works-modelbuilder-creation-sb)
+ [Personalizzare il caricamento del modello e la gestione delle richieste](#how-it-works-modelbuilder-creation-is)
+ [Creare e implementare un modello personalizzato](#how-it-works-modelbuilder-creation-deploy)
+ [Importare un container personalizzato (Bring Your Own Container, BYOC)](#how-it-works-modelbuilder-creation-mb-byoc)
+ [Utilizzo ModelBuilder in modalità locale](#how-it-works-modelbuilder-creation-local)
+ [ModelBuilder esempi](#how-it-works-modelbuilder-creation-example)

## Personalizzare il caricamento del modello e la gestione delle richieste
<a name="how-it-works-modelbuilder-creation-is"></a>

Fornire il proprio codice di inferenza tramite `InferenceSpec` offre un ulteriore livello di personalizzazione. Con `InferenceSpec`, è possibile personalizzare le modalità di caricamento del modello e gestione delle richieste di inferenza in entrata, aggirando i meccanismi predefiniti. Questo livello di flessibilità è particolarmente utile in caso di utilizzo di modelli non standard o pipeline di inferenza personalizzate. È possibile personalizzare il metodo `invoke` per controllare il modo in cui il modello pre-elabora e post-elabora le richieste in entrata. Il metodo `invoke` garantisce che il modello gestisca correttamente le richieste di inferenza. L'esempio seguente utilizza `InferenceSpec` per generare un modello con la HuggingFace pipeline. Per ulteriori dettagli su`InferenceSpec`, fare riferimento a. [InferenceSpec](https://sagemaker.readthedocs.io/en/stable/api/inference/model_builder.html#sagemaker.serve.spec.inference_spec.InferenceSpec)

```
from sagemaker.serve.spec.inference_spec import InferenceSpec
from transformers import pipeline

class MyInferenceSpec(InferenceSpec):
    def load(self, model_dir: str):
        return pipeline("translation_en_to_fr", model="t5-small")

    def invoke(self, input, model):
        return model(input)

inf_spec = MyInferenceSpec()

model_builder = ModelBuilder(
    inference_spec=your-inference-spec,
    schema_builder=SchemaBuilder(X_test, y_pred)
)
```

Il seguente esempio illustra una variante più personalizzata di un esempio precedente. Un modello viene definito con una specifica di inferenza che presenta dipendenze. In questo caso, il codice nella specifica di inferenza dipende dal pacchetto *lang-segment*. L’argomento per `dependencies` contiene un’istruzione che indica al generatore di installare *lang-segment* mediante Git. Poiché il generatore di modelli è istruito dall’utente a eseguire un’installazione personalizzata di una dipendenza, la chiave `auto` è impostata su `False` per disattivare l’acquisizione automatica delle dipendenze.

```
model_builder = ModelBuilder(
    mode=Mode.LOCAL_CONTAINER,
    model_path=model-artifact-directory,
    inference_spec=your-inference-spec,
    schema_builder=SchemaBuilder(input, output),
    role_arn=execution-role,
    dependencies={"auto": False, "custom": ["-e git+https://github.com/luca-medeiros/lang-segment-anything.git#egg=lang-sam"],}
)
```

## Creare e implementare un modello personalizzato
<a name="how-it-works-modelbuilder-creation-deploy"></a>

Chiama la funzione `build` per creare un modello implementabile. Questa fase crea un codice di inferenza (come `inference.py`) nella directory di lavoro con il codice necessario per creare lo schema, eseguire la serializzazione e la deserializzazione di input e output ed eseguire altra logica personalizzata specificata dall’utente.

Come controllo di integrità, l' SageMaker IA impacchetta e seleziona i file necessari per l'implementazione come parte della funzione di `ModelBuilder` compilazione. Durante questo processo, l' SageMaker IA crea anche la firma HMAC per il file pickle e aggiunge la chiave segreta nell'[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API come variabile di ambiente durante `deploy` (o). `create` L’avvio dell’endpoint utilizza la variabile di ambiente per convalidare l’integrità del file pickle.

```
# Build the model according to the model server specification and save it as files in the working directory
model = model_builder.build()
```

Implementa il modello con il metodo `deploy` esistente. In questa fase, l' SageMaker IA configura un endpoint per ospitare il modello non appena inizia a fare previsioni sulle richieste in arrivo. Sebbene `ModelBuilder` deduca le risorse dell’endpoint necessarie per implementare il modello, è possibile sovrascrivere tali stime con valori di parametro personalizzati. L'esempio seguente indirizza l' SageMaker IA a implementare il modello su una singola istanza. `ml.c6i.xlarge` Un modello costruito da `ModelBuilder` consente la registrazione di log in tempo reale durante l’implementazione come funzionalità aggiuntiva.

```
predictor = model.deploy(
    initial_instance_count=1,
    instance_type="ml.c6i.xlarge"
)
```

Per un controllo più granulare sulle risorse dell’endpoint assegnate al modello, è possibile utilizzare un oggetto `ResourceRequirements`. Con l'`ResourceRequirements`oggetto, puoi richiedere un numero minimo di CPUs acceleratori e copie dei modelli che desideri distribuire. È anche possibile richiedere un limite minimo e un limite massimo di memoria (in MB). Per utilizzare questa funzionalità, è necessario specificare il tipo di endpoint come`EndpointType.INFERENCE_COMPONENT_BASED`. L’esempio seguente richiede quattro acceleratori, una dimensione minima di memoria di 1.024 MB e una copia del modello da implementare in un endpoint di tipo `EndpointType.INFERENCE_COMPONENT_BASED`.

```
resource_requirements = ResourceRequirements(
    requests={
        "num_accelerators": 4,
        "memory": 1024,
        "copies": 1,
    },
    limits={},
)
predictor = model.deploy(
    mode=Mode.SAGEMAKER_ENDPOINT,
    endpoint_type=EndpointType.INFERENCE_COMPONENT_BASED,
    resources=resource_requirements,
    role="role"
)
```

## Importare un container personalizzato (Bring Your Own Container, BYOC)
<a name="how-it-works-modelbuilder-creation-mb-byoc"></a>

Se desideri portare il tuo contenitore (esteso da un contenitore SageMaker AI), puoi anche specificare l'URI dell'immagine come mostrato nell'esempio seguente. È inoltre necessario identificare il server del modello che corrisponde all’immagine per consentire a `ModelBuilder` di generare artefatti specifici per il server.

```
model_builder = ModelBuilder(
    model=model,
    model_server=ModelServer.TORCHSERVE,
    schema_builder=SchemaBuilder(X_test, y_pred),
    image_uri="123123123123.dkr.ecr.ap-southeast-2.amazonaws.com/byoc-image:xgb-1.7-1")
)
```

## Utilizzo ModelBuilder in modalità locale
<a name="how-it-works-modelbuilder-creation-local"></a>

È possibile implementare il modello in locale utilizzando l’argomento `mode` per passare dal test locale all’implementazione in un endpoint e viceversa. È necessario archiviare gli artefatti del modello nella directory di lavoro, come mostrato nel frammento di codice seguente:

```
model = XGBClassifier()
model.fit(X_train, y_train)
model.save_model(model_dir + "/my_model.xgb")
```

Passa l’oggetto del modello, un’istanza di `SchemaBuilder` e imposta la modalità su `Mode.LOCAL_CONTAINER`. Durante la chiamata della funzione `build`, `ModelBuilder` identifica automaticamente il container framework supportato e cerca dipendenze. L'esempio seguente mostra la creazione di un modello con un XGBoost modello in modalità locale.

```
model_builder_local = ModelBuilder(
    model=model,
    schema_builder=SchemaBuilder(X_test, y_pred),
    role_arn=execution-role,
    mode=Mode.LOCAL_CONTAINER
)
xgb_local_builder = model_builder_local.build()
```

Chiama la funzione `deploy` per l’implementazione locale, come mostrato nel frammento di codice seguente. In caso di specifica di parametri, ad esempio type o count, questi argomenti vengono ignorati.

```
predictor_local = xgb_local_builder.deploy()
```

### Risoluzione dei problemi della modalità locale
<a name="how-it-works-modelbuilder-creation-troubleshoot"></a>

A seconda della singola configurazione locale, potrebbero verificarsi problemi con l’esecuzione di `ModelBuilder` nell’ambiente in uso. Consulta l’elenco seguente per alcuni problemi che potresti riscontrare e come risolverli.
+ **Already already in use**: è possibile che si verifichi un errore `Address already in use`. In questo caso, un container Docker potrebbe essere in esecuzione sulla porta in questione oppure potrebbe essere utilizzato da un altro processo. È possibile seguire l’approccio descritto nella [documentazione di Linux](https://www.cyberciti.biz/faq/what-process-has-open-linux-port/) per identificare il processo e reindirizzare correttamente il processo locale dalla porta 8080 a un’altra porta o pulire l’istanza di Docker.
+ **Problema di autorizzazione IAM**: potresti riscontrare un problema di autorizzazione nel tentativo di estrarre un’immagine Amazon ECR o di accedere ad Amazon S3. In questo caso, accedi al ruolo di esecuzione del notebook o dell’istanza di Studio Classic per verificare la policy per `SageMakerFullAccess` o le rispettive autorizzazioni API.
+ **Problema relativo alla capacità del volume EBS**: se implementi un LLM, potresti esaurire lo spazio durante l’esecuzione di Docker in modalità locale o riscontrare limitazioni di spazio per la cache Docker. In questo caso, puoi provare a spostare il volume Docker su un file system con spazio sufficiente. Per spostare il volume Docker, completa i seguenti passaggi:

  1. Apri un terminale ed esegui `df` per visualizzare l’utilizzo del disco, come mostrato nel seguente output:

     ```
     (python3) sh-4.2$ df
     Filesystem     1K-blocks      Used Available Use% Mounted on
     devtmpfs       195928700         0 195928700   0% /dev
     tmpfs          195939296         0 195939296   0% /dev/shm
     tmpfs          195939296      1048 195938248   1% /run
     tmpfs          195939296         0 195939296   0% /sys/fs/cgroup
     /dev/nvme0n1p1 141545452 135242112   6303340  96% /
     tmpfs           39187860         0  39187860   0% /run/user/0
     /dev/nvme2n1   264055236  76594068 176644712  31% /home/ec2-user/SageMaker
     tmpfs           39187860         0  39187860   0% /run/user/1002
     tmpfs           39187860         0  39187860   0% /run/user/1001
     tmpfs           39187860         0  39187860   0% /run/user/1000
     ```

  1. Sposta la directory Docker predefinita da `/dev/nvme0n1p1` a `/dev/nvme2n1` in in in modo da poter utilizzare appieno il volume AI da 256 GB SageMaker . Per ulteriori dettagli, consulta la documentazione su come [spostare la directory Docker](https://www.guguweb.com/2019/02/07/how-to-move-docker-data-directory-to-another-location-on-ubuntu/).

  1. Arresta Docker con il seguente comando:

     ```
     sudo service docker stop
     ```

  1. Aggiungi un file `daemon.json` a `/etc/docker` oppure aggiungi il seguente blob JSON a quello esistente.

     ```
     {
         "data-root": "/home/ec2-user/SageMaker/{created_docker_folder}"
     }
     ```

  1. Sposta la directory Docker presente nel percorso `/var/lib/docker` in `/home/ec2-user/SageMaker AI` con il seguente comando:

     ```
     sudo rsync -aP /var/lib/docker/ /home/ec2-user/SageMaker/{created_docker_folder}
     ```

  1. Avvia Docker con il seguente comando:

     ```
     sudo service docker start
     ```

  1. Svuota il cestino con il seguente comando:

     ```
     cd /home/ec2-user/SageMaker/.Trash-1000/files/*
     sudo rm -r *
     ```

  1. Se utilizzi un'istanza di SageMaker notebook, puoi seguire i passaggi del [file di preparazione Docker](https://github.com/melanie531/amazon-sagemaker-pytorch-lightning-distributed-training/blob/main/prepare-docker.sh) per preparare Docker per la modalità locale.

## ModelBuilder esempi
<a name="how-it-works-modelbuilder-creation-example"></a>

Per altri esempi di utilizzo per `ModelBuilder` creare i tuoi modelli, consulta i [taccuini ModelBuilder di esempio](https://github.com/aws-samples/sagemaker-hosting/blob/main/SageMaker-Model-Builder).

# Ottimizzazione dell’inferenza per i modelli Amazon SageMaker AI
<a name="model-optimize"></a>

Con Amazon SageMaker AI, puoi migliorare le prestazioni dei tuoi modelli di IA generativa applicando tecniche di ottimizzazione dell’inferenza. Ottimizzare i modelli consente di ottenere un miglior rapporto costo-prestazioni per il tuo caso d’uso. Quando ottimizzi un modello, scegli quale delle tecniche di ottimizzazione supportate applicare, tra cui la quantizzazione, la decodifica speculativa e la compilazione. Dopo aver ottimizzato il modello, puoi eseguire una valutazione per visualizzare le metriche prestazionali relative a latenza, throughput e prezzo.

Per molti modelli, SageMaker AI fornisce anche varie versioni preottimizzate, ognuna delle quali soddisfa le diverse esigenze delle applicazioni in termini di latenza e throughput. Per tali modelli, è possibile implementare una delle versioni ottimizzate senza dover prima ottimizzare il modello autonomamente.

## Tecniche di ottimizzazione
<a name="optimization-techniques"></a>

Amazon SageMaker AI supporta le tecniche di ottimizzazione indicate di seguito.

### Compilazione
<a name="compilation"></a>

La *compilazione* ottimizza il modello per ottenere le migliori prestazioni disponibili sul tipo di hardware scelto senza compromettere la precisione. È possibile applicare la compilazione di modelli per ottimizzare gli LLM per hardware accelerato, come le istanze GPU, le istanze AWS Trainium o le istanze AWS Inferentia.

Quando ottimizzi un modello con la compilazione, usufruisci dei vantaggi offerti da una compilazione anticipata. I tempi di implementazione del modello e la latenza del dimensionamento automatico si riducono, perché i pesi del modello non richiedono la compilazione just-in-time quando il modello viene implementato su una nuova istanza.

Se scegli di compilare il modello per un’istanza GPU, SageMaker AI esegue la compilazione utilizzando la libreria TensorRT-LLM. Se scegli di compilare il modello per un’istanza AWS Trainium o AWS Inferentia, SageMaker AI esegue la compilazione utilizzando AWS Neuron SDK.

### Quantizzazione
<a name="quantization"></a>

La *quantizzazione* è una tecnica che consente di ridurre i requisiti hardware di un modello utilizzando un tipo di dati meno preciso per i pesi e le attivazioni. Dopo aver ottimizzato un modello con la quantizzazione, è possibile ospitarlo su GPU meno costose e più disponibili. Tuttavia, il modello quantizzato potrebbe essere meno preciso del modello di origine ottimizzato. 

I formati di dati supportati da SageMaker AI per la quantizzazione variano da modello a modello. I formati supportati sono i seguenti:
+ INT4-AWQ: formato di dati a 4 bit. La quantizzazione del peso sensibile all’attivazione (AWQ) è una tecnica di quantizzazione per LLM efficiente, accurata, a basso numero di bit e basata solo sul peso.
+ FP8: Floating Point a 8 bit (FP8) è un formato a bassa precisione per numeri in virgola mobile. Bilancia l’efficienza della memoria e la precisione del modello rappresentando valori con un minor numero di bit rispetto al formato a virgola mobile FP16 standard.
+ INT8-SmoothQuant: formato di dati a 8 bit. SmoothQuant è un metodo di quantizzazione a precisione mista che scala congiuntamente le attivazioni e i pesi, bilanciando i rispettivi intervalli dinamici.

### Decodifica speculativa
<a name="speculative-decoding"></a>

La *decodifica speculativa* è una tecnica che consente di accelerare il processo di decodifica di LLM di grandi dimensioni. Ottimizza i modelli per la latenza senza compromettere la qualità del testo generato.

Questa tecnica utilizza un modello più piccolo ma più veloce, chiamato modello di *bozza*. Il modello di bozza genera token candidati, che vengono poi convalidati dal modello di *destinazione*, più grande ma più lento. A ogni iterazione, il modello di bozza genera più token candidati. Il modello di destinazione verifica i token e, se rileva che un determinato token non è accettabile, lo rifiuta e lo rigenera. Quindi, il modello di destinazione verifica i token e ne genera una piccola quantità.

Il modello di bozza è notevolmente più veloce del modello di destinazione. Genera rapidamente tutti i token e quindi li invia in batch al modello di destinazione per la verifica. Il modello di destinazione li valuta tutti in parallelo, accelerando così la risposta finale.

SageMaker AI offre una bozza di modello predefinita che puoi utilizzare, in modo da non dover crearne uno tuo. Se preferisci utilizzare il tuo modello di bozza personalizzato, SageMaker AI supporta anche questa opzione.

### Caricamento rapido dei modelli
<a name="fast-model-loading"></a>

La tecnica di *caricamento rapido dei modelli* prepara un LLM in modo che SageMaker AI possa caricarlo su un’istanza ML più rapidamente.

Per preparare il modello, SageMaker AI ne esegue lo sharding in anticipo, dividendolo in parti che possono risiedere ciascuna su una GPU separata per l’inferenza distribuita. Inoltre, SageMaker AI memorizza i pesi del modello in blocchi di dimensioni uguali che può caricare contemporaneamente sull’istanza.

Quando SageMaker AI carica sull’istanza il modello ottimizzato, ne trasmette i pesi direttamente da Amazon S3 alle GPU dell’istanza. Nella trasmissione dei pesi in streaming, SageMaker AI omette diverse fasi dispendiose in termini di tempo che di norma sono necessarie. Queste fasi includono il download su disco degli artefatti del modello da Amazon S3, il caricamento degli artefatti del modello nella memoria host e lo sharding del modello sull’host prima di caricare definitivamente gli shard sulle GPU.

Dopo aver ottimizzato il modello per un caricamento più rapido, puoi accelerarne l’implementazione su un endpoint di SageMaker AI. Inoltre, se configuri l’endpoint per utilizzare il dimensionamento automatico, questo aumenta orizzontalmente in modo più rapido per adattarsi all’aumento del traffico.

# Implementazione di un modello preottimizzato
<a name="model-optimize-preoptimized"></a>

Alcuni modelli in JumpStart sono preottimizzati da SageMaker AI. Questo significa che è possibile implementare versioni ottimizzate di tali modelli senza prima creare un processo di ottimizzazione dell’inferenza. 

Per l’elenco dei modelli con opzioni preottimizzate, consulta [Modelli JumpStart preottimizzati](#pre-optimized-js).

## Amazon SageMaker Studio
<a name="preoptimized-studio"></a>

Utilizza la seguente procedura per implementare un modello JumpStart preottimizzato utilizzando Amazon SageMaker Studio.

**Come implementare un modello preottimizzato**

1. In Studio, nel menu di navigazione a sinistra, seleziona **JumpStart**.

1. Nella pagina **Tutti i modelli pubblici**, scegli uno dei modelli preottimizzati.

1. Nella pagina dei dettagli del modello, scegli **Implementa**.

1. Nella pagina di implementazione, alcuni modelli di JumpStart richiedono la firma di un contratto di licenza con l’utente finale (End User License Agreement, EULA) prima di procedere. Se richiesto, consulta i termini di licenza nella sezione **Contratto di licenza**. Se i termini sono accettabili per il caso d’uso specifico, seleziona la casella di controllo **Accetto l’EULA e leggi i termini e le condizioni.**

   Per ulteriori informazioni, consulta [Contratti di licenza con l'utente finale](jumpstart-foundation-models-choose.md#jumpstart-foundation-models-choose-eula).

1. In **Nome endpoint** e **Conteggio istanze iniziale**, accetta i valori predefiniti o imposta quelli personalizzati.

1. In **Tipo di istanza**, mantieni il valore predefinito. In caso contrario, non sarà possibile implementare una configurazione preottimizzata.

1. In **Modelli**, espandi la configurazione del modello. Studio mostra una tabella che fornisce configurazioni preottimizzate tra cui scegliere. Ogni opzione include metriche per la latenza e il throughput. Scegli l’opzione più indicata per le tue esigenze di applicazione.

1. Seleziona **Deploy (Implementa)**.

## SageMaker AI Python SDK
<a name="preoptimized-sdk"></a>

Puoi implementare un modello preottimizzato utilizzando SageMaker AI Python SDK nel tuo progetto. Innanzitutto, definisci un’istanza `Model` utilizzando la classe `ModelBuilder`. Quindi, utilizza il metodo `set_deployment_config()` per impostare la configurazione preottimizzata che desideri implementare. Quindi, utilizza il metodo `build()` per creare il modello. Infine, utilizza il metodo `deploy()` per implementarlo su un endpoint di inferenza.

Per ulteriori informazioni sulle classi e i metodi utilizzati negli esempi seguenti, consulta [API](https://sagemaker.readthedocs.io/en/stable/api/index.html) nella documentazione di SageMaker AI Python SDK.

**Come configurare il progetto**

1. Nel codice dell’applicazione, importa le librerie necessarie. L’esempio seguente importa l’SDK per Python (Boto3). Importa anche i moduli dal SageMaker AI Python SDK che utilizzi per definire e utilizzare i modelli:

   ```
   import boto3
   from sagemaker.serve.builder.model_builder import ModelBuilder
   from sagemaker.serve.builder.schema_builder import SchemaBuilder
   from sagemaker.session import Session
   ```

1. Inizializza una sessione di SageMaker AI. L’esempio seguente utilizza la classe `Session()`:

   ```
   sagemaker_session = Session()
   ```

**Come definire il tuo modello**

1. Crea un’istanza `SchemaBuilder` e fornisci esempi di input e output. Fornisci questa istanza alla classe `ModelBuilder` al momento della definizione di un modello. SageMaker AI può così generare automaticamente le funzioni di marshalling per serializzare e deserializzare l’input e l’output.

   Per ulteriori informazioni sull’utilizzo delle classi `SchemaBuilder` e `ModelBuilder`, consulta [Crea un modello in Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md).

   L’esempio seguente fornisce esempi di stringhe di input e output per la classe `SchemaBuilder`:

   ```
   response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun."
   sample_input = {
       "inputs": "What is the largest planet in the solar system?",
       "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6},
   }
   sample_output = [{"generated_text": response}]
   schema_builder = SchemaBuilder(sample_input, sample_output)
   ```

1. Definisci il tuo modello in SageMaker AI. L’esempio seguente imposta i parametri per inizializzare un’istanza `ModelBuilder`:

   ```
   model_builder = ModelBuilder(
       model="jumpstart-model-id",
       schema_builder=schema_builder,
       sagemaker_session=sagemaker_session,
       role_arn=sagemaker_session.get_caller_identity_arn(),
   )
   ```

   Questo esempio utilizza un modello JumpStart. Sostituisci `jumpstart-model-id` con l’ID di un modello JumpStart, ad esempio `meta-textgeneration-llama-3-70b`.

**Come recuperare le metriche di riferimento**

1. Per determinare quale configurazione preottimizzata desideri implementare, consulta le opzioni fornite da SageMaker AI. Sono visualizzate nell’esempio seguente:

   ```
   model_builder.display_benchmark_metrics()
   ```

   Questo metodo `display_benchmark_metrics()` stampa una tabella simile alla seguente:

   ```
   | Instance Type   | Config Name   |   Concurrent Users |   Latency, TTFT (P50 in sec) |   Throughput (P50 in tokens/sec/user) |
   |:----------------|:--------------|-------------------:|-----------------------------:|--------------------------------------:|
   | ml.g5.48xlarge  | lmi-optimized |                  1 |                         2.25 |                                 49.70 |
   | ml.g5.48xlarge  | lmi-optimized |                  2 |                         2.28 |                                 21.10 |
   | ml.g5.48xlarge  | lmi-optimized |                  4 |                         2.37 |                                 14.10 |
   . . .
   | ml.p4d.24xlarge | lmi-optimized |                  1 |                         0.10 |                                137.40 |
   | ml.p4d.24xlarge | lmi-optimized |                  2 |                         0.11 |                                109.20 |
   | ml.p4d.24xlarge | lmi-optimized |                  4 |                         0.13 |                                 85.00 |
   . . .
   ```

   Nella prima colonna, la tabella elenca i potenziali tipi di istanza che è possibile utilizzare per ospitare il modello JumpStart scelto. Per ogni tipo di istanza, in `Config Name` sono elencati i nomi delle configurazioni preottimizzate. Le configurazioni fornite da SageMaker AI sono denominate `lmi-optimized`. Per ogni tipo di istanza e configurazione, la tabella fornisce metriche di riferimento. Queste metriche indicano il throughput e la latenza che il modello supporterà per un numero diverso di utenti simultanei.

1. In base alle metriche di riferimento, scegli il tipo di istanza e il nome di configurazione che meglio supportano le tue esigenze di prestazioni. Questi valori ti serviranno per creare una configurazione di implementazione.

**Come implementare un modello preottimizzato**

1. Crea una configurazione dell’implementazione. L’esempio seguente utilizza un’istanza `ModelBuilder`, che passa un tipo di istanza e un nome di configurazione al metodo `set_deployment_config()`:

   ```
   model_builder.set_deployment_config(
       config_name="config-name", 
       instance_type="instance-type",
   )
   ```

   Sostituisci *`config-name`* con un nome di configurazione contenuto nella tabella, ad esempio `lmi-optimized`. Sostituisci `instance-type` con un tipo di istanza presente nella tabella, ad esempio `ml.p4d.24xlarge`.

1. Crea il tuo modello. L’esempio seguente utilizza il metodo `.build()` dell’istanza `ModelBuilder`:

   ```
   optimized_model = model_builder.build()
   ```

   Il metodo `.build()` restituisce un’istanza `Model` implementabile.

1. Implementa il tuo modello su un endpoint di inferenza. L’esempio seguente utilizza il metodo `.deploy()` dell’istanza `Model`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   Il metodo `deploy()` restituisce un’istanza `Predictor`, che è possibile utilizzare per inviare richieste di inferenza al modello.

**Come testare il modello con una richiesta di inferenza**
+ Dopo aver implementato il modello su un endpoint di inferenza, verifica le previsioni tramite modello. L’esempio seguente invia una richiesta di inferenza utilizzando l’istanza `Predictor`:

  ```
  predictor.predict(sample_input)
  ```

  Il modello restituisce il testo generato con una risposta simile alla seguente:

  ```
  {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}
  ```

## Modelli JumpStart preottimizzati
<a name="pre-optimized-js"></a>

Di seguito sono riportati i modelli JumpStart con configurazioni preottimizzate.

**Meta**
+ Llama 3.1 70B Instruct
+ Llama 3.1 70B
+ Llama 3.1 405B Instruct FP8
+ Llama 3.1 405B FP8
+ Llama 3 8B Instruct
+ Llama 3 8B
+ Llama 3 70B Instruct
+ Llama 3 70B
+ Llama 2 70B Chat
+ Llama 2 7B Chat
+ Llama 2 13B Chat

**HuggingFace**
+ Mixtral 8x7B Instruct
+ Mixtral 8x7B
+ Mistral 7B Instruct
+ Mistral 7B

### Modelli JumpStart precompilati
<a name="pre-compiled"></a>

Per alcuni modelli e configurazioni, SageMaker AI fornisce modelli precompilati per istanze AWS Inferentia e AWS Trainium specifiche. In questi casi, se si crea un processo di ottimizzazione della compilazione e si sceglie ml.inf2.48xlarge o ml.trn1.32xlarge come tipo di istanza di implementazione, SageMaker AI recupera gli artefatti compilati. Poiché il processo utilizza un modello già compilato, il completamento è rapido e non richiede di eseguire la compilazione da zero.

I seguenti sono i modelli JumpStart per i quali SageMaker AI dispone di modelli precompilati:

**Meta**
+ Llama3 8B
+ Llama3 70B
+ Llama2 7B
+ Llama2 70B
+ Llama2 13B
+ Code Llama 7B
+ Code Llama 70B

**HuggingFace**
+ Mistral 7B

# Creazione di un processo di ottimizzazione dell’inferenza
<a name="model-optimize-create-job"></a>

Puoi creare un lavoro di ottimizzazione dell'inferenza utilizzando Studio o l'SDK SageMaker AI Python. Il processo ottimizza il modello applicando le tecniche scelte dall’utente. Per ulteriori informazioni, consulta [Tecniche di ottimizzazione](model-optimize.md#optimization-techniques).

**Prezzi delle istanze per i processi di ottimizzazione dell’inferenza**  
Quando crei un lavoro di ottimizzazione dell'inferenza che applica la quantizzazione o la compilazione, l' SageMaker intelligenza artificiale sceglie il tipo di istanza da utilizzare per eseguire il lavoro. L’addebito si basa sull’istanza utilizzata.  
Per i possibili tipi di istanze e i relativi dettagli sui prezzi, consulta le informazioni sui prezzi di ottimizzazione dell'inferenza nella pagina [ SageMaker dei prezzi di Amazon](https://aws.amazon.com/sagemaker/pricing/).  
Non sono previsti costi aggiuntivi per i processi che applicano la decodifica speculativa.

Per informazioni sui modelli supportati che è possibile ottimizzare, consulta [Riferimento sui modelli supportati](optimization-supported-models.md).

## Amazon SageMaker Studio
<a name="optimize-create-studio"></a>

Completa la seguente procedura per creare un processo di ottimizzazione dell’inferenza in Studio.

**Come iniziare a creare un processo di ottimizzazione**

1. In SageMaker AI Studio, crea un lavoro di ottimizzazione attraverso uno dei seguenti percorsi:
   + Per creare un lavoro per un JumpStart modello, procedi come segue:

     1. Nel menu di navigazione, scegliete **JumpStart**.

     1. Nella pagina **Tutti i modelli pubblici**, scegli un provider di modelli, quindi scegli uno dei modelli che supporta l’ottimizzazione.

     1. Nella pagina dei dettagli del modello, scegli **Ottimizza**. Questo pulsante è abilitato solo per i modelli che supportano l’ottimizzazione.

     1. Nella pagina **Crea processo di ottimizzazione dell'inferenza**, alcuni JumpStart modelli richiedono la firma di un contratto di licenza con l'utente finale (EULA) prima di poter procedere. Se richiesto, consulta i termini di licenza nella sezione **Contratto di licenza**. Se i termini sono accettabili per il caso d’uso specifico, seleziona la casella di controllo **Accetto l’EULA e leggi i termini e le condizioni.**
   + Per creare un lavoro per un modello ottimizzato JumpStart , procedi come segue:

     1. Nel menu di navigazione, in **Processi**, scegli **Addestramento**.

     1. Nella pagina **Training Jobs**, scegliete il nome di un job che avete usato per mettere a punto un modello. JumpStart Questi lavori hanno il tipo di **JumpStartformazione** nella colonna **Tipo di lavoro**.

     1. Nella pagina dei dettagli del job di addestramento, scegli **Ottimizza**.
   + Per creare un processo per un modello personalizzato, effettua le seguenti operazioni:

     1. Nel menu di navigazione, in **Processi**, scegli **Ottimizzazione dell’inferenza**.

     1. Scegli **Create new job** (Crea nuovo processo).

     1. Nella pagina **Creazione di un processo di ottimizzazione dell’inferenza**, scegli **Aggiungi modello**.

     1. Nella finestra **Aggiungi modello**, scegli **Modello personalizzato**.

     1. Scegli una delle seguenti opzioni:

        **Usa il tuo modello esistente**: seleziona questa opzione per ottimizzare un modello che hai già creato in SageMaker AI.

        **Nome del modello esistente**: inserisci il nome del tuo modello di SageMaker intelligenza artificiale.

        **Da S3**: seleziona questa opzione per fornire artefatti del modello da Amazon S3. In **URI S3**, inserisci l’URI per la posizione in Amazon S3 in cui hai archiviato gli artefatti del modello.

     1. (Facoltativo) Per ****Output model name****, puoi inserire un nome personalizzato per il modello ottimizzato creato dal lavoro. Se non fornite un nome, Studio ne genera automaticamente uno in base alla selezione effettuata.

1. Nella pagina **Create inference optimization job**, per **Job name**, puoi accettare il nome predefinito assegnato da SageMaker AI. Oppure, per inserire un nome di processo personalizzato, seleziona il campo **Nome del processo** e scegli **Inserisci il nome del processo**.

**Come impostare le configurazioni di ottimizzazione**

1. Per **Tipo di istanza implementazione**, scegli il tipo di istanza per il quale desideri ottimizzare il modello.

   Il tipo di istanza influisce sulle tecniche di ottimizzazione che puoi scegliere. Per la maggior parte dei tipi che utilizzano hardware GPU, le tecniche supportate sono la **Quantizzazione** e la **Decodifica speculativa**. Se scegli un'istanza che utilizza silicio personalizzato, come l'istanza AWS Inferentia ml.inf2.8xlarge, la tecnica supportata è la **compilazione**, che puoi usare per compilare il modello per quel tipo di hardware specifico.

1. Seleziona una o più tecniche di ottimizzazione fornite da Studio:
   + Se selezioni **Quantizzazione**, scegli un tipo di dati per **Tipo di dati di precisione**. 
   + Se selezioni **Decodifica speculativa**, scegli una delle seguenti opzioni:
     + **Usa il modello di bozza SageMaker AI: scegli di utilizzare il modello bozza fornito** dall'intelligenza artificiale. SageMaker 
**Nota**  
Se scegli di utilizzare il modello di bozza SageMaker AI, devi anche abilitare l'isolamento della rete. Studio offre questa opzione in **Sicurezza**.
     + **Scegli il modello di JumpStart bozza**: scegli di selezionare un modello dal JumpStart catalogo da utilizzare come modello di bozza.
     + **Scegli il tuo modello di bozza**: scegli di utilizzare il tuo modello di bozza e fornisci l’URI S3 che lo individua.
   + Se scegli **Caricamento rapido del modello**, Studio mostra la variabile di ambiente `OPTION_TENSOR_PARALLEL_DEGREE`. Utilizza il campo **Valore** per impostare il grado di parallelizzazione tensoriale. Il valore deve dividere equamente il numero di GPUs nell'istanza scelta per il **tipo di istanza Deployment**. Ad esempio, per suddividere il modello utilizzando un'istanza con 8 GPUs, utilizzate i valori 2, 4 o 8.
   + Se imposti il **tipo di istanza Deployment** su un'istanza AWS Inferentia o AWS Trainium, Studio potrebbe mostrare che **Compilation è l'unica opzione supportata**. In tal caso, Studio seleziona questa opzione per te.

1. Per **Output**, inserisci l’URI di una posizione in Amazon S3. Qui, l' SageMaker intelligenza artificiale memorizza gli artefatti del modello ottimizzato creato dal tuo lavoro.

1. (Facoltativo) Espandi **Opzioni avanzate** per un controllo più preciso sulle impostazioni, come il ruolo IAM, il VPC e le variabili di ambiente. Per ulteriori informazioni, consulta *Opzioni avanzate*.

1. Al termine della configurazione del processo, scegli **Crea processo**.

   Studio mostra la pagina dei dettagli del processo, su cui è indicato lo stato del processo con tutte le relative impostazioni.

### Opzioni avanzate
<a name="set-advanced-optimization-options"></a>

Quando si crea un processo di ottimizzazione dell’inferenza, è possibile impostare le opzioni avanzate indicate di seguito.

In **Configurazioni**, puoi impostare le seguenti opzioni:

**Grado di parallelizzazione tensoriale **  
Un valore per il grado di *parallelizzazione tensoriale*. La parallelizzazione tensoriale è un tipo di parallelizzazione del modello in cui pesi, gradienti e stati dell’ottimizzatore specifici del modello vengono suddivisi tra i dispositivi. Il valore deve dividere equamente il numero di GPUs nel cluster.

**Lunghezza massima del token**  
Il limite per il numero di token che il modello deve generare. Tieni presente che il modello potrebbe non generare sempre il numero massimo di token.

**Concurrency (Simultaneità)**  
La capacità di eseguire più istanze di un modello sullo stesso hardware sottostante. Utilizza la simultaneità per fornire previsioni a più utenti e massimizzare l’utilizzo dell’hardware.

**Dimensione batch**  
Se il modello esegue l’*inferenza in batch*, utilizza questa opzione per controllare la dimensione dei batch elaborati dal modello.  
L’inferenza in batch genera previsioni tramite modelli su un batch di osservazioni. È una buona opzione per set di dati di grandi dimensioni o se non è necessaria una risposta immediata a una richiesta di inferenza. 

In **Sicurezza**, puoi impostare le seguenti opzioni:

**Ruolo IAM**  
Un ruolo IAM che consente all' SageMaker IA di eseguire attività per tuo conto. Durante l'ottimizzazione dei modelli, l' SageMaker intelligenza artificiale necessita del tuo permesso per:  
+ Leggere i dati di input da un bucket S3
+ Scrivere artefatti dei modelli in un bucket S3
+ Scrivere log su Amazon CloudWatch Logs
+ Pubblica i parametri su Amazon CloudWatch
Concedi le autorizzazioni per tutte queste attività a un ruolo IAM.  
Per ulteriori informazioni, consulta [Come utilizzare i ruoli di esecuzione dell' SageMaker IA](sagemaker-roles.md).

**Chiave KMS di crittografia**  
Una chiave in AWS Key Management Service (AWS KMS). SageMaker L'intelligenza artificiale utilizza la loro chiave per crittografare gli artefatti del modello ottimizzato quando l' SageMaker IA carica il modello su Amazon S3.

**VPC**  
SageMaker L'intelligenza artificiale utilizza queste informazioni per creare interfacce di rete e collegarle ai contenitori del modello. Le interfacce di rete forniscono ai container di modello una connessione di rete all'interno del tuo VPC che non è connesso a Internet. Consentono anche al tuo modello di connettersi alle risorse nel tuo VPC privato.  
Per ulteriori informazioni, consulta [Offri agli endpoint ospitati dall' SageMaker intelligenza artificiale l'accesso alle risorse nel tuo Amazon VPC](host-vpc.md).

**Abilitazione dell’isolamento di rete**  
Attiva questa opzione se desideri limitare l’accesso a Internet del container. I container che funzionano con isolamento di rete non possono effettuare chiamate di rete in uscita.  
È necessario attivare questa opzione quando si ottimizza con la decodifica speculativa e si utilizza il SageMaker modello di bozza AI.  
Per ulteriori informazioni sull’isolamento della rete, consulta [Isolamento di rete](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation).

In **Definizione avanzata del container**, è possibile impostare le seguenti opzioni:

**Condizione di arresto**  
Specifica un limite per la durata dell’esecuzione di un processo. Quando il lavoro raggiunge il limite di tempo, l' SageMaker IA termina il lavoro. Utilizza questa opzione per limitare i costi.

**Tag**  
Coppie chiave-valore associate al processo di ottimizzazione.  
Per ulteriori informazioni sui tag, consulta [Tagging delle risorse AWS](https://docs.aws.amazon.com/tag-editor/latest/userguide/tagging.html) in *Riferimenti generali di AWS*.

**Variabili di ambiente**  
Coppie chiave-valore che definiscono le variabili di ambiente da impostare nel container del modello.

## SageMaker SDK per AI per Python
<a name="optimize-create-pysdk"></a>

Puoi creare un lavoro di ottimizzazione dell'inferenza utilizzando l'SDK SageMaker AI Python nel tuo progetto. Innanzitutto, definisci un’istanza `Model` utilizzando la classe `ModelBuilder`. Quindi, utilizza il metodo `optimize()` per eseguire un processo che ottimizza il modello con quantizzazione, decodifica speculativa o compilazione. Al termine del processo, implementa il modello su un endpoint di inferenza utilizzando il metodo `deploy()`.

Per ulteriori informazioni sulle classi e sui metodi utilizzati negli esempi seguenti, consulta la [APIs](https://sagemaker.readthedocs.io/en/stable/api/index.html)documentazione di SageMaker AI Python SDK.

**Come configurare il progetto**

1. Nel codice dell’applicazione, importa le librerie necessarie. L’esempio seguente importa l’SDK per Python (Boto3). Importa anche le classi dall'SDK SageMaker AI Python che usi per definire e lavorare con i modelli:

   ```
   import boto3
   from sagemaker.serve.builder.model_builder import ModelBuilder
   from sagemaker.serve.builder.schema_builder import SchemaBuilder
   from sagemaker.session import Session
   from pathlib import Path
   ```

1. Inizializza una SageMaker sessione AI. L’esempio seguente utilizza la classe `Session()`:

   ```
   sagemaker_session = Session()
   ```

**Come definire il tuo modello**

1. Crea un’istanza `SchemaBuilder` e fornisci esempi di input e output. Fornisci questa istanza alla classe `ModelBuilder` al momento della definizione di un modello. Con esso, l' SageMaker IA genera automaticamente le funzioni di marshalling per serializzare e deserializzare l'input e l'output.

   Per ulteriori informazioni sull’utilizzo delle classi `SchemaBuilder` e `ModelBuilder`, consulta [Crea un modello in Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md).

   L’esempio seguente fornisce esempi di stringhe di input e output per la classe `SchemaBuilder`:

   ```
   response = "Jupiter is the largest planet in the solar system. It is the fifth planet from the sun."
   sample_input = {
       "inputs": "What is the largest planet in the solar system?",
       "parameters": {"max_new_tokens": 128, "top_p": 0.9, "temperature": 0.6},
   }
   sample_output = [{"generated_text": response}]
   schema_builder = SchemaBuilder(sample_input, sample_output)
   ```

1.  SageMaker Definisci il tuo modello in base all'intelligenza artificiale. L’esempio seguente imposta i parametri per inizializzare un’istanza `ModelBuilder`:

   ```
   model_builder = ModelBuilder(
       model="jumpstart-model-id",
       schema_builder=schema_builder,
       sagemaker_session=sagemaker_session,
       role_arn=sagemaker_session.get_caller_identity_arn(),
   )
   ```

   Questo esempio utilizza un JumpStart modello. Sostituisci `jumpstart-model-id` con l'ID di un JumpStart modello, ad esempio`meta-textgeneration-llama-3-70b`.
**Nota**  
Se desideri ottimizzare con la decodifica speculativa e desideri utilizzare la bozza SageMaker AI, devi abilitare l'isolamento della rete. Per abilitarlo, includi il seguente argomento quando inizializzi un’istanza `ModelBuilder`:  

   ```
   enable_network_isolation=True,
   ```
Per ulteriori informazioni sull’isolamento della rete, consulta [Isolamento di rete](mkt-algo-model-internet-free.md#mkt-algo-model-internet-free-isolation).

**Come eseguire l’ottimizzazione con la quantizzazione**

1. Per eseguire un processo di quantizzazione, utilizza il metodo `optimize()` e imposta l’argomento `quantization_config`. L’esempio seguente imposta `OPTION_QUANTIZE` come variabile di ambiente nel container di ottimizzazione:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       quantization_config={
           "OverrideEnvironment": {
               "OPTION_QUANTIZE": "awq",
           },
       },
       output_path="s3://output-path",
   )
   ```

   In questo esempio, sostituisci *`instance-type`* con un’istanza ML, ad esempio `ml.p4d.24xlarge`. Sostituisci *`s3://output-path`* con il percorso della posizione S3 in cui archivi il modello ottimizzato creato dal processo.

   Il metodo `optimize()` restituisce un oggetto `Model`, che è possibile utilizzare per implementare il modello in un endpoint.

1. Al termine del processo, implementa il modello. L’esempio seguente utilizza il metodo `deploy()`:

   ```
   predictor = optimized_model.deploy(
       instance_type="instance-type", 
       accept_eula=True,
   )
   ```

   In questo esempio, sostituisci *`instance-type`* con un’istanza ML, ad esempio `ml.p4d.24xlarge`. 

   Il metodo `deploy()` restituisce un oggetto predittore, che è possibile utilizzare per inviare richieste di inferenza all’endpoint che ospita il modello.

**Da ottimizzare con la decodifica speculativa utilizzando il modello AI Draft SageMaker**

Quando ottimizzi il modello con una decodifica speculativa, puoi scegliere di utilizzare una bozza di modello fornita dall' SageMaker intelligenza artificiale oppure puoi usare il tuo. I seguenti esempi utilizzano il modello di bozza SageMaker AI.
**Prerequisito**  
Per ottimizzare con la decodifica speculativa e il modello di bozza SageMaker AI, è necessario abilitare l'isolamento della rete quando si definisce il modello.

1. Per eseguire un processo di decodifica speculativa, utilizza il metodo `optimize()` e imposta l’argomento `speculative_decoding_config`. L'esempio seguente imposta la `ModelProvider` chiave per utilizzare il modello `SAGEMAKER` di bozza fornito dall'IA. SageMaker 

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelProvider": "SAGEMAKER",
       },
   )
   ```

   In questo esempio, sostituisci *`instance-type`* con un’istanza ML, ad esempio `ml.p4d.24xlarge`.

   Il metodo `optimize()` restituisce un oggetto `Model`, che è possibile utilizzare per implementare il modello in un endpoint.

1. Al termine del processo, implementa il modello. L’esempio seguente utilizza il metodo `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   Il metodo `deploy()` restituisce un oggetto predittore, che è possibile utilizzare per inviare richieste di inferenza all’endpoint che ospita il modello.

**Come eseguire l’ottimizzazione con la decodifica speculativa utilizzando un modello di bozza personalizzato**

Prima di poter fornire la bozza del modello personalizzato all' SageMaker IA, devi prima caricare gli artefatti del modello su Amazon S3.

Gli esempi seguenti mostrano un modo possibile per fornire una bozza di modello personalizzata. Gli esempi scaricano la bozza del modello da Hugging Face Hub, la caricano in Amazon S3 e forniscono l’URI S3 per l’argomento `speculative_decoding_config`.

1. Se desideri scaricare un modello dall’Hugging Face Hub, aggiungi la libreria `huggingface_hub` al tuo progetto e scarica un modello con il metodo `snapshot_download()`. L’esempio seguente scarica un modello in una cartella locale:

   ```
   import huggingface_hub
   
   huggingface_hub.snapshot_download(
       repo_id="model-id",
       revision="main",
       local_dir=download-dir,
       token=hf-access-token,
   )
   ```

   In questo esempio, sostituisci *`model-id`* con l’ID di un modello dell’Hugging Face Hub, ad esempio `meta-llama/Meta-Llama-3-8B`. Sostituisci *`download-dir`* con una directory locale. Sostituisci *`hf-access-token`* con il tuo token di accesso utente. Per scoprire come ottenere il token di accesso, consulta [Token di accesso utente](https://huggingface.co/docs/hub/en/security-tokens) nella documentazione di Hugging Face.

   Per ulteriori informazioni sulla libreria `huggingface_hub`, consulta [Libreria client dell’hub](https://huggingface.co/docs/huggingface_hub/en/index) nella documentazione di Hugging Face.

1. Per rendere disponibile all' SageMaker IA il modello scaricato, caricalo su Amazon S3. L’esempio seguente carica il modello con l’oggetto `sagemaker_session`.

   ```
   custom_draft_model_uri = sagemaker_session.upload_data(
       path=hf_local_download_dir.as_posix(),
       bucket=sagemaker_session.default_bucket(),
       key_prefix="prefix",
   )
   ```

   In questo esempio, sostituisci *`prefix`* con un qualificatore che ti aiuti a distinguere la bozza del modello in S3, ad esempio `spec-dec-custom-draft-model`.

   Il metodo `upload_data()` restituisce l’URI S3 per gli artefatti del modello.

1. Per eseguire un processo di decodifica speculativa, utilizza il metodo `optimize()` e imposta l’argomento `speculative_decoding_config`. L’esempio seguente imposta la chiave `ModelSource` per l’URI S3 del modello di bozza personalizzato:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       speculative_decoding_config={
           "ModelSource": custom_draft_model_uri + "/",
       },
   )
   ```

   In questo esempio, sostituisci *`instance-type`* con un’istanza ML, ad esempio `ml.p4d.24xlarge`.

   Il metodo `optimize()` restituisce un oggetto `Model`, che è possibile utilizzare per implementare il modello in un endpoint.

1. Al termine del processo, implementa il modello. L’esempio seguente utilizza il metodo `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   Il metodo `deploy()` restituisce un oggetto predittore, che è possibile utilizzare per inviare richieste di inferenza all’endpoint che ospita il modello.

**Come ottimizzare con la compilazione**

1. Per eseguire un processo di compilazione, utilizza il metodo `optimize()` e imposta l’argomento `compilation_config`. L’esempio seguente utilizza la chiave `OverrideEnvironment` per impostare le variabili di ambiente necessarie nel container di ottimizzazione:

   ```
   optimized_model = model_builder.optimize(
       instance_type="instance-type",
       accept_eula=True,
       compilation_config={
           "OverrideEnvironment": {
               "OPTION_TENSOR_PARALLEL_DEGREE": "24",
               "OPTION_N_POSITIONS": "8192",
               "OPTION_DTYPE": "fp16",
               "OPTION_ROLLING_BATCH": "auto",
               "OPTION_MAX_ROLLING_BATCH_SIZE": "4",
               "OPTION_NEURON_OPTIMIZE_LEVEL": "2",
           }
       },
       output_path="s3://output-path",
   )
   ```

   In questo esempio, imposta *`instance-type`* su un tipo di istanza ML con hardware accelerato. Ad esempio, per un'inferenza accelerata con AWS Inferentia, puoi impostare il tipo su un'istanza Inf2, ad esempio. `ml.inf2.48xlarge` Sostituisci *`s3://output-path`* con il percorso della posizione S3 in cui archivi il modello ottimizzato creato dal processo.

1. Al termine del processo, implementa il modello. L’esempio seguente utilizza il metodo `deploy()`:

   ```
   predictor = optimized_model.deploy(accept_eula=True)
   ```

   Il metodo `deploy()` restituisce un oggetto predittore, che è possibile utilizzare per inviare richieste di inferenza all’endpoint che ospita il modello.

**Come testare il modello con una richiesta di inferenza**
+ Per inviare una richiesta di inferenza di test al modello implementato, utilizza il metodo `predict()` di un oggetto predittore. L’esempio seguente passa la variabile `sample_input`, che è stata passata anche alla classe `SchemaBuilder` negli esempi per definire il modello:

  ```
  predictor.predict(sample_input)
  ```

  L’input di esempio presenta il prompt, `"What is the largest planet in the solar system?"`. Il metodo `predict()` restituisce la risposta generata dal modello, come illustrato nell’esempio seguente:

  ```
  {'generated_text': ' Jupiter is the largest planet in the solar system. It is the fifth planet from the sun. It is a gas giant with . . .'}
  ```

## AWS SDK per Python (Boto3)
<a name="optimize-create-pysdk-boto"></a>

Puoi utilizzare l' AWS SDK for Python (Boto3) per creare e gestire a livello di codice lavori di ottimizzazione dell'inferenza. Questa sezione fornisce esempi per diverse tecniche di ottimizzazione.

**Prerequisiti**

Prima di creare un lavoro di ottimizzazione con Boto3, assicurati di avere:
+  AWS Credenziali configurate: imposta le tue AWS credenziali con le autorizzazioni appropriate
+ Hai creato un modello di SageMaker intelligenza artificiale (se utilizzi un modello esistente)
+ Dati di addestramento preparati in S3 (per l'ottimizzazione della decodifica speculativa, lunghezza del contesto supportata fino a 4096)
+ Ruolo IAM con le autorizzazioni necessarie: il ruolo di esecuzione deve disporre delle autorizzazioni per accedere a S3 e creare risorse SageMaker 

**Esempio: creazione di un Job di ottimizzazione con EAGLE Speculative Decoding (Llama 3.3 70B)**

Questo esempio dimostra la creazione di un lavoro di ottimizzazione per un modello linguistico di grandi dimensioni utilizzando la tecnica di decodifica speculativa EAGLE:

```
import boto3

# Initialize SageMaker client
sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Step 1: Create a SageMaker model (if not already created)
model_response = sagemaker_client.create_model(
    ModelName='meta-llama-3-3-70b-instruct',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/Llama-3.3-70B-Instruct/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'SAGEMAKER_ENV': '1',
            'SAGEMAKER_MODEL_SERVER_TIMEOUT': '3600'
        }
    }
)

# Step 2: Create optimization job with speculative decoding
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'meta-llama-3-3-70b-instruct'
        }
    },
    DeploymentInstanceType='ml.p4d.24xlarge',
    # MaxInstanceCount specifies the maximum number of instances for distributed training
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_8k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/llama-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**Esempio: creazione di un Job di ottimizzazione da S3 Model Artifacts (Qwen3 32B)**

Questo esempio mostra come creare un lavoro di ottimizzazione utilizzando gli artefatti del modello direttamente da S3:

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Create model from S3 artifacts
model_response = sagemaker_client.create_model(
    ModelName='qwen3-32b',
    ExecutionRoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    PrimaryContainer={
        'Image': '763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:<tag>',
        'Mode': 'SingleModel',
        'ModelDataSource': {
            'S3DataSource': {
                'S3Uri': 's3://my-bucket/models/qwen3-32b/',
                'S3DataType': 'S3Prefix',
                'CompressionType': 'None'
            }
        },
        'Environment': {
            'AWS_REGION': 'us-west-2'
        }
    }
)

# Create optimization job with smaller training dataset
optimization_response = sagemaker_client.create_optimization_job(
    OptimizationJobName='qwen3-optim-job-eagle',
    RoleArn='arn:aws:iam::123456789012:role/SageMakerExecutionRole',
    ModelSource={
        'SageMakerModel': {
            'ModelName': 'qwen3-32b'
        }
    },
    DeploymentInstanceType='ml.g6.48xlarge',
    MaxInstanceCount=4,
    OptimizationConfigs=[
        {
            'ModelSpeculativeDecodingConfig': {
                'Technique': 'EAGLE',
                'TrainingDataSource': {
                    'S3Uri': 's3://my-bucket/training_data/ultrachat_1k/',
                    'S3DataType': 'S3Prefix'
                }
            }
        }
    ],
    OutputConfig={
        'S3OutputLocation': 's3://my-bucket/optimized-models/qwen3-optim-output/',
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 432000  # 5 days
    }
)

print(f"Optimization job ARN: {optimization_response['OptimizationJobArn']}")
```

**Esempio: monitoraggio e gestione dei lavori di ottimizzazione**

Dopo aver creato un lavoro di ottimizzazione, è possibile monitorarne l'avanzamento e gestirlo utilizzando questi comandi:

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name='us-west-2')

# Describe optimization job to check status
describe_response = sagemaker_client.describe_optimization_job(
    OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
)

print(f"Job Status: {describe_response['OptimizationJobStatus']}")

# List all optimization jobs (with pagination)
list_response = sagemaker_client.list_optimization_jobs(
    MaxResults=10,
    SortBy='CreationTime',
    SortOrder='Descending'
)

print("\nRecent optimization jobs:")
for job in list_response['OptimizationJobSummaries']:
    print(f"- {job['OptimizationJobName']}: {job['OptimizationJobStatus']}")

# Stop a running optimization job if needed
# sagemaker_client.stop_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )

# Delete a completed or failed optimization job
# sagemaker_client.delete_optimization_job(
#     OptimizationJobName='llama-optim-job-eagle-speculative-decoding'
# )
```

La decodifica speculativa con Eagle Heads esegue quattro processi di addestramento sequenziali. Ogni processo produce un output che diventa l'input per il successivo. Solo l'output del lavoro finale viene inviato al tuo bucket S3. Gli output intermedi sono crittografati e archiviati in un bucket di servizi SageMaker AI interno per un massimo di 20 giorni. SageMaker L'IA non dispone delle autorizzazioni per decrittografarli. Se desideri che i dati intermedi vengano rimossi prima di tale periodo di tempo, assicurati che il processo sia stato completato o interrotto, quindi apri una richiesta di assistenza [[https://docs.aws.amazon.com/awssupport/latest/user/casecreating-a-support-case-management.html\$1](https://docs.aws.amazon.com/awssupport/latest/user/case-management.html#creating-a-support-case)] per eliminare questi dati. Includi nella richiesta l'ID del tuo AWS account e l'ARN del lavoro di ottimizzazione.

## Limitazioni del modello di bozza SageMaker AI
<a name="sm-draft-model-limitations"></a>

Per qualsiasi modello ottimizzato con il modello di bozza SageMaker AI, tieni presente i requisiti, le restrizioni e le variabili di ambiente supportate.

**Requisiti**

Completa le attività seguenti:
+ Usa un modello fornito da SageMaker JumpStart.
+ Abilita l’isolamento della rete per l’implementazione del modello.
+ Se distribuisci il modello in un contenitore Large Model Inference (LMI), utilizza un DJLServing contenitore con versione 0.28.0 o successiva.

  Per i contenitori disponibili, consulta [Large Model Inference Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) nel GitHub repository Deep Learning Containers.
+ Se ottimizzi il JumpStart modello, usa il formato safetensors per i pesi del modello.

  Per ulteriori informazioni su questo formato, consulta [Safetensors](https://huggingface.co/docs/safetensors/en/index) nella documentazione di Hugging Face.

**Restrizioni**

Non puoi eseguire le operazioni indicate di seguito:
+ Utilizza il modello in ambienti di test locali creati con la modalità locale. 

  Per ulteriori informazioni sulla modalità locale, consulta [Local Mode](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode) nella documentazione di SageMaker AI Python SDK.
+ Accedi al contenitore del modello tramite l' AWS Systems Manager agente (agente SSM). L'agente SSM fornisce l'accesso a livello di shell al contenitore modello in modo da poter eseguire il debug dei processi e registrare i comandi con Amazon. CloudWatch 

  Per ulteriori informazioni sull'utilizzo di questa caratteristica, consulta [Accedi ai container tramite SSM](ssm-access.md).
+ Configura il container del modello per un core dump che si verifica in caso di arresto anomalo del processo. 

  Per ulteriori informazioni sui core dump dei container modello, consulta. [ProductionVariantCoreDumpConfig](sagemaker/latest/APIReference/API_ProductionVariantCoreDumpConfig.html)
+ Implementa il modello su endpoint multi-modello, endpoint multi-container o endpoint che ospitano componenti di inferenza. 

  Per ulteriori informazioni su questi tipi di endpoint, consulta [Endpoint multi-modello](multi-model-endpoints.md), [Endpoint multi-container](multi-container-endpoints.md) e [Componenti di inferenza](realtime-endpoints-deploy-models.md#inference-components).
+ Crea un pacchetto di modelli per il modello. Utilizzate i pacchetti di modelli per creare modelli distribuibili su cui pubblicare. Marketplace AWS

  Per ulteriori informazioni sull'utilizzo di questa caratteristica, consulta [Creazione di una risorsa pacchetto di modelli](sagemaker-mkt-create-model-package.md).
+ Utilizza il tuo codice di inferenza nel container del modello.
+ Utilizza un file `requirements.txt` nel container del modello. Questo tipo di file elenca le dipendenze dei pacchetti.
+ Abilita il parametro `trust_remote_code` di Hugging Face.

**Variabili di ambiente supportate**

Puoi configurare il container solo con le seguenti variabili di ambiente:
+ Variabili di ambiente comuni per container di inferenza di modelli di grandi dimensioni (LMI). 

  Per ulteriori informazioni su queste variabili, consulta [Configurazioni delle variabili di ambiente](https://docs.djl.ai/master/docs/serving/serving/docs/lmi/deployment_guide/configurations.html#environment-variable-configurations) nella documentazione del container LMI.
+ Variabili di ambiente comuni per i pacchetti forniti da Hugging Face Hub nei suoi repository Git. 

  Per i repository, vedi [Hugging Face on](https://github.com/huggingface). GitHub
+ Variabili di ambiente comuni PyTorch e CUDA. 

  Per ulteriori informazioni su queste variabili, consulta [Torch Environment Variables](https://pytorch.org/docs/stable/torch_environment_variables.html) nella PyTorch documentazione.

# Visualizzazione dei risultati del processo di ottimizzazione
<a name="model-optimize-view-results"></a>

Dopo aver creato uno o più processi di ottimizzazione, puoi utilizzare Studio per visualizzare una tabella riassuntiva di tutti i tuoi processi e i relativi dettagli.

## Amazon SageMaker Studio
<a name="optimization-results-studio"></a>

**Come visualizzare la tabella riassuntiva dei processi di ottimizzazione**
+ Nel menu di navigazione di Studio, in **Processi**, scegli **Ottimizzazione dell’inferenza**.

  La pagina **Ottimizzazione dell’inferenza** contiene una tabella in cui sono riportati i processi che hai creato. Per ogni processo, mostra le configurazioni di ottimizzazione che hai applicato e lo stato del processo.

**Come visualizzare i dettagli per un processo**
+ Scegli il nome del processo nella tabella di riepilogo presente nella pagina **Ottimizzazione dell’inferenza**.

  Studio mostra la pagina dei dettagli del processo, su cui è indicato lo stato del processo con tutte le impostazioni applicate al momento della sua creazione. Se il processo è stato completato correttamente, SageMaker AI ha archiviato gli artefatti del modello ottimizzato nella posizione Amazon S3 in **URI S3 del modello ottimizzato**.

# Valutazione delle prestazioni dei modelli ottimizzati
<a name="model-optimize-evaluate"></a>

Dopo aver utilizzato un processo di ottimizzazione per creare un modello ottimizzato, è possibile eseguire una valutazione delle prestazioni del modello. Questa valutazione fornisce metriche relative a latenza, throughput e prezzo. Utilizza queste metriche per determinare se il modello ottimizzato soddisfa le esigenze del tuo caso d’uso o se richiede un’ulteriore ottimizzazione.

È possibile eseguire valutazioni delle prestazioni solo utilizzando Studio. Questa funzionalità non è fornita tramite l'API Amazon SageMaker AI o l'SDK Python.

## Prima di iniziare
<a name="eval-prereqs"></a>

Prima di poter creare una valutazione delle prestazioni, è necessario ottimizzare un modello creando un processo di ottimizzazione dell’inferenza. In Studio, è possibile valutare solo i modelli creati con questi processi.

## Creazione della valutazione delle prestazioni
<a name="create-perf-eval"></a>

Completa la seguente procedura in Studio per creare una valutazione delle prestazioni per un modello ottimizzato.

1. Nel menu di navigazione di Studio, in **Processi**, scegli **Ottimizzazione dell’inferenza**.

1. Scegli il nome del processo che ha creato il modello ottimizzato che desideri valutare.

1. Nella pagina dei dettagli del processo, scegli **Valuta le prestazioni**.

1. Nella pagina **Evaluate performance**, alcuni JumpStart modelli richiedono la firma di un contratto di licenza con l'utente finale (EULA) prima di procedere. Se richiesto, consulta i termini di licenza nella sezione **Contratto di licenza**. Se i termini sono accettabili per il caso d’uso specifico, seleziona la casella di controllo **Accetto l’EULA e leggi i termini e le condizioni.**

1. In **Seleziona un modello per il tokenizzatore**, accetta l’impostazione predefinita o scegli un modello specifico che funga da tokenizer per la tua valutazione.

1. Per **Set di dati di input**, scegli se: 
   + Utilizza i set di dati di esempio predefiniti di AI. SageMaker 
   + Fornisci un URI S3 che rimandi ai tuoi set di dati di esempio.

1. In **URI S3 per i risultati delle prestazioni**, fornisci un URI che rimandi alla posizione in Amazon S3 in cui desideri archiviare i risultati della valutazione.

1. Scegli **Valuta**.

   Studio mostra la pagina **Valutazioni delle prestazioni**, in cui il processo di valutazione viene mostrato nella tabella. La colonna **Stato** mostra lo stato della valutazione.

1. Quando lo stato è **Completato**, scegli il nome del processo per visualizzare i risultati della valutazione.

La pagina dei dettagli della valutazione mostra le tabelle che forniscono le metriche delle prestazioni relative a latenza, throughput e prezzo. Per ulteriori informazioni sulle singole metriche, consulta [Riferimento alle metriche per le valutazioni delle prestazioni di inferenza](#performance-eval-metrics-reference).

## Riferimento alle metriche per le valutazioni delle prestazioni di inferenza
<a name="performance-eval-metrics-reference"></a>

Una volta conclusa correttamente la valutazione delle prestazioni di un modello ottimizzato, la pagina dei dettagli della valutazione in Studio mostra le seguenti metriche.

### Metriche di latenza
<a name="latency-metrics"></a>

La sezione **Latenza** mostra le metriche indicate di seguito.

**Concurrency (Simultaneità)**  
Il numero di utenti simultanei simulati dalla valutazione per invocare l’endpoint contemporaneamente.

**Tempo per il primo token (ms)**  
Il tempo trascorso tra l’invio della richiesta e la ricezione del primo token di una risposta in streaming.

**Latenza inter-token (ms)**  
Il tempo necessario per generare un token di output per ogni richiesta.

**Latenza del client (ms)**  
La latenza della richiesta dal momento in cui questa viene inviata al momento della ricezione dell’intera risposta.

**Input tokens/sec (conteggio)**  
Il numero totale di token di input generati, in tutte le richieste, diviso per la durata totale in secondi della simultaneità.

**Uscita tokens/sec (conteggio)**  
Il numero totale di token di output generati, in tutte le richieste, diviso per la durata totale in secondi della simultaneità.

**Invocazioni del client (numero)**  
Il numero totale di richieste di inferenza inviate all’endpoint da tutti gli utenti contemporaneamente.

**Errori di invocazione client (numero)**  
Il numero totale di richieste di inferenza inviate all’endpoint da tutti gli utenti in un determinato momento simultaneo con un conseguente errore di invocazione.

**Errore del tokenizzatore (numero)**  
Il numero totale di richieste di inferenza in cui il tokenizzatore non è riuscito ad analizzare la richiesta o la risposta.

**Risposta di inferenza vuota (numero)**  
Il numero totale di richieste di inferenza che hanno portato a zero token di output o alla mancata analisi della risposta da parte del tokenizzatore.

### Metriche di throughput
<a name="throughput-metrics"></a>

La sezione **Throughput** mostra le metriche indicate di seguito.

**Concurrency (Simultaneità)**  
Il numero di utenti simultanei simulati dalla valutazione per invocare l’endpoint contemporaneamente.

**Ingresso tokens/sec/req (conteggio)**  
Il numero totale di token di input generati al secondo per richiesta.

**Uscita tokens/sec/req (conteggio)**  
Il numero totale di token di output generati al secondo per richiesta.

**Token di input (numero)**  
Il numero totale di token di input generati per richiesta.

**Token di output (numero)**  
Il numero totale di token di output generati per richiesta.

### Metriche di prezzo
<a name="price-metrics"></a>

La sezione **Prezzo** mostra le metriche indicate di seguito.

**Concurrency (Simultaneità)**  
Il numero di utenti simultanei simulati dalla valutazione per invocare l’endpoint contemporaneamente.

**Prezzo per milione di token di input**  
Costo di elaborazione di 1 milione di token di input.

**Prezzo per milione di token di output**  
Costo della generazione di 1 milione di token di output.

# Riferimento sui modelli supportati
<a name="optimization-supported-models"></a>

Le tabelle seguenti mostrano i modelli per i quali l' SageMaker IA supporta l'ottimizzazione dell'inferenza e le tecniche di ottimizzazione supportate.


**Modelli Llama supportati**  

| Nome modello | Formati di dati supportati per la quantizzazione | Supporta la decodifica speculativa | Supporta il caricamento rapido dei modelli | Librerie utilizzate per la compilazione | 
| --- | --- | --- | --- | --- | 
| Meta Llama 2 13B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 2 13B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 2 70B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 2 70B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 2 7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 2 7B Chat |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 3 70B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 3 70B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 3 8B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Llama 3 8B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Meta Code Llama 13B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 13B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 13B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 34B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 34B Instruct  |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 34B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 70B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 70B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 70B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Code Llama 7B Python |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Meta Llama 2 13B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 2 13B Chat Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 2 70B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 2 70B Chat Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 2 7B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 2 7B Chat Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3 70B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3 70B Instruct Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3 8B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3 8B Instruct Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Code Llama 70B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Code Llama 7B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Code Llama 7B Python Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3.1 405B FP8 | Nessuno | Sì  | Sì |  Nessuno  | 
| Istruzioni per Meta Llama 3.1 405B FP8 | Nessuno | Sì  | Sì |  Nessuno  | 
| Meta Llama 3.1 70B |  INT4-FAQ FP8  | Sì  | Sì |  Nessuno  | 
| Meta Llama 3.1 70B Instruct |  INT4-AWQ FP8  | Sì  | Sì |  Nessuno  | 
| Meta Llama 3.1 8B |  INT4-AWQ FP8  | Sì  | Sì |  Nessuno  | 
| Meta Llama 3.1 8B Instruct |  INT4-AWQ FP8  | Sì  | Sì |  Nessuno  | 
| Meta Llama 3.1 70B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3.1 70B Instruct Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3 1 8B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Meta Llama 3.1 8B Instruct Neuron | Nessuno | No | No |  AWSNeurone  | 


**Modelli Mistral supportati**  

| Nome modello | Formati di dati supportati per la quantizzazione | Supporta la decodifica speculativa | Supporta il caricamento rapido dei modelli | Librerie utilizzate per la compilazione | 
| --- | --- | --- | --- | --- | 
| Mistral 7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Mistral 7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  AWSNeurone TensorRT-LLM  | 
| Mistral 7B Neuron | Nessuno | No | No |  AWSNeurone  | 
| Mistral 7B Instruct Neuron | Nessuno | No | No |  AWSNeurone  | 


**Modelli Mixtral supportati**  

| Nome modello | Formati di dati supportati per la quantizzazione | Supporta la decodifica speculativa | Supporta il caricamento rapido dei modelli | Librerie utilizzate per la compilazione | 
| --- | --- | --- | --- | --- | 
| Mixtral-8x22B-Instruct-v0.1 |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Mixtral-8x22B V1 |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Mixtral 8x7B |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 
| Mixtral 8x7B Instruct |  INT4-AWQ INT8-SmoothQuant FP8  | Sì  | Sì |  TensorRT-LLM  | 


**Architetture di modello supportate e tipo EAGLE**  

|  Nome dell'architettura del modello  |  Tipo EAGLE  | 
| --- | --- | 
|  LlamaForCausalLM  |  AQUILA 3  | 
|  ForCausalWen 3 KM  |  AQUILA 3  | 
|  NextForCausalWen 3 KM  |  AQUILA 2  | 
|  MoeForCausalWen 3 KM   |  AQUILA 3  | 
|  ForCausalWen 2 KM  |  AQUILA 3  | 
|  GptOssForCausalLM  |  AQUILA 3  | 

# Opzioni per valutare il tuo modello di machine learning in Amazon SageMaker AI
<a name="how-it-works-model-validation"></a>

Dopo aver addestrato un modello, valutalo per determinare se le prestazioni e l'accuratezza ti permettono di raggiungere gli obiettivi di business. Puoi generare più modelli utilizzando diversi metodi e valutare ognuno. Ad esempio, puoi applicare diverse regole di business per ogni modello e applicare varie misure per determinare l'idoneità di ogni modello. Puoi valutare se il tuo modello debba essere più sensibile o più specifico (o viceversa). 

Puoi valutare il tuo modello utilizzando i dati storici (offline) o i dati in tempo reale:
+ **Test offline**: utilizza dati storici, non in tempo reale, per inviare richieste al modello per inferenze. 

  Distribuisci il tuo modello preparato a un endpoint alfa e utilizza dati storici per inviargli richieste di inferenza. Per inviare le richieste, usa un notebook Jupyter nella tua istanza di notebook Amazon SageMaker AI e la libreria Python AWS SDK per Python (Boto) di alto livello fornita da AI. SageMaker 
+ **Test online con dati in tempo reale**: l'SageMaker intelligenza artificiale supporta il A/B test dei modelli in produzione utilizzando varianti di produzione. Le varianti di produzione sono modelli che utilizzano lo stesso codice di inferenza e vengono implementati sullo stesso endpoint di SageMaker intelligenza artificiale. Devi configurare le varianti di produzione in modo che una piccola porzione di traffico in tempo reale vada al modello che desideri convalidare. Ad esempio, puoi scegliere di inviare il 10% del traffico a una variante di modello per la valutazione. Dopo che sei soddisfatto con le prestazioni del modello, puoi indirizzare il 100% del traffico al modello aggiornato. Per un esempio di test dei modelli in produzione, consulta [Modelli di test con varianti di produzione](model-ab-testing.md).

Per ulteriori informazioni, consulta articoli e libri su come valutare i modelli, ad esempio [Valutazione dei modelli di Machine Learning](http://www.oreilly.com/data/free/evaluating-machine-learning-models.csp). 

Le opzioni per la valutazione offline dei modelli includono:
+ **Convalida utilizzando un set di dati di controllo**: i professionisti del machine learning spesso mettono da parte dei dati come "set di dati di controllo". Non utilizzano questi dati per l’addestramento del modello.

  Grazie a questo approccio, puoi valutare la capacità del modello di fornire inferenze rispetto al set di dati di controllo. Puoi quindi valutare l'efficacia con cui il modello generalizza quanto appreso nell’addestramento iniziale, invece di utilizzare la memoria del modello. Questo approccio alla convalida fornisce un'idea di quanto spesso il modello sia in grado di dedurre la risposta corretta. 

   

  In alcuni modi, questo approccio è analogo all'insegnamento a studenti di scuola elementare. In primo luogo, fornisci un set di esempi per scoprire e testare la loro abilità di generalizzare da quanto imparano. Con gli esercizi e le verifiche, poni dei problemi che non erano compresi nell'apprendimento iniziale e determini se sono in grado di generalizzare in maniera efficace. Gli studenti con una memoria perfetta possono memorizzare i problemi, invece di apprendere le regole.

   

  Di solito, il set di dati di controllo è il 20-30% dei dati di addestramento.

   
+ **Convalida k-fold**: in questo approccio di convalida, suddividi il set di dati di esempio in parti *k*. Ogni parte viene gestita come un set dei dati di controllo per l’addestramento *k* e le altre parti *k* -1 vengono utilizzate come set di addestramento per la specifica esecuzione. Puoi produrre modelli *k* utilizzando un processo analogo e puoi aggregare i modelli per generare il tuo modello finale. Il valore *k* in genere è compreso tra 5 e 10.

# Raccomandazione Amazon SageMaker Inference
<a name="inference-recommender"></a>

Amazon SageMaker Inference Recommender è una funzionalità di Amazon SageMaker AI. Riduce il tempo necessario per mettere in produzione i modelli di machine learning (ML) automatizzando i test di carico e l'ottimizzazione dei modelli tra SageMaker le istanze AI ML. Puoi usare il suggeritore di inferenza per implementare il tuo modello su un endpoint di inferenza in tempo reale o senza server che offre le migliori prestazioni al minor costo. Inference Recommender aiuta a selezionare il tipo di istanza e la configurazione migliori per i tuoi modelli e carichi di lavoro ML. Considera fattori come il conteggio di istanze, i parametri del container, le ottimizzazioni dei modelli, la simultaneità massima e la dimensione della memoria.

Amazon SageMaker Inference Recommender ti addebita solo le istanze utilizzate durante l'esecuzione dei lavori.

## Come funziona
<a name="inference-recommender-how-it-works"></a>

Per utilizzare Amazon SageMaker Inference Recommender, puoi [creare un modello di SageMaker intelligenza artificiale o registrare un modello](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) nel Model Registry con gli SageMaker artefatti del modello. Usa la console AI AWS SDK per Python (Boto3) o la console SageMaker AI per eseguire lavori di benchmarking per diverse configurazioni di endpoint AI. SageMaker I processi di suggerimento delle inferenze ti aiutano a raccogliere e visualizzare i parametri relative di tutte le prestazioni e sull'utilizzo delle risorse per aiutarti a decidere quale tipo e configurazione di endpoint scegliere.

## Come iniziare
<a name="inference-recommender-get-started"></a>

Se sei un utente alle prime armi di Amazon SageMaker Inference Recommender, ti consigliamo di fare quanto segue:

1. Leggi la [Prerequisiti per l'utilizzo di Amazon SageMaker Inference Recommender](inference-recommender-prerequisites.md) sezione per assicurarti di aver soddisfatto i requisiti per utilizzare Amazon SageMaker Inference Recommender.

1. Consulta la sezione [Lavori di raccomandazione con Amazon SageMaker Inference Recommender](inference-recommender-recommendation-jobs.md) per avviare i primi processi di raccomandazione del suggeritore di inferenza.

1. Esplora l'esempio introduttivo del notebook [Jupyter di Amazon SageMaker Inference Recommender o consulta i notebook](https://github.com/aws/amazon-sagemaker-examples/blob/master/sagemaker-inference-recommender/inference-recommender.ipynb) di esempio nella sezione seguente.

## Notebook di esempio
<a name="inference-recommender-notebooks"></a>

Il seguente esempio di notebook Jupyter può aiutarti con i flussi di lavoro per diversi casi d'uso nel suggeritore di inferenza:
+ [Se desideri un notebook introduttivo che esegua il benchmark di un modello, consulta il notebook Inference Recommender. TensorFlow SageMaker TensorFlow](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/inference-recommender.ipynb)
+ [Se vuoi fare un benchmark di un HuggingFace modello, consulta Inference Recommender per notebook. SageMaker HuggingFace](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/huggingface-inference-recommender/huggingface-inference-recommender.ipynb)
+ [Se vuoi fare un benchmark di un XGBoost modello, consulta il notebook Inference Recommender. SageMaker XGBoost](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/xgboost/xgboost-inference-recommender.ipynb)
+ [Se desideri esaminare le CloudWatch metriche per i tuoi lavori di Inference Recommender, consulta il taccuino sulle metriche di Inference Recommender. SageMaker CloudWatch ](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/tensorflow-cloudwatch/tf-cloudwatch-inference-recommender.ipynb)

# Prerequisiti per l'utilizzo di Amazon SageMaker Inference Recommender
<a name="inference-recommender-prerequisites"></a>

Prima di poter utilizzare Amazon SageMaker Inference Recommender, devi completare i passaggi prerequisiti. Ad esempio, mostriamo come utilizzare un modello preformato PyTorch (v1.7.1) ResNet -18 per entrambi i tipi di lavori di raccomandazione di Amazon SageMaker Inference Recommender. Gli esempi mostrati utilizzano AWS SDK per Python (Boto3).

**Nota**  
Gli esempi di codice seguenti utilizzano Python. Rimuovi il carattere di prefisso `!` se esegui uno dei seguenti esempi di codice nel tuo terminale o AWS CLI.
Puoi eseguire i seguenti esempi con il kernel Python 3 (2.6 TensorFlow Python 3.8 CPU Optimized) in un notebook Amazon Studio. SageMaker Per ulteriori informazioni su Studio, consulta [Amazon SageMaker Studio](studio-updated.md).

1. **Crea un ruolo IAM per Amazon SageMaker AI.**

   Crea un ruolo IAM per Amazon SageMaker AI a cui sia allegata la policy gestita `AmazonSageMakerFullAccess` IAM.

1. **Configurare l’ambiente.**

   Importa dipendenze e crea variabili per il Regione AWS tuo ruolo IAM SageMaker AI (dalla fase 1) e per il client SageMaker AI.

   ```
   !pip install --upgrade pip awscli botocore boto3  --quiet
   from sagemaker import get_execution_role, Session, image_uris
   import boto3
   
   region = boto3.Session().region_name
   role = get_execution_role()
   sagemaker_client = boto3.client("sagemaker", region_name=region)
   sagemaker_session = Session()
   ```

1. **(Facoltativo) Esaminare i modelli esistenti sottoposti a benchmark da Inference Recommender.**

   Il suggeritore di inferenza esegue il benchmark per i modelli delle serie di modelli più diffusi. Il suggeritore di inferenza supporta il tuo modello anche se non è già stato sottoposto a benchmark.

   Utilizza `ListModelMetaData` per ottenere un oggetto di risposta che elenchi il dominio, il framework, l'attività e il nome del modello dei modelli di machine learning presenti nelle serie di modelli più diffusi.

   Utilizzerai il dominio, il framework, la versione del framework, l'attività e il nome del modello nei passaggi successivi sia per selezionare un'immagine Docker di inferenza sia per registrare il tuo modello con SageMaker Model Registry. Di seguito viene illustrato come elencare i metadati dei modelli con SDK for Python (Boto3): 

   ```
   list_model_metadata_response=sagemaker_client.list_model_metadata()
   ```

   L’output include i riepiloghi dei modelli (`ModelMetadataSummaries`) e i metadati di risposta (`ResponseMetadata`) simili al seguente esempio:

   ```
   {
       'ModelMetadataSummaries': [{
               'Domain': 'NATURAL_LANGUAGE_PROCESSING',
               'Framework': 'PYTORCH:1.6.0',
                'Model': 'bert-base-cased',
                'Task': 'FILL_MASK'
                },
               {
                'Domain': 'NATURAL_LANGUAGE_PROCESSING',
                'Framework': 'PYTORCH:1.6.0',
                'Model': 'bert-base-uncased',
                'Task': 'FILL_MASK'
                },
               {
               'Domain': 'COMPUTER_VISION',
                'Framework': 'MXNET:1.8.0',
                'Model': 'resnet18v2-gluon',
                'Task': 'IMAGE_CLASSIFICATION'
                },
                {
                'Domain': 'COMPUTER_VISION',
                'Framework': 'PYTORCH:1.6.0',
                'Model': 'resnet152',
                'Task': 'IMAGE_CLASSIFICATION'
                }],
       'ResponseMetadata': {
                               'HTTPHeaders': {
                               'content-length': '2345',
                               'content-type': 'application/x-amz-json-1.1',
                               'date': 'Tue, 19 Oct 2021 20:52:03 GMT',
                               'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
                             },
       'HTTPStatusCode': 200,
       'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
       'RetryAttempts': 0
       }
   }
   ```

   Per questa demo, utilizziamo un modello PyTorch (v1.7.1) ResNet -18 per eseguire la classificazione delle immagini. Il seguente esempio di codice Python memorizza il framework, la versione del framework, il dominio e l'attività in variabili per un uso successivo:

   ```
   # ML framework details
   framework = 'pytorch'
   framework_version = '1.7.1'
   
   # ML model details
   ml_domain = 'COMPUTER_VISION'
   ml_task = 'IMAGE_CLASSIFICATION'
   ```

1. **Carica il tuo modello di machine learning su Amazon S3.**

   Usa questo modello PyTorch (v1.7.1) ResNet -18 se non disponi di un modello di machine learning pre-addestrato:

   ```
   # Optional: Download a sample PyTorch model
   import torch
   from torchvision import models, transforms, datasets
   
   # Create an example input for tracing
   image = torch.zeros([1, 3, 256, 256], dtype=torch.float32)
   
   # Load a pretrained resnet18 model from TorchHub
   model = models.resnet18(pretrained=True)
   
   # Tell the model we are using it for evaluation (not training). Note this is required for Inferentia compilation.
   model.eval()
   model_trace = torch.jit.trace(model, image)
   
   # Save your traced model
   model_trace.save('model.pth')
   ```

   Scarica uno script di inferenza di esempio `inference.py`. Crea una directory `code` e sposta lo script di inferenza nella directory `code`.

   ```
   # Download the inference script
   !wget https://aws-ml-blog-artifacts.s3.us-east-2.amazonaws.com/inference.py
   
   # move it into a code/ directory
   !mkdir code
   !mv inference.py code/
   ```

   Amazon SageMaker AI richiede che i modelli di machine learning preaddestrati siano impacchettati come file TAR compresso (). `*.tar.gz` Comprimi il modello e lo script di inferenza per soddisfare questo requisito:

   ```
   !tar -czf test.tar.gz model.pth code/inference.py
   ```

   Una volta effettuato il provisioning dell'endpoint, i file nell'archivio vengono estratti in `/opt/ml/model/` sull'endpoint.

   Dopo aver compresso il modello e gli artefatti del modello come file `.tar.gz`, caricali nel tuo bucket Amazon S3. Il seguente esempio illustra come caricare il modello su Amazon S3 utilizzando l’ AWS CLI:

   ```
   !aws s3 cp test.tar.gz s3://{your-bucket}/models/
   ```

1. **Seleziona un'immagine di inferenza Docker predefinita o crea la tua immagine Docker di inferenza.**

   SageMaker L'intelligenza artificiale fornisce contenitori per i suoi algoritmi integrati e immagini Docker predefinite per alcuni dei framework di machine learning più comuni, come Apache, e Chainer. MXNet TensorFlow PyTorch Per un elenco completo delle immagini SageMaker AI disponibili, consulta Available [Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

   Se nessuno dei container SageMaker AI esistenti soddisfa le tue esigenze e non disponi di un contenitore esistente, crea una nuova immagine Docker. Per informazioni su come creare la propria immagine Docker, consulta [Container con codice di inferenza personalizzato](your-algorithms-inference-main.md).

   Di seguito viene illustrato come recuperare un'immagine di inferenza della PyTorch versione 1.7.1 utilizzando Python SDK: SageMaker 

   ```
   from sagemaker import image_uris
   
   ## Uncomment and replace with your own values if you did not define  
   ## these variables a previous step.
   #framework = 'pytorch'
   #framework_version = '1.7.1'
   
   # Note: you can use any CPU-based instance here, 
   # this is just to set the arch as CPU for the Docker image
   instance_type = 'ml.m5.2xlarge' 
   
   image_uri = image_uris.retrieve(framework, 
                                   region, 
                                   version=framework_version, 
                                   py_version='py3', 
                                   instance_type=instance_type, 
                                   image_scope='inference')
   ```

   Per un elenco delle istanze SageMaker AI disponibili, consulta i [prezzi di Amazon SageMaker AI](https://aws.amazon.com/sagemaker/pricing/).

1. **Crea un archivio di payload di esempio.**

   Crea un archivio contenente singoli file che lo strumento di test di carico può inviare ai tuoi endpoint SageMaker AI. Il codice di inferenza deve essere in grado di leggere i formati di file dal payload di esempio.

   Di seguito viene scaricata un'immagine.jpg che questo esempio utilizza in un passaggio successivo per il modello ResNet -18.

   ```
   !wget https://cdn.pixabay.com/photo/2020/12/18/05/56/flowers-5841251_1280.jpg
   ```

   Comprimi il payload di esempio come tarball:

   ```
   !tar -cvzf payload.tar.gz flowers-5841251_1280.jpg
   ```

   Carica il payload di esempio su Amazon S3 e annota l'URI di Amazon S3:

   ```
   !aws s3 cp payload.tar.gz s3://{bucket}/models/
   ```

   L'URI Amazon S3 ti servirà in una fase successiva, quindi memorizzalo in una variabile:

   ```
   bucket_prefix='models'
   bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
   payload_s3_key = f"{bucket_prefix}/payload.tar.gz"
   sample_payload_url= f"s3://{bucket}/{payload_s3_key}"
   ```

1. **Prepara l'input del modello per il processo di raccomandazione**

   Per l'ultimo prerequisito, sono disponibili due opzioni per preparare l'input del modello. Puoi registrare il tuo SageMaker modello con Model Registry, che puoi utilizzare per catalogare i modelli per la produzione, oppure puoi creare un modello SageMaker AI e specificarlo nel `ContainerConfig` campo quando crei un lavoro di raccomandazione. La prima opzione è la migliore se si desidera sfruttare le funzionalità offerte da [Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html), come la gestione delle versioni dei modelli e l'automazione dell'implementazione dei modelli. La seconda opzione è ideale se si desidera iniziare rapidamente. Per la prima opzione, vai alla fase 7. Per la seconda opzione, salta la fase 7 e vai alla fase 8.

1. **Opzione 1: registrare il modello nel registro dei modelli**

   Con SageMaker Model Registry, puoi catalogare i modelli per la produzione, gestire le versioni dei modelli, associare i metadati (come le metriche di formazione) a un modello, gestire lo stato di approvazione di un modello, distribuire i modelli alla produzione e automatizzare l'implementazione dei modelli con CI/CD.

   Quando si utilizza SageMaker Model Registry per tracciare e gestire i modelli, questi vengono rappresentati come un pacchetto di modelli con versioni all'interno dei gruppi di pacchetti di modelli. I pacchetti di modelli senza versione non fanno parte di un gruppo di modelli. I gruppi di pacchetti di modelli contengono più versioni o iterazioni di un modello. Sebbene non sia necessario crearli per ogni modello nel registro, aiutano a organizzare vari modelli che hanno tutti lo stesso scopo e offrono l'assegnazione automatica delle versioni.

   Per utilizzare Amazon SageMaker Inference Recommender, devi disporre di un pacchetto modello con versione. Puoi creare un pacchetto modello con versioni a livello di codice con o AWS SDK per Python (Boto3) con Amazon SageMaker Studio Classic. Per creare un pacchetto di modelli provvisti delle versioni a livello di programmazione, crea prima un gruppo di pacchetti di modelli con l'API `CreateModelPackageGroup`. Quindi, crea un pacchetto di modelli utilizzando l'API `CreateModelPackage`. La chiamata a questo metodo crea un pacchetto di modelli provvisti delle versioni.

   Vedi [Creazione di un gruppo di modelli](model-registry-model-group.md) e [Registrazione di una versione del modello](model-registry-version.md) per istruzioni dettagliate su come creare in modo programmatico e interattivo un gruppo di pacchetti di modelli e su come creare un pacchetto modello con versioni, rispettivamente, con AWS SDK per Python (Boto3) Amazon Studio Classic. SageMaker 

   Il seguente esempio di codice mostra come creare un pacchetto di modelli con versione utilizzando AWS SDK per Python (Boto3).
**Nota**  
Non è necessario approvare il pacchetto di modelli per creare un processo del suggeritore di inferenza.

   1. **Creazione di un gruppo di pacchetti di modelli**

      Crea un gruppo di pacchetti di modelli con l'API `CreateModelPackageGroup`. Fornisci un nome al gruppo di pacchetti di modelli per `ModelPackageGroupName` e, facoltativamente, fornisci una descrizione del pacchetto di modelli nel campo `ModelPackageGroupDescription`.

      ```
      model_package_group_name = '<INSERT>'
      model_package_group_description = '<INSERT>' 
      
      model_package_group_input_dict = {
       "ModelPackageGroupName" : model_package_group_name,
       "ModelPackageGroupDescription" : model_package_group_description,
      }
      
      model_package_group_response = sagemaker_client.create_model_package_group(**model_package_group_input_dict)
      ```

      Consulta la [Amazon SageMaker API Reference Guide](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) per un elenco completo di argomenti opzionali e obbligatori a cui puoi passare [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackageGroup.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackageGroup.html).

      Crea un pacchetto di modelli specificando un’immagine Docker che esegue il codice di inferenza e la posizione di Amazon S3 degli artefatti dei modelli e fornisci valori per `InferenceSpecification`. `InferenceSpecification` deve contenere informazioni sui processi di inferenza che possono essere eseguiti con modelli basati su questo pacchetto di modelli, inclusi i seguenti:
      + I percorsi Amazon ECR delle immagini che eseguono il codice di inferenza.
      + (Facoltativo) I tipi di istanza supportati dal pacchetto di modelli per i processi di trasformazione e gli endpoint in tempo reale utilizzati per l’inferenza.
      + I formati dei contenuti di input e output supportati dal pacchetto di modelli per l’inferenza.

      Inoltre, quando crei un pacchetto di modelli, devi specificare i parametri seguenti:
      + [dominio](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Domain): il dominio di machine learning del pacchetto di modelli e dei relativi componenti. I domini comuni di machine learning includono la visione artificiale e l'elaborazione del linguaggio naturale.
      + [attività](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Task): l'attività di machine learning svolta dal pacchetto di modelli. Le attività comuni di machine learning includono il rilevamento degli oggetti e la classificazione delle immagini. Indica "ALTRO" se nessuna delle attività elencate nella guida [API Reference](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) corrisponde al proprio caso d'uso. Consulta le descrizioni dei campi dell'API [Attività](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Task) per un elenco delle attività di machine learning supportate.
      + [SamplePayloadUrl](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-SamplePayloadUrl): il percorso Amazon Simple Storage Service (Amazon S3) Simple Storage Service (Amazon S3) in cui è archiviato il payload di esempio. Questo percorso deve puntare a un singolo archivio TAR compresso GZIP (suffisso .tar.gz).
      + [Framework](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelPackageContainerDefinition.html#sagemaker-Type-ModelPackageContainerDefinition-Framework): il framework di machine learning dell'immagine container del pacchetto di modelli.
      + [FrameworkVersion](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelPackageContainerDefinition.html#sagemaker-Type-ModelPackageContainerDefinition-FrameworkVersion): la versione framework dell'immagine del contenitore del pacchetto modello.

      Se fornisci un elenco di tipi di istanze consentiti da utilizzare per generare inferenze in tempo reale per [SupportedRealtimeInferenceInstanceTypes](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InferenceSpecification.html#sagemaker-Type-InferenceSpecification-SupportedRealtimeInferenceInstanceTypes), Inference Recommender limita lo spazio di ricerca per i tipi di istanze durante un processo. `Default` Utilizza questo parametro se hai vincoli di budget o sai che esiste un set specifico di tipi di istanze in grado di supportare l’immagine del container e del modello.

      In un passaggio precedente, abbiamo scaricato un modello ResNet 18 pre-addestrato e lo abbiamo archiviato in un bucket Amazon S3 in una directory chiamata. `models` Abbiamo recuperato un'immagine di inferenza del Deep Learning Container PyTorch (v1.7.1) e memorizzato l'URI in una variabile chiamata. `image_uri` Utilizza queste variabili nel seguente esempio di codice per definire un dizionario utilizzato come input per l’API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html).

      ```
      # Provide the Amazon S3 URI of your compressed tarfile
      # so that Model Registry knows where to find your model artifacts
      bucket_prefix='models'
      bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
      model_s3_key = f"{bucket_prefix}/test.tar.gz"
      model_url= f"s3://{bucket}/{model_s3_key}"
      
      # Similar open source model to the packaged model
      # The name of the ML model as standardized by common model zoos
      nearest_model_name = 'resnet18'
      
      # The supported MIME types for input and output data. In this example, 
      # we are using images as input.
      input_content_type='image/jpeg'
      
      
      # Optional - provide a description of your model.
      model_package_description = '<INSERT>'
      
      ## Uncomment if you did not store the domain and task in an earlier
      ## step 
      #ml_domain = 'COMPUTER_VISION'
      #ml_task = 'IMAGE_CLASSIFICATION'
      
      ## Uncomment if you did not store the framework and framework version
      ## in a previous step.
      #framework = 'PYTORCH'
      #framework_version = '1.7.1'
      
      # Optional: Used for optimizing your model using SageMaker Neo
      # PyTorch uses NCHW format for images
      data_input_configuration = "[[1,3,256,256]]"
      
      # Create a dictionary to use as input for creating a model pacakge group
      model_package_input_dict = {
              "ModelPackageGroupName" : model_package_group_name,
              "ModelPackageDescription" : model_package_description,
              "Domain": ml_domain,
              "Task": ml_task,
              "SamplePayloadUrl": sample_payload_url,
              "InferenceSpecification": {
                      "Containers": [
                          {
                              "Image": image_uri,
                              "ModelDataUrl": model_url,
                              "Framework": framework.upper(), 
                              "FrameworkVersion": framework_version,
                              "NearestModelName": nearest_model_name,
                              "ModelInput": {"DataInputConfig": data_input_configuration}
                          }
                          ],
                      "SupportedContentTypes": [input_content_type]
              }
          }
      ```

   1. **Crea un pacchetto di modelli**

      Utilizza l’API `CreateModelPackage` per creare un pacchetto di modelli. Passa il dizionario di input definito nella fase precedente:

      ```
      model_package_response = sagemaker_client.create_model_package(**model_package_input_dict)
      ```

      È necessario il pacchetto modello ARN per utilizzare Amazon SageMaker Inference Recommender. Prendi nota dell'ARN del pacchetto di modelli o memorizzalo in una variabile:

      ```
      model_package_arn = model_package_response["ModelPackageArn"]
      
      print('ModelPackage Version ARN : {}'.format(model_package_arn))
      ```

1. **Opzione 2: crea un modello e configura il campo `ContainerConfig`**

   Utilizza questa opzione se desideri avviare un processo di raccomandazioni di inferenza e non hai bisogno di registrare il modello nel Model Registry. Nei passaggi seguenti, crei un modello in SageMaker AI e configuri il `ContainerConfig` campo come input per il processo di raccomandazione.

   1. **Creazione di un modello**

      Crea un modello con l'API `CreateModel`. Per un esempio che chiama questo metodo quando si implementa un modello su SageMaker AI Hosting, vedi [Create a Model (AWS SDK per Python (Boto3))](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html#realtime-endpoints-deployment-create-model).

      In un passaggio precedente, abbiamo scaricato un modello ResNet 18 pre-addestrato e lo abbiamo archiviato in un bucket Amazon S3 in una directory chiamata. `models` Abbiamo recuperato un'immagine di inferenza del Deep Learning Container PyTorch (v1.7.1) e memorizzato l'URI in una variabile chiamata. `image_uri` Utilizziamo queste variabili nel seguente esempio di codice in cui definiamo un dizionario utilizzato come input per l'API `[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-ModelName)`.

      ```
      model_name = '<name_of_the_model>'
      # Role to give SageMaker permission to access AWS services.
      sagemaker_role= "arn:aws:iam::<region>:<account>:role/*"
      
      # Provide the Amazon S3 URI of your compressed tarfile
      # so that Model Registry knows where to find your model artifacts
      bucket_prefix='models'
      bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
      model_s3_key = f"{bucket_prefix}/test.tar.gz"
      model_url= f"s3://{bucket}/{model_s3_key}"
      
      #Create model
      create_model_response = sagemaker_client.create_model(
          ModelName = model_name,
          ExecutionRoleArn = sagemaker_role, 
          PrimaryContainer = {
              'Image': image_uri,
              'ModelDataUrl': model_url,
          })
      ```

   1. **Configurazione del campo `ContainerConfig`**

      Successivamente, è necessario configurare il [ContainerConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RecommendationJobInputConfig.html#sagemaker-Type-RecommendationJobInputConfig-ContainerConfig)campo con il modello appena creato e specificare i seguenti parametri al suo interno:
      + `Domain`: il dominio di machine learning del modello e dei suoi componenti, come la visione artificiale o l'elaborazione del linguaggio naturale.
      + `Task`: l'attività di machine learning svolta dal modello, ad esempio la classificazione delle immagini o il rilevamento di oggetti.
      + `PayloadConfig`: la configurazione per il payload per un processo di raccomandazione. Per ulteriori informazioni sui sottocampi, consulta `[RecommendationJobPayloadConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RecommendationJobPayloadConfig.html#sagemaker-Type-RecommendationJobPayloadConfig-SamplePayloadUrl)`.
      + `Framework`: Il framework di apprendimento automatico dell'immagine del contenitore, ad esempio PyTorch.
      + `FrameworkVersion`: la versione del framework dell'immagine container.
      + (Facoltativo) `SupportedInstanceTypes`: un elenco dei tipi di istanza utilizzati per generare inferenze in tempo reale.

      Se utilizzi il parametro `SupportedInstanceTypes`, il suggeritore di inferenza limita lo spazio di ricerca per i tipi di istanze durante un processo di `Default`. Utilizza questo parametro se hai vincoli di budget o sai che esiste un set specifico di tipi di istanze in grado di supportare l'immagine del container e del modello.

      Nel seguente esempio di codice, utilizziamo i parametri definiti in precedenza, insieme a `NearestModelName`, per definire un dizionario utilizzato come input per l'API `[CreateInferenceRecommendationsJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html)`.

      ```
      ## Uncomment if you did not store the domain and task in a previous step
      #ml_domain = 'COMPUTER_VISION'
      #ml_task = 'IMAGE_CLASSIFICATION'
      
      ## Uncomment if you did not store the framework and framework version in a previous step
      #framework = 'PYTORCH'
      #framework_version = '1.7.1'
      
      # The name of the ML model as standardized by common model zoos
      nearest_model_name = 'resnet18'
      
      # The supported MIME types for input and output data. In this example, 
      # we are using images as input
      input_content_type='image/jpeg'
      
      # Optional: Used for optimizing your model using SageMaker Neo
      # PyTorch uses NCHW format for images
      data_input_configuration = "[[1,3,256,256]]"
      
      # Create a dictionary to use as input for creating an inference recommendation job
      container_config = {
              "Domain": ml_domain,
              "Framework": framework.upper(), 
              "FrameworkVersion": framework_version,
              "NearestModelName": nearest_model_name,
              "PayloadConfig": { 
                  "SamplePayloadUrl": sample_payload_url,
                  "SupportedContentTypes": [ input_content_type ]
               },
              "DataInputConfig": data_input_configuration
              "Task": ml_task,
              }
      ```

# Lavori di raccomandazione con Amazon SageMaker Inference Recommender
<a name="inference-recommender-recommendation-jobs"></a>

Amazon SageMaker Inference Recommender può fornire due tipi di consigli:

1. Le raccomandazioni di inferenza (tipo di processo `Default`) eseguono una serie di test di carico sui tipi di istanze consigliati. È inoltre possibile eseguire il test di caricamento per un endpoint serverless. Devi solo fornire un nome della risorsa Amazon (ARN) del pacchetto di modelli per avviare questo tipo di processo di raccomandazione. I processi di raccomandazione delle inferenze vengono completati entro 45 minuti.

1. I consigli sugli endpoint (tipo di processo `Advanced`) sono basati su un test di carico personalizzato in cui si selezionano le istanze ML desiderate o un endpoint serverless, si fornisce un modello di traffico personalizzato e si definiscono i requisiti di latenza e throughput basati sui propri requisiti di produzione. Il completamento di questo processo richiede in media 2 ore, a seconda della durata del processo impostata e del numero totale di configurazioni di inferenza testate.

Entrambi i tipi di consigli si utilizzano allo stesso modo APIs per creare, descrivere e interrompere i lavori. L'output è un elenco di raccomandazioni sulla configurazione delle istanze con variabili di ambiente, costi, throughput e parametri di latenza associati. I processi di raccomandazione forniscono anche un conteggio iniziale delle istanze che è possibile utilizzare per configurare una policy di dimensionamento automatico. Per distinguere tra i due tipi di job, quando crei un lavoro tramite la console di SageMaker intelligenza artificiale o la APIs, specifica `Default` di creare consigli preliminari sugli endpoint e di eseguire test di carico e `Advanced` consigli sugli endpoint personalizzati.

**Nota**  
Non è necessario eseguire entrambi i tipi di processi di raccomandazione nel proprio flusso di lavoro. È possibile eseguire entrambe le operazioni indipendentemente l’una dall’altra.

Il suggeritore di inferenza può anche fornire un elenco di istanze potenziali o i cinque principali tipi di istanze ottimizzati in termini di costi, throughput e latenza per l'implementazione dei modelli, unitamente a un punteggio di attendibilità. È possibile scegliere queste istanze quando si implementa il proprio modello. Il suggeritore di inferenza esegue automaticamente il benchmarking rispetto al modello per fornire le istanze potenziali. Poiché si tratta di raccomandazioni preliminari, consigliamo di eseguire ulteriori processi di raccomandazione delle istanze per ottenere risultati più accurati. Per visualizzare le potenziali istanze, vai alla pagina dei dettagli del tuo SageMaker modello di intelligenza artificiale. Per ulteriori informazioni, consulta [Ottieni immediatamente istanze potenziali](inference-recommender-prospective.md).

**Topics**
+ [Ottieni immediatamente istanze potenziali](inference-recommender-prospective.md)
+ [Raccomandazioni di inferenza](inference-recommender-instance-recommendation.md)
+ [Ottieni una raccomandazione di inferenza per un endpoint esistente](inference-recommender-existing-endpoint.md)
+ [Interrompi la raccomandazione di inferenza](instance-recommendation-stop.md)
+ [Raccomandazioni compilate con Neo](inference-recommender-neo-compilation.md)
+ [Risultati della raccomandazione](inference-recommender-interpret-results.md)
+ [Ottieni raccomandazioni sulle policy di dimensionamento automatico](inference-recommender-autoscaling.md)
+ [Esegui un test di carico personalizzato](inference-recommender-load-test.md)
+ [Interrompi il test di carico](load-test-stop.md)
+ [Risolvi gli errori del suggeritore di inferenza](inference-recommender-troubleshooting.md)

# Ottieni immediatamente istanze potenziali
<a name="inference-recommender-prospective"></a>

Inference Recommender può anche fornirti un elenco di *potenziali istanze, o tipi di istanze* che potrebbero essere adatti al tuo modello, nella pagina dei dettagli del tuo modello di intelligenza artificiale. SageMaker Il suggeritore di inferenza esegue automaticamente il benchmarking preliminare rispetto al modello per fornire le cinque istanze potenziali principali. Poiché si tratta di raccomandazioni preliminari, consigliamo di eseguire ulteriori processi di raccomandazione delle istanze per ottenere risultati più accurati.

Puoi visualizzare un elenco di potenziali istanze per il tuo modello a livello di codice utilizzando l'API [DescribeModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeModel.html), l'SDK SageMaker Python o la console AI. SageMaker 

**Nota**  
Non riceverai potenziali istanze per i modelli che hai creato in AI prima che questa funzionalità diventasse disponibile. SageMaker 

Per visualizzare le istanze potenziali del modello tramite la console, effettua quanto segue:

1. Vai alla SageMaker console all'indirizzo. [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)

1. Nel riquadro di navigazione a sinistra, seleziona **Inferenza** e poi **Moduli**.

1. Dall'elenco dei modelli, scegli il tuo modello.

Nella pagina dei dettagli del modello, vai alla sezione **Istanze potenziali per implementare il modello**. Lo screenshot seguente mostra questa sezione.

![\[Screenshot dell'elenco delle istanze potenziali nella pagina dei dettagli del modello.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inf-rec-prospective.png)


In questa sezione, è possibile visualizzare le potenziali istanze ottimizzate in termini di costi, throughput e latenza per l'implementazione del modello, insieme a informazioni aggiuntive per ogni tipo di istanza, come le dimensioni della memoria, il numero di CPU e GPU e il costo orario.

Se decidi di voler eseguire il benchmark di un payload di esempio ed eseguire un processo completo di raccomandazione di inferenza per il tuo modello, puoi avviare un processo di raccomandazione di inferenza predefinito da questa pagina. Per avviare un processo predefinito tramite la console, effettua quanto segue:

1. Nella pagina dei dettagli del modello, nella **sezione sulle istanze potenziali per implementare il modello**, seleziona **Avvia processo del suggeritore di inferenza**.

1. Nella finestra di dialogo che appare, per **bucket S3 per l'esecuzione del benchmark del payload**, inserisci la posizione Amazon S3 in cui hai archiviato un payload di esempio per il tuo modello.

1. Per il **tipo di contenuto di payload**, inserisci i tipi MIME per i dati del payload.

1. (Facoltativo) Nella sezione **Compilazione del modello con SageMaker Neo**, per la **configurazione di input dei dati**, inserisci una forma di dati in formato dizionario.

1. Scegli **Esegui processo**.

Inference Recommender avvia il lavoro e puoi visualizzare il lavoro e i relativi risultati dalla pagina dell'elenco dei **consigliatori di Inference nella console** AI. SageMaker 

Se desideri eseguire un processo avanzato ed eseguire test di carico personalizzati o se desideri configurare impostazioni e parametri aggiuntivi per il processo, consulta [Esegui un test di carico personalizzato](inference-recommender-load-test.md).

# Raccomandazioni di inferenza
<a name="inference-recommender-instance-recommendation"></a>

I processi di raccomandazione di inferenza eseguono una serie di test di carico sui tipi di istanze consigliati o su un endpoint serverless. I processi di raccomandazione di inferenza utilizzano parametri delle prestazioni basati su test di carico che utilizzano i dati di esempio forniti durante la registrazione della versione del modello.

**Nota**  
Prima di creare un processo di raccomandazione del suggeritore di inferenza, assicurati di aver soddisfatto [Prerequisiti per l'utilizzo di Amazon SageMaker Inference Recommender](inference-recommender-prerequisites.md).

Di seguito viene illustrato come utilizzare Amazon SageMaker Inference Recommender per creare una raccomandazione di inferenza basata sul tipo di modello utilizzando Amazon SageMaker Studio Classic AWS CLI e la AWS SDK per Python (Boto3) console AI SageMaker 

**Topics**
+ [Creazione di una raccomandazione di inferenza](instance-recommendation-create.md)
+ [Ottieni i risultati del processo di raccomandazione di inferenza](instance-recommendation-results.md)

# Creazione di una raccomandazione di inferenza
<a name="instance-recommendation-create"></a>

Crea una raccomandazione di inferenza in modo programmatico utilizzando AWS SDK per Python (Boto3) o il o in modo interattivo utilizzando Studio AWS CLI Classic o la console AI. SageMaker **Specificate un nome di lavoro per la raccomandazione di inferenza, un ARN del ruolo AWS IAM, una configurazione di input e un pacchetto di modelli ARN quando avete registrato il modello nel registro dei modelli, oppure il nome del modello e `ContainerConfig` un dizionario da quando avete creato il modello nella sezione Prerequisiti.**

------
#### [ AWS SDK per Python (Boto3) ]

Usa l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html) per avviare un processo di raccomandazione di inferenza. Imposta il campo `JobType` su `'Default'` per i processi di raccomandazione di inferenza. È inoltre necessario indicare quanto segue:
+ Il nome della risorsa Amazon (ARN) di un ruolo IAM che consente al suggeritore di inferenza di eseguire attività per tuo conto. Definiscilo per il campo `RoleArn`.
+ Un ARN di pacchetti di modelli o il nome del modello. Il suggeritore di inferenza supporta un ARN di pacchetti di modelli o un nome di modello come input. Specifica una delle seguenti proprietà:
  + L'ARN del pacchetto di modelli con versioni che hai creato quando hai registrato il tuo modello nel registro dei modelli SageMaker AI. Definiscilo per `ModelPackageVersionArn` nel campo `InputConfig`.
  + il nome del modello che hai creato. Definiscilo per `ModelName` nel campo `InputConfig`. Inoltre, fornisci il dizionario `ContainerConfig` che include i campi obbligatori da fornire con il nome del modello. Definiscilo per `ContainerConfig` nel campo `InputConfig`. In `ContainerConfig`, se lo desideri, puoi anche specificare il campo `SupportedEndpointType` come `RealTime` o `Serverless`. Se si specifica questo campo, il suggeritore di inferenza restituisce raccomandazioni solo per quel tipo di endpoint. Se si specifica questo campo, il suggeritore di inferenza restituisce raccomandazioni per entrambi i tipi di endpoint.
+ un nome per il processo di raccomandazione del suggeritore di inferenza per il campo `JobName`. Il nome del lavoro di Inference Recommender deve essere univoco all'interno della AWS regione e all'interno del tuo account. AWS 

Importa il AWS SDK per Python (Boto3) pacchetto e crea un oggetto client SageMaker AI utilizzando la classe client. Se hai rispettato le fasi nella sezione **Prerequisiti**, specifica solo uno degli elementi seguenti:
+ Opzione 1: se desideri creare un processo di raccomandazioni di inferenza con un ARN del pacchetto di modelli, archivia l'ARN del gruppo di pacchetti di modelli in una variabile denominata `model_package_arn`.
+ Opzione 2: se desideri creare un progetto di raccomandazioni di inferenza con un nome di modello e `ContainerConfig`, memorizza il nome del modello in una variabile denominata `model_name` e il dizionario `ContainerConfig` in una variabile denominata `container_config`.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<INSERT>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide only one of model package ARN or model name, not both.
# Provide your model package ARN that was created when you registered your 
# model with Model Registry 
model_package_arn = '<INSERT>'
## Uncomment if you would like to create an inference recommendations job with a
## model name instead of a model package ARN, and comment out model_package_arn above
## Provide your model name
# model_name = '<INSERT>'
## Provide your container config 
# container_config = '<INSERT>'

# Provide a unique job name for SageMaker Inference Recommender job
job_name = '<INSERT>'

# Inference Recommender job type. Set to Default to get an initial recommendation
job_type = 'Default'

# Provide an IAM Role that gives SageMaker Inference Recommender permission to 
# access AWS services
role_arn = 'arn:aws:iam::<account>:role/*'

sagemaker_client.create_inference_recommendations_job(
    JobName = job_name,
    JobType = job_type,
    RoleArn = role_arn,
    # Provide only one of model package ARN or model name, not both. 
    # If you would like to create an inference recommendations job with a model name,
    # uncomment ModelName and ContainerConfig, and comment out ModelPackageVersionArn.
    InputConfig = {
        'ModelPackageVersionArn': model_package_arn
        # 'ModelName': model_name,
        # 'ContainerConfig': container_config
    }
)
```

Consulta la [Amazon SageMaker API Reference Guide](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) per un elenco completo di argomenti opzionali e obbligatori a cui puoi passare [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html).

------
#### [ AWS CLI ]

Usa l'API `create-inference-recommendations-job` per avviare un processo di raccomandazione di inferenza. Imposta il campo `job-type` su `'Default'` per i processi di raccomandazione di inferenza. È inoltre necessario indicare quanto segue:
+ L'Amazon Resource Name (ARN) di un ruolo IAM che consente ad Amazon SageMaker Inference Recommender di eseguire attività per tuo conto. Definiscilo per il campo `role-arn`.
+ Un ARN di pacchetti di modelli o il nome del modello. Il suggeritore di inferenza supporta un ARN di pacchetti di modelli o un nome di modello come input. Specifica uno degli elementi seguenti:
  + l'ARN del pacchetto di modelli con versione che hai creato quando hai registrato il modello con Model Registry. Definiscilo per `ModelPackageVersionArn` nel campo `input-config`.
  + il nome del modello che hai creato. Definiscilo per `ModelName` nel campo `input-config`. Inoltre, fornisci il dizionario di `ContainerConfig` che include i campi obbligatori da fornire con il nome del modello. Definiscilo per `ContainerConfig` nel campo `input-config`. In `ContainerConfig`, se lo desideri, puoi anche specificare il campo `SupportedEndpointType` come `RealTime` o `Serverless`. Se si specifica questo campo, il suggeritore di inferenza restituisce raccomandazioni solo per quel tipo di endpoint. Se si specifica questo campo, il suggeritore di inferenza restituisce raccomandazioni per entrambi i tipi di endpoint.
+ un nome per il processo di raccomandazione del suggeritore di inferenza per il campo `job-name`. Il nome del lavoro di Inference Recommender deve essere univoco all'interno della AWS regione e all'interno del tuo account. AWS 

Per creare un processo di raccomandazione di inferenza con un ARN di pacchetti di modelli, utilizza l'esempio seguente:

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region:account:role/*>\",
        }"
```

Per creare un processo di raccomandazione di inferenza con un nome di modello e `ContainerConfig`, utilizza l'esempio seguente. L'esempio utilizza il campo `SupportedEndpointType` per specificare che vogliamo restituire solo raccomandazioni di inferenza in tempo reale:

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelName\": \"model-name\",
        \"ContainerConfig\" : {
                \"Domain\": \"COMPUTER_VISION\",
                \"Framework\": \"PYTORCH\",
                \"FrameworkVersion\": \"1.7.1\",
                \"NearestModelName\": \"resnet18\",
                \"PayloadConfig\": 
                    {
                        \"SamplePayloadUrl\": \"s3://{bucket}/{payload_s3_key}\", 
                        \"SupportedContentTypes\": [\"image/jpeg\"]
                    },
                \"SupportedEndpointType\": \"RealTime\",
                \"DataInputConfig\": \"[[1,3,256,256]]\",
                \"Task\": \"IMAGE_CLASSIFICATION\",
            },
        }"
```

------
#### [ Amazon SageMaker Studio Classic ]

Crea un processo di raccomandazione di inferenza in Studio Classic.

1. Nell’applicazione Studio Classic scegli l’icona home (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/studio/icons/house.png)).

1. Nella barra laterale sinistra di Studio Classic scegli **Modelli**.

1. Seleziona **Model Registry** dall'elenco a discesa per visualizzare i modelli che hai registrato nel registro dei modelli.

   Il pannello di sinistra mostra un elenco di gruppi di modelli. L’elenco include tutti i gruppi di modelli registrati nel registro dei modelli nell’account, inclusi i modelli registrati al di fuori di Studio Classic.

1. Seleziona il nome del gruppo di modelli. Quando selezioni il gruppo di modelli, il riquadro di destra di Studio Classic mostra le intestazioni delle colonne, ad esempio **Versioni** e **Impostazioni**.

   Se disponi di uno o più pacchetti di modelli all’interno del tuo gruppo di modelli, è possibile visualizzare un elenco di tali pacchetti di modelli nella colonna **Versioni**.

1. Seleziona la colonna **Suggeritore di inferenza**.

1. Scegli un ruolo IAM che conceda a Inference Recommender l'autorizzazione ad accedere ai servizi. AWS A tale scopo, è possibile creare un ruolo e collegare la policy gestita IAM `AmazonSageMakerFullAccess`. In alternativa puoi lasciare che Studio Classic crei un ruolo per te.

1. Scegliere **Get recommendations (Ottieni le raccomandazioni)**.

   La raccomandazione di inferenza può richiedere fino a 45 minuti.
**avvertimento**  
Non chiudere questa scheda. Se si chiude questa scheda, si annulla il processo di raccomandazione dell'istanza.

------
#### [ SageMaker AI console ]

Crea un processo di raccomandazione delle istanze tramite la console SageMaker AI effettuando le seguenti operazioni:

1. Vai alla console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione di sinistra, seleziona **Inferenza** e poi **Suggeritore di inferenza**.

1. Nella pagina dei **processi del suggeritore di inferenza**, seleziona **Crea processo**.

1. Per **fase 1, configurazione di modelli**, procedi come segue:

   1. Per **Tipo di processo**, seleziona **Processo del suggeritore predefinito**.

   1. Se utilizzi un modello registrato nel registro dei modelli SageMaker AI, attiva l'interruttore **Scegli un modello dal registro dei modelli** ed esegui le seguenti operazioni:

      1. Dall'elenco a discesa del **gruppo di modelli**, scegli il gruppo di modelli nel registro dei modelli SageMaker AI in cui si trova il tuo modello.

      1. Dall'elenco a discesa **Versione del modello**, scegli la versione desiderata del modello.

   1. Se stai utilizzando un modello che hai creato in SageMaker AI, disattiva l'**interruttore Scegli un modello dal registro dei modelli ed esegui le seguenti** operazioni:

      1. Nel campo **Nome modello**, inserisci il nome del tuo modello SageMaker AI.

   1. Dall'elenco a discesa dei **ruoli IAM**, puoi selezionare un ruolo AWS IAM esistente che dispone delle autorizzazioni necessarie per creare un processo di raccomandazione delle istanze. In alternativa, se non disponi di un ruolo esistente, puoi scegliere **Crea un nuovo ruolo** per aprire il pop-up di creazione del ruolo e l' SageMaker IA aggiunge le autorizzazioni necessarie al nuovo ruolo che crei.

   1. Per **Bucket S3 per l’esecuzione del benchmark del payload**, inserisci il percorso Amazon S3 all’archivio del payload di esempio, che dovrebbe contenere i file di payload di esempio utilizzati da Inference Recommender per eseguire il benchmark del tuo modello in base a diversi tipi di istanze.

   1. Per **tipo di contenuto di payload**, inserisci i tipi MIME per i dati del payload di esempio.

   1. (Facoltativo) Se hai disattivato l'**opzione Scegli un modello dal registro dei modelli** e hai specificato un modello SageMaker AI, per la **configurazione del contenitore**, procedi come segue:

      1. Per l’elenco a discesa **Dominio**, seleziona il dominio di machine learning del modello, ad esempio visione artificiale, elaborazione del linguaggio naturale o machine learning.

      1. Per l'elenco a discesa **Framework**, seleziona il framework del contenitore, ad esempio o. TensorFlow XGBoost

      1. Per **Versione del framework**, inserisci la versione del framework dell'immagine del container.

      1. Per l'elenco a discesa **Nome del modello più vicino**, seleziona il modello pre-addestrato che più si avvicina al tuo.

      1. Nell'elenco a discesa **Attività**, seleziona l'attività di machine learning svolta dal modello, ad esempio la classificazione o la regressione delle immagini.

   1. (Facoltativo) Per la **compilazione del modello con SageMaker Neo**, puoi configurare il processo di raccomandazione per un modello che hai compilato usando SageMaker Neo. Per **configurazione dell'input dei dati**, inserisci la forma dei dati di input corretta per il tuo modello in un formato simile a `{'input':[1,1024,1024,3]}`.

   1. Scegli **Next (Successivo)**.

1. Per **fase 2, istanze e parametri di ambiente**, effettua le seguenti operazioni:

   1. (Facoltativo) Per **Seleziona le istanze per l'esecuzione dei benchmark**, puoi selezionare fino a 8 tipi di istanze da sottoporre a benchmark. Se non selezioni alcuna istanza, il suggeritore di inferenza considera tutti i tipi di istanze.

   1. Scegli **Next (Successivo)**.

1. Per **fase 3, parametri del processo**, effettua le seguenti operazioni:

   1. (Facoltativo) Nel campo **Nome del processo**, immetti un nome per il tuo processo di suggerimento sull’istanza. Quando crei il lavoro, SageMaker AI aggiunge un timestamp alla fine di questo nome.

   1. (Facoltativo) Per il campo **Descrizione processo**, immetti una descrizione per il processo.

   1. (Facoltativo) Per l'elenco a discesa **Chiave di crittografia**, scegli una AWS KMS chiave per nome o inserisci il relativo ARN per crittografare i dati.

   1. (Facoltativo) Per **durata massima de test**, inserisci il numero massimo di secondi per cui desideri che ciascun test venga eseguito.

   1. (Facoltativo) Per il numero **massimo di invocazioni al minuto**, inserisci il numero massimo di richieste al minuto che l'endpoint può raggiungere prima dell'interruzione del processo di raccomandazione. Dopo aver raggiunto questo limite, l' SageMaker IA termina il lavoro.

   1. (Facoltativo) Per la **soglia di latenza del modello P99 (ms)**, inserisci il percentile di latenza del modello in millisecondi.

   1. Scegli **Next (Successivo)**.

1. Per **fase 4, esamina il processo**, esamina le configurazioni e quindi seleziona **Invia**.

------

# Ottieni i risultati del processo di raccomandazione di inferenza
<a name="instance-recommendation-results"></a>

Raccogli i risultati del tuo lavoro di raccomandazione inferenziale in modo AWS SDK per Python (Boto3) programmatico con Studio Classic o la SageMaker console AI. AWS CLI

------
#### [ AWS SDK per Python (Boto3) ]

Una volta completata la raccomandazione di inferenza, puoi utilizzare `DescribeInferenceRecommendationsJob` per ottenere le raccomandazioni e i dettagli del processo. Fornisci il nome del processo che hai usato quando hai creato il processo per la raccomandazione di inferenza.

```
job_name='<INSERT>'
response = sagemaker_client.describe_inference_recommendations_job(
                    JobName=job_name)
```

Visualizza l’oggetto di risposta. L’esempio di codice precedente archiviava la risposta in una variabile denominata `response`.

```
print(response['Status'])
```

Questo esempio restituisce una risposta JSON simile alla seguente: Questo esempio mostra i tipi di istanza consigliati per l’inferenza in tempo reale (per un esempio che mostra raccomandazioni di inferenza Serverless, consulta l’esempio successivo).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Default', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 20, 4, 57, 627000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 20, 25, 1, 997000, tzinfo=tzlocal()), 
    'InputConfig': {
                'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
                'JobDurationInSeconds': 0
                }, 
    'InferenceRecommendations': [{
            'Metrics': {
                'CostPerHour': 0.20399999618530273, 
                'CostPerInference': 5.246913588052848e-06, 
                'MaximumInvocations': 648, 
                'ModelLatency': 263596
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5.xlarge', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
         }, 
         {
            'Metrics': {
                'CostPerHour': 0.11500000208616257, 
                'CostPerInference': 2.92620870823157e-06, 
                'MaximumInvocations': 655, 
                'ModelLatency': 826019
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5d.large', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
            }, 
            {
                'Metrics': {
                    'CostPerHour': 0.11500000208616257, 
                    'CostPerInference': 3.3625731248321244e-06, 
                    'MaximumInvocations': 570, 
                    'ModelLatency': 1085446
                    }, 
                'EndpointConfiguration': {
                    'EndpointName': 'endpoint-name', 
                    'VariantName': 'variant-name', 
                    'InstanceType': 'ml.m5.large', 
                    'InitialInstanceCount': 1
                    }, 
                'ModelConfiguration': {
                    'Compiled': False, 
                    'EnvironmentParameters': []
                    }
            }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1685', 
            'date': 'Tue, 26 Oct 2021 20:31:10 GMT'
            }, 
        'RetryAttempts': 0
        }
}
```

Le prime nuove righe forniscono informazioni sullo stesso processo di raccomandazione dell'inferenza. Ciò include il nome del processo, l'ARN del ruolo e l'ora di creazione ed eliminazione. 

Il dizionario `InferenceRecommendations` contiene un elenco di suggerimenti sull’inferenza di Inference Recommender.

Il dizionario `EndpointConfiguration` annidato contiene il consiglio sul tipo di istanza (`InstanceType`) insieme al nome dell'endpoint e della variante (un modello di apprendimento AWS automatico distribuito) utilizzati durante il processo di raccomandazione. Puoi utilizzare l'endpoint e il nome della variante per il monitoraggio in Amazon CloudWatch Events. Per ulteriori informazioni, consulta [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md).

Il dizionario `Metrics` annidato contiene informazioni sul costo orario stimato (`CostPerHour`) per l'endpoint in tempo reale in dollari USA, il costo per inferenza stimato (`CostPerInference`) in dollari USA per l'endpoint in tempo reale, il numero massimo previsto di `InvokeEndpoint` richieste al minuto inviate all'endpoint (`MaxInvocations`) e la latenza del modello (`ModelLatency`), che è l'intervallo di tempo (in microsecondi) impiegato dal modello per rispondere all' SageMaker IA. La latenza del modello include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container di un modello e il tempo richiesto per completare l’inferenza nel container.

L'esempio seguente mostra la parte `InferenceRecommendations` della risposta per un processo di raccomandazioni di inferenza configurato per restituire consigli di inferenza serverless:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

È possibile interpretare i consigli per l'inferenza serverless in modo simile ai risultati per l'inferenza in tempo reale, ad eccezione di `ServerlessConfig`, che indica i parametri restituiti per un endpoint serverless con `MemorySizeInMB` e quando `MaxConcurrency = 1`. Per aumentare il possibile throughput sull'endpoint, aumenta il valore di `MaxConcurrency` in modo lineare. Ad esempio, se la raccomandazione di inferenza mostra `MaxInvocations` come `1000`, l'aumento di `MaxConcurrency` a `2` supporterebbe 2000 `MaxInvocations`. Tieni presente che ciò è vero solo fino a un certo punto, in quanto può variare in base al modello e al codice. Le raccomandazioni serverless misurano anche il parametro `ModelSetupTime`, che misura (in microsecondi) il tempo necessario per avviare le risorse informatiche su un endpoint serverless. Per ulteriori informazioni sulla configurazione di endpoint serverless, consulta la [documentazione per inferenze serverless](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

------
#### [ AWS CLI ]

Una volta completata la raccomandazione di inferenza, puoi utilizzare `describe-inference-recommendations-job` per ottenere i dettagli del processo e i tipi di istanze raccomandate. Fornisci il nome del processo che hai usato quando hai creato il processo per la raccomandazione di inferenza.

```
aws sagemaker describe-inference-recommendations-job\
    --job-name <job-name>\
    --region <aws-region>
```

La risposta JSON si presenta in maniera analoga all'esempio sotto riportato. Questo esempio mostra i tipi di istanza consigliati per l’inferenza in tempo reale (per un esempio che mostra raccomandazioni di inferenza Serverless, consulta l’esempio successivo).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Default', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 20, 4, 57, 627000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 20, 25, 1, 997000, tzinfo=tzlocal()), 
    'InputConfig': {
                'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
                'JobDurationInSeconds': 0
                }, 
    'InferenceRecommendations': [{
            'Metrics': {
                'CostPerHour': 0.20399999618530273, 
                'CostPerInference': 5.246913588052848e-06, 
                'MaximumInvocations': 648, 
                'ModelLatency': 263596
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5.xlarge', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
         }, 
         {
            'Metrics': {
                'CostPerHour': 0.11500000208616257, 
                'CostPerInference': 2.92620870823157e-06, 
                'MaximumInvocations': 655, 
                'ModelLatency': 826019
                }, 
            'EndpointConfiguration': {
                'EndpointName': 'endpoint-name', 
                'VariantName': 'variant-name', 
                'InstanceType': 'ml.c5d.large', 
                'InitialInstanceCount': 1
                }, 
            'ModelConfiguration': {
                'Compiled': False, 
                'EnvironmentParameters': []
                }
            }, 
            {
                'Metrics': {
                    'CostPerHour': 0.11500000208616257, 
                    'CostPerInference': 3.3625731248321244e-06, 
                    'MaximumInvocations': 570, 
                    'ModelLatency': 1085446
                    }, 
                'EndpointConfiguration': {
                    'EndpointName': 'endpoint-name', 
                    'VariantName': 'variant-name', 
                    'InstanceType': 'ml.m5.large', 
                    'InitialInstanceCount': 1
                    }, 
                'ModelConfiguration': {
                    'Compiled': False, 
                    'EnvironmentParameters': []
                    }
            }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1685', 
            'date': 'Tue, 26 Oct 2021 20:31:10 GMT'
            }, 
        'RetryAttempts': 0
        }
}
```

Le prime nuove righe forniscono informazioni sullo stesso processo di raccomandazione dell'inferenza. Ciò include il nome del processo, l'ARN del ruolo e l'ora di creazione ed eliminazione. 

Il dizionario `InferenceRecommendations` contiene un elenco di suggerimenti sull’inferenza di Inference Recommender.

Il dizionario `EndpointConfiguration` annidato contiene la raccomandazione del tipo di istanza (`InstanceType`) insieme al nome dell'endpoint e della variante (un modello di apprendimento AWS automatico distribuito) utilizzati durante il processo di raccomandazione. Puoi utilizzare l'endpoint e il nome della variante per il monitoraggio in Amazon CloudWatch Events. Per ulteriori informazioni, consulta [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md).

Il dizionario `Metrics` annidato contiene informazioni sul costo orario stimato (`CostPerHour`) per l'endpoint in tempo reale in dollari USA, il costo per inferenza stimato (`CostPerInference`) in dollari USA per l'endpoint in tempo reale, il numero massimo previsto di `InvokeEndpoint` richieste al minuto inviate all'endpoint (`MaxInvocations`) e la latenza del modello (`ModelLatency`), che è l'intervallo di tempo (in millisecondi) impiegato dal modello per rispondere all' SageMaker IA. La latenza del modello include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container di un modello e il tempo richiesto per completare l’inferenza nel container.

L'esempio seguente mostra la parte `InferenceRecommendations` della risposta per un processo di raccomandazioni di inferenza configurato per restituire consigli di inferenza serverless:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

È possibile interpretare i consigli per l'inferenza serverless in modo simile ai risultati per l'inferenza in tempo reale, ad eccezione di `ServerlessConfig`, che indica i parametri restituiti per un endpoint serverless con `MemorySizeInMB` e quando `MaxConcurrency = 1`. Per aumentare il possibile throughput sull'endpoint, aumenta il valore di `MaxConcurrency` in modo lineare. Ad esempio, se la raccomandazione di inferenza mostra `MaxInvocations` come `1000`, l'aumento di `MaxConcurrency` a `2` supporterebbe 2000 `MaxInvocations`. Tieni presente che ciò è vero solo fino a un certo punto, in quanto può variare in base al modello e al codice. Le raccomandazioni serverless misurano anche il parametro `ModelSetupTime`, che misura (in microsecondi) il tempo necessario per avviare le risorse informatiche su un endpoint serverless. Per ulteriori informazioni sulla configurazione di endpoint serverless, consulta la [documentazione per inferenze serverless](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

------
#### [ Amazon SageMaker Studio Classic ]

Le raccomandazioni di inferenza vengono inserite in una nuova scheda **Raccomandazioni di inferenza** all’interno di Studio. Possono essere necessari fino a 45 minuti prima che i risultati vengano visualizzati. Questa scheda contiene le intestazioni delle collone **Risultati** e **Dettagli**.

La colonna **Dettagli** fornisce informazioni sul processo di raccomandazione delle inferenze, ad esempio il nome della raccomandazione delle inferenze, la data di creazione del processo (**Data creazione**) e altro ancora. Fornisce inoltre informazioni sulle **Impostazioni**, come il numero massimo di invocazioni effettuate al minuto e informazioni sugli Amazon Resource Name utilizzati.

La colonna **Risultati** fornisce una finestra **Obiettivi di implementazione** e **consigli SageMaker AI** in cui è possibile modificare l'ordine di visualizzazione dei risultati in base all'importanza della distribuzione. Sono disponibili tre menu a discesa che è possibile utilizzare per indicare il livello di importanza del **costo**, della **latenza** e del **throughput** per il proprio caso d'uso. Puoi impostare il livello di importanza di ogni obiettivo (costo, latenza e throughput): **importanza minima**, **importanza bassa**, **importanza moderata**, **importanza elevata** o **importanza massima**. 

In base all'importanza selezionata per ogni obiettivo, Inference Recommender mostra il consiglio principale nel campo dei **SageMakerconsigli** sulla destra del pannello, insieme al costo orario stimato e alla richiesta di inferenza. Fornisce inoltre informazioni sulla latenza prevista del modello, sul numero massimo di invocazioni e sul numero di istanze. Per le raccomandazioni serverless, puoi visualizzare i valori ideali per la concorrenza massima e la dimensione della memoria dell'endpoint.

Oltre ai consigli principali visualizzati, è anche possibile visualizzare le stesse informazioni riportate per tutte le istanze testate dal suggeritore di inferenza nella sezione **Tutte le esecuzioni**.

------
#### [ SageMaker AI console ]

Puoi visualizzare i lavori di raccomandazione delle istanze nella console SageMaker AI procedendo come segue:

1. Vai alla console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione di sinistra, seleziona **Inferenza** e poi **Suggeritore di inferenza**.

1. Nella pagina dei **processi di raccomandazione delle inferenze**, scegli il nome del tuo processo di raccomandazione delle inferenze.

Nella pagina dei dettagli del tuo lavoro, puoi visualizzare i **consigli di Inference**, ovvero i tipi di istanze consigliati dall' SageMaker IA per il tuo modello, come mostrato nella schermata seguente.

![\[Schermata dell'elenco dei consigli di inferenza nella pagina dei dettagli del lavoro nella console AI. SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


In questa sezione, è possibile confrontare i tipi di istanza in base a vari fattori, come la **latenza del modello**, il **costo all’ora**, il **costo per inferenza** e le **invocazioni al minuto**.

In questa pagina, è possibile visualizzare anche le configurazioni specificate per il processo. Nella sezione **Monitor**, puoi visualizzare i CloudWatch parametri di Amazon registrati per ogni tipo di istanza. Per ulteriori informazioni sull'interpretazione di questi parametri, consulta [Interpretazione dei risultati](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html).

------

Per ulteriori informazioni sull'interpretazione dei risultati del processo di raccomandazione, consulta [Risultati della raccomandazione](inference-recommender-interpret-results.md).

# Ottieni una raccomandazione di inferenza per un endpoint esistente
<a name="inference-recommender-existing-endpoint"></a>

I processi di raccomandazione di inferenza eseguono una serie di test di carico sui tipi di istanze raccomandati o su un endpoint esistente. I processi di raccomandazione di inferenza utilizzano parametri delle prestazioni basati su test di carico che utilizzano i dati di esempio forniti durante la registrazione della versione del modello.

Puoi effettuare benchmark e ottenere consigli di inferenza per un endpoint SageMaker AI Inference esistente per aiutarti a migliorare le prestazioni del tuo endpoint. [La procedura per ottenere consigli per un endpoint SageMaker AI Inference esistente è simile alla procedura per ottenere consigli di inferenza senza un endpoint.](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-instance-recommendation.html) È possibile prendere in considerazione diverse esclusioni di funzionalità quando si esegue il benchmarking di un endpoint esistente:
+ È possibile utilizzare un solo endpoint esistente per processo del suggeritore di inferenza.
+ È possibile avere una sola variante sul proprio endpoint.
+ Non è possibile utilizzare un endpoint che abilita il dimensionamento automatico.
+ Questa funzionalità è supportata solo per [inferenze in tempo reale](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html)
+ Questa funzionalità non supporta gli [endpoint multimodello in tempo reale](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html).

**avvertimento**  
Sconsigliamo vivamente di non eseguire un processo del suggeritore di inferenza su un endpoint di produzione che gestisce il traffico in tempo reale. Il carico sintetico durante il benchmarking può influire sull'endpoint di produzione e causare rallentamenti o fornire risultati di benchmark imprecisi. Consigliamo di utilizzare un endpoint non di produzione o di sviluppo a scopo di confronto. 

Le seguenti sezioni mostrano come utilizzare Amazon SageMaker Inference Recommender per creare una raccomandazione di inferenza per un endpoint esistente in base al tipo di modello utilizzando l' AWS SDK for Python (Boto3) e il. AWS CLI

**Nota**  
Prima di creare un processo di raccomandazione del suggeritore di inferenza, assicurati di aver soddisfatto [Prerequisiti per l'utilizzo di Amazon SageMaker Inference Recommender](inference-recommender-prerequisites.md).

## Prerequisiti
<a name="inference-recommender-existing-endpoint-prerequisites"></a>

[Se non disponi già di un endpoint SageMaker AI Inference, puoi [ottenere una raccomandazione di inferenza senza un endpoint oppure puoi creare un endpoint di inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-instance-recommendation.html) in tempo reale seguendo le istruzioni in Crea il tuo endpoint e distribuisci il tuo modello.](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html)

## Crea un processo di raccomandazione di inferenza per un endpoint esistente
<a name="inference-recommender-existing-endpoint-create"></a>

Crea una raccomandazione di inferenza a livello di codice utilizzando, o il. AWS SDK per Python (Boto3) AWS CLI Specificate un nome di lavoro per la vostra raccomandazione di inferenza, il nome di un endpoint SageMaker AI Inference esistente, un ARN del AWS ruolo IAM, una configurazione di input e il pacchetto del modello ARN da quando avete registrato il modello nel registro dei modelli.

------
#### [ AWS SDK per Python (Boto3) ]

Usa l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html) per avviare un processo di raccomandazione di inferenza. Imposta il campo `JobType` su `'Default'` per i processi di raccomandazione di inferenza. È inoltre necessario indicare quanto segue:
+ Fornisci un nome per il processo di raccomandazione del suggeritore di inferenza per il campo `JobName`. Il nome del lavoro di Inference Recommender deve essere univoco all'interno della regione e all'interno del tuo account. AWS AWS 
+ Il nome della risorsa Amazon (ARN) di un ruolo IAM che consente al suggeritore di inferenza di eseguire attività per tuo conto. Definiscilo per il campo `RoleArn`.
+ L'ARN del pacchetto di modelli con versione che hai creato quando hai registrato il modello con il registro di modelli. Definiscilo per `ModelPackageVersionArn` nel campo `InputConfig`.
+ Fornisci il nome di un endpoint SageMaker AI Inference esistente per il quale desideri eseguire il benchmark in Inference Recommender sul campo. `Endpoints` `InputConfig`

Importa il AWS SDK per Python (Boto3) pacchetto e crea un oggetto client SageMaker AI utilizzando la classe client. Se hai seguito le fasi nella sezione **Prerequisiti**, l'ARN del gruppo di pacchetti di modelli è stato archiviato in una variabile denominata `model_package_arn`.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<region>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide your model package ARN that was created when you registered your 
# model with Model Registry 
model_package_arn = '<model-package-arn>'

# Provide a unique job name for SageMaker Inference Recommender job
job_name = '<job-name>'

# Inference Recommender job type. Set to Default to get an initial recommendation
job_type = 'Default'

# Provide an IAM Role that gives SageMaker Inference Recommender permission to 
# access AWS services
role_arn = '<arn:aws:iam::<account>:role/*>'
                                    
# Provide endpoint name for your endpoint that want to benchmark in Inference Recommender
endpoint_name = '<existing-endpoint-name>'

sagemaker_client.create_inference_recommendations_job(
    JobName = job_name,
    JobType = job_type,
    RoleArn = role_arn,
    InputConfig = {
        'ModelPackageVersionArn': model_package_arn,
        'Endpoints': [{'EndpointName': endpoint_name}]
    }
)
```

Consulta la [Amazon SageMaker API Reference Guide](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) per un elenco completo di argomenti opzionali e obbligatori a cui puoi passare [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html).

------
#### [ AWS CLI ]

Usa l'API `create-inference-recommendations-job` per ottenere una raccomandazione sull'endpoint dell'istanza. Imposta il campo `job-type` su `'Default'` per i processi di raccomandazione degli endpoint dell'istanza. È inoltre necessario indicare quanto segue:
+ Fornisci un nome per il processo di raccomandazione del suggeritore di inferenza per il campo `job-name`. Il nome del lavoro di Inference Recommender deve essere univoco all'interno della AWS regione e all'interno del tuo AWS account.
+ L'Amazon Resource Name (ARN) di un ruolo IAM che consente ad Amazon SageMaker Inference Recommender di eseguire attività per tuo conto. Definiscilo per il campo `role-arn`.
+ l'ARN del pacchetto di modelli con versione che hai creato quando hai registrato il modello con Model Registry. Definiscilo per `ModelPackageVersionArn` nel campo `input-config`.
+ Fornisci il nome di un endpoint SageMaker AI Inference esistente per il quale desideri eseguire il benchmark in Inference Recommender sul campo. `Endpoints` `input-config`

```
aws sagemaker create-inference-recommendations-job 
    --region <region>\
    --job-name <job_name>\
    --job-type Default\
    --role-arn arn:aws:iam::<account:role/*>\
    --input-config "{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region:account:role/*>\",
        \"Endpoints\": [{\"EndpointName\": <endpoint_name>}]
        }"
```

------

## Ottieni i risultati del processo di raccomandazione di inferenza
<a name="inference-recommender-existing-endpoint-results"></a>

È possibile raccogliere i risultati del processo di raccomandazione di inferenza a livello di programmazione con la stessa procedura per i processi di raccomandazione di inferenza standard. Per ulteriori informazioni, consulta [Ottieni i risultati del processo di raccomandazione di inferenza](instance-recommendation-results.md).

Quando ottieni i risultati di un processo di raccomandazione di inferenza per un endpoint esistente, dovresti ricevere una risposta JSON simile alla seguente:

```
{
    "JobName": "job-name",
    "JobType": "Default",
    "JobArn": "arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id",
    "RoleArn": "iam-role-arn",
    "Status": "COMPLETED",
    "CreationTime": 1664922919.2,
    "LastModifiedTime": 1664924208.291,
    "InputConfig": {
        "ModelPackageVersionArn": "arn:aws:sagemaker:region:account-id:model-package/resource-id",
        "Endpoints": [
            {
                "EndpointName": "endpoint-name"
            }
        ]
    },
    "InferenceRecommendations": [
        {
            "Metrics": {
                "CostPerHour": 0.7360000014305115,
                "CostPerInference": 7.456940238625975e-06,
                "MaxInvocations": 1645,
                "ModelLatency": 171
            },
            "EndpointConfiguration": {
                "EndpointName": "sm-endpoint-name",
                "VariantName": "variant-name",
                "InstanceType": "ml.g4dn.xlarge",
                "InitialInstanceCount": 1
            },
            "ModelConfiguration": {
                "EnvironmentParameters": [
                    {
                        "Key": "TS_DEFAULT_WORKERS_PER_MODEL",
                        "ValueType": "string",
                        "Value": "4"
                    }
                ]
            }
        }
    ],
    "EndpointPerformances": [
        {
            "Metrics": {
                "MaxInvocations": 184,
                "ModelLatency": 1312
            },
            "EndpointConfiguration": {
                "EndpointName": "endpoint-name"
            }
        }
    ]
}
```

Le prime nuove righe forniscono informazioni sullo stesso processo di raccomandazione dell'inferenza. Ciò include il nome del processo, l'ARN del ruolo e l'ora di creazione e delle ultime modifiche.

Il dizionario `InferenceRecommendations` contiene un elenco di suggerimenti sull’inferenza di Inference Recommender.

Il dizionario `EndpointConfiguration` annidato contiene il consiglio sul tipo di istanza (`InstanceType`) insieme al nome dell'endpoint e della variante (un modello di apprendimento AWS automatico distribuito) utilizzati durante il processo di raccomandazione.

Il dizionario `Metrics` annidato contiene informazioni sul costo orario stimato (`CostPerHour`) per l'endpoint in tempo reale in dollari USA, il costo per inferenza stimato (`CostPerInference`) in dollari USA per l'endpoint in tempo reale, il numero massimo previsto di `InvokeEndpoint` richieste al minuto inviate all'endpoint (`MaxInvocations`) e la latenza del modello (`ModelLatency`), che è l'intervallo di tempo (in millisecondi) impiegato dal modello per rispondere all' SageMaker IA. La latenza del modello include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container di un modello e il tempo richiesto per completare l’inferenza nel container.

Il dizionario annidato `EndpointPerformances` contiene il nome dell'endpoint esistente su cui è stato eseguito il processo di raccomandazione (`EndpointName`) e i parametri delle prestazioni per l'endpoint (`MaxInvocations` e `ModelLatency`).

# Interrompi la raccomandazione di inferenza
<a name="instance-recommendation-stop"></a>

Potresti voler arrestare un processo attualmente in esecuzione se lo hai avviato per errore o se non è più necessario eseguirlo. Arresta i processi di raccomandazione di inferenza Inference Recommender a livello di programmazione con l’API `StopInferenceRecommendationsJob` o con Studio Classic.

------
#### [ AWS SDK per Python (Boto3) ]

Specifica il nome del processo di raccomandazione di inferenza per il campo `JobName`:

```
sagemaker_client.stop_inference_recommendations_job(
                                    JobName='<INSERT>'
                                    )
```

------
#### [ AWS CLI ]

Specifica il nome del processo di raccomandazione di inferenza per il flag `job-name`:

```
aws sagemaker stop-inference-recommendations-job --job-name <job-name>
```

------
#### [ Amazon SageMaker Studio Classic ]

Chiudi la scheda in cui hai avviato la raccomandazione di inferenza per interrompere la raccomandazione di inferenza del suggeritore di inferenza.

------
#### [ SageMaker AI console ]

Per interrompere il processo di raccomandazione delle istanze tramite la console SageMaker AI, procedi come segue:



1. Vai alla console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione di sinistra, seleziona **Inferenza** e poi **Suggeritore di inferenza**.

1. Nella pagina dei **processi del suggeritore di inferenza**, seleziona il processo di raccomandazione dell'istanza.

1. Seleziona **Arresta processo**.

1. Nella finestra di dialogo che viene visualizzata, seleziona **Conferma**.

Dopo aver interrotto il processo, **Stato** del processo dovrebbe cambiare in **In fase di arresto**.

------

# Raccomandazioni compilate con Neo
<a name="inference-recommender-neo-compilation"></a>

Nel suggeritore di inferenza, puoi compilare il tuo modello con Neo e ottenere raccomandazioni sugli endpoint per il modello compilato. [SageMaker Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html) è un servizio in grado di ottimizzare il modello per una piattaforma hardware di destinazione (ovvero un tipo o un ambiente di istanza specifico). L'ottimizzazione di un modello con Neo potrebbe migliorare le prestazioni del modello ospitato.

Per i container e i framework supportati da Neo, il suggeritore di inferenza suggerisce automaticamente raccomandazioni ottimizzate per Neo. Per poter ricorrere alla compilazione Neo, l'input deve soddisfare i seguenti prerequisiti:
+ Stai utilizzando un [DLC](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html) o un XGBoost contenitore di proprietà dell' SageMaker intelligenza artificiale.
+ Stai utilizzando una versione del framework supportata da Neo. Per le versioni del framework supportate da Neo, consulta [Istanze cloud](neo-supported-cloud.md#neo-supported-cloud-instances) la documentazione di SageMaker Neo.
+ Neo richiede necessita di una forma di dati di input corretta per il tuo modello. È possibile specificare questa forma di dati come `[DataInputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelInput.html#sagemaker-Type-ModelInput-DataInputConfig)` in `[InferenceSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-InferenceSpecification)` quando si crea un pacchetto modello. Per informazioni sulle forme di dati corrette per ogni framework, vedi [Prepare Model for Compilation](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-compilation-preparing-model.html) nella documentazione di SageMaker Neo.

  L'esempio seguente mostra come specificare il campo `DataInputConfig` in `InferenceSpecification`, in cui `data_input_configuration` è una variabile che contiene la forma dei data in formato dizionario (ad esempi `{'input':[1,1024,1024,3]}`).

  ```
  "InferenceSpecification": {
          "Containers": [
              {
                  "Image": dlc_uri,
                  "Framework": framework.upper(),
                  "FrameworkVersion": framework_version,
                  "NearestModelName": model_name,
                  "ModelInput": {"DataInputConfig": data_input_configuration},
              }
          ],
          "SupportedContentTypes": input_mime_types,  # required, must be non-null
          "SupportedResponseMIMETypes": [],
          "SupportedRealtimeInferenceInstanceTypes": supported_realtime_inference_types,  # optional
      }
  ```

Se queste condizioni sono soddisfatte nella richiesta, il suggeritore di inferenza esegue scenari per entrambe le versioni compilate e non compilate del modello, offrendo più combinazioni di raccomandazioni tra cui scegliere. È possibile confrontare le configurazioni per le versioni compilate e non compilate della stessa raccomandazione di inferenza e determinare quale si adatta meglio al proprio caso d'uso. Le raccomandazioni sono classificate in base al costo per inferenza.

Per ottenere le raccomandazioni sulla compilazione Neo, non è necessario eseguire alcuna configurazione aggiuntiva oltre ad assicurarsi che l’input soddisfi i requisiti precedenti. Inference Recommender esegue automaticamente la compilazione Neo sul tuo modello se l’input soddisfa i requisiti e riceverai una risposta che include le raccomandazioni di Neo.

Se riscontri errori durante la compilazione di Neo, consulta [Risolvi errori di compilazione Neo](neo-troubleshooting-compilation.md).

La tabella seguente è un esempio di risposta che potresti ottenere da un processo del suggeritore di inferenza che include raccomandazioni per i modelli compilati. Se il campo `InferenceSpecificationName` è `None`, la raccomandazione è un modello non compilato. L'ultima riga, in cui si trova il valore del **InferenceSpecificationName**campo`neo-00011122-2333-4445-5566-677788899900`, è per un modello compilato con Neo. Il valore nel campo è il nome del processo Neo utilizzato per compilare e ottimizzare il modello.


| EndpointName | InstanceType | InitialInstanceCount | EnvironmentParameters | CostPerHour | CostPerInference | MaxInvocations | ModelLatency | InferenceSpecificationName | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| sm-epc-example-000111222 | ml.c5.9xlarge | 1 | [] | 1,836 | 9,15E-07 | 33456 | 7 | Nessuno | 
| sm-epc-example-111222333 | ml.c5.2xlarge | 1 | [] | 0,408 | 2,11E-07 | 32211 | 21 | Nessuno | 
| sm-epc-example-222333444 | ml.c5.xlarge | 1 | [] | 0,204 | 1,86E-07 | 18276 | 92 | Nessuno | 
| sm-epc-example-333444555 | ml.c5.xlarge | 1 | [] | 0,204 | 1,60E-07 | 21286 | 42 | neo-00011122-2333-4445-5566-677788899900 | 

## Nozioni di base
<a name="inference-recommender-neo-compilation-get-started"></a>

Le operazioni generali per creare un processo del suggeritore di inferenza che includa raccomandazioni ottimizzate per NEO sono le seguenti:
+ Prepara il tuo modello ML per la compilazione. Per ulteriori informazioni, consulta [Preparare il modello per la compilazione](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-compilation-preparing-model.html) nella documentazione di Neo.
+ Crea il pacchetto del modello in un archivio di modelli (file `.tar.gz`).
+ Crea un archivio di payload di esempio.
+ Registra il tuo SageMaker modello nel Model Registry.
+ Crea un processo del suggeritore di inferenza.
+ Visualizza i risultati del processo del suggeritore di inferenza e scegli una configurazione.
+ Se del caso, effettua il debug degli errori di compilazione. Per ulteriori informazioni, consulta la sezione sulla [Risoluzione dei problemi di compilazione Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html).

[Per un esempio che illustra il flusso di lavoro precedente e come ottenere consigli ottimizzati per NEO utilizzando XGBoost, vedete il seguente esempio di notebook.](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/xgboost/xgboost-inference-recommender.ipynb) [Per un esempio che mostra come ottenere consigli ottimizzati per NEO utilizzando un notebook TensorFlow, vedete il seguente esempio di notebook.](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/inference-recommender.ipynb)

# Risultati della raccomandazione
<a name="inference-recommender-interpret-results"></a>

Ogni risultato del processo del suggeritore di inferenza include `InstanceType`, `InitialInstanceCount` e `EnvironmentParameters`, che sono parametri di variabili di ambiente ottimizzati per il container per migliorarne la latenza e il throughput. I risultati includono anche parametri relativi a prestazioni e costi come `MaxInvocations`, `ModelLatency`, `CostPerHour`, `CostPerInference`, `CpuUtilization` e `MemoryUtilization`.

Nella tabella seguente forniamo una descrizione di questi parametri. Questi parametri possono aiutarti a restringere la ricerca per trovare la migliore configurazione di endpoint adatta al proprio caso d'uso. Ad esempio, se si ritiene importante il rapporto prezzo/prestazioni complessive con un'enfasi sulla produttività, allora è opportuno concentrarsi su `CostPerInference`. 


| Metrica | Description | Caso d’uso | 
| --- | --- | --- | 
|  `ModelLatency`  |  Intervallo di tempo impiegato da un modello per rispondere visto dall'IA. SageMaker Questo intervallo include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container di un modello e il tempo richiesto per completare l'inferenza nel container. Unità: millisecondi  | Carichi di lavoro sensibili alla latenza, come la pubblicazione di annunci e le diagnosi mediche | 
|  `MaximumInvocations`  |  Il numero massimo di richieste `InvokeEndpoint` inviate a un endpoint del modello in un minuto. Unità: nessuna  | Carichi di lavoro incentrati sul throughput, come l'elaborazione video o l'inferenza in batch | 
|  `CostPerHour`  |  Il costo orario stimato per il proprio endpoint in tempo reale. Unità: dollari americani  | Carichi di lavoro sensibili ai costi senza termini di latenza | 
|  `CostPerInference`  |  Il costo stimato per chiamata di inferenza per l'endpoint in tempo reale. Unità: dollari americani  | Massimizza il rapporto prezzo/prestazioni complessive con particolare attenzione al throughput | 
|  `CpuUtilization`  |  L'utilizzo previsto della CPU al massimo numero di invocazioni al minuto per l'istanza dell'endpoint. Unità: percentuale  | Comprendi lo stato dell'istanza durante il benchmarking grazie alla visibilità dell'utilizzo della CPU principale dell'istanza | 
|  `MemoryUtilization`  |  L'utilizzo della memoria previsto al massimo numero di invocazioni al minuto per l'istanza dell'endpoint. Unità: percentuale  | Comprendi lo stato dell'istanza durante il benchmarking grazie alla visibilità sull'utilizzo della memoria principale dell'istanza | 

In alcuni casi potresti voler esplorare altre metriche di [SageMaker AI Endpoint Invocation](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation) come. `CPUUtilization` Ogni risultato del processo del suggeritore di inferenza include i nomi degli endpoint attivati durante il test di carico. Puoi utilizzarli CloudWatch per rivedere i log di questi endpoint anche dopo che sono stati eliminati.

L'immagine seguente è un esempio di CloudWatch metriche e grafici che puoi esaminare per un singolo endpoint in base ai risultati delle tue raccomandazioni. Questo risultato delle raccomandazioni deriva da un processo predefinito. Il modo di interpretare i valori scalari dei risultati delle raccomandazioni consiste nel fatto che si basano sul momento in cui il grafico delle invocazioni inizia ad appianarsi per la prima volta. Ad esempio, il valore `ModelLatency` riportato si trova all'inizio del plateau intorno a `03:00:31`.

![\[Grafici per CloudWatch le metriche.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference-recommender-cw-metrics.png)


Per le descrizioni complete delle CloudWatch metriche utilizzate nei grafici precedenti, consulta le metriche di [SageMaker AI Endpoint Invocation](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-endpoint-invocation).

Puoi anche vedere parametri delle prestazioni come `ClientInvocations` e `NumberOfUsers` pubblicati dal suggeritore di inferenza nello spazio dei nomi `/aws/sagemaker/InferenceRecommendationsJobs`. Per un elenco completo di parametri e descrizioni pubblicati dal suggeritore di inferenza, consulta [SageMaker Metriche dei lavori di Inference Recommender](monitoring-cloudwatch.md#cloudwatch-metrics-inference-recommender).

Consulta il notebook [Amazon SageMaker Inference Recommender - CloudWatch Metrics](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-inference-recommender/tensorflow-cloudwatch/tf-cloudwatch-inference-recommender.ipynb) Jupyter nel repository [amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples)Github per un esempio di come utilizzare l'SDK for Python AWS (Boto3) per esplorare i parametri per i tuoi endpoint. CloudWatch 

# Ottieni raccomandazioni sulle policy di dimensionamento automatico
<a name="inference-recommender-autoscaling"></a>

Con Amazon SageMaker Inference Recommender, puoi ottenere consigli per le politiche di scalabilità automatica per il tuo endpoint SageMaker AI in base al modello di traffico previsto. Se hai già completato un processo di raccomandazione di inferenza, puoi fornire i dettagli del processo per ottenere una raccomandazioni per una policy di dimensionamento automatico da poter applicare al tuo endpoint.

Il suggeritore di inferenza confronta diversi valori per ogni parametro per determinare la configurazione di dimensionamento automatico ideale per l'endpoint. La raccomandazione di dimensionamento automatico restituisce una policy di dimensionamento automatico raccomandata per ogni parametro definito nel processo di raccomandazione di inferenza. Puoi salvare le policy e applicarle al tuo endpoint con l'API. [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)

Per iniziare, esamina i prerequisiti seguenti.

## Prerequisiti
<a name="inference-recommender-autoscaling-prereqs"></a>

Prima di iniziare, è necessario aver completato con successo un processo di raccomandazione di inferenza. Nella sezione seguente, puoi fornire un ID di raccomandazione di inferenza o il nome di un endpoint di SageMaker intelligenza artificiale che è stato sottoposto a benchmark durante un lavoro di raccomandazione di inferenza.

Per recuperare l'ID del processo di raccomandazione o il nome dell'endpoint, puoi visualizzare i dettagli del tuo lavoro di raccomandazione di inferenza nella console SageMaker AI oppure puoi utilizzare i campi o restituiti dall'`RecommendationId`API. `EndpointName` [DescribeInferenceRecommendationsJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeInferenceRecommendationsJob.html)

## Crea una raccomandazione di configurazione con dimensionamento automatico
<a name="inference-recommender-autoscaling-create"></a>

Per creare una policy di raccomandazione di dimensionamento automatico, puoi utilizzare il AWS SDK per Python (Boto3).

L'esempio seguente mostra i campi per l'API. [ GetScalingConfigurationRecommendation](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_GetScalingConfigurationRecommendation.html) Utilizza i seguenti campi quando chiami l'API:
+ `InferenceRecommendationsJobName`: immetti il nome del tuo processo di raccomandazione di inferenza.
+ `RecommendationId`: inserisci l'ID di una raccomandazione di inferenza da un processo di raccomandazione. È facoltativo se hai specificato il campo `EndpointName`.
+ `EndpointName`: inserisci il nome di un endpoint che è stato sottoposto a benchmark durante un processo di raccomandazione di inferenza. È facoltativo se hai specificato il campo `RecommendationId`.
+ `TargetCpuUtilizationPerCore`: (facoltativo) inserisci un valore percentuale dell'utilizzo che desideri venga utilizzato da un'istanza sull'endpoint prima del dimensionamento automatico. Se non si specifica questo campo il valore di default è 50%.
+ `ScalingPolicyObjective`: (facoltativo) un oggetto in cui si specifica il modello di traffico previsto.
  + `MinInvocationsPerMinute`: (facoltativo) il numero minimo di richieste previste all'endpoint al minuto.
  + `MaxInvocationsPerMinute`: (facoltativo) il numero massimo di richieste previste all'endpoint al minuto.

```
{
    "InferenceRecommendationsJobName": "string", // Required
    "RecommendationId": "string", // Optional, provide one of RecommendationId or EndpointName
    "EndpointName": "string", // Optional, provide one of RecommendationId or EndpointName
    "TargetCpuUtilizationPerCore": number, // Optional
    "ScalingPolicyObjective": { // Optional
        "MinInvocationsPerMinute": number,
        "MaxInvocationsPerMinute": number
    }
}
```

Dopo aver inviato la richiesta, riceverai una risposta con le policy di dimensionamento automatico definite per ogni parametro. Per ulteriori informazioni sull'interpretazione della risposta, consulta la sezione seguente.

## Esamina i risultati sulle raccomandazioni di configurazione con dimensionamento automatico
<a name="inference-recommender-autoscaling-review"></a>

L'esempio seguente mostra la risposta dell'[ GetScalingConfigurationRecommendation](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_GetScalingConfigurationRecommendation.html)API:

```
{
    "InferenceRecommendationsJobName": "string", 
    "RecommendationId": "string", // One of RecommendationId or EndpointName is shown
    "EndpointName": "string", 
    "TargetUtilizationPercentage": Integer,
    "ScalingPolicyObjective": { 
        "MinInvocationsPerMinute": Integer, 
        "MaxInvocationsPerMinute": Integer
    },
    "Metric": {
        "ModelLatency": Integer,
        "InvocationsPerInstance": Integer
    },
    "DynamicScalingConfiguration": {
        "MinCapacity": number,
        "MaxCapacity": number, 
        "ScaleInCooldown": number,
        "ScaleOutCooldown": number,
        "ScalingPolicies": [
            {
                "TargetTracking": {
                    "MetricSpecification": {
                        "Predefined" {
                            "PredefinedMetricType": "string"
                         },
                        "Customized": {
                            "MetricName": "string",
                            "Namespace": "string",
                            "Statistic": "string"
                         }
                    },
                    "TargetValue": Double
                } 
            }
        ]
    }
}
```

`InferenceRecommendationsJobName`, `RecommendationID` o `EndpointName`, `TargetCpuUtilizationPerCore` e i campi oggetto `ScalingPolicyObjective` vengono copiati dalla richiesta iniziale.

L'oggetto `Metric` elenca i parametri che sono stati confrontati nel processo di raccomandazione di inferenza, insieme a un calcolo dei valori per ogni parametro quando l'utilizzo dell'istanza sarebbe pari al valore `TargetCpuUtilizationPerCore`. È utile per prevedere i parametri delle prestazioni dell'endpoint quando aumenta la capacità o le risorse, grazie alla policy di dimensionamento automatico consigliata. Ad esempio, considera se l'utilizzo dell'istanza era pari al 50% nel processo di raccomandazione di inferenza e il valore originario di `InvocationsPerInstance` era pari a `4`. Se specifichi che il valore di `TargetCpuUtilizationPerCore` sia pari al 100% nella richiesta di raccomandazione con dimensionamento automatico, il valore del parametro `InvocationsPerInstance` restituito nella risposta è `2` in quanto hai previsto di assegnare il doppio dell'utilizzo dell'istanza.

L'`DynamicScalingConfiguration`oggetto restituisce i valori da specificare per [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html#autoscaling-PutScalingPolicy-request-TargetTrackingScalingPolicyConfiguration)quando si chiama l'[PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)API. Ciò include i valori raccomandati di capacità minima e massima, le tempistiche di attesa per ridimensionamento e aumento consigliati e l'oggetto `ScalingPolicies`, che contiene i valori consigliati `TargetValue` da specificare per ogni parametro.

# Esegui un test di carico personalizzato
<a name="inference-recommender-load-test"></a>

I test di carico di Amazon SageMaker Inference Recommender eseguono benchmark completi in base ai requisiti di produzione per latenza e throughput, modelli di traffico personalizzati e endpoint serverless o istanze in tempo reale (fino a 10) selezionate.

Le seguenti sezioni mostrano come creare, descrivere e interrompere un test di carico a livello di codice utilizzando AWS SDK per Python (Boto3) and the AWS CLI o in modo interattivo utilizzando Amazon SageMaker Studio Classic o la SageMaker console AI.

## Crea un processo di test di carico
<a name="load-test-create"></a>

Crea un test di carico a livello di codice utilizzando AWS SDK per Python (Boto3), con o in modo interattivo utilizzando Studio Classic o la AWS CLI console AI. SageMaker Come per i consigli di inferenza di Inference Recommender, specifica un nome di lavoro per il test di carico, un ARN del AWS ruolo IAM, una configurazione di input e il pacchetto del modello ARN da quando hai registrato il modello nel registro dei modelli. I test di carico richiedono anche che sia specificato un modello di traffico e le condizioni di arresto.

------
#### [ AWS SDK per Python (Boto3) ]

Utilizza l'API `CreateInferenceRecommendationsJob` per creare un test di carico del suggeritore di inferenza. Specifica `Advanced` per il campo `JobType` e indica: 
+ Un nome di processo per il test di carico (`JobName`). Il nome del lavoro deve essere univoco all'interno della tua AWS regione e all'interno del tuo account. AWS 
+ Il nome della risorsa Amazon (ARN) di un ruolo IAM che consente al suggeritore di inferenza di eseguire attività per tuo conto. Definiscilo per il campo `RoleArn`.
+ Un dizionario di configurazione endpoint (`InputConfig`) in cui specifichi le seguenti informazioni:
  + Per `TrafficPattern`, specifica il modello di traffico a fasi o a scalini. Con il modello di traffico a fasi, i nuovi utenti vengono generati ogni minuto alla velocità specificata. Con il modello di traffico a scalini, i nuovi utenti vengono generati a intervalli di tempo (o *fasi*) alla frequenza specificata. Seleziona una delle seguenti opzioni:
    + Per `TrafficType`, specificare `PHASES`. Quindi, per la matrice `Phases`, specifica `InitialNumberOfUsers` (con quanti utenti simultanei iniziare, con un minimo di 1 e un massimo di 3), `SpawnRate` (il numero di utenti da generare in un minuto per una fase specifica di test di carico, con un minimo di 0 e un massimo di 3) e `DurationInSeconds` (quanto deve essere lunga la fase di traffico, con un minimo di 120 e un massimo di 3600).
    + Per `TrafficType`, specificare `STAIRS`. Quindi, per la matrice `Stairs`, specifica `DurationInSeconds` (quanto deve essere lunga la fase di traffico, con un minimo di 120 e un massimo di 3600), `NumberOfSteps` (quanti intervalli vengono utilizzati durante la fase) e `UsersPerStep` (quanti utenti vengono aggiunti durante ogni intervallo). Si noti che la lunghezza di ogni fase è il valore di `DurationInSeconds / NumberOfSteps`. Ad esempio, se `DurationInSeconds` è `600` e si specificano `5` fasi, ogni fase dura 120 secondi.
**Nota**  
Un utente è definito come un attore generato dal sistema che viene eseguito in un ciclo e invoca le richieste a un endpoint come parte del suggeritore di inferenza. Per un XGBoost container tipico in esecuzione su un'`ml.c5.large`istanza, gli endpoint possono raggiungere 30.000 chiamate al minuto (500 tps) con soli 15-20 utenti.
  + Per `ResourceLimit`, specifica `MaxNumberOfTests` (il numero massimo di test di carico di benchmarking per un processo del suggeritore di inferenza, con un minimo di 1 e un massimo di 10) e `MaxParallelOfTests` (il numero massimo di test di carico di benchmarking paralleli per un processo del suggeritore di inferenza, con un minimo di 1 e un massimo di 10).
  + Per `EndpointConfigurations`, puoi specificare uno dei seguenti elementi:
    + Il campo `InstanceType`, in cui specifichi il tipo di istanza su cui desideri eseguire i test di carico.
    + `ServerlessConfig`, in cui si specifichi i valori ideali per `MaxConcurrency` e `MemorySizeInMB` per un endpoint serverless. Per ulteriori informazioni, consulta la [documentazione per inferenze serverless](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).
+ Un dizionario delle condizioni di arresto (`StoppingConditions`), in cui il processo del suggeritore di inferenza si interrompe qualora fosse soddisfatta una condizione qualsiasi. Per questo esempio, specifica i seguenti campi nel dizionario:
  + Per `MaxInvocations`, specifica il numero massimo di richieste al minuto previsto per l'endpoint, con un minimo di 1 e un massimo di 30.000.
  + Per `ModelLatencyThresholds`, specifica `Percentile` (la soglia del percentile di latenza del modello) e `ValueInMilliseconds` (il valore del percentile di latenza del modello in millisecondi).
  + (Facoltativo) Per `FlatInvocations`, è possibile specificare se continuare il test di carico quando la velocità TPS (invocazioni al minuto) smette di aumentare. Una velocità TPS costante indica generalmente che l'endpoint ha raggiunto la capacità. Tuttavia, potresti voler continuare a monitorare l'endpoint in condizioni di piena capacità. Per continuare il test di carico quando ciò accade, specifica questo valore come `Continue`. In caso contrario, il valore predefinito è `Stop`.

```
# Create a low-level SageMaker service client.
import boto3
aws_region=<INSERT>
sagemaker_client=boto3.client('sagemaker', region=aws_region) 
                
# Provide a name to your recommendation based on load testing
load_test_job_name="<INSERT>"

# Provide the name of the sagemaker instance type
instance_type="<INSERT>"

# Provide the IAM Role that gives SageMaker permission to access AWS services 
role_arn='arn:aws:iam::<account>:role/*'

# Provide your model package ARN that was created when you registered your 
# model with Model Registry
model_package_arn='arn:aws:sagemaker:<region>:<account>:role/*'

sagemaker_client.create_inference_recommendations_job(
                        JobName=load_test_job_name,
                        JobType="Advanced",
                        RoleArn=role_arn,
                        InputConfig={
                            'ModelPackageVersionArn': model_package_arn,
                            "JobDurationInSeconds": 7200,
                            'TrafficPattern' : {
                                # Replace PHASES with STAIRS to use the stairs traffic pattern
                                'TrafficType': 'PHASES',
                                'Phases': [
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    },
                                    {
                                        'InitialNumberOfUsers': 1,
                                        'SpawnRate': 1,
                                        'DurationInSeconds': 120
                                    }
                                ]
                                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                                # 'Stairs' : {
                                #   'DurationInSeconds': 240,
                                #   'NumberOfSteps': 2,
                                #   'UsersPerStep': 2
                                # }
                            },
                            'ResourceLimit': {
                                        'MaxNumberOfTests': 10,
                                        'MaxParallelOfTests': 3
                                },
                            "EndpointConfigurations" : [{
                                        'InstanceType': 'ml.c5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.m5.xlarge'
                                    },
                                    {
                                        'InstanceType': 'ml.r5.xlarge'
                                    }]
                                    # Uncomment the ServerlessConfig and comment out the InstanceType field if you want recommendations for a serverless endpoint
                                    # "ServerlessConfig": {
                                    #     "MaxConcurrency": value, 
                                    #     "MemorySizeInMB": value 
                                    # }
                        },
                        StoppingConditions={
                            'MaxInvocations': 1000,
                            'ModelLatencyThresholds':[{
                                'Percentile': 'P95', 
                                'ValueInMilliseconds': 100
                            }],
                            # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
                            'FlatInvocations': 'Stop'
                        }
                )
```

Consulta la [Amazon SageMaker API Reference Guide](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html) per un elenco completo di argomenti opzionali e obbligatori a cui puoi passare`CreateInferenceRecommendationsJob`.

------
#### [ AWS CLI ]

Utilizza l'API `create-inference-recommendations-job` per creare un test di carico del suggeritore di inferenza. Specifica `Advanced` per il campo `JobType` e indica: 
+ Un nome di processo per il test di carico (`job-name`). Il nome del lavoro deve essere univoco all'interno AWS della tua regione e all'interno AWS del tuo account.
+ Il nome della risorsa Amazon (ARN) di un ruolo IAM che consente al suggeritore di inferenza di eseguire attività per tuo conto. Definiscilo per il campo `role-arn`.
+ Un dizionario di configurazione endpoint (`input-config`) in cui specifichi le seguenti informazioni:
  + Per `TrafficPattern`, specifica il modello di traffico a fasi o a scalini. Con il modello di traffico a fasi, i nuovi utenti vengono generati ogni minuto alla velocità specificata. Con il modello di traffico a scalini, i nuovi utenti vengono generati a intervalli di tempo (o *fasi*) alla frequenza specificata. Seleziona una delle seguenti opzioni:
    + Per `TrafficType`, specificare `PHASES`. Quindi, per la matrice `Phases`, specifica `InitialNumberOfUsers` (con quanti utenti simultanei iniziare, con un minimo di 1 e un massimo di 3), `SpawnRate` (il numero di utenti da generare in un minuto per una fase specifica di test di carico, con un minimo di 0 e un massimo di 3) e `DurationInSeconds` (quanto deve essere lunga la fase di traffico, con un minimo di 120 e un massimo di 3600).
    + Per `TrafficType`, specificare `STAIRS`. Quindi, per la matrice `Stairs`, specifica `DurationInSeconds` (quanto deve essere lunga la fase di traffico, con un minimo di 120 e un massimo di 3600), `NumberOfSteps` (quanti intervalli vengono utilizzati durante la fase) e `UsersPerStep` (quanti utenti vengono aggiunti durante ogni intervallo). Si noti che la lunghezza di ogni fase è il valore di `DurationInSeconds / NumberOfSteps`. Ad esempio, se `DurationInSeconds` è `600` e si specificano `5` fasi, ogni fase dura 120 secondi.
**Nota**  
Un utente è definito come un attore generato dal sistema che viene eseguito in un ciclo e invoca le richieste a un endpoint come parte del suggeritore di inferenza. Per un XGBoost container tipico in esecuzione su un'`ml.c5.large`istanza, gli endpoint possono raggiungere 30.000 chiamate al minuto (500 tps) con soli 15-20 utenti.
  + Per `ResourceLimit`, specifica `MaxNumberOfTests` (il numero massimo di test di carico di benchmarking per un processo del suggeritore di inferenza, con un minimo di 1 e un massimo di 10) e `MaxParallelOfTests` (il numero massimo di test di carico di benchmarking paralleli per un processo del suggeritore di inferenza, con un minimo di 1 e un massimo di 10).
  + Per `EndpointConfigurations`, puoi specificare uno dei seguenti elementi:
    + Il campo `InstanceType`, in cui specifichi il tipo di istanza su cui desideri eseguire i test di carico.
    + `ServerlessConfig`, in cui si specifichi i valori ideali per `MaxConcurrency` e `MemorySizeInMB` per un endpoint serverless.
+ Un dizionario delle condizioni di arresto (`stopping-conditions`), in cui il processo del suggeritore di inferenza si interrompe qualora fosse soddisfatta una condizione qualsiasi. Per questo esempio, specifica i seguenti campi nel dizionario:
  + Per `MaxInvocations`, specifica il numero massimo di richieste al minuto previsto per l'endpoint, con un minimo di 1 e un massimo di 30.000.
  + Per `ModelLatencyThresholds`, specifica `Percentile` (la soglia del percentile di latenza del modello) e `ValueInMilliseconds` (il valore del percentile di latenza del modello in millisecondi).
  + (Facoltativo) Per `FlatInvocations`, è possibile specificare se continuare il test di carico quando la velocità TPS (invocazioni al minuto) smette di aumentare. Una velocità TPS costante indica generalmente che l'endpoint ha raggiunto la capacità. Tuttavia, potresti voler continuare a monitorare l'endpoint in condizioni di piena capacità. Per continuare il test di carico quando ciò accade, specifica questo valore come `Continue`. In caso contrario, il valore predefinito è `Stop`.

```
aws sagemaker create-inference-recommendations-job\
    --region <region>\
    --job-name <job-name>\
    --job-type ADVANCED\
    --role-arn arn:aws:iam::<account>:role/*\
    --input-config \"{
        \"ModelPackageVersionArn\": \"arn:aws:sagemaker:<region>:<account>:role/*\",
        \"JobDurationInSeconds\": 7200,                                
        \"TrafficPattern\" : {
                # Replace PHASES with STAIRS to use the stairs traffic pattern
                \"TrafficType\": \"PHASES\",
                \"Phases\": [
                    {
                        \"InitialNumberOfUsers\": 1,
                        \"SpawnRate\": 60,
                        \"DurationInSeconds\": 300
                    }
                ]
                # Uncomment this section and comment out the Phases object above to use the stairs traffic pattern
                # 'Stairs' : {
                #   'DurationInSeconds': 240,
                #   'NumberOfSteps': 2,
                #   'UsersPerStep': 2
                # }
            },
            \"ResourceLimit\": {
                \"MaxNumberOfTests\": 10,
                \"MaxParallelOfTests\": 3
            },
            \"EndpointConfigurations\" : [
                {
                    \"InstanceType\": \"ml.c5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.m5.xlarge\"
                },
                {
                    \"InstanceType\": \"ml.r5.xlarge\"
                }
                # Use the ServerlessConfig and leave out the InstanceType fields if you want recommendations for a serverless endpoint
                # \"ServerlessConfig\": {
                #     \"MaxConcurrency\": value, 
                #     \"MemorySizeInMB\": value 
                # }
            ]
        }\"
    --stopping-conditions \"{
        \"MaxInvocations\": 1000,
        \"ModelLatencyThresholds\":[
                {
                    \"Percentile\": \"P95\", 
                    \"ValueInMilliseconds\": 100
                }
        ],
        # Change 'Stop' to 'Continue' to let the load test continue if invocations flatten 
        \"FlatInvocations\": \"Stop\"
    }\"
```

------
#### [ Amazon SageMaker Studio Classic ]

Crea un test di carico con Studio Classic.

1. Nell’applicazione Studio Classic scegli l’icona home (![\[Black square icon representing a placeholder or empty image.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/studio/icons/house.png)).

1. Nella barra laterale di sinistra di Studio Classic scegli **Implementazioni**.

1. Scegli **Suggeritore di inferenza** dall'elenco a discesa.

1. Scegli **Crea un processo di raccomandazione di inferenza**. Si apre una nuova scheda intitolata **Crea un processo di raccomandazione di inferenza**.

1. Seleziona il nome del tuo gruppo di modelli dal campo **Gruppo di modelli** del menu a discesa. L’elenco include tutti i gruppi di modelli registrati nel registro dei modelli nell’account, inclusi i modelli registrati al di fuori di Studio Classic.

1. Seleziona una versione del modello dal campo **Versione del modello** del menu a discesa.

1. Scegli **Continua**.

1. Indica un nome per il processo nel campo **Nome**.

1. (Facoltativo) Fornisci una descrizione del processo nel campo **Descrizione**.

1. Scegli un ruolo IAM che conceda a Inference Recommender l'autorizzazione ad accedere ai servizi. AWS A tale scopo, è possibile creare un ruolo e collegare la policy gestita IAM `AmazonSageMakerFullAccess` oppure è possibile lasciare che sia Studio Classic a creare un ruolo.

1. Scegli **Condizioni di arresto** per espandere i campi di input disponibili. Fornisci una serie di condizioni per interrompere una raccomandazione di implementazione. 

   1. Specifica il numero massimo di richieste al minuto previsto per l'endpoint nel campo **Numero massimo di invocazioni al minuto**.

   1. Specifica la soglia di latenza del modello in microsecondi nel campo **Soglia di latenza del modello**. La **soglia di latenza del modello** rappresenta l'intervallo di tempo impiegato da un modello per rispondere, come mostrato dal suggeritore di inferenza. Questo intervallo include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container del modello e il tempo richiesto per completare l'inferenza nel container.

1. Scegli **Modello di traffico** per espandere i campi di input disponibili.

   1. Imposta il numero iniziale di utenti virtuali specificando un numero intero nel campo **Numero iniziale di utenti**.

   1. Fornisci un numero intero per il campo **Velocità di generazione**. La velocità di generazione imposta il numero di utenti creati al secondo.

   1. Imposta la durata della fase in secondi specificando un numero intero nel campo **Durata**.

   1. (Facoltativo) Aggiungi modelli di traffico aggiuntivi. A tale scopo, seleziona **Aggiungi**.

1. Seleziona l'impostazione **Aggiuntivo** per visualizzare il campo **Durata massima del test**. Specifica, in secondi, il tempo massimo che un test può impiegare durante un processo. I nuovi processi non vengono pianificati dopo la durata definita. Ciò contribuisce a garantire che i processi in corso non vengano interrotti e che vengano visualizzati solo i processi completati.

1. Scegli **Continua**.

1. Seleziona **Istanze selezionate**.

1. Nel campo **Istanze per il benchmarking**, seleziona **Aggiungi istanze da testare**. Seleziona fino a 10 istanze che il suggeritore di inferenza deve utilizzare per i test di carico.

1. Seleziona **Impostazioni aggiuntive**.

   1. Fornisci un numero intero che stabilisca un limite massimo al numero di test che un processo può eseguire per il campo **Numero massimo di test**. Tieni presente che ogni configurazione dell'endpoint comporta un nuovo test di carico.

   1. Fornisci un numero intero per il campo di test **Massimo paralleli**. Questa impostazione definisce un limite superiore al numero di test di carico che possono essere eseguiti in parallelo.

1. Seleziona **Invia**.

   Il test di carico può richiedere fino a 2 ore.
**avvertimento**  
Non chiudere questa scheda. Se si chiude questa scheda, si annulla il processo di test di carico del suggeritore di inferenza.

------
#### [ SageMaker AI console ]

Crea un test di carico personalizzato tramite la console SageMaker AI effettuando le seguenti operazioni:

1. Vai alla console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione di sinistra, seleziona **Inferenza** e poi **Suggeritore di inferenza**.

1. Nella pagina dei **processi del suggeritore di inferenza**, seleziona **Crea processo**.

1. Per **fase 1, configurazione di modelli**, procedi come segue:

   1. Per **Tipo di processo**, seleziona **Processo del suggeritore avanzato**.

   1. Se utilizzi un modello registrato nel registro dei modelli SageMaker AI, attiva l'interruttore **Scegli un modello dal registro dei modelli** ed esegui le seguenti operazioni:

      1. Per l'elenco a discesa del **gruppo di modelli**, scegli il gruppo di modelli nel registro dei modelli SageMaker AI in cui si trova il tuo modello.

      1. Dall'elenco a discesa **Versione del modello**, seleziona la versione desiderata del modello.

   1. Se stai utilizzando un modello che hai creato in SageMaker AI, disattiva l'interruttore **Scegli un modello dal registro dei modelli** ed esegui le seguenti operazioni:

      1. Nel campo **Nome modello**, inserisci il nome del tuo modello SageMaker AI.

   1. Per il **ruolo IAM**, puoi selezionare un ruolo AWS IAM esistente che dispone delle autorizzazioni necessarie per creare un processo di raccomandazione delle istanze. In alternativa, se non disponi di un ruolo esistente, puoi scegliere **Crea un nuovo ruolo** per aprire il pop-up di creazione del ruolo e l' SageMaker IA aggiunge le autorizzazioni necessarie al nuovo ruolo che crei.

   1. Per **Bucket S3 per l’esecuzione del benchmark del payload**, inserisci il percorso Amazon S3 all’archivio del payload di esempio, che dovrebbe contenere i file di payload di esempio utilizzati da Inference Recommender per eseguire il benchmark del tuo modello in base a diversi tipi di istanze.

   1. Per **tipo di contenuto di payload**, inserisci i tipi MIME per i dati del payload di esempio.

   1. Per **Modello di traffico**, configura le fasi per il test di carico effettuando le seguenti operazioni:

      1. Per **Numero iniziale di utenti**, specifica da quanti utenti simultanei vuoi iniziare (con un minimo di 1 e un massimo di 3).

      1. Per **Frequenza di generazione**, specifica il numero di utenti da generare in un minuto per la fase (con un minimo di 0 e un massimo di 3).

      1. Per **Durata (secondi)**, specifica quanto deve essere bassa la fase di traffico in secondi (con un minimo di 120 e un massimo di 3600).

   1. (Facoltativo) Se hai disattivato l'**opzione Scegli un modello dal registro dei modelli** e hai specificato un modello SageMaker AI, per la **configurazione del contenitore**, procedi come segue:

      1. Per l’elenco a discesa **Dominio**, seleziona il dominio di machine learning del modello, ad esempio visione artificiale, elaborazione del linguaggio naturale o machine learning.

      1. Per l'elenco a discesa **Framework**, seleziona il framework del contenitore, ad esempio o. TensorFlow XGBoost

      1. Per **Versione del framework**, inserisci la versione del framework dell'immagine del container.

      1. Per l'elenco a discesa **Nome del modello più vicino**, seleziona il modello pre-addestrato che più si avvicina al tuo.

      1. Nell'elenco a discesa **Attività**, seleziona l'attività di machine learning svolta dal modello, ad esempio la classificazione o la regressione delle immagini.

   1. (Facoltativo) Per la **compilazione del modello con SageMaker Neo**, puoi configurare il processo di raccomandazione per un modello che hai compilato usando SageMaker Neo. Per **configurazione dell'input dei dati**, inserisci la forma dei dati di input corretta per il tuo modello in un formato simile a `{'input':[1,1024,1024,3]}`.

   1. Scegli **Next (Successivo)**.

1. Per **fase 2, istanze e parametri di ambiente**, effettua le seguenti operazioni:

   1. Per **Seleziona le istanze** per l'esecuzione dei benchmark, seleziona fino a 8 tipi di istanze da sottoporre a benchmark.

   1. (Facoltativo) Per **Intervalli dei parametri dell'ambiente**, puoi specificare i parametri dell'ambiente che contribuiscono a ottimizzare il modello. Specifica i parametri come le coppie **Chiave** e **Valore**.

   1. Scegli **Next (Successivo)**.

1. Per **fase 3, parametri del processo**, effettua le seguenti operazioni:

   1. (Facoltativo) Nel campo **Nome del processo**, immetti un nome per il tuo processo di suggerimento sull’istanza. Quando crei il lavoro, SageMaker AI aggiunge un timestamp alla fine di questo nome.

   1. (Facoltativo) Per il campo **Descrizione processo**, immetti una descrizione per il processo.

   1. (Facoltativo) Per l'elenco a discesa **Chiave di crittografia**, scegli una AWS KMS chiave per nome o inserisci il relativo ARN per crittografare i dati.

   1. (Facoltativo) Per **Numero massimo di test**, inserisci il numero di test che desideri eseguire durante il processo di raccomandazione.

   1. (Facoltativo) Per **Test paralleli massimi**, inserisci il numero di test paralleli che desideri eseguire durante il processo di raccomandazione.

   1. (Per **Durate massime dei test**, inserisci il numero massimo di secondi per cui desideri che ciascun test venga eseguito.

   1. Per **Numero massimo di invocazioni al minuto**, inserisci il numero massimo di richieste al minuto che l'endpoint può raggiungere prima dell'interruzione del processo di raccomandazione. Dopo aver raggiunto questo limite, l' SageMaker IA termina il lavoro.

   1. Per **Soglia di latenza del modello P99 (ms)**, inserisci il percentile di latenza del modello in millisecondi.

   1. Scegli **Next (Successivo)**.

1. Per **fase 4, esamina il processo**, esamina le configurazioni e quindi seleziona **Invia**.

------

## Ottieni i risultati dei test di carico
<a name="load-test-describe"></a>

Puoi raccogliere in modo programmatico le metriche di tutti i test di carico una volta completati i test di carico con AWS SDK per Python (Boto3) Studio Classic o la SageMaker console AI. AWS CLI

------
#### [ AWS SDK per Python (Boto3) ]

Raccogli i parametri con l’API `DescribeInferenceRecommendationsJob`. Specifica il nome del processo del test di carico per il campo `JobName`:

```
load_test_response = sagemaker_client.describe_inference_recommendations_job(
                                                        JobName=load_test_job_name
                                                        )
```

Stampa l'oggetto risposta.

```
load_test_response['Status']
```

Questo esempio restituisce una risposta JSON simile alla seguente: Questo esempio mostra i tipi di istanza consigliati per l’inferenza in tempo reale (per un esempio che mostra raccomandazioni di inferenza Serverless, consulta l’esempio successivo).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100}
            ]}, 
    'InferenceRecommendations': [{
        'Metrics': {
            'CostPerHour': 0.6899999976158142, 
            'CostPerInference': 1.0332434612791985e-05, 
            'MaximumInvocations': 1113, 
            'ModelLatency': 100000
            }, 
    'EndpointConfiguration': {
        'EndpointName': 'endpoint-name', 
        'VariantName': 'variant-name', 
        'InstanceType': 'ml.c5d.xlarge', 
        'InitialInstanceCount': 3
        }, 
    'ModelConfiguration': {
        'Compiled': False, 
        'EnvironmentParameters': []
        }
    }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0}
    }
```

Le prime nuove righe forniscono informazioni sullo stesso processo di test di carico. Ciò include il nome del processo, l'ARN del ruolo e l'ora di creazione ed eliminazione. 

Il dizionario `InferenceRecommendations` contiene un elenco di suggerimenti sull’inferenza di Inference Recommender.

Il dizionario `EndpointConfiguration` annidato contiene il consiglio sul tipo di istanza (`InstanceType`) insieme al nome dell'endpoint e della variante (un modello di apprendimento AWS automatico distribuito) utilizzati durante il processo di raccomandazione. Puoi utilizzare l'endpoint e il nome della variante per il monitoraggio in Amazon CloudWatch Events. Per ulteriori informazioni, consulta [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md).

Il dizionario annidato `EndpointConfiguration` contiene anche la raccomandazione del conteggio di istanze (`InitialInstanceCount`). Si tratta del numero di istanze da fornire nell'endpoint per soddisfare `MaxInvocations` specificato in `StoppingConditions`. Ad esempio, se `InstanceType` è `ml.m5.large` e `InitialInstanceCount` è `2`, dovresti effettuare il provisioning di 2 istanze `ml.m5.large` per l'endpoint in modo che possa gestire il TPS specificato nella condizione di arresto `MaxInvocations`.

Il dizionario `Metrics` annidato contiene informazioni sul costo orario stimato (`CostPerHour`) per l'endpoint in tempo reale in dollari USA, il costo per inferenza stimato (`CostPerInference`) per l'endpoint in tempo reale, il numero massimo di `InvokeEndpoint` richieste inviate all'endpoint e la latenza del modello (`ModelLatency`), che è l'intervallo di tempo (in microsecondi) impiegato dal modello per rispondere all'intelligenza artificiale. SageMaker La latenza del modello include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container di un modello e il tempo richiesto per completare l’inferenza nel container.

L'esempio seguente mostra la parte `InferenceRecommendations` della risposta per un processo di test di carico configurato per restituire raccomandazioni di inferenza serverless:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

È possibile interpretare i consigli per l’inferenza serverless in modo simile ai risultati per l’inferenza in tempo reale, ad eccezione di `ServerlessConfig`, che indica i valori specificati per `MaxConcurrency` e `MemorySizeInMB` durante la configurazione del test di carico. Le raccomandazioni serverless misurano anche il parametro `ModelSetupTime`, che misura (in microsecondi) il tempo necessario per avviare le risorse di calcolo su un endpoint serverless. Per ulteriori informazioni sulla configurazione di endpoint serverless, consulta la [documentazione per inferenze serverless](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

------
#### [ AWS CLI ]

Raccogli i parametri con l'API `describe-inference-recommendations-job`. Specifica il nome del processo del test di carico per il flag `job-name`:

```
aws sagemaker describe-inference-recommendations-job --job-name <job-name>
```

Questo restituisce una risposta simile al seguente esempio. Questo esempio mostra i tipi di istanza consigliati per l’inferenza in tempo reale (per un esempio che mostra raccomandazioni di inferenza Serverless, consulta l’esempio successivo).

```
{
    'JobName': 'job-name', 
    'JobDescription': 'job-description', 
    'JobType': 'Advanced', 
    'JobArn': 'arn:aws:sagemaker:region:account-id:inference-recommendations-job/resource-id', 
    'Status': 'COMPLETED', 
    'CreationTime': datetime.datetime(2021, 10, 26, 19, 38, 30, 957000, tzinfo=tzlocal()), 
    'LastModifiedTime': datetime.datetime(2021, 10, 26, 19, 46, 31, 399000, tzinfo=tzlocal()), 
    'InputConfig': {
        'ModelPackageVersionArn': 'arn:aws:sagemaker:region:account-id:model-package/resource-id', 
        'JobDurationInSeconds': 7200, 
        'TrafficPattern': {
            'TrafficType': 'PHASES'
            }, 
        'ResourceLimit': {
            'MaxNumberOfTests': 100, 
            'MaxParallelOfTests': 100
            }, 
        'EndpointConfigurations': [{
            'InstanceType': 'ml.c5d.xlarge'
            }]
        }, 
    'StoppingConditions': {
        'MaxInvocations': 1000, 
        'ModelLatencyThresholds': [{
            'Percentile': 'P95', 
            'ValueInMilliseconds': 100
            }]
        }, 
    'InferenceRecommendations': [{
        'Metrics': {
        'CostPerHour': 0.6899999976158142, 
        'CostPerInference': 1.0332434612791985e-05, 
        'MaximumInvocations': 1113, 
        'ModelLatency': 100000
        }, 
        'EndpointConfiguration': {
            'EndpointName': 'endpoint-name', 
            'VariantName': 'variant-name', 
            'InstanceType': 'ml.c5d.xlarge', 
            'InitialInstanceCount': 3
            }, 
        'ModelConfiguration': {
            'Compiled': False, 
            'EnvironmentParameters': []
            }
        }], 
    'ResponseMetadata': {
        'RequestId': 'request-id', 
        'HTTPStatusCode': 200, 
        'HTTPHeaders': {
            'x-amzn-requestid': 'x-amzn-requestid', 
            'content-type': 'content-type', 
            'content-length': '1199', 
            'date': 'Tue, 26 Oct 2021 19:57:42 GMT'
            }, 
        'RetryAttempts': 0
        }
    }
```

Le prime nuove righe forniscono informazioni sullo stesso processo di test di carico. Ciò include il nome del processo, l'ARN del ruolo e l'ora di creazione ed eliminazione. 

Il dizionario `InferenceRecommendations` contiene un elenco di suggerimenti sull’inferenza di Inference Recommender.

Il dizionario `EndpointConfiguration` annidato contiene la raccomandazione del tipo di istanza (`InstanceType`) insieme al nome dell'endpoint e della variante (un modello di apprendimento AWS automatico distribuito) utilizzati durante il processo di raccomandazione. Puoi utilizzare l'endpoint e il nome della variante per il monitoraggio in Amazon CloudWatch Events. Per ulteriori informazioni, consulta [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md).

Il dizionario `Metrics` annidato contiene informazioni sul costo orario stimato (`CostPerHour`) per l'endpoint in tempo reale in dollari USA, il costo per inferenza stimato (`CostPerInference`) per l'endpoint in tempo reale, il numero massimo di `InvokeEndpoint` richieste inviate all'endpoint e la latenza del modello (`ModelLatency`), che è l'intervallo di tempo (in microsecondi) impiegato dal modello per rispondere all'intelligenza artificiale. SageMaker La latenza del modello include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container di un modello e il tempo richiesto per completare l’inferenza nel container.

L'esempio seguente mostra la parte `InferenceRecommendations` della risposta per un processo di test di carico configurato per restituire raccomandazioni di inferenza serverless:

```
"InferenceRecommendations": [ 
      { 
         "EndpointConfiguration": { 
            "EndpointName": "value",
            "InitialInstanceCount": value,
            "InstanceType": "value",
            "VariantName": "value",
            "ServerlessConfig": {
                "MaxConcurrency": value,
                "MemorySizeInMb": value
            }
         },
         "InvocationEndTime": value,
         "InvocationStartTime": value,
         "Metrics": { 
            "CostPerHour": value,
            "CostPerInference": value,
            "CpuUtilization": value,
            "MaxInvocations": value,
            "MemoryUtilization": value,
            "ModelLatency": value,
            "ModelSetupTime": value
         },
         "ModelConfiguration": { 
            "Compiled": "False",
            "EnvironmentParameters": [],
            "InferenceSpecificationName": "value"
         },
         "RecommendationId": "value"
      }
   ]
```

È possibile interpretare i consigli per l'inferenza serverless in modo simile ai risultati per l'inferenza in tempo reale, ad eccezione di `ServerlessConfig`, che indica i valori specificati per `MaxConcurrency` e `MemorySizeInMB` durante la configurazione del test di carico. Le raccomandazioni serverless misurano anche il parametro `ModelSetupTime`, che misura (in microsecondi) il tempo necessario per avviare le risorse informatiche su un endpoint serverless. Per ulteriori informazioni sulla configurazione di endpoint serverless, consulta la [documentazione per inferenze serverless](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html).

------
#### [ Amazon SageMaker Studio Classic ]

Le raccomandazioni sono riportate in una nuova scheda chiamata **Raccomandazioni di inferenza** all’interno di Studio Classic. Può essere necessario fino a 2 ore prima che i risultati vengano visualizzati. Questa scheda contiene le collone **Risultati** e **Dettagli**.

La colonna **Dettagli** fornisce informazioni sul processo dei test di carico, ad esempio il nome assegnato al processo del test di carico, quando il processo è stato creato (**Ora di creazione**) e altro ancora. Contiene inoltre informazioni sulle **Impostazioni**, come il numero massimo di invocazioni avvenute al minuto e informazioni sugli Amazon Resource Name utilizzati.

La colonna **Risultati** fornisce **le finestre **degli obiettivi di implementazione** e dei consigli SageMaker AI** in cui è possibile modificare l'ordine di visualizzazione dei risultati in base all'importanza della distribuzione. Sono disponibili tre menu a discesa in cui è possibile indicare il livello di importanza del **costo**, della **latenza** e del **throughput** per il proprio caso d'uso. Puoi impostare il livello di importanza di ogni obiettivo (costo, latenza e throughput): **importanza minima**, **importanza bassa**, **importanza moderata**, **importanza elevata** o **importanza massima**. 

In base all'importanza selezionata per ogni obiettivo, Inference Recommender mostra i consigli più importanti nel campo dei **SageMakerconsigli** sulla destra del pannello, insieme al costo orario stimato e alla richiesta di inferenza. Fornisce inoltre informazioni sulla latenza del modello prevista, sul numero massimo di invocazioni e sul numero di istanze.

Oltre ai consigli principali visualizzati, è anche possibile visualizzare le stesse informazioni riportate per tutte le istanze testate dal suggeritore di inferenza nella sezione **Tutte le esecuzioni**.

------
#### [ SageMaker AI console ]

Puoi visualizzare i risultati del tuo lavoro di test di carico personalizzato nella console SageMaker AI effettuando le seguenti operazioni:

1. Vai alla console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione di sinistra, seleziona **Inferenza** e poi **Suggeritore di inferenza**.

1. Nella pagina dei **processi di raccomandazione delle inferenze**, scegli il nome del tuo processo di raccomandazione delle inferenze.

Nella pagina dei dettagli del tuo lavoro, puoi visualizzare i **consigli di Inference**, ovvero i tipi di istanze consigliati dall' SageMaker IA per il tuo modello, come mostrato nella schermata seguente.

![\[Schermata dell'elenco dei consigli di inferenza nella pagina dei dettagli del lavoro nella console AI. SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inf-rec-instant-recs.png)


In questa sezione, è possibile confrontare i tipi di istanza in base a vari fattori, come la **latenza del modello**, il **costo all’ora**, il **costo per inferenza** e le **invocazioni al minuto**.

In questa pagina, è possibile visualizzare anche le configurazioni specificate per il processo. Nella sezione **Monitor**, puoi visualizzare i CloudWatch parametri di Amazon registrati per ogni tipo di istanza. Per ulteriori informazioni sull'interpretazione di questi parametri, consulta [Interpretazione dei risultati](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-interpret-results.html).

------

# Interrompi il test di carico
<a name="load-test-stop"></a>

Potresti voler arrestare un processo attualmente in esecuzione se lo hai avviato per errore o se non è più necessario eseguirlo. Interrompi i processi di test di carico a livello di codice con l'`StopInferenceRecommendationsJob`API o tramite Studio Classic o la console AI. SageMaker 

------
#### [ AWS SDK per Python (Boto3) ]

Specifica il nome del processo del test di carico per il campo `JobName`:

```
sagemaker_client.stop_inference_recommendations_job(
                                    JobName='<INSERT>'
                                    )
```

------
#### [ AWS CLI ]

Specifica il nome del processo del test di carico per il flag `job-name`:

```
aws sagemaker stop-inference-recommendations-job --job-name <job-name>
```

------
#### [ Amazon SageMaker Studio Classic ]

Chiudi la scheda in cui hai avviato il processo di caricamento personalizzato per interrompere il test di carico del suggeritore di inferenza.

------
#### [ SageMaker AI console ]

Per interrompere il processo di test di carico tramite la console SageMaker AI, procedi come segue:

1. Vai alla console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione di sinistra, seleziona **Inferenza** e poi **Suggeritore di inferenza**.

1. Nella pagina **Processi del suggeritore di inferenza**, seleziona il processo di test di carico.

1. Seleziona **Arresta processo**.

1. Nella finestra di dialogo che viene visualizzata, seleziona **Conferma**.

Dopo aver interrotto il processo, **Stato** del processo dovrebbe cambiare in **In fase di arresto**.

------

# Risolvi gli errori del suggeritore di inferenza
<a name="inference-recommender-troubleshooting"></a>

Questa sezione contiene informazioni su come comprendere e impedire errori comuni, i messaggi di errore da essi generati e le linee guida su come risolvere questi errori.

## Come risolvere i problemi
<a name="inference-recommender-troubleshooting-how-to"></a>

Puoi tentare di risolvere l'errore eseguendo le fasi seguenti:
+ Verifica se hai soddisfatto tutti i prerequisiti per utilizzare il suggeritore di inferenza. Vedi [Prerequisiti del suggeritore di inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-prerequisites.html).
+ Verifica di essere in grado di implementare il modello da Model Registry a un endpoint e che sia in grado di elaborare i payload senza errori. Consulta [Implementazione di un modello dal registro](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry-deploy.html).
+ Quando avvii un job di Inference Recommender, dovresti vedere gli endpoint creati nella console e puoi rivedere i log. CloudWatch 

## Errori comuni
<a name="inference-recommender-troubleshooting-common"></a>

Consulta la tabella seguente per gli errori più comuni del suggeritore di inferenza e le relative soluzioni.


| Errore | Soluzione | 
| --- | --- | 
|  Specifica `Domain` nella versione 1 del pacchetto di modelli. `Domain` è un parametro obbligatorio per il processo.  |  Assicurati di indicare il dominio ML oppure `OTHER`, se sconosciuto.  | 
|  L'ARN del ruolo fornito non può essere ipotizzato e si è verificato un errore `AWSSecurityTokenServiceException`.  |  Assicurati che il ruolo di esecuzione fornito disponga delle autorizzazioni necessarie specificate nei prerequisiti.  | 
|  Specifica `Framework` nella versione 1 del pacchetto di modelli. `Framework` è un parametro obbligatorio per il processo.  |  Assicurati di indicare il framework ML o `OTHER` se sconosciuto.  | 
|  Gli utenti alla fine della fase precedente sono 0 mentre il numero di utenti iniziali della fase corrente è pari a 1.  |  Gli utenti qui descritti si riferiscono agli utenti o ai thread virtuali utilizzati per inviare richieste. Ogni fase inizia con utenti A e termina con utenti B, ad esempio B > A. Tra le fasi sequenziali, x\$11 e x\$12, è necessario che abs (X\$12.a - X\$11.b) <= 3 e >= 0.  | 
|  La durata del traffico totale (trasversale) non deve essere superiore alla durata dei processi.  |  La durata totale di tutte le fasi non può superare la durata dei processi.  | 
|  Il tipo di istanza burstable ml.t2.medium non è consentito.  |  Il suggeritore di inferenza non supporta i test di carico sulla famiglia di istanze t2 perché le istanze burstable non forniscono prestazioni uniformi.  | 
|  ResourceLimitExceeded quando CreateEndpoint si chiama l'operazione  |  Hai superato il limite di risorse di SageMaker intelligenza artificiale. Ad esempio, il suggeritore di inferenza potrebbe non essere in grado di fornire gli endpoint per il benchmarking se l'account ha raggiunto la quota degli endpoint. Per ulteriori informazioni sui limiti e le quote dell' SageMaker IA, consulta [Endpoint e quote Amazon SageMaker AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html).  | 
|  ModelError quando si chiama l'operazione InvokeEndpoint   |  Un errore di modello può verificarsi per i seguenti motivi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/inference-recommender-troubleshooting.html)  | 
|  PayloadError durante l' InvokeEndpoint operazione di chiamata  |  Un errore di payload può verificarsi per i seguenti motivi: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/inference-recommender-troubleshooting.html)  | 

## Controlla CloudWatch
<a name="inference-recommender-troubleshooting-check-cw"></a>

Quando avvii un processo del suggeritore di inferenza, dovresti vedere gli endpoint creati nella console. Seleziona uno degli endpoint e visualizza i CloudWatch log per monitorare eventuali errori 4xx/5xx. Se hai un processo del suggeritore di inferenza con esito positivo, potrai vedere i nomi degli endpoint come parte dei risultati. Anche se il processo di Inference Recommender non ha esito positivo, puoi comunque controllare i CloudWatch log degli endpoint eliminati seguendo i passaggi seguenti:

1. Apri la CloudWatch console Amazon all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Seleziona la Regione in cui hai creato il processo del suggeritore di inferenza dall'elenco a discesa **Regione** in alto a destra.

1. Nel riquadro di navigazione di CloudWatch, scegli **Registri**, quindi seleziona **Gruppi di log**.

1. Cerca il gruppo di log chiamato `/aws/sagemaker/Endpoints/sm-epc-*`. Seleziona il gruppo di log in base al tuo processo del suggeritore di inferenza più recente.

Puoi anche risolvere i problemi del tuo lavoro controllando i log di Inference Recommender. CloudWatch I log di Inference Recommender, pubblicati nel gruppo di `/aws/sagemaker/InferenceRecommendationsJobs` CloudWatch log, offrono una visione di alto livello sullo stato di avanzamento del lavoro nel flusso di log. `<jobName>/execution` È possibile trovare informazioni dettagliate su ciascuna configurazione degli endpoint testate nel flusso di log `<jobName>/Endpoint/<endpointName>`.

**Panoramica dei flussi di log del suggeritore di inferenza**
+ `<jobName>/execution` contiene informazioni generali sul processo, come le configurazioni degli endpoint programmate per il benchmarking, il motivo del mancato completamento del processo di compilazione e il motivo dell'errore di convalida.
+ `<jobName>/Endpoint/<endpointName>` contiene informazioni quali lo stato di avanzamento della creazione delle risorse, la configurazione del test, il motivo dell'interruzione del test di carico e lo stato di pulizia delle risorse.
+ `<jobName>/CompilationJob/<compilationJobName>` contiene informazioni sui processi di compilazione creati dal suggeritore di inferenza, come la configurazione del processo di compilazione e lo stato del processo di compilazione.

**Crea un allarme per i messaggi di errore del suggeritore di inferenza**

Il suggeritore di inferenza genera istruzioni di log per gli errori che potrebbero essere utili durante la risoluzione dei problemi. Con un gruppo di CloudWatch log e un filtro metrico, puoi cercare termini e modelli in questi dati di registro man mano che i dati vengono inviati. CloudWatch Quindi, puoi creare un CloudWatch allarme basato sul filtro metrico del gruppo di log. Per ulteriori informazioni, consulta [Creare un CloudWatch allarme basato su un filtro metrico del gruppo di log](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create_alarm_log_group_metric_filter.html).

## Controlla i benchmark
<a name="inference-recommender-troubleshooting-check-benchmarks"></a>

Quando si avvia un processo del suggeritore di inferenza, quest'ultimo crea diversi benchmark per valutare le prestazioni del modello su diversi tipi di istanze. Puoi utilizzare l'[ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html)API per visualizzare i dettagli di tutti i benchmark. Se un benchmark ha avuto esito negativo, è possibile visualizzare i motivi dell'errore come parte dei risultati.

Per utilizzare l'[ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html)API, fornisci i seguenti valori:
+ Per `JobName`, fornisci il nome del processo del suggeritore di inferenza.
+ Per `StepType`, utilizza `BENCHMARK` per restituire informazioni sui benchmark del processo.
+ Per `Status`, utilizza `FAILED` per restituire informazioni solo sui benchmark che hanno avuto esito negativo. Per un elenco degli altri tipi di stato, consulta il `Status` campo nell'[ListInferenceRecommendationsJobSteps](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ListInferenceRecommendationsJobSteps.html)API.

```
# Create a low-level SageMaker service client.
import boto3
aws_region = '<region>'
sagemaker_client = boto3.client('sagemaker', region_name=aws_region) 

# Provide the job name for the SageMaker Inference Recommender job
job_name = '<job-name>'

# Filter for benchmarks
step_type = 'BENCHMARK' 

# Filter for benchmarks that have a FAILED status
status = 'FAILED'

response = sagemaker_client.list_inference_recommendations_job_steps(
    JobName = job_name,
    StepType = step_type,
    Status = status
)
```

È possibile stampare l'oggetto di risposta per visualizzare i risultati. L'esempio di codice precedente memorizzava la risposta in una variabile chiamata `response`:

```
print(response)
```

# Inferenza in tempo reale
<a name="realtime-endpoints"></a>

 L’inferenza in tempo reale è ideale per carichi di lavoro di inferenza in cui sono previsti requisiti in tempo reale, interattivi e a bassa latenza. Puoi implementare il tuo modello sui servizi di hosting SageMaker AI e ottenere un endpoint che può essere utilizzato per l'inferenza. Questi endpoint sono completamente gestiti e supportano il dimensionamento automatico (vedi [Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon](endpoint-auto-scaling.md)). 

**Topics**
+ [Implementazione di modelli per l’inferenza in tempo reale](realtime-endpoints-deploy-models.md)
+ [Invocare modelli per l’inferenza in tempo reale](realtime-endpoints-test-endpoints.md)
+ [Endpoints](realtime-endpoints-manage.md)
+ [Opzioni di hosting](realtime-endpoints-options.md)
+ [Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon](endpoint-auto-scaling.md)
+ [Volumi di archiviazione delle istanze](host-instance-storage.md)
+ [Convalida dei modelli in produzione](model-validation.md)
+ [Spiegabilità online con Clarify SageMaker](clarify-online-explainability.md)
+ [Fine-tuning dei modelli con componenti di inferenza dell’adattatore](realtime-endpoints-adapt.md)

# Implementazione di modelli per l’inferenza in tempo reale
<a name="realtime-endpoints-deploy-models"></a>

**Importante**  
Le politiche IAM personalizzate che consentono ad Amazon SageMaker Studio o Amazon SageMaker Studio Classic di creare SageMaker risorse Amazon devono inoltre concedere le autorizzazioni per aggiungere tag a tali risorse. L’autorizzazione per aggiungere tag alle risorse è necessaria perché Studio e Studio Classic applicano automaticamente tag a tutte le risorse che creano. Se una policy IAM consente a Studio e Studio Classic di creare risorse ma non consente l'etichettatura, possono verificarsi errori AccessDenied "" durante il tentativo di creare risorse. Per ulteriori informazioni, consulta [Fornisci le autorizzazioni per etichettare SageMaker le risorse AI](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS politiche gestite per Amazon SageMaker AI](security-iam-awsmanpol.md)che danno i permessi per creare SageMaker risorse includono già le autorizzazioni per aggiungere tag durante la creazione di tali risorse.

Esistono diverse opzioni per implementare un modello utilizzando i servizi di hosting SageMaker AI. È possibile distribuire un modello in modo interattivo con Studio. SageMaker In alternativa, puoi distribuire un modello a livello di codice utilizzando un AWS SDK, come Python SDK o SDK for SageMaker Python (Boto3). È inoltre possibile eseguire la distribuzione utilizzando. AWS CLI

## Prima di iniziare
<a name="deploy-prereqs"></a>

Prima di implementare un modello di SageMaker intelligenza artificiale, individua e prendi nota di quanto segue:
+  Regione AWS Dove si trova il tuo bucket Amazon S3
+ Il percorso URI Amazon S3 in cui sono archiviati gli artefatti del modello
+ Il ruolo di IAM per l'IA SageMaker 
+ Il percorso del registro URI Docker Amazon ECR per l'immagine personalizzata che contiene il codice di inferenza o il framework e la versione di un'immagine Docker integrata supportata e da AWS

 Per un elenco delle opzioni Servizi AWS disponibili in ciascuna di esse Regione AWS, consulta [Region Maps](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/) and Edge Networks. Per ulteriori informazioni sulla creazione di un ruolo IAM, consultare [Creazione di ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create.html).

**Importante**  
Il bucket Amazon S3 in cui sono archiviati gli artefatti del modello devono trovarsi nella stessa Regione AWS del modello che si sta creando.

## Utilizzo condiviso delle risorse con più modelli
<a name="deployed-shared-utilization"></a>

Puoi distribuire uno o più modelli su un endpoint con Amazon SageMaker AI. Quando più modelli condividono un endpoint, utilizzano congiuntamente le risorse ivi ospitate, come le istanze di calcolo ML e gli acceleratori. CPUs Il modo più flessibile per implementare più modelli su un endpoint consiste nel definire ogni modello come *componente di inferenza*.

### Componenti di inferenza
<a name="inference-components"></a>

Un componente di inferenza è un oggetto di hosting SageMaker AI che puoi utilizzare per distribuire un modello su un endpoint. Nelle impostazioni del componente di inferenza vengono specificati il modello, l’endpoint e il modo in cui il modello utilizza le risorse ospitate dall’endpoint. Per specificare il modello, puoi specificare un oggetto del modello SageMaker AI oppure puoi specificare direttamente gli artefatti e l'immagine del modello.

Nelle impostazioni è possibile ottimizzare l’utilizzo delle risorse personalizzando il modo in cui i core della CPU, gli acceleratori e la memoria richiesti vengono allocati al modello. È possibile implementare più componenti di inferenza in un endpoint, in cui ogni componente di inferenza contiene un modello e le relative esigenze di utilizzo delle risorse. 

Dopo aver distribuito un componente di inferenza, è possibile richiamare direttamente il modello associato quando si utilizza l'azione nell' InvokeEndpoint API. SageMaker 

I componenti di inferenza offrono i seguenti vantaggi:

**Flessibilità**  
Il componente di inferenza disaccoppia i dettagli dell’hosting del modello dall’endpoint stesso. Ciò offre livelli superiori di flessibilità e controllo sul modo in cui i modelli vengono ospitati e serviti con un endpoint. È possibile ospitare più modelli sulla stessa infrastruttura e aggiungere o rimuovere modelli da un endpoint in base alle esigenze. È possibile aggiornare ogni modello in modo indipendente.

**Scalabilità**  
È possibile specificare il numero di copie di ciascun modello da ospitare e impostare un numero minimo di copie per garantire che il modello venga caricato nella quantità necessaria per soddisfare le richieste. È possibile scalare qualsiasi copia di un componente di inferenza fino a zero, lasciando spazio a un’altra copia da aumentare verticalmente. 

SageMaker L'intelligenza artificiale impacchetta i tuoi modelli come componenti di inferenza quando li distribuisci utilizzando:
+ SageMaker Studio Classic.
+ L'SDK SageMaker Python per distribuire un oggetto Model (dove si imposta il tipo di endpoint su). `EndpointType.INFERENCE_COMPONENT_BASED`
+ Gli `InferenceComponent` oggetti AWS SDK per Python (Boto3) per definire che si distribuiscono su un endpoint.

## Distribuisci modelli con Studio SageMaker
<a name="deploy-models-studio"></a>

Completa i seguenti passaggi per creare e distribuire il modello in modo interattivo tramite Studio. SageMaker Per ulteriori informazioni, consulta la documentazione di [Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html). Per ulteriori informazioni dettagliate sui vari scenari di implementazione, consulta il blog [Package e distribuisci modelli ML classici e in modo semplice LLMs con Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/package-and-deploy-classical-ml-and-llms-easily-with-amazon-sagemaker-part-2-interactive-user-experiences-in-sagemaker-studio/) — Parte 2.

### Preparare gli artefatti e le autorizzazioni
<a name="studio-prereqs"></a>

Completa questa sezione prima di creare un modello in Studio. SageMaker 

Hai due opzioni per utilizzare artefatti personalizzati e creare un modello in Studio:

1. Puoi utilizzare un archivio `tar.gz` personale preconfezionato, che deve includere gli artefatti del modello, eventuale codice di inferenza personalizzato e tutte le dipendenze elencate in un file `requirements.txt`.

1. SageMaker L'intelligenza artificiale può impacchettare i tuoi artefatti per te. Devi solo inserire gli artefatti del modello grezzo e le eventuali dipendenze in un `requirements.txt` file e l' SageMaker intelligenza artificiale può fornirti il codice di inferenza predefinito (oppure puoi sovrascrivere il codice predefinito con il tuo codice di inferenza personalizzato). SageMaker L'IA supporta questa opzione per i seguenti framework:,. PyTorch XGBoost

Oltre a fornire il modello, il ruolo AWS Identity and Access Management (IAM) e un contenitore Docker (o il framework e la versione desiderati per i quali SageMaker AI dispone di un contenitore predefinito), devi anche concedere le autorizzazioni per creare e distribuire modelli tramite AI Studio. SageMaker 

Dovresti avere la [AmazonSageMakerFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html)policy associata al tuo ruolo IAM in modo da poter accedere all' SageMaker intelligenza artificiale e ad altri servizi pertinenti. Per vedere i prezzi dei tipi di istanze in Studio, devi anche allegare la [AWS PriceListServiceFullAccess](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AWSPriceListServiceFullAccess.html)policy (o, se non vuoi allegare l'intera policy, più specificamente, l'`pricing:GetProducts`azione).

Per caricare gli artefatti del modello durante la creazione di un modello (o caricare un file di payload di esempio per i consigli di inferenza), è necessario creare un bucket Amazon S3. Il nome del bucket deve essere preceduto dalla parola `SageMaker AI`. Sono accettabili anche le capitalizzazioni alternative dell' SageMaker IA: `Sagemaker` o. `sagemaker`

È consigliabile utilizzare la convenzione di denominazione dei bucket `sagemaker-{Region}-{accountID}`. Questo bucket viene utilizzato per archiviare gli artefatti caricati.

Dopo aver creato il bucket, collega la seguente policy CORS (Cross-Origin Resource Sharing) al bucket:

```
[
    {
        "AllowedHeaders": ["*"],
        "ExposeHeaders": ["Etag"],
        "AllowedMethods": ["PUT", "POST"],
        "AllowedOrigins": ['https://*.sagemaker.aws'],
    }
]
```

Puoi collegare una policy CORS a un bucket Amazon S3 utilizzando uno dei seguenti metodi:
+ tramite la pagina [Modifica la condivisione delle risorse multiorigine (CORS)](https://s3.console.aws.amazon.com/s3/bucket/bucket-name/property/cors/edit) nella console di Amazon S3;
+ Utilizzo dell'API Amazon S3 [PutBucketCors](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutBucketCors.html)
+ Utilizzando il put-bucket-cors AWS CLI comando:

  ```
  aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
  ```

### Creare un modello implementabile
<a name="studio-create-model"></a>

In questo passaggio, creerai una versione implementabile del tuo modello in SageMaker AI fornendo gli artefatti insieme a specifiche aggiuntive, come il contenitore e il framework desiderati, qualsiasi codice di inferenza personalizzato e le impostazioni di rete.

Crea un modello distribuibile in Studio effettuando le seguenti operazioni: SageMaker 

1. Apri l'applicazione SageMaker Studio.

1. Nel riquadro di navigazione a sinistra scegliere **Models (Modelli)**.

1. Scegli la scheda **Modelli implementabili**.

1. Nella pagina **Modelli implementabili**, scegli **Crea**.

1. Nella pagina **Crea modello implementabile**, nel campo **Nome modello**, inserisci un nome per il modello.

Sono presenti altre sezioni da compilare nella pagina **Crea modello implementabile**.

La sezione **Definizione di container** ha l’aspetto del seguente screenshot:

![\[Screenshot della sezione Definizione di container per la creazione di un modello in Studio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-container-definition.png)


**Per la sezione **Definizione di container** segui questa procedura:**

1. Per **Tipo di contenitore**, seleziona **Contenitore precostruito** se desideri utilizzare un contenitore gestito dall' SageMaker intelligenza artificiale oppure seleziona **Bring your own container** se hai il tuo contenitore.

1. Se hai selezionato **Container predefinito**, seleziona i valori di **Framework del container**, **Versione del framework** e **Tipo di hardware** che desideri utilizzare.

1. Se hai selezionato **Porta il tuo container**, inserisci un percorso Amazon ECR per **Percorso ECR a immagine container**.

Quindi, compila la sezione **Artefatti**, simile al seguente screenshot:

![\[Screenshot della sezione Artefatti per la creazione di un modello in Studio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-artifacts-section.png)


**Per la sezione **Artefatti** segui questa procedura:**

1. **Se utilizzi uno dei framework supportati dall' SageMaker intelligenza artificiale per il packaging degli artefatti del modello (PyTorch o XGBoost), allora per Artifacts, puoi scegliere l'**opzione Carica artefatti**.** Con questa opzione, puoi semplicemente specificare gli artefatti del modello non elaborato, qualsiasi codice di inferenza personalizzato in tuo possesso e il tuo file requirements.txt, e AI gestirà l'imballaggio dell'archivio per te. SageMaker Esegui questa operazione:

   1. Per **Artefatti**, seleziona **Carica artefatti** per continuare a fornire i file. Altrimenti, se disponi già di un archivio `tar.gz` che contiene i file del modello, il codice di inferenza e il file `requirements.txt`, seleziona **Inserisci URI S3 per pacchetti di artefatti**.

   1. Se hai scelto di caricare i tuoi artefatti, per il bucket **S3, inserisci il percorso Amazon S3 verso un bucket** in cui desideri che l' SageMaker intelligenza artificiale memorizzi i tuoi artefatti dopo averli imballati per te. Quindi, completa questa procedura.

   1. Per **Carica artefatti modello**, carica i file del modello.

   1. Per il codice di **inferenza, seleziona Usa il codice** **di inferenza predefinito se desideri utilizzare il codice** predefinito fornito dall'intelligenza artificiale per fornire l'inferenza. SageMaker Altrimenti, seleziona **Carica codice di inferenza personalizzato** per utilizzare un codice di inferenza personalizzato.

   1. Per **Carica requirements.txt**, carica un file di testo che elenchi tutte le dipendenze da installare in fase di esecuzione.

1. Se non utilizzi un framework supportato dall' SageMaker intelligenza artificiale per il packaging degli artefatti del modello, Studio ti mostra l'opzione Artefatti **preconfezionati e devi fornire tutti gli artefatti** già impacchettati come archivio. `tar.gz` Esegui questa operazione:

   1. Per **Pacchetti di artefatti**, seleziona **Inserisci URI S3 per pacchetti di artefatti del modello** se l’archivio `tar.gz` è già stato caricato in Amazon S3. Seleziona **Carica artefatti del modello preconfezionati** se desideri caricare direttamente l'archivio su AI. SageMaker 

   1. Se hai selezionato **Inserisci URI S3 per pacchetti di artefatti del modello**, inserisci il percorso Amazon S3 dell’archivio per l’**URI S3**. Altrimenti, seleziona e carica l’archivio dal tuo computer locale.

La sezione successiva è **Sicurezza**, simile allo screenshot seguente:

![\[Screenshot della sezione Sicurezza per la creazione di un modello in Studio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-security-section.png)


**Per la sezione **Sicurezza**, segui questa procedura:**

1. Per **Ruolo IAM**, inserisci l’ARN per un ruolo IAM.

1. (Facoltativo) Per **Cloud privato virtuale (VPC)**, puoi selezionare un Amazon VPC per archiviare la configurazione e gli artefatti del modello.

1. (Facoltativo) Attiva l’interruttore **Isolamento di rete** per limitare l’accesso a Internet del container.

Infine, è possibile facoltativamente compilare la sezione **Opzioni avanzate**, simile al seguente screenshot:

![\[Screenshot della sezione Opzioni avanzate per la creazione di un modello in Studio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-advanced-options.png)


**(Facoltativo) Per la sezione **Opzioni avanzate** segui questa procedura:**

1. Attiva l'opzione **Consigli di istanze personalizzate** se desideri eseguire un job Amazon SageMaker Inference Recommender sul tuo modello dopo la sua creazione. Inference Recommender è una funzionalità che fornisce tipi di istanze consigliati per ottimizzare le prestazioni e i costi dell’inferenza. È possibile visualizzare questi consigli sulle istanze durante la preparazione all’implementazione del modello.

1. Per **Aggiungi variabili di ambiente**, inserisci una variabile di ambiente per il container come coppie chiave-valore.

1. Per **Tag**, inserisci i tag come coppie chiave-valore.

1. Dopo aver completato la configurazione del modello e del container, scegli **Crea modello implementabile**.

Ora dovresti avere un modello in SageMaker Studio pronto per la distribuzione.

### Distribuzione del modello
<a name="studio-deploy"></a>

Infine, è possibile implementare il modello configurato nella fase precedente in un endpoint HTTPS. È possibile implementare un singolo modello o più modelli sull’endpoint.

**Compatibilità tra modelli ed endpoint**  
Prima di poter implementare un modello in un endpoint, è necessario che il modello e l’endpoint siano compatibili e abbiano gli stessi valori per le seguenti impostazioni:  
Ruolo IAM
Amazon VPC, comprese le sottoreti e i gruppi di sicurezza
Isolamento di rete (abilitato o disabilitato)
Studio impedisce di implementare modelli in endpoint incompatibili nei seguenti modi:  
Se tenti di implementare un modello su un nuovo endpoint, SageMaker AI configura l'endpoint con impostazioni iniziali compatibili. Se interrompi la compatibilità modificando queste impostazioni, Studio mostra un avviso e impedisce l’implementazione.
Se tenti di eseguire l’implementazione in un endpoint esistente e tale endpoint è incompatibile, Studio mostra un avviso e impedisce l’implementazione. 
Se si tenta di aggiungere più modelli a un’implementazione, Studio impedisce di implementare i modelli incompatibili tra loro.
Quando Studio mostra l’avviso sull’incompatibilità tra modello ed endpoint, è possibile scegliere **Visualizza dettagli** nell’avviso per vedere quali impostazioni sono incompatibili.

Un modo per implementare un modello consiste nel seguire questa procedura in Studio:

1. Apri l'applicazione Studio. SageMaker 

1. Nel riquadro di navigazione a sinistra scegliere **Models (Modelli)**.

1. Nella pagina **Modelli**, seleziona uno o più modelli dall'elenco dei modelli SageMaker AI.

1. Seleziona **Implementa**.

1. Per **Nome endpoint**, apri il menu a discesa. È possibile selezionare un endpoint esistente oppure creare un nuovo endpoint in cui implementare il modello.

1. Per **Tipo di istanza**, seleziona il tipo di istanza da utilizzare per l’endpoint. Se in precedenza hai eseguito un processo Inference Recommender per il modello, i tipi di istanza consigliati vengono visualizzati nell’elenco sotto il titolo **Consigliato**. Altrimenti, vedrai alcune **istanze potenziali** che potrebbero essere adatte al tuo modello.
**Compatibilità del tipo di istanza per JumpStart**  
Se stai distribuendo un JumpStart modello, Studio mostra solo i tipi di istanza supportati dal modello.

1. Per **Conteggio istanze iniziale**, inserisci il numero iniziale di istanze che desideri fornire per il tuo endpoint.

1. Per **Numero massimo di istanze**, specifica il numero massimo di istanze che l’endpoint può fornire in caso di aumento verticale per far fronte a un incremento di traffico.

1. Se il modello che stai distribuendo è uno dei più utilizzati JumpStart LLMs dal Model Hub, l'opzione **Configurazioni alternative** viene visualizzata dopo i campi Tipo di istanza e Numero di istanze.

   Per le più diffuse JumpStart LLMs, AWS dispone di tipi di istanze pre-confrontati per ottimizzarne i costi o le prestazioni. Questi dati possono aiutarti a decidere quale tipo di istanza utilizzare per implementare il tuo LLM. Scegli **Configurazioni alternative** per aprire una finestra di dialogo che contiene i dati prevalutati. Il pannello ha un aspetto simile al seguente screenshot:  
![\[Screenshot del riquadro Configurazioni alternative\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-jumpstart-alternate-configurations.png)

   Nella casella **Configurazioni alternative**, segui questa procedura:

   1. Selezione di un tipo di istanza. Puoi scegliere **Costo all’ora** o **Prestazioni ottimali** per visualizzare i tipi di istanze che ottimizzano i costi o le prestazioni per il modello specificato. Puoi anche scegliere **Altre istanze supportate** per visualizzare un elenco di altri tipi di istanze compatibili con il modello. JumpStart La selezione di un tipo di istanza qui sovrascrive qualsiasi selezione di istanza precedente specificata nella fase 6.

   1. (Facoltativo) Attiva l’interruttore **Personalizza la configurazione selezionata** per specificare i valori di **Numero massimo di token totali** (il numero massimo di token che desideri consentire, ovvero la somma dei token di input e dell’output generato dal modello), **Lunghezza massima di token per input** (il numero massimo di token che desideri consentire per l’input di ogni richiesta) e **Numero massimo di richieste simultanee** (il numero massimo di richieste che il modello può elaborare simultaneamente).

   1. Scegli **Seleziona** per confermare il tipo di istanza e le impostazioni di configurazione.

1. Il campo **Modello** dovrebbe già essere compilato con il nome del modello o dei modelli che stai implementando. Puoi scegliere **Aggiungi modello** per aggiungere altri modelli all’implementazione. Per ogni modello aggiunto, compila i seguenti campi:

   1. Per **Numero di core CPU**, inserisci i core CPU che desideri dedicare all’utilizzo del modello.

   1. Per **Numero minimo di copie**, inserisci il numero minimo di copie del modello che desideri ospitare sull’endpoint in un dato momento.

   1. Per **Memoria CPU minima (MB)**, inserisci la quantità minima di memoria (in MB) richiesta dal modello.

   1. Per **Memoria CPU massima (MB)**, inserisci la quantità massima di memoria (in MB) che desideri consentire al modello di utilizzare.

1. (Facoltativo) Per **Opzioni avanzate**, segui questa procedura:

   1. Per il **ruolo IAM**, utilizza il ruolo di esecuzione IAM SageMaker AI predefinito o specifica il tuo ruolo con le autorizzazioni necessarie. Questo ruolo IAM deve essere lo stesso del ruolo specificato durante la creazione del modello implementabile.

   1. Per **Cloud privato virtuale (VPC)**, puoi specificare un VPC in cui ospitare l’endpoint.

   1. Per la **chiave Encryption KMS**, seleziona una AWS KMS chiave per crittografare i dati sul volume di storage collegato all'istanza di calcolo ML che ospita l'endpoint.

   1. Attiva l’interruttore **Abilita l’isolamento di rete** per limitare l’accesso a Internet del container.

   1. Per la **Configurazione del timeout**, inserisci i valori per i campi **Timeout per il download dei dati del modello (secondi)** e **Timeout per il controllo dell’integrità di avvio del container (secondi)**. Questi valori determinano rispettivamente il tempo massimo consentito dall' SageMaker intelligenza artificiale per scaricare il modello nel contenitore e avviare il contenitore.

   1. Per **Tag**, inserisci i tag come coppie chiave-valore.
**Nota**  
SageMaker L'intelligenza artificiale configura il ruolo IAM, il VPC e le impostazioni di isolamento della rete con valori iniziali compatibili con il modello che stai implementando. Se interrompi la compatibilità modificando queste impostazioni, Studio mostra un avviso e impedisce l’implementazione.

Dopo aver configurato le opzioni, la pagina sarà simile allo screenshot seguente.

![\[Screenshot della pagina Implementa modello in Studio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-deploy-realtime-model-2.png)


Dopo aver configurato l’implementazione, scegli **Implementa** per creare l’endpoint e implementare il modello.

## Implementa modelli con Python SDKs
<a name="deploy-models-python"></a>

Utilizzando SageMaker Python SDK, puoi creare il tuo modello in due modi. Il primo consiste nel creare un oggetto di modello dalla classe `Model` oppure `ModelBuilder`. In caso di utilizzo della classe `Model` per creare un oggetto `Model`, è necessario specificare il pacchetto del modello o il codice di inferenza (a seconda del server del modello), gli script per gestire la serializzazione e la deserializzazione dei dati tra il client e il server ed eventuali dipendenze da caricare su Amazon S3 per il consumo. Il secondo modo per creare il modello consiste nell’utilizzare `ModelBuilder` per cui fornire artefatti del modello o codice di inferenza. `ModelBuilder` acquisisce automaticamente le dipendenze, deduce le funzioni di serializzazione e deserializzazione necessarie e genera un pacchetto delle dipendenze per creare l’oggetto `Model`. Per ulteriori informazioni su `ModelBuilder`, consultare [Crea un modello in Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md).

La sezione seguente descrive entrambi i metodi per creare il modello e implementare l’oggetto di modello.

### Configurazione
<a name="python-setup"></a>

Gli esempi seguenti preparano il processo di implementazione del modello. Importano le librerie necessarie e definiscono l’URL S3 che individua gli artefatti del modello.

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

**Example istruzioni di importazione**  
L'esempio seguente importa moduli da SageMaker Python SDK, SDK for Python (Boto3) e Python Standard Library. Questi moduli forniscono metodi utili per implementare i modelli e vengono utilizzati negli altri esempi che seguono.  

```
import boto3
from datetime import datetime
from sagemaker.compute_resource_requirements.resource_requirements import ResourceRequirements
from sagemaker.predictor import Predictor
from sagemaker.enums import EndpointType
from sagemaker.model import Model
from sagemaker.session import Session
```

------
#### [ boto3 inference components ]

**Example istruzioni di importazione**  
L’esempio seguente importa moduli da SDK per Python (Boto3) e Python Standard Library. Questi moduli forniscono metodi utili per implementare i modelli e vengono utilizzati negli altri esempi che seguono.  

```
import boto3
import botocore
import sys
import time
```

------
#### [ boto3 models (without inference components) ]

**Example istruzioni di importazione**  
L’esempio seguente importa moduli da SDK per Python (Boto3) e Python Standard Library. Questi moduli forniscono metodi utili per implementare i modelli e vengono utilizzati negli altri esempi che seguono.  

```
import boto3
import botocore
import datetime
from time import gmtime, strftime
```

------

**Example URL degli artefatti del modello**  
Il codice seguente crea un esempio di URL Amazon S3. L’URL individua gli artefatti di un modello preaddestrato in un bucket Amazon S3.  

```
# Create a variable w/ the model S3 URL

# The name of your S3 bucket:
s3_bucket = "amzn-s3-demo-bucket"
# The directory within your S3 bucket your model is stored in:
bucket_prefix = "sagemaker/model/path"
# The file name of your model artifact:
model_filename = "my-model-artifact.tar.gz"
# Relative S3 path:
model_s3_key = f"{bucket_prefix}/"+model_filename
# Combine bucket name, model file name, and relate S3 path to create S3 model URL:
model_url = f"s3://{s3_bucket}/{model_s3_key}"
```
L’URL Amazon S3 completo è archiviato nella variabile `model_url`, utilizzata negli esempi seguenti. 

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

Esistono diversi modi per distribuire modelli con Python SDK o SDK for SageMaker Python (Boto3). Le sezioni seguenti riepilogano le fasi da completare per diversi approcci possibili. Queste fasi sono illustrate negli esempi che seguono.

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

Usando SageMaker Python SDK, puoi creare il tuo modello in uno dei seguenti modi:
+ **Creare un oggetto di modello dalla classe `Model`** - È necessario specificare il pacchetto del modello o il codice di inferenza (a seconda del server del modello), gli script per gestire la serializzazione e la deserializzazione dei dati tra il client e il server ed eventuali dipendenze da caricare su Amazon S3 per il consumo. 
+ **Creare un oggetto di modello dalla classe `ModelBuilder`** - Fornisci artefatti del modello o codice di inferenza. `ModelBuilder` acquisisce automaticamente le dipendenze, deduce le funzioni di serializzazione e deserializzazione necessarie e genera un pacchetto delle dipendenze per creare l’oggetto `Model`.

  Per ulteriori informazioni su `ModelBuilder`, consultare [Crea un modello in Amazon SageMaker AI con ModelBuilder](how-it-works-modelbuilder-creation.md). Per ulteriori informazioni, puoi anche consultare il blog [Package and deploy classic ML model in LLMs modo semplice con SageMaker AI — Part 1](https://aws.amazon.com/blogs/machine-learning/package-and-deploy-classical-ml-and-llms-easily-with-amazon-sagemaker-part-1-pysdk-improvements/).

Gli esempi che seguono descrivono entrambi i metodi per creare il modello e implementare l’oggetto di modello. Per implementare un modello, segui questa procedura:

1. Definisci le risorse di endpoint da allocare al modello con un oggetto `ResourceRequirements`.

1. Crea un oggetto di modello dalla classe `Model` oppure `ModelBuilder`. L’oggetto `ResourceRequirements` è specificato nelle impostazioni del modello.

1. Implementa il modello su un endpoint utilizzando il metodo `deploy` dell’oggetto `Model`.

------
#### [ boto3 inference components ]

Gli esempi che seguono mostrano come assegnare un modello a un componente di inferenza e quindi implementare il componente di inferenza in un endpoint. Per implementare un modello in questo modo, segui questa procedura:

1. (Facoltativo) Crea un oggetto modello SageMaker AI utilizzando il [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html)metodo.

1. Specifica le impostazioni per l’endpoint creando un oggetto di configurazione dell’endpoint. Per crearne uno, utilizza il metodo [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config).

1. Crea l’endpoint utilizzando il metodo [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) e, nella richiesta, fornisci la configurazione dell’endpoint creata.

1. Crea un componente di inferenza utilizzando il metodo `create_inference_component`. Nelle impostazioni è possibile specificare un modello in uno dei seguenti modi:
   + Specificare un oggetto del modello SageMaker AI
   + Specificando l’URI dell’immagine del modello e dell’URL S3

   È inoltre possibile allocare risorse dell’endpoint al modello. Creando il componente di inferenza, il modello viene implementato nell’endpoint. È possibile implementare più modelli in un endpoint creando più componenti di inferenza, uno per ogni modello.

------
#### [ boto3 models (without inference components) ]

Gli esempi che seguono mostrano come creare un oggetto di modello e quindi implementare il modello in un endpoint. Per implementare un modello in questo modo, segui questa procedura:

1. Crea un modello di SageMaker intelligenza artificiale utilizzando il [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_model.html)metodo.

1. Specifica le impostazioni per l’endpoint creando un oggetto di configurazione dell’endpoint. Per crearne uno, utilizza il metodo [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint_config.html#create-endpoint-config). Nella configurazione dell’endpoint assegna l’oggetto di modello a una variante di produzione.

1. Crea l’endpoint utilizzando il metodo [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html). Nella richiesta fornisci la configurazione dell’endpoint creata. 

   Quando crei l'endpoint, l' SageMaker IA effettua il provisioning delle risorse dell'endpoint e distribuisce il modello sull'endpoint.

------

### Configura
<a name="python-configure"></a>

Gli esempi seguenti configurano le risorse necessarie per implementare un modello in un endpoint.

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

L’esempio seguente assegna le risorse dell’endpoint a un modello con un oggetto `ResourceRequirements`. Queste risorse includono core di CPU, acceleratori e memoria. Quindi, l’esempio crea un oggetto di modello dalla classe `Model`. In alternativa, è possibile creare un oggetto modello istanziando la [ModelBuilder](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-modelbuilder-creation.html)classe ed eseguendo`build`: questo metodo è illustrato anche nell'esempio. `ModelBuilder`fornisce un'interfaccia unificata per la creazione di pacchetti di modelli e, in questo caso, prepara un modello per l'implementazione di un modello su larga scala. L’esempio utilizza `ModelBuilder` per costruire un modello Hugging Face (Puoi anche passare un JumpStart modello). Una volta creato il modello, è possibile specificare i requisiti delle risorse nell’oggetto di modello. Nella fase successiva, questo oggetto viene utilizzato per implementare il modello in un endpoint. 

```
resources = ResourceRequirements(
    requests = {
        "num_cpus": 2,  # Number of CPU cores required:
        "num_accelerators": 1, # Number of accelerators required
        "memory": 8192,  # Minimum memory required in Mb (required)
        "copies": 1,
    },
    limits = {},
)

now = datetime.now()
dt_string = now.strftime("%d-%m-%Y-%H-%M-%S")
model_name = "my-sm-model"+dt_string

# build your model with Model class
model = Model(
    name = "model-name",
    image_uri = "image-uri",
    model_data = model_url,
    role = "arn:aws:iam::111122223333:role/service-role/role-name",
    resources = resources,
    predictor_cls = Predictor,
)
                        
# Alternate mechanism using ModelBuilder
# uncomment the following section to use ModelBuilder
/*
model_builder = ModelBuilder(
    model="<HuggingFace-ID>", # like "meta-llama/Llama-2-7b-hf"
    schema_builder=SchemaBuilder(sample_input,sample_output),
    env_vars={ "HUGGING_FACE_HUB_TOKEN": "<HuggingFace_token>}" }
)

# build your Model object
model = model_builder.build()

# create a unique name from string 'mb-inference-component'
model.model_name = unique_name_from_base("mb-inference-component")

# assign resources to your model
model.resources = resources
*/
```

------
#### [ boto3 inference components ]

Il seguente esempio configura un endpoint con il metodo `create_endpoint_config`. Questa configurazione viene assegnata a un endpoint in fase di creazione. Nella configurazione è possibile definire una o più varianti di produzione. Per ogni variante, puoi scegliere il tipo di istanza di cui desideri che Amazon SageMaker AI effettui il provisioning e puoi abilitare la scalabilità gestita delle istanze.

```
endpoint_config_name = "endpoint-config-name"
endpoint_name = "endpoint-name"
inference_component_name = "inference-component-name"
variant_name = "variant-name"

sagemaker_client.create_endpoint_config(
    EndpointConfigName = endpoint_config_name,
    ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name",
    ProductionVariants = [
        {
            "VariantName": variant_name,
            "InstanceType": "ml.p4d.24xlarge",
            "InitialInstanceCount": 1,
            "ManagedInstanceScaling": {
                "Status": "ENABLED",
                "MinInstanceCount": 1,
                "MaxInstanceCount": 2,
            },
        }
    ],
)
```

------
#### [ boto3 models (without inference components) ]

**Example definizione di modello**  
L'esempio seguente definisce un modello di SageMaker intelligenza artificiale con il `create_model` metodo contenuto in. AWS SDK per Python (Boto3)  

```
model_name = "model-name"

create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = "arn:aws:iam::111122223333:role/service-role/role-name",
    PrimaryContainer = {
        "Image": "image-uri",
        "ModelDataUrl": model_url,
    }
)
```
L’esempio specifica gli elementi seguenti:  
+ `ModelName`: un nome per il modello (in questo esempio viene memorizzato come una variabile di stringa chiamata `model_name`).
+ `ExecutionRoleArn`: Amazon Resource Name (ARN) del ruolo IAM che Amazon SageMaker AI può assumere per accedere agli artefatti del modello e alle immagini Docker per la distribuzione su istanze di calcolo ML o per lavori di trasformazione in batch.
+ `PrimaryContainer`: il percorso dell'immagine docker principale contenente il codice di inferenza, gli artefatti associati e la mappa dell'ambiente personalizzata che il codice di inferenza utilizza quando il modello è distribuito per le previsioni.

**Example Configurazione dell'endpoint**  
Il seguente esempio configura un endpoint con il metodo `create_endpoint_config`. Amazon SageMaker AI utilizza questa configurazione per distribuire modelli. Nella configurazione, identifichi uno o più modelli, creati con il `create_model` metodo, per distribuire le risorse di cui desideri che Amazon SageMaker AI fornisca.  

```
endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName = "endpoint-config-name", 
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint:
    ProductionVariants = [
        {
            "VariantName": "variant-name", # The name of the production variant.
            "ModelName": model_name, 
            "InstanceType": "ml.p4d.24xlarge",
            "InitialInstanceCount": 1 # Number of instances to launch initially.
        }
    ]
)
```
Questo esempio specifica le seguenti chiavi per il campo `ProductionVariants`:  
+ `VariantName`: il nome della variante di produzione.
+ `ModelName`: il nome del modello per cui eseguire l'hosting. Questo è il nome specificato al momento della creazione del modello.
+ `InstanceType`: il tipo di istanza di calcolo ML. Consulta il `InstanceType` campo relativo [SageMaker ai prezzi di AI](https://aws.amazon.com/sagemaker/pricing/) per un elenco dei tipi di istanze di calcolo supportati e dei prezzi per ogni tipo di istanza. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html)

------

### Implementazione
<a name="python-deploy"></a>

Gli esempi seguenti implementano un modello in un endpoint.

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

L’esempio seguente implementa il modello in un endpoint HTTPS in tempo reale con il metodo `deploy` dell’oggetto di modello. Se specifichi un valore per l’argomento `resources` sia per la creazione che per l’implementazione del modello, le risorse specificate per l’implementazione hanno priorità.

```
predictor = model.deploy(
    initial_instance_count = 1,
    instance_type = "ml.p4d.24xlarge", 
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    resources = resources,
)
```

Per il campo `instance_type`, l’esempio specifica il nome del tipo di istanza Amazon EC2 per il modello. Per il campo `initial_instance_count`, specifica il numero iniziale di istanze su cui eseguire l’endpoint.

Il seguente esempio di codice mostra un altro caso in cui si implementa un modello in un endpoint e quindi si implementa un altro modello nello stesso endpoint. In questo caso è necessario fornire lo stesso nome di endpoint ai metodi `deploy` di entrambi i modelli.

```
# Deploy the model to inference-component-based endpoint
falcon_predictor = falcon_model.deploy(
    initial_instance_count = 1,
    instance_type = "ml.p4d.24xlarge", 
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    endpoint_name = "<endpoint_name>"
    resources = resources,
)

# Deploy another model to the same inference-component-based endpoint
llama2_predictor = llama2_model.deploy( # resources already set inside llama2_model
    endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED,
    endpoint_name = "<endpoint_name>"  # same endpoint name as for falcon model
)
```

------
#### [ boto3 inference components ]

Una volta completata la configurazione dell’endpoint, utilizza il metodo [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) per creare l’endpoint. Il nome dell'endpoint deve essere univoco all'interno e all'interno del tuo Regione AWS AWS account. 

L’esempio seguente crea un endpoint utilizzando la configurazione dell’endpoint specificata nella richiesta. Amazon SageMaker AI utilizza l'endpoint per fornire risorse.

```
sagemaker_client.create_endpoint(
    EndpointName = endpoint_name,
    EndpointConfigName = endpoint_config_name,
)
```

Dopo aver creato un endpoint, è possibile implementare uno o più modelli al suo interno creando componenti di inferenza. L’esempio seguente ne crea uno con il metodo `create_inference_component`.

```
sagemaker_client.create_inference_component(
    InferenceComponentName = inference_component_name,
    EndpointName = endpoint_name,
    VariantName = variant_name,
    Specification = {
        "Container": {
            "Image": "image-uri",
            "ArtifactUrl": model_url,
        },
        "ComputeResourceRequirements": {
            "NumberOfCpuCoresRequired": 1, 
            "MinMemoryRequiredInMb": 1024
        }
    },
    RuntimeConfig = {"CopyCount": 2}
)
```

------
#### [ boto3 models (without inference components) ]

**Example implementazione**  

Fornisci la configurazione degli endpoint all'IA. SageMaker Il servizio avvia le istanze di calcolo ML e distribuisce il modello o i modelli come specificato nella configurazione.

Una volta completati il modello e la configurazione dell’endpoint, utilizza il metodo [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/create_endpoint.html) per creare l’endpoint. Il nome dell'endpoint deve essere univoco all'interno e all'interno del tuo Regione AWS AWS account. 

L’esempio seguente crea un endpoint utilizzando la configurazione dell’endpoint specificata nella richiesta. Amazon SageMaker AI utilizza l'endpoint per fornire risorse e distribuire modelli.

```
create_endpoint_response = sagemaker_client.create_endpoint(
    # The endpoint name must be unique within an AWS Region in your AWS account:
    EndpointName = "endpoint-name"
    # The name of the endpoint configuration associated with this endpoint:
    EndpointConfigName = "endpoint-config-name")
```

------

## Implementa modelli con AWS CLI
<a name="deploy-models-cli"></a>

È possibile distribuire un modello su un endpoint utilizzando. AWS CLI

### Panoramica di
<a name="deploy-models-cli-overview"></a>

Quando si distribuisce un modello con AWS CLI, è possibile distribuirlo con o senza utilizzare un componente di inferenza. Le sezioni seguenti riepilogano i comandi da eseguire per entrambi gli approcci. Questi comandi sono illustrati negli esempi che seguono.

------
#### [ With inference components ]

Per implementare un modello con un componente di inferenza, segui questa procedura:

1. (Facoltativo) Crea un modello con il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html).

1. Specifica le impostazioni per l’endpoint creando una configurazione dell’endpoint. Per creare una, esegui il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html).

1. Crea un endpoint utilizzando il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html). Nel corpo del comando specifica la configurazione dell’endpoint creata.

1. Crea un componente di inferenza utilizzando il comando `create-inference-component`. Nelle impostazioni è possibile specificare un modello in uno dei seguenti modi:
   + Specificare un oggetto del modello AI SageMaker 
   + Specificando l’URI dell’immagine del modello e dell’URL S3

   È inoltre possibile allocare risorse dell’endpoint al modello. Creando il componente di inferenza, il modello viene implementato nell’endpoint. È possibile implementare più modelli in un endpoint creando più componenti di inferenza, uno per ogni modello.

------
#### [ Without inference components ]

Per implementare un modello senza utilizzare un componente di inferenza, segui questa procedura:

1. Crea un modello di SageMaker intelligenza artificiale utilizzando il [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html)comando.

1. Specifica le impostazioni per l’endpoint creando un oggetto di configurazione dell’endpoint. Per creare uno, utilizza il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html). Nella configurazione dell’endpoint assegna l’oggetto di modello a una variante di produzione.

1. Crea un endpoint utilizzando il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html). Nel corpo del comando specifica la configurazione dell’endpoint creata.

   Quando crei l'endpoint, l' SageMaker IA effettua il provisioning delle risorse dell'endpoint e distribuisce il modello sull'endpoint.

------

### Configura
<a name="cli-configure-endpoint"></a>

Gli esempi seguenti configurano le risorse necessarie per implementare un modello in un endpoint.

------
#### [ With inference components ]

**Example create-endpoint-config comando**  
L'esempio seguente crea una configurazione dell'endpoint con il [create-endpoint-config](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html)comando.  

```
aws sagemaker create-endpoint-config \
--endpoint-config-name endpoint-config-name \
--execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name\
--production-variants file://production-variants.json
```
In questo esempio, il file `production-variants.json` definisce una variante di produzione con il seguente codice JSON:  

```
[
    {
        "VariantName": "variant-name",
        "ModelName": "model-name",
        "InstanceType": "ml.p4d.24xlarge",
        "InitialInstanceCount": 1
    }
]
```
Se il comando ha esito positivo, AWS CLI risponde con l'ARN della risorsa creata.  

```
{
    "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name"
}
```

------
#### [ Without inference components ]

**Example di comando create-model**  
L’esempio seguente crea un modello con il comando [create-model](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html).  

```
aws sagemaker create-model \
--model-name model-name \
--execution-role-arn arn:aws:iam::111122223333:role/service-role/role-name \
--primary-container "{ \"Image\": \"image-uri\", \"ModelDataUrl\": \"model-s3-url\"}"
```
Se il comando ha esito positivo, AWS CLI risponde con l'ARN della risorsa creata.  

```
{
    "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name"
}
```

**Example create-endpoint-config comando**  
L'esempio seguente crea una configurazione dell'endpoint con il [create-endpoint-config](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html)comando.  

```
aws sagemaker create-endpoint-config \
--endpoint-config-name endpoint-config-name \
--production-variants file://production-variants.json
```
In questo esempio, il file `production-variants.json` definisce una variante di produzione con il seguente codice JSON:  

```
[
    {
        "VariantName": "variant-name",
        "ModelName": "model-name",
        "InstanceType": "ml.p4d.24xlarge",
        "InitialInstanceCount": 1
    }
]
```
Se il comando ha esito positivo, AWS CLI risponde con l'ARN della risorsa creata.  

```
{
    "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name"
}
```

------

### Implementazione
<a name="cli-deploy"></a>

Gli esempi seguenti implementano un modello in un endpoint.

------
#### [ With inference components ]

**Example di comando create-endpoint**  
L’esempio seguente crea un endpoint con il comando [create-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html).  

```
aws sagemaker create-endpoint \
--endpoint-name endpoint-name \
--endpoint-config-name endpoint-config-name
```
Se il comando ha esito positivo, AWS CLI risponde con l'ARN della risorsa creata.  

```
{
    "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name"
}
```

**Example create-inference-component comando**  
L'esempio seguente crea un componente di inferenza con il create-inference-component comando.  

```
aws sagemaker create-inference-component \
--inference-component-name inference-component-name \
--endpoint-name endpoint-name \
--variant-name variant-name \
--specification file://specification.json \
--runtime-config "{\"CopyCount\": 2}"
```
In questo esempio, il file `specification.json` definisce il container e le risorse di calcolo con il seguente codice JSON:  

```
{
    "Container": {
        "Image": "image-uri",
        "ArtifactUrl": "model-s3-url"
    },
    "ComputeResourceRequirements": {
        "NumberOfCpuCoresRequired": 1,
        "MinMemoryRequiredInMb": 1024
    }
}
```
Se il comando ha esito positivo, AWS CLI risponde con l'ARN della risorsa creata.  

```
{
    "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name"
}
```

------
#### [ Without inference components ]

**Example di comando create-endpoint**  
L’esempio seguente crea un endpoint con il comando [create-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html).  

```
aws sagemaker create-endpoint \
--endpoint-name endpoint-name \
--endpoint-config-name endpoint-config-name
```
Se il comando ha esito positivo, AWS CLI risponde con l'ARN della risorsa creata.  

```
{
    "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name"
}
```

------

# Invocare modelli per l’inferenza in tempo reale
<a name="realtime-endpoints-test-endpoints"></a>

Dopo aver utilizzato Amazon SageMaker AI per distribuire un modello su un endpoint, puoi interagire con il modello inviandogli richieste di inferenza. Per inviare una richiesta di inferenza a un modello, invoca l’endpoint che lo ospita. Puoi richiamare i tuoi endpoint utilizzando Amazon SageMaker Studio AWS SDKs, the o il. AWS CLI

## Richiama il tuo modello utilizzando Amazon Studio SageMaker
<a name="realtime-endpoints-test-endpoints-studio"></a>

Dopo aver distribuito il modello su un endpoint, puoi visualizzare l'endpoint tramite Amazon SageMaker Studio e testarlo inviando singole richieste di inferenza.

**Nota**  
SageMaker L'intelligenza artificiale supporta i test degli endpoint in Studio solo per endpoint in tempo reale.

**Per inviare una richiesta di inferenza di test al tuo endpoint**

1. Avvia Amazon SageMaker Studio.

1. Nel riquadro di navigazione sinistro scegli **Implementazioni**.

1. Dal menu a discesa, scegli **Endpoint.**

1. Cerca il tuo endpoint per nome e scegli il nome nella tabella. I nomi degli endpoint elencati nel pannello **Endpoint** vengono definiti quando si distribuisce un modello. Lo spazio di lavoro Studio mostra la pagina **Endpoint** in una nuova scheda.

1. Scegli la scheda **Testa inferenza**.

1. Per **Opzioni di test**, seleziona una delle seguenti opzioni:

   1. Seleziona **Testa la richiesta di esempio** per inviare immediatamente una richiesta al tuo endpoint. Utilizza l’**editor JSON** per fornire dati di esempio in formato JSON e scegli **Invia richiesta** per inviare la richiesta al tuo endpoint. Dopo l’invio della richiesta, Studio mostra l’output dell’inferenza in una scheda a destra dell’editor JSON.

   1. Seleziona **Usa codice di esempio Python SDK** per visualizzare il codice per l’invio di una richiesta all’endpoint. Quindi, copia l’esempio di codice dalla sezione **Richiesta di inferenza di esempio** ed esegui il codice dal tuo ambiente di test.

La parte superiore della scheda mostra il tipo di richiesta che è stata inviata all'endpoint (è accettato solo JSON). La scheda mostra i seguenti campi:
+ **Stato**: visualizza uno dei seguenti tipi di stato:
  + `Success`: la richiesta è riuscita.
  + `Failed`: esito negativo della richiesta. Una risposta viene visualizzata in **Motivo dell'errore**.
  + `Pending`: mentre la richiesta di inferenza è in sospeso, lo stato mostra un'icona circolare rotante.
+ **Durata dell'esecuzione**: quanto tempo è durato l'invocazione (ora di fine meno l'ora di inizio) in millisecondi.
+ **Ora della richiesta**: quanti minuti sono trascorsi dall'invio della richiesta.
+ **Ora del risultato**: quanti minuti sono trascorsi dalla restituzione del risultato.

## Invoca il tuo modello utilizzando AWS SDK per Python (Boto3)
<a name="realtime-endpoints-test-endpoints-api"></a>

Se desideri richiamare un endpoint del modello nel codice dell'applicazione, puoi utilizzare uno dei AWS SDKs, incluso il. AWS SDK per Python (Boto3) Per invocare l’endpoint con questo SDK, utilizza uno dei seguenti metodi Python:
+ `invoke_endpoint` - Invia una richiesta di inferenza a un endpoint del modello e restituisce la risposta generata dal modello. 

  Questo metodo restituisce il payload di inferenza come una risposta dopo che il modello ha terminato la sua generazione. Per ulteriori informazioni, consulta [invoke\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime/client/invoke_endpoint.html) nella *documentazione di riferimento dell’API per AWS SDK per Python (Boto3)*.
+ `invoke_endpoint_with_response_stream` - Invia una richiesta di inferenza a un endpoint del modello e trasmette la risposta in modo incrementale mentre il modello la genera. 

  Con questo metodo, l’applicazione riceve parti della risposta non appena le parti diventano disponibili. Per ulteriori informazioni, consulta [invoke\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime/client/invoke_endpoint.html) nella *documentazione di riferimento dell’API per AWS SDK per Python (Boto3)*.

  Utilizza questo metodo solo per richiamare modelli che supportano lo streaming inferenziale.

Prima di poter utilizzare questi metodi nel codice dell'applicazione, è necessario inizializzare un client SageMaker AI Runtime e specificare il nome dell'endpoint. L'esempio seguente configura il client e l'endpoint per il resto degli esempi seguenti:

```
import boto3

sagemaker_runtime = boto3.client(
    "sagemaker-runtime", region_name='aws_region')

endpoint_name='endpoint-name'
```

### Richiamare per ottenere una risposta di inferenza
<a name="test-invoke-endpoint"></a>

L'esempio seguente utilizza il metodo `invoke_endpoint` per richiamare un endpoint con AWS SDK per Python (Boto3).

```
# Gets inference from the model hosted at the specified endpoint:
response = sagemaker_runtime.invoke_endpoint(
    EndpointName=endpoint_name, 
    Body=bytes('{"features": ["This is great!"]}', 'utf-8')
    )

# Decodes and prints the response body:
print(response['Body'].read().decode('utf-8'))
```

Questo esempio fornisce dati di input nel `Body` campo affinché l' SageMaker IA li trasmetta al modello. Questi dati devono essere nello stesso formato utilizzato per l'addestramento. L’esempio assegna la risposta alla variabile `response`.

La variabile `response` fornisce l'accesso allo stato HTTP, al nome del modello distribuito e ad altri campi. Il seguente frammento di codice mostra il codice di stato HTTP:

```
print(response["HTTPStatusCode"])
```

### Richiamare per trasmettere una risposta di inferenza
<a name="test-invoke-endpoint-with-response-stream"></a>

Se hai distribuito un modello che supporta lo streaming di inferenza, puoi richiamare il modello per ricevere il payload di inferenza sotto forma di flusso di parti. Il modello fornisce queste parti in modo incrementale man mano che il modello le genera. Quando un'applicazione riceve un flusso di inferenza, non deve attendere che il modello generi l'intero payload di risposta. Invece, l’applicazione riceve immediatamente parti della risposta non appena diventano disponibili. 

Utilizzando un flusso di inferenza nell'applicazione, è possibile creare interazioni in cui gli utenti percepiscono l'inferenza come rapida perché ottengono immediatamente la prima parte. Puoi implementare lo streaming per supportare esperienze interattive veloci, come chatbot, assistenti virtuali e generatori di musica. Ad esempio, è possibile creare un chatbot che mostri in modo incrementale il testo generato da un modello di linguaggio di grandi dimensioni (LLM).

Per ottenere un flusso di inferenza, è possibile utilizzare il metodo `invoke_endpoint_with_response_stream`. Nel corpo della risposta, l'SDK fornisce un oggetto `EventStream`, che fornisce l'inferenza sotto forma di una serie di oggetti `PayloadPart`.

**Example Flusso di inferenza**  
Di seguito è riportato un esempio di un flusso di oggetti `PayloadPart`:  

```
{'PayloadPart': {'Bytes': b'{"outputs": [" a"]}\n'}}
{'PayloadPart': {'Bytes': b'{"outputs": [" challenging"]}\n'}}
{'PayloadPart': {'Bytes': b'{"outputs": [" problem"]}\n'}}
. . .
```
In ogni parte del payload, il campo `Bytes` fornisce una parte della risposta di inferenza del modello. Questa parte può essere qualsiasi tipo di contenuto generato da un modello, ad esempio testo, immagini o dati audio. In questo esempio, le porzioni sono oggetti JSON che contengono testo generato da un LLM.  
Di solito, la parte del payload contiene una parte discreta di dati del modello. In questo esempio i blocchi discreti sono oggetti JSON interi. Occasionalmente, la risposta in streaming divide i blocchi su più parti del payload oppure combina più blocchi in un'unica parte del payload. L'esempio seguente mostra un blocco di dati in formato JSON suddiviso in due parti del payload:  

```
{'PayloadPart': {'Bytes': b'{"outputs": '}}
{'PayloadPart': {'Bytes': b'[" problem"]}\n'}}
```
Quando scrivi codice applicativo che elabora un flusso di inferenza, includi la logica che gestisca queste suddivisioni e combinazioni occasionali di dati. Come strategia, potete scrivere codice che concatena i contenuti di `Bytes` mentre l'applicazione riceve le parti del payload. Concatenando qui i dati JSON di esempio, puoi combinare i dati in un corpo JSON delimitato da una nuova riga. Quindi, il codice potrebbe elaborare lo stream analizzando l'intero oggetto JSON su ogni riga.  
L'esempio seguente mostra il codice JSON delimitato da nuove righe che creereste quando concatenate il contenuto di esempio di `Bytes`:  

```
{"outputs": [" a"]}
{"outputs": [" challenging"]}
{"outputs": [" problem"]}
. . .
```

**Example Codice per elaborare un flusso di inferenza**  

Il seguente esempio di classe Python, `SmrInferenceStream`, dimostra come è possibile elaborare un flusso di inferenza che invia dati di testo in formato JSON:

```
import io
import json

# Example class that processes an inference stream:
class SmrInferenceStream:
    
    def __init__(self, sagemaker_runtime, endpoint_name):
        self.sagemaker_runtime = sagemaker_runtime
        self.endpoint_name = endpoint_name
        # A buffered I/O stream to combine the payload parts:
        self.buff = io.BytesIO() 
        self.read_pos = 0
        
    def stream_inference(self, request_body):
        # Gets a streaming inference response 
        # from the specified model endpoint:
        response = self.sagemaker_runtime\
            .invoke_endpoint_with_response_stream(
                EndpointName=self.endpoint_name, 
                Body=json.dumps(request_body), 
                ContentType="application/json"
        )
        # Gets the EventStream object returned by the SDK:
        event_stream = response['Body']
        for event in event_stream:
            # Passes the contents of each payload part
            # to be concatenated:
            self._write(event['PayloadPart']['Bytes'])
            # Iterates over lines to parse whole JSON objects:
            for line in self._readlines():
                resp = json.loads(line)
                part = resp.get("outputs")[0]
                # Returns parts incrementally:
                yield part
    
    # Writes to the buffer to concatenate the contents of the parts:
    def _write(self, content):
        self.buff.seek(0, io.SEEK_END)
        self.buff.write(content)

    # The JSON objects in buffer end with '\n'.
    # This method reads lines to yield a series of JSON objects:
    def _readlines(self):
        self.buff.seek(self.read_pos)
        for line in self.buff.readlines():
            self.read_pos += len(line)
            yield line[:-1]
```

Questo esempio elabora il flusso di inferenza effettuando le seguenti operazioni:
+ Inizializza un client SageMaker AI Runtime e imposta il nome di un endpoint del modello. Prima di poter ottenere un flusso di inferenza, il modello ospitato dall'endpoint deve supportare lo streaming di inferenza.
+ Nel metodo `stream_inference` di esempio, riceve il corpo della richiesta e lo passa al metodo `invoke_endpoint_with_response_stream` dell'SDK.
+ Itera su ogni evento nell'oggetto `EventStream` restituito dall'SDK.
+ Da ogni evento, ottiene il contenuto dell'oggetto `Bytes` nell'oggetto `PayloadPart`.
+ Nel metodo `_write` di esempio, scrive in un buffer per concatenare il contenuto degli oggetti `Bytes`. I contenuti combinati formano un corpo JSON delimitato da una nuova riga.
+ Utilizza il metodo `_readlines` di esempio per ottenere una serie iterabile di oggetti JSON.
+ In ogni oggetto JSON, ottiene una parte dell'inferenza.
+ Con l'espressione `yield`, restituisce i pezzi in modo incrementale.

L'esempio seguente crea e utilizza un oggetto `SmrInferenceStream`:

```
request_body = {"inputs": ["Large model inference is"],
                "parameters": {"max_new_tokens": 100,
                               "enable_sampling": "true"}}
smr_inference_stream = SmrInferenceStream(
    sagemaker_runtime, endpoint_name)
stream = smr_inference_stream.stream_inference(request_body)
for part in stream:
    print(part, end='')
```

Questo esempio passa un corpo della richiesta al metodo `stream_inference`. Esegue un'iterazione sulla risposta per stampare ogni pezzo restituito dal flusso di inferenza.

L'esempio presuppone che il modello nell'endpoint specificato sia un LLM che genera testo. L'output di questo esempio è un corpo di testo generato che viene stampato in modo incrementale:

```
a challenging problem in machine learning. The goal is to . . .
```

## Invoca il tuo modello utilizzando il AWS CLI
<a name="realtime-endpoints-test-endpoints-cli"></a>

È possibile richiamare l'endpoint del modello eseguendo comandi con (). AWS Command Line Interface AWS CLI AWS CLI supporta richieste di inferenza standard con il comando `invoke-endpoint` e supporta richieste di inferenza asincrone con il comando `invoke-endpoint-async`.

**Nota**  
 AWS CLI Non supporta le richieste di inferenza in streaming.

L'esempio seguente utilizza il comando `invoke-endpoint` per inviare una richiesta di inferenza a un endpoint del modello:

```
aws sagemaker-runtime invoke-endpoint \
    --endpoint-name endpoint_name \
    --body fileb://$file_name \
    output_file.txt
```

Per il parametro `--endpoint-name` fornisci il nome specificato quando hai creato l’endpoint. Per il `--body` parametro, fornisci i dati di input che l' SageMaker IA deve passare al modello. I dati devono essere nello stesso formato utilizzato per l'addestramento. Questo esempio mostra come inviare dati binari all'endpoint.

Per ulteriori informazioni su quando utilizzare `file://` over `fileb://` quando si passa il contenuto di un file a un parametro di AWS CLI, vedere [Best Practices for Local File Parameters](https://aws.amazon.com/blogs/developer/best-practices-for-local-file-parameters/).

Per ulteriori informazioni e per visualizzare i parametri aggiuntivi che è possibile passare, consulta [https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html) nel *Riferimento al comando AWS CLI *.

Se il comando `invoke-endpoint` ha esito positivo, restituisce una risposta come la seguente:

```
{
    "ContentType": "<content_type>; charset=utf-8",
    "InvokedProductionVariant": "<Variant>"
}
```

Se il comando non ha esito positivo, controlla se il payload di input è nel formato corretto.

Visualizza l'output della chiamata controllando il file di output del file (`output_file.txt` in questo esempio).

```
more output_file.txt
```

## Invoca il tuo modello usando l' AWS SDK per Python
<a name="realtime-endpoints-test-endpoints-sdk"></a>

### Invoca per trasmettere in streaming bidirezionale una richiesta e una risposta di inferenza
<a name="realtime-endpoints-test-endpoints-sdk-overview"></a>

Se desideri richiamare un endpoint modello nel codice dell'applicazione per supportare lo streaming bidirezionale, puoi utilizzare il [nuovo SDK sperimentale per Python che supporta la funzionalità](https://github.com/awslabs/aws-sdk-python) di streaming bidirezionale con supporto HTTP/2. Questo SDK consente una comunicazione bidirezionale in tempo reale tra l'applicazione client e l' SageMaker endpoint, consentendoti di inviare richieste di inferenza in modo incrementale e ricevere contemporaneamente risposte in streaming man mano che il modello le genera. Ciò è particolarmente utile per le applicazioni interattive in cui sia il client che il server devono scambiarsi dati in modo continuo tramite una connessione persistente.

**Nota**  
Il nuovo SDK sperimentale è diverso dall'SDK Boto3 standard e supporta connessioni bidirezionali persistenti per lo scambio di dati. Durante l'utilizzo dell'SDK Python sperimentale, consigliamo vivamente di associare rigorosamente una versione dell'SDK per qualsiasi caso d'uso non sperimentale.

Per richiamare il tuo endpoint con streaming bidirezionale, usa il metodo. `invoke_endpoint_with_bidirectional_stream` Questo metodo stabilisce una connessione persistente che consente di trasmettere più blocchi di payload al modello mentre si ricevono risposte in tempo reale mentre il modello elabora i dati. La connessione rimane aperta finché non si chiude esplicitamente il flusso di input o finché l'endpoint non chiude la connessione, supportando fino a 30 minuti di tempo di connessione.

### Prerequisiti
<a name="realtime-endpoints-test-endpoints-sdk-prereq"></a>

Prima di poter utilizzare lo streaming bidirezionale nel codice dell'applicazione, devi:

1. Installa l'SDK sperimentale SageMaker Runtime HTTP/2

1. Imposta le AWS credenziali per il tuo client Runtime SageMaker 

1. Implementa un modello che supporti lo streaming bidirezionale su un endpoint SageMaker 

### Configura il client di streaming bidirezionale
<a name="realtime-endpoints-test-endpoints-sdk-setup-client"></a>

L'esempio seguente mostra come inizializzare i componenti richiesti per lo streaming bidirezionale:

```
from sagemaker_runtime_http2.client import SageMakerRuntimeHTTP2Client
from sagemaker_runtime_http2.config import Config, HTTPAuthSchemeResolver
from smithy_aws_core.identity import EnvironmentCredentialsResolver
from smithy_aws_core.auth.sigv4 import SigV4AuthScheme

# Configuration
AWS_REGION = "us-west-2"
BIDI_ENDPOINT = f"https://runtime.sagemaker.{AWS_REGION}.amazonaws.com:8443"
ENDPOINT_NAME = "your-endpoint-name"

# Initialize the client configuration
config = Config(
    endpoint_uri=BIDI_ENDPOINT,
    region=AWS_REGION,
    aws_credentials_identity_resolver=EnvironmentCredentialsResolver(),
    auth_scheme_resolver=HTTPAuthSchemeResolver(),
    auth_schemes={"aws.auth#sigv4": SigV4AuthScheme(service="sagemaker")}
)

# Create the SageMaker Runtime HTTP/2 client
client = SageMakerRuntimeHTTP2Client(config=config)
```

### Client di streaming bidirezionale completo
<a name="realtime-endpoints-test-endpoints-sdk-complete-client"></a>

L'esempio seguente dimostra come creare un client di streaming bidirezionale che invia più payload di testo a un SageMaker endpoint ed elabora le risposte in tempo reale:

```
import asyncio
import logging
from sagemaker_runtime_http2.client import SageMakerRuntimeHTTP2Client
from sagemaker_runtime_http2.config import Config, HTTPAuthSchemeResolver
from sagemaker_runtime_http2.models import (
    InvokeEndpointWithBidirectionalStreamInput, 
    RequestStreamEventPayloadPart, 
    RequestPayloadPart
)
from smithy_aws_core.identity import EnvironmentCredentialsResolver
from smithy_aws_core.auth.sigv4 import SigV4AuthScheme

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

class SageMakerBidirectionalClient:
    
    def __init__(self, endpoint_name, region="us-west-2"):
        self.endpoint_name = endpoint_name
        self.region = region
        self.client = None
        self.stream = None
        self.response_task = None
        self.is_active = False
        
    def _initialize_client(self):
        bidi_endpoint = f"runtime.sagemaker.{self.region}.amazonaws.com:8443"
        config = Config(
            endpoint_uri=bidi_endpoint,
            region=self.region,
            aws_credentials_identity_resolver=EnvironmentCredentialsResolver(),
            auth_scheme_resolver=HTTPAuthSchemeResolver(),
            auth_schemes={"aws.auth#sigv4": SigV4AuthScheme(service="sagemaker")}
        )
        self.client = SageMakerRuntimeHTTP2Client(config=config)
    
    async def start_session(self):
        """Establish a bidirectional streaming connection with the endpoint."""
        if not self.client:
            self._initialize_client()
            
        logger.info(f"Starting session with endpoint: {self.endpoint_name}")
        self.stream = await self.client.invoke_endpoint_with_bidirectional_stream(
            InvokeEndpointWithBidirectionalStreamInput(endpoint_name=self.endpoint_name)
        )
        self.is_active = True
        
        # Start processing responses concurrently
        self.response_task = asyncio.create_task(self._process_responses())
    
    async def send_message(self, message):
        """Send a single message to the endpoint."""
        if not self.is_active:
            raise RuntimeError("Session not active. Call start_session() first.")
            
        logger.info(f"Sending message: {message}")
        payload = RequestPayloadPart(bytes_=message.encode('utf-8'))
        event = RequestStreamEventPayloadPart(value=payload)
        await self.stream.input_stream.send(event)
    
    async def send_multiple_messages(self, messages, delay=1.0):
        """Send multiple messages with a delay between each."""
        for message in messages:
            await self.send_message(message)
            await asyncio.sleep(delay)
    
    async def end_session(self):
        """Close the bidirectional streaming connection."""
        if not self.is_active:
            return
            
        await self.stream.input_stream.close()
        self.is_active = False
        logger.info("Stream closed")
        
        # Cancel the response processing task
        if self.response_task and not self.response_task.done():
            self.response_task.cancel()
    
    async def _process_responses(self):
        """Process incoming responses from the endpoint."""
        try:
            output = await self.stream.await_output()
            output_stream = output[1]
            
            while self.is_active:
                result = await output_stream.receive()
                
                if result is None:
                    logger.info("No more responses")
                    break
                
                if result.value and result.value.bytes_:
                    response_data = result.value.bytes_.decode('utf-8')
                    logger.info(f"Received: {response_data}")
                    
        except Exception as e:
            logger.error(f"Error processing responses: {e}")

# Example usage
async def run_bidirectional_client():
    client = SageMakerBidirectionalClient(endpoint_name="your-endpoint-name")
    
    try:
        # Start the session
        await client.start_session()
        
        # Send multiple messages
        messages = [
            "I need help with", 
            "my account balance", 
            "I can help with that", 
            "and recent charges"
        ]
        await client.send_multiple_messages(messages)
        
        # Wait for responses to be processed
        await asyncio.sleep(2)
        
        # End the session
        await client.end_session()
        logger.info("Session ended successfully")
        
    except Exception as e:
        logger.error(f"Client error: {e}")
        await client.end_session()

if __name__ == "__main__":
    asyncio.run(run_bidirectional_client())
```

Il client inizializza il client SageMaker Runtime HTTP/2 con l'URI dell'endpoint regionale sulla porta 8443, necessario per le connessioni di streaming bidirezionali. Il `session()` metodo start\$1 chiama `invoke_endpoint_with_bidirectional_stream()` per stabilire la connessione persistente e crea un'attività asincrona per elaborare contemporaneamente le risposte in arrivo.

Il `send_event()` metodo racchiude i dati del payload negli oggetti di richiesta appropriati e li invia tramite il flusso di input, mentre ascolta ed elabora continuamente le risposte dall'`_process_responses()`endpoint non appena arrivano. Questo approccio bidirezionale consente l'interazione in tempo reale in cui sia l'invio delle richieste che la ricezione delle risposte avvengono contemporaneamente sulla stessa connessione.

# Endpoints
<a name="realtime-endpoints-manage"></a>

Dopo aver implementato il modello in un endpoint, potresti voler visualizzare e gestire l’endpoint. Con SageMaker AI puoi visualizzare lo stato e i dettagli del tuo endpoint, controllare metriche e log per monitorare le prestazioni dell’endpoint, aggiornare i modelli implementati al suo interno e altro ancora.

Le sezioni seguenti mostrano come gestire gli endpoint all’interno di Amazon SageMaker Studio o della Console di gestione AWS.

La pagina seguente descrive come visualizzare e apportare modifiche in modo interattivo agli endpoint utilizzando la console di Amazon SageMaker AI o SageMaker Studio.

**Topics**
+ [Visualizzare i dettagli degli endpoint in SageMaker Studio](manage-endpoints-studio.md)
+ [Visualizzare i dettagli dell’endpoint nella console di SageMaker AI](manage-endpoints-console.md)

# Visualizzare i dettagli degli endpoint in SageMaker Studio
<a name="manage-endpoints-studio"></a>

In Amazon SageMaker Studio è possibile visualizzare e gestire gli endpoint di SageMaker AI Hosting. Per ulteriori informazioni su Studio, consulta [Amazon SageMaker Studio](https://docs.aws.amazon.com/sagemaker/latest/dg/studio.html).

Per trovare l’elenco degli endpoint in SageMaker Studio, segui questa procedura:

1. Apri l’applicazione Studio.

1. Nel riquadro di navigazione sinistro scegli **Implementazioni**.

1. Dal menu a discesa seleziona **Endpoint**.

Viene visualizzata la pagina **Endpoint**, che elenca tutti gli endpoint di SageMaker AI Hosting. Da questa pagina è possibile visualizzare gli endpoint e il relativo **stato**. È anche possibile creare un nuovo endpoint, modificarne uno esistente o eliminarlo.

Per visualizzare i dettagli di un endpoint specifico, scegline uno dall’elenco. Nella pagina dei dettagli dell’endpoint viene visualizzata una panoramica simile al seguente screenshot.

![\[Screenshot della pagina principale di un endpoint che mostra un riepilogo dei dettagli in Studio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-endpoint-details-page.png)


La pagina dei dettagli di ogni endpoint contiene le seguenti schede di informazioni:

# Visualizzare Varianti (o Modelli)
<a name="manage-endpoints-studio-variants"></a>

La scheda **Varianti** (chiamata anche scheda **Modelli** se l’endpoint ha più modelli implementati) mostra l’elenco delle [varianti del modello](https://docs.aws.amazon.com/sagemaker/latest/dg/model-ab-testing.html) o i modelli attualmente implementati nell’endpoint. Lo screenshot seguente mostra l’aspetto della panoramica e della sezione **Modelli** per un endpoint con più modelli implementati.

![\[Screenshot della pagina principale di un endpoint con più modelli implementati.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-goldfinch-multi-model-endpoint.png)


È possibile aggiungere o modificare le impostazioni per ogni variante o modello, nonché selezionare una variante e abilitare una policy di dimensionamento automatico predefinita, modificabile in un secondo momento nella scheda **Dimensionamento automatico**.

# Visualizzare le impostazioni
<a name="manage-endpoints-studio-settings"></a>

Nella scheda **Impostazioni** è possibile visualizzare il ruolo IAM AWS associato all’endpoint, la chiave AWS KMS utilizzata per la crittografia (se applicabile), il nome del VPC e le impostazioni di isolamento della rete.

# Test di inferenza
<a name="manage-endpoints-studio-test"></a>

Nella scheda **Test di inferenza** è possibile inviare una richiesta di test di inferenza a un modello implementato. È utile per verificare che l’endpoint risponda alle richieste come previsto.

Per testare l’inferenza, segui questa procedura:

1. Nella scheda **Test di inferenza** del modello scegli una delle seguenti opzioni:

   1. Seleziona **Inserisci il corpo della richiesta** se desideri testare l’endpoint e ricevere una risposta tramite l’interfaccia di Studio.

   1. Seleziona **Copia codice di esempio (Python)** se desideri copiare un esempio AWS SDK per Python (Boto3) da utilizzare per invocare l’endpoint da un ambiente locale e ricevere una risposta a livello di programmazione.

1. Per **Modello**, seleziona il modello che desideri testare sull’endpoint.

1. Se hai scelto il metodo di test dell’interfaccia di Studio, puoi anche scegliere il **tipo di contenuto** desiderato per la risposta dal menu a discesa.

Dopo aver configurato la richiesta, puoi scegliere **Invia richiesta** (per ricevere una risposta tramite l’interfaccia di Studio) o **Copia** per copiare l’esempio Python.

Se ricevi una risposta tramite l’interfaccia di Studio, è simile allo screenshot seguente.

![\[Screenshot di una richiesta di test di inferenza riuscita su un endpoint in Studio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/endpoint-test-inference.png)


# Dimensionamento automatico
<a name="manage-endpoints-studio-autoscaling"></a>

Nella scheda **Dimensionamento automatico** è possibile visualizzare tutte le policy di dimensionamento automatico configurate per i modelli ospitati sull’endpoint. Lo screenshot seguente mostra la scheda **Dimensionamento automatico**.

![\[Screenshot della scheda Dimensionamento automatico che mostra una policy attiva.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/inference/studio-endpoint-autoscaling.png)


È possibile scegliere **Modifica dimensionamento automatico** per modificare qualsiasi policy e attivare o disattivare la policy di dimensionamento automatico predefinita.

Per ulteriori informazioni sul dimensionamento automatico per gli endpoint in tempo reale, consulta [Dimensionamento automatico dei modelli di Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html). Se non sai come configurare una policy di dimensionamento automatico per il tuo endpoint, puoi utilizzare un [processo di suggerimenti per il dimensionamento automatico di Inference Recommender](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender-autoscaling.html) per ottenere suggerimenti relativi a una policy di dimensionamento automatico.

# Visualizzare i dettagli dell’endpoint nella console di SageMaker AI
<a name="manage-endpoints-console"></a>

Per visualizzare gli endpoint nella console di SageMaker AI, segui questa procedura:

1. Vai alla console di SageMaker AI all’indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione a sinistra, scegli **Inferenza**.

1. Dal menu a discesa, scegli **Endpoint**.

1. Nella pagina **Endpoint**, scegli il tuo endpoint.

Dovrebbe aprirsi la pagina dei dettagli dell'endpoint, che mostra un riepilogo dell'endpoint e delle metriche raccolte per l'endpoint.

Le sezioni seguenti descrivono le schede nella pagina dei dettagli dell’endpoint.

# Monitoraggio degli endpoint
<a name="manage-endpoints-console-monitoring"></a>

Dopo aver creato un endpoint di SageMaker AI Hosting, è possibile monitorare l’endpoint utilizzando Amazon CloudWatch, che raccoglie i dati non elaborati e li elabora trasformandoli in metriche leggibili quasi in tempo reale. Utilizzando questi parametri, puoi accedere alle informazioni cronologiche e avere una migliore percezione delle performance del tuo endpoint. Per ulteriori informazioni, consultare la *[Guida per l'utente di Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/)*.

Dalla scheda **Monitoraggio** nella pagina dei dettagli dell'endpoint, puoi visualizzare i dati dei parametri di CloudWatch raccolti dal tuo endpoint.

La scheda **Monitoraggio** include le seguenti sezioni:
+ **Parametri operativi**: visualizza i parametri che tengono traccia dell'utilizzo delle risorse dell'endpoint, come l'utilizzo della CPU e l'utilizzo della memoria.
+ **Parametri di chiamata**: visualizza i parametri che tengono traccia del numero, dello stato e dello stato delle richieste `InvokeEndpoint` che arrivano all'endpoint, come gli errori del modello di invocazione e la latenza del modello.
+ **Parametri sanitari**: visualizza i parametri che tengono traccia dello stato generale dell'endpoint, come gli errori di chiamata e gli errori di notifica.

Per descrizioni dettagliate di ogni metrica, consulta [Monitor SageMaker AI with CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html).

La schermata seguente mostra la sezione **Parametri operativi** per un endpoint serverless.

![\[Schermata dei grafici dei parametri nella sezione Parametri operativi della pagina dei dettagli dell'endpoint.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/hosting-operational-metrics.png)




Puoi modificare il **periodo** e la **statistica** che desideri monitorare per i parametri in una determinata sezione, nonché il periodo di tempo per il quale desideri visualizzare i dati dei parametri. Puoi anche aggiungere e rimuovere i widget dei parametri dalla vista per ogni sezione scegliendo **Aggiungi widget**. Nella finestra di dialogo **Aggiungi widget**, puoi selezionare e deselezionare i parametri che desideri visualizzare.

I parametri disponibili possono dipendere dal tipo di endpoint. Ad esempio, gli endpoint serverless hanno alcuni parametri che non sono disponibili per gli endpoint in tempo reale. Per informazioni più specifiche sui parametri per tipo di endpoint, consulta le pagine seguenti:
+ [Monitora un endpoint serverless](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints-monitoring.html)
+ [Monitora un endpoint asincrono](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-monitor.html)
+ [Parametri CW per le distribuzioni di endpoint a più modelli](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoint-cloudwatch-metrics.html)
+ [Log e parametri della pipeline di inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipeline-logs-metrics.html)

# Impostazioni
<a name="manage-endpoints-console-settings"></a>

Puoi scegliere la scheda **Impostazioni** per visualizzare informazioni aggiuntive sull'endpoint, come le impostazioni di acquisizione dei dati, la configurazione dell'endpoint e i tag.

# Creare e visualizzare allarmi
<a name="manage-endpoints-console-alarms"></a>

Dalla scheda **Allarmi** nella pagina dei dettagli dell’endpoint, è possibile visualizzare e creare semplici allarmi di metriche di soglia statici, in cui è possibile specificare un valore di soglia per una metrica. Se il parametro supera il valore di soglia, l'allarme entra nello stato `ALARM`. Per ulteriori informazioni sugli allarmi CloudWatch, consulta [Using Amazon CloudWatch alarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html).

Nella sezione di **Riepilogo dell'endpoint**, puoi visualizzare il campo **Allarmi**, che indica quanti allarmi sono attualmente attivi sul tuo endpoint.

Per visualizzare quali allarmi sono presenti nello stato `ALARM`, scegli la scheda **Allarmi**. La scheda **Allarmi** mostra un elenco completo degli allarmi degli endpoint, insieme a dettagli sul loro stato e sulle loro condizioni. La schermata seguente mostra un elenco degli allarmi di questa sezione che sono stati configurati per un endpoint.

![\[Schermata della scheda degli allarmi nella pagina dei dettagli degli endpoint che mostra un elenco di allarmi CloudWatch.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/hosting-alarms-tab.png)


Lo stato di un allarme può essere `In alarm`, `OK` o `Insufficient data` se non vengono raccolti abbastanza dati sui parametri.

Per creare un nuovo allarme per l'endpoint, eseguire le seguenti operazioni:

1. Nella scheda **Allarmi**, scegliere **Crea allarme**.

1. Si apre la pagina **Crea allarme**. In **Nome allarme**, specificare un nome per l'allarme.

1. (Facoltativo) Immetti un nome e una descrizione per l'allarme.

1. Per **Parametro**, scegli il parametro CloudWatch che desideri visualizzare dall'allarme.

1. Per **Nome della variante**, scegli la variante del modello di endpoint che desideri monitorare.

1. Per **Statistica**, scegli una delle statistiche disponibili per il parametro selezionato.

1. Per **Periodo**, scegli il periodo di tempo da utilizzare per il calcolo di ogni valore statistico. Ad esempio, se scegli la statistica Media e un periodo di 5 minuti, ogni punto dati monitorato dall'allarme è la media dei punti dati del parametro a intervalli di 5 minuti.

1. Per **Periodi di valutazione**, inserisci il numero di punti dati che desideri che l'allarme consideri quando valuta se inserire o meno lo stato di allarme.

1. Per **Condizione**, scegli il condizionale che desideri utilizzare per la soglia di allarme.

1. Per **Valore di soglia**, inserisci il valore desiderato per la soglia.

1. (Facoltativo) Per **Notifica**, puoi scegliere **Aggiungi notifica** per creare o specificare un argomento Amazon SNS che riceva una notifica quando lo stato dell'allarme cambia.

1. Scegli **Crea allarme**.

Dopo aver creato l'allarme, puoi tornare alla scheda **Allarmi** per visualizzarne lo stato in qualsiasi momento. Da questa sezione, puoi anche selezionare l'allarme e **modificarlo** o **eliminarlo**.

# Opzioni di hosting
<a name="realtime-endpoints-options"></a>

I seguenti argomenti descrivono le opzioni di hosting SageMaker AI in tempo reale disponibili insieme a come configurare, richiamare ed eliminare ciascuna opzione di hosting.

**Topics**
+ [Endpoint per modelli singoli](realtime-single-model.md)
+ [Endpoint multi-modello](multi-model-endpoints.md)
+ [Endpoint multi-container](multi-container-endpoints.md)
+ [Pipeline di inferenza in Amazon AI SageMaker](inference-pipelines.md)
+ [Elimina endpoint e risorse](realtime-endpoints-delete-resources.md)

# Endpoint per modelli singoli
<a name="realtime-single-model"></a>

È possibile creare, aggiornare ed eliminare gli endpoint di inferenza in tempo reale che ospitano un modello singolo con Amazon SageMaker Studio, AWS SDK per Python (Boto3), SageMaker Python SDK o l’AWS CLI. Per le procedure e alcuni esempi di codice, consulta [Implementazione di modelli per l’inferenza in tempo reale](realtime-endpoints-deploy-models.md).

# Endpoint multi-modello
<a name="multi-model-endpoints"></a>

Gli endpoint a più modelli offrono una soluzione scalabile ed economica per la distribuzione di un numero elevato di modelli. Utilizzano lo stesso parco di risorse e un container di servizio condiviso per l’hosting di tutti i tuoi modelli. Questa caratteristica riduce i costi di hosting migliorando l'utilizzo degli endpoint rispetto all'utilizzo di endpoint a singolo modello. Riduce anche il sovraccarico di implementazione perché Amazon SageMaker AI gestisce il caricamento dei modelli in memoria e il loro ridimensionamento in base ai modelli di traffico verso l'endpoint.

Il diagramma seguente mostra come funzionano gli endpoint a più modelli rispetto agli endpoint a modello singolo.

![\[Diagramma che mostra come gli endpoint multi-modello ospitano i modelli rispetto agli endpoint a modello singolo.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/multi-model-endpoints-diagram.png)


Gli endpoint a più modelli sono ideali per ospitare un gran numero di modelli che utilizzano lo stesso framework ML su un container di servizio condiviso. Se hai un mix di modelli con accesso frequente e non, un endpoint multi-modello può servire in modo efficiente questo traffico con meno risorse e maggiori risparmi. L'applicazione deve tollerare le occasionali penalità di latenza legate all'avvio a freddo che si verificano quando si richiamano modelli utilizzati di rado.

Gli endpoint a più modelli supportano l'hosting di modelli basati su CPU e GPU. Utilizzando modelli basati su GPU, è possibile ridurre i costi di implementazione del modello attraverso un maggiore utilizzo dell'endpoint e delle relative istanza a calcolo accelerato.

Gli endpoint a più modelli consentono inoltre la condivisione temporale delle risorse della memoria tra i modelli. Questo comportamento funziona meglio quando i modelli sono abbastanza simili per dimensioni e latenza di invocazione. In questo caso, gli endpoint a più modelli possono utilizzare in modo efficace le istanze in tutti i modelli. Se hai modelli con transazioni al secondo (TPS) o requisiti di latenza significativamente più elevati, è consigliabile ospitarli su endpoint dedicati.

È possibile utilizzare endpoint a più modelli con le seguenti funzionalità:
+ [AWS PrivateLink](https://docs.aws.amazon.com/vpc/latest/userguide/endpoint-services-overview.html)e VPCs
+ [Dimensionamento automatico](multi-model-endpoints-autoscaling.md)
+ [Pipeline di inferenza seriali](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html) (ma solo un container a più modelli può essere incluso in una pipeline di inferenza)
+ Test A/B

Puoi utilizzare AWS SDK per Python (Boto) o la console SageMaker AI per creare un endpoint multimodello. Per gli endpoint a più modelli supportati dalla CPU, puoi creare endpoint con container personalizzati integrando la libreria [Multi Model Server](https://github.com/awslabs/multi-model-server).

**Topics**
+ [Come funzionano gli endpoint a più modelli](#how-multi-model-endpoints-work)
+ [Notebook di esempio per endpoint a più modelli](#multi-model-endpoint-sample-notebooks)
+ [Algoritmi, framework e istanze supportati per endpoint multi-modello](multi-model-support.md)
+ [Raccomandazioni sulle istanze per le distribuzioni di endpoint a più modelli](multi-model-endpoint-instance.md)
+ [Creare un endpoint a più modelli](create-multi-model-endpoint.md)
+ [Invocare un endpoint a più modelli](invoke-multi-model-endpoint.md)
+ [Aggiungere o rimuovere modelli](add-models-to-endpoint.md)
+ [Crea il tuo contenitore per gli endpoint multimodello di intelligenza artificiale SageMaker](build-multi-model-build-container.md)
+ [Sicurezza degli endpoint a più modelli](multi-model-endpoint-security.md)
+ [CloudWatch Metriche per le implementazioni di endpoint multimodello](multi-model-endpoint-cloudwatch-metrics.md)
+ [Imposta il comportamento di memorizzazione nella cache del modello di SageMaker endpoint multimodello AI](multi-model-caching.md)
+ [Imposta le Policy di dimensionamento automatico per le implementazioni di endpoint a più modelli](multi-model-endpoints-autoscaling.md)

## Come funzionano gli endpoint a più modelli
<a name="how-multi-model-endpoints-work"></a>

 SageMaker L'intelligenza artificiale gestisce il ciclo di vita dei modelli ospitati su endpoint multimodello nella memoria del contenitore. Invece di scaricare tutti i modelli da un bucket Amazon S3 nel contenitore quando crei l'endpoint, l' SageMaker intelligenza artificiale li carica e li memorizza nella cache dinamicamente quando li richiami. Quando l' SageMaker IA riceve una richiesta di invocazione per un particolare modello, esegue le seguenti operazioni: 

1. Instrada la richiesta a un'istanza dietro l'endpoint.

1. Scarica il modello dal bucket S3 nel volume di storage di tale istanza.

1. Carica il modello nella memoria del container (CPU o GPU, a seconda che siano presenti istanze supportate da CPU o GPU) su quella istanza a calcolo accelerato. Se il modello è già caricato nella memoria del contenitore, l'invocazione è più veloce perché l' SageMaker IA non ha bisogno di scaricarlo e caricarlo.

SageMaker L'IA continua a indirizzare le richieste di un modello all'istanza in cui il modello è già caricato. Tuttavia, se il modello riceve molte richieste di chiamata e sono presenti istanze aggiuntive per l'endpoint multimodello, l' SageMaker IA indirizza alcune richieste a un'altra istanza per soddisfare il traffico. Se il modello non è già caricato nella seconda istanza, viene scaricato nel volume di storage dell'istanza e caricato nella memoria del container.

Quando l'utilizzo della memoria di un'istanza è elevato e l' SageMaker intelligenza artificiale deve caricare un altro modello in memoria, scarica i modelli inutilizzati dal contenitore dell'istanza per garantire che ci sia abbastanza memoria per caricare il modello. I modelli scaricati rimangono sul volume di storage dell'istanza e possono essere caricati nella memoria del container in un secondo momento senza essere scaricati nuovamente dal bucket S3. Se il volume di archiviazione dell'istanza raggiunge la sua capacità, l' SageMaker IA elimina tutti i modelli inutilizzati dal volume di archiviazione.

Per eliminare un modello, interrompi l'invio di richieste ed eliminalo dal bucket S3. SageMaker L'intelligenza artificiale fornisce funzionalità endpoint multimodello in un contenitore di servizio. L'aggiunta e l'eliminazione di modelli da un endpoint a più modelli non richiede l'aggiornamento dell'endpoint. Per aggiungere un modello, caricalo nel bucket S3 e richiamalo. Per utilizzarlo non sono necessarie modifiche al codice.

**Nota**  
Quando si aggiorna un endpoint a più modelli, le richieste di invocazione iniziali sull'endpoint potrebbero subire latenze più elevate poiché Smart Routing negli endpoint a più modelli si adatta al modello di traffico. Tuttavia, una appreso il modello di traffico, è possibile riscontrare basse latenze per i modelli utilizzati più di frequente. I modelli utilizzati meno frequentemente possono subire alcune latenze di avvio a freddo poiché i modelli vengono caricati dinamicamente su un'istanza.

## Notebook di esempio per endpoint a più modelli
<a name="multi-model-endpoint-sample-notebooks"></a>

Per ulteriori informazioni su come utilizzare gli endpoint a più modelli, puoi provare i seguenti notebook di esempio:
+ Esempi di endpoint a più modelli che utilizzano istanze basate su CPU:
  + [Notebook di XGBoost esempio per endpoint multimodello](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html): questo notebook mostra come implementare più XGBoost modelli su un endpoint.
  + Notebook di [esempio BYOC per endpoint multimodel: questo taccuino](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_bring_your_own/multi_model_endpoint_bring_your_own.html) mostra come configurare e implementare un container per il cliente che supporti gli endpoint multimodello nell'intelligenza artificiale. SageMaker 
+ Esempio di endpoint a più modelli che utilizzano istanze basate su GPU:
  + [Esegui più modelli di deep learning GPUs con Amazon SageMaker AI Multi-model endpoint (MME)](https://github.com/aws/amazon-sagemaker-examples/blob/main/multi-model-endpoints/mme-on-gpu/cv/resnet50_mme_with_gpu.ipynb): questo notebook mostra come utilizzare un container NVIDIA Triton Inference per distribuire ResNet -50 modelli su un endpoint multimodello.

Per istruzioni su come creare e accedere a istanze di notebook Jupyter da utilizzare per eseguire gli esempi precedenti in AI, consulta. SageMaker [Istanze SageMaker per notebook Amazon](nbi.md) Dopo aver creato un'istanza di notebook e averla aperta, scegli la scheda **Esempi SageMaker AI** per visualizzare un elenco di tutti gli esempi di IA. SageMaker Il notebook per endpoint a più modelli si trova nella sezione **FUNZIONALITÀ AVANZATA**. Per aprire un notebook, seleziona la relativa scheda **Utilizza** e scegli **Crea copia**.

Per ulteriori informazioni sui casi d'uso per endpoint a più modelli, consulta i seguenti blog e risorse:
+ Video: [hosting di migliaia di modelli sull' SageMaker intelligenza artificiale](https://www.youtube.com/watch?v=XqCNTWmHsLc&t=751s)
+ Video: [SageMaker AI ML per SaaS](https://www.youtube.com/watch?v=BytpYlJ3vsQ)
+ Blog: [Come scalare l'inferenza del machine learning per casi d'uso SaaS multi-tenant](https://aws.amazon.com/blogs/machine-learning/how-to-scale-machine-learning-inference-for-multi-tenant-saas-use-cases/)
+ Caso di studio: [Veeva Systems](https://aws.amazon.com/partners/success/advanced-clinical-veeva/)

# Algoritmi, framework e istanze supportati per endpoint multi-modello
<a name="multi-model-support"></a>

Per informazioni sugli algoritmi, i framework e i tipi di istanza che è possibile utilizzare con gli endpoint a più modelli, consulta le sezioni seguenti.

## Algoritmi, framework e istanze supportati per endpoint a più modelli che utilizzano istanze supportate da CPU
<a name="multi-model-support-cpu"></a>

I container di inferenza per i seguenti algoritmi e framework supportano endpoint a più modelli:
+ [XGBoost algoritmo con Amazon SageMaker AI](xgboost.md)
+ [Algoritmo K-Nearest Neighbors (k-NN)](k-nearest-neighbors.md)
+ [Algoritmo di apprendimento lineare](linear-learner.md)
+ [Algoritmo Random Cut Forest (RCF)](randomcutforest.md)
+ [Risorse da utilizzare TensorFlow con Amazon SageMaker AI](tf.md)
+ [Risorse per usare Scikit-learn con Amazon AI SageMaker](sklearn.md)
+ [Risorse per l'utilizzo di Apache MXNet con Amazon SageMaker AI](mxnet.md)
+ [Risorse da utilizzare PyTorch con Amazon SageMaker AI](pytorch.md)

Per utilizzare qualsiasi altro framework o algoritmo, utilizza il toolkit di inferenza SageMaker AI per creare un contenitore che supporti endpoint multimodello. Per informazioni, consulta [Crea il tuo contenitore per gli endpoint multimodello di intelligenza artificiale SageMaker](build-multi-model-build-container.md).

Gli endpoint a più modelli supportano tutti i tipi di istanze CPU.

## Algoritmi, framework e istanze supportati per endpoint a più modelli che utilizzano istanze supportate da GPU
<a name="multi-model-support-gpu"></a>

[L'hosting di più modelli basati su GPU su endpoint multimodello è supportato tramite il server AI Triton Inference. SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) Questo supporta tutti i principali framework di inferenza come NVIDIA® TensorRT™, Python, XGBoost ONNX, MXNet scikit-learn PyTorch, OpenVINO, C\$1\$1 personalizzato e altri. RandomForest

Per utilizzare qualsiasi altro framework o algoritmo, puoi usare il back-end Triton per Python o C\$1\$1 per scrivere la logica del modello e servire qualsiasi modello personalizzato. Dopo aver preparato il server, puoi iniziare a implementare centinaia di modelli di Deep Learning dietro un unico endpoint.

Gli endpoint a più modelli supportano i seguenti tipi di istanze GPU:


| Famiglia di istanze | Tipo di istanza | v CPUs | GiB di memoria per vCPU | GPUs | Memoria GPU | 
| --- | --- | --- | --- | --- | --- | 
| p2 | ml.p2.xlarge | 4 | 15,25 | 1 | 12 | 
| p3 | ml.p3.2xlarge | 8 | 7,62 | 1 | 16 | 
| g5 | ml.g5.xlarge | 4 | 4 | 1 | 24 | 
| g5 | ml.g 5.2xlarg | 8 | 4 | 1 | 24 | 
| g5 | ml.g 5,4xlarge | 16 | 4 | 1 | 24 | 
| g5 | ml.g 5,8xlarge | 32 | 4 | 1 | 24 | 
| g5 | ml.g 5,16xlarge | 64 | 4 | 1 | 24 | 
| g4dn | ml.g4dn.xlarge | 4 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.2xlarge | 8 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.4xlarge | 16 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.8xlarge | 32 | 4 | 1 | 16 | 
| g4dn | ml.g4dn.16xlarge | 64 | 4 | 1 | 16 | 

# Raccomandazioni sulle istanze per le distribuzioni di endpoint a più modelli
<a name="multi-model-endpoint-instance"></a>

Ci sono diversi elementi da considerare quando si seleziona un tipo di istanza SageMaker AI ML per un endpoint multimodello:
+ Assegna una capacità sufficiente di [Amazon Elastic Block Store (Amazon EBS)](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) per tutti i modelli che devono essere serviti.
+ Bilancia le prestazioni (riduci al minimo gli avvii a freddo) e i costi (non sovraccaricare la capacità delle istanze). Per informazioni sulla dimensione del volume di archiviazione che SageMaker AI allega per ogni tipo di istanza per un endpoint e per un endpoint multimodello, consulta. [Volumi di archiviazione delle istanze](host-instance-storage.md)
+ Per un container configurato per l'esecuzione in modalità `MultiModel`, il volume di storage assegnato per le sue istanze è più grande rispetto alla modalità predefinita `SingleModel`. Ciò consente di memorizzare nella cache più modelli nel volume di storage dell'istanza rispetto alla modalità `SingleModel`.

Quando scegli un tipo di istanza SageMaker AI ML, considera quanto segue:
+ Gli endpoint a più modelli sono attualmente supportati per tutti i tipi di istanze CPU e per i tipi di istanze a GPU singola.
+ Per la distribuzione del traffico (modelli di accesso) ai modelli da ospitare dietro l'endpoint a più modelli, insieme alla dimensione del modello (quanti modelli possono essere caricati in memoria sull'istanza) tieni a mente le seguenti informazioni:
  + Pensate alla quantità di memoria su un'istanza come spazio di cache per i modelli da caricare e al numero di v CPUs come limite di concorrenza per eseguire inferenze sui modelli caricati (supponendo che l'invocazione di un modello sia vincolata alla CPU).
  + Per le istanze basate su CPU, il numero di v CPUs influisce sul numero massimo di chiamate simultanee per istanza (supponendo che l'invocazione di un modello sia vincolata alla CPU). Una quantità maggiore di v CPUs consente di richiamare contemporaneamente più modelli unici.
  + Per le istanze supportate da GPU, una quantità maggiore di memoria dell'istanza e della GPU consente di avere più modelli caricati e pronti a servire le richieste di inferenza.
  + Sia per le istanze supportate dalla CPU che per quelle supportate dalla GPU è necessario avere un po' di memoria "slack" disponibile in modo che i modelli non utilizzati possano essere scaricati, soprattutto per gli endpoint a più modelli con più istanze. Se un'istanza o una zona di disponibilità non riesce, i modelli su tali istanze verranno reindirizzati ad altre istanze dietro l'endpoint.
+ Determina la tua tolleranza ai tempi loading/downloading :
  + Le famiglie di tipi di istanze d (ad esempio m5d, c5d o r5d) e g5s sono dotate di un'unità SSD NVMe (non volatile memory express) che offre I/O prestazioni elevate e può ridurre il tempo necessario per scaricare i modelli nel volume di archiviazione e il contenitore per caricare il modello dal volume di archiviazione.
  + Poiché i tipi di istanze d e g5 sono dotati di uno storage NVMe SSD, SageMaker AI non collega un volume di storage Amazon EBS a queste istanze di calcolo ML che ospitano l'endpoint multimodello. Il dimensionamento automatico funziona meglio quando i modelli sono di dimensioni simili e omogenei, ovvero quando hanno requisiti di latenza di inferenza e risorse simili.

È inoltre possibile utilizzare le seguenti indicazioni per ottimizzare il caricamento dei modelli sugli endpoint a più modelli:

**Scelta di un tipo di istanza che non può contenere tutti i modelli di destinazione in memoria**

In alcuni casi, potresti scegliere di ridurre i costi scegliendo un tipo di istanza che non può contenere tutti i modelli di destinazione in memoria contemporaneamente. SageMaker L'intelligenza artificiale scarica dinamicamente i modelli quando esaurisce la memoria per fare spazio a un nuovo modello mirato. Per i modelli non richiesti di frequente, sacrifichi la latenza di carico dinamica. Nei casi con esigenze di latenza più severe, è possibile optare per tipi di istanza più grandi o per più istanze. Investire tempo in anticipo per i test e l'analisi delle prestazioni aiuta ad avere implementazioni di produzione di successo.

**Valutare le visite alla cache del tuo modello**

 CloudWatch Le metriche di Amazon possono aiutarti a valutare i tuoi modelli. Per ulteriori informazioni sui parametri che puoi utilizzare con endpoint a più modelli, consulta [CloudWatch Metriche per le implementazioni di endpoint multimodello](multi-model-endpoint-cloudwatch-metrics.md).

 Puoi utilizzare la statistica `Average` del parametro `ModelCacheHit` per monitorare il rapporto delle richieste in cui il modello è già caricato. Puoi utilizzare la statistica `SampleCount` per il parametro `ModelUnloadingTime` per monitorare il numero di richieste di scarico inviate al container in un periodo di tempo. Se i modelli vengono scaricati troppo frequentemente (un indicatore di *thrashing* in cui i modelli vengono scaricati e caricati di nuovo perché lo spazio nella cache è insufficiente per il set di lavoro di modelli), è consigliabile utilizzare un tipo di istanza più grande con più memoria o aumentare il numero di istanze dietro l'endpoint a più modelli. Per gli endpoint a più modelli con più istanze, tieni presente che un modello può essere caricato su più di 1 istanza.

# Creare un endpoint a più modelli
<a name="create-multi-model-endpoint"></a>

Puoi utilizzare la console SageMaker AI o creare un endpoint AWS SDK per Python (Boto) multimodello. Per creare un endpoint basato su CPU o GPU tramite la console, consulta la procedura della console nelle sezioni seguenti. Se desideri creare un endpoint multimodello con AWS SDK per Python (Boto), utilizza la procedura CPU o GPU descritta nelle sezioni seguenti. I flussi di lavoro della CPU e GPU sono simili ma presentano diverse differenze, come i requisiti del container.

**Topics**
+ [Creare un endpoint a più modelli (console)](#create-multi-model-endpoint-console)
+ [Crea un endpoint multimodello utilizzando con CPUs AWS SDK per Python (Boto3)](#create-multi-model-endpoint-sdk-cpu)
+ [Crea un endpoint multimodello utilizzando con GPUs AWS SDK per Python (Boto3)](#create-multi-model-endpoint-sdk-gpu)

## Creare un endpoint a più modelli (console)
<a name="create-multi-model-endpoint-console"></a>

È possibile creare endpoint a più modelli supportati da CPU e GPU tramite la console. Utilizza la seguente procedura per creare un endpoint multimodello tramite la console AI. SageMaker 

**Per creare un endpoint a più modelli (console)**

1. Apri la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Scegliere **Model (Modello)**, quindi dal gruppo **Inference (Inferenza)** scegliere **Create model (Crea modello)**. 

1. Per **Model name (Nome modello)**, immettere un nome.

1. Per il **ruolo IAM**, scegli o crea un ruolo IAM a cui è collegata la policy IAM `AmazonSageMakerFullAccess`. 

1.  Nella sezione **Definizione container** per **Fornisci artefatti dì modello e immagine di inferenza** scegliere **Utilizza più modelli**.  
![\[La sezione della pagina di creazione dei modelli in cui è possibile scegliere Utilizza più modelli.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/mme-create-model-ux-2.PNG)

1. Per **Immagine del container dell'inferenza**, inserisci il percorso Amazon ECR per l'immagine del container desiderata.

   Per i modelli GPU, è necessario utilizzare un container supportato da NVIDIA Triton Inference Server. Per un elenco di immagini di container che funzionano con endpoint supportati da GPU, consulta [Container di inferenza Triton NVIDIA (solo supporto SM)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only). Per ulteriori informazioni su NVIDIA Triton Inference Server, consulta [Use Triton Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) Server with AI. SageMaker 

1. Scegli **Crea modello**.

1. Distribuire l'endpoint a più modelli come si farebbe con un endpoint a singolo modello. Per istruzioni, consulta [Implementa il modello su AI Hosting Services SageMaker](ex1-model-deployment.md#ex1-deploy-model).

## Crea un endpoint multimodello utilizzando con CPUs AWS SDK per Python (Boto3)
<a name="create-multi-model-endpoint-sdk-cpu"></a>

Utilizza la sezione seguente per creare un endpoint a più modelli supportato da istanze di CPU. Puoi creare un endpoint multimodello utilizzando Amazon SageMaker AI [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model)e [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) APIs proprio come creeresti un endpoint a modello singolo, ma con due modifiche. [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) Quando si definisce il container del modello, è necessario passare un nuovo valore del parametro `Mode`: `MultiModel`. È inoltre necessario passare il campo `ModelDataUrl` che specifica il prefisso in S3 Amazon dove si trovano gli artefatti del modello, anziché il percorso di un artefatto di singolo modello, come si farebbe quando si distribuisce un singolo modello.

[Per un notebook di esempio che utilizza l' SageMaker intelligenza artificiale per distribuire più XGBoost modelli su un endpoint, consulta Multi-Model Endpoint Sample Notebook. XGBoost ](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html) 

Nella procedura seguente vengono illustrate le fasi chiave utilizzate nell'esempio per creare un endpoint a più modelli supportato dalla CPU.

**Per distribuire il modello (AWS SDK per Python (Boto 3))**

1. Procurati un container con un'immagine che supporti la l'implementazione di endpoint a più modelli. Per un elenco di algoritmi e container di framework integrati che supportano endpoint a più modelli, consulta [Algoritmi, framework e istanze supportati per endpoint multi-modello](multi-model-support.md). Per questo esempio, utilizziamo l'algoritmo integrato [Algoritmo K-Nearest Neighbors (k-NN)](k-nearest-neighbors.md). Chiamiamo la funzione di utilità [SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) `image_uris.retrieve()` per ottenere l'indirizzo per l'immagine dell'algoritmo integrato K-Nearest Neighbors.

   ```
   import sagemaker
   region = sagemaker_session.boto_region_name
   image = sagemaker.image_uris.retrieve("knn",region=region)
   container = { 
                 'Image':        image,
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   ```

1. Procurati un client AWS SDK per Python (Boto3) SageMaker AI e crea il modello che utilizza questo contenitore.

   ```
   import boto3
   sagemaker_client = boto3.client('sagemaker')
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container])
   ```

1. (Facoltativo) Se si utilizza una pipeline di inferenza seriale, ottenere i container aggiuntivi da includere nella pipeline e includerli nell'argomento `Containers` di `CreateModel`:

   ```
   preprocessor_container = { 
                  'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>'
               }
   
   multi_model_container = { 
                 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>',
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [preprocessor_container, multi_model_container]
               )
   ```
**Nota**  
È possibile utilizzare un solo multi-model-enabled endpoint in una pipeline di inferenza seriale.

1. (Facoltativo) Se il tuo caso d'uso non trae vantaggio dalla memorizzazione nella cache del modello, imposta il valore del campo `ModelCacheSetting` del parametro `MultiModelConfig` su `Disabled` e includilo nell'argomento `Container` della chiamata a `create_model`. Il valore di default del campo `ModelCacheSetting` è `Enabled`.

   ```
   container = { 
                   'Image': image, 
                   'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                   'Mode': 'MultiModel' 
                   'MultiModelConfig': {
                           // Default value is 'Enabled'
                           'ModelCacheSetting': 'Disabled'
                   }
              }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container]
               )
   ```

1. Configurare l'endpoint a più modelli per il modello. Si consiglia di configurare gli endpoint con almeno due istanze. Ciò consente all' SageMaker intelligenza artificiale di fornire un set di previsioni ad alta disponibilità su più zone di disponibilità per i modelli.

   ```
   response = sagemaker_client.create_endpoint_config(
                   EndpointConfigName = '<ENDPOINT_CONFIG_NAME>',
                   ProductionVariants=[
                        {
                           'InstanceType':        'ml.m4.xlarge',
                           'InitialInstanceCount': 2,
                           'InitialVariantWeight': 1,
                           'ModelName':            '<MODEL_NAME>',
                           'VariantName':          'AllTraffic'
                         }
                   ]
              )
   ```
**Nota**  
È possibile utilizzare un solo multi-model-enabled endpoint in una pipeline di inferenza seriale.

1. Creare l'endpoint a più modelli utilizzando i parametri `EndpointName` e `EndpointConfigName`.

   ```
   response = sagemaker_client.create_endpoint(
                 EndpointName       = '<ENDPOINT_NAME>',
                 EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')
   ```

## Crea un endpoint multimodello utilizzando con GPUs AWS SDK per Python (Boto3)
<a name="create-multi-model-endpoint-sdk-gpu"></a>

Utilizza la sezione seguente per creare un endpoint a più modelli supportato da istanze di GPU. Crei un endpoint multimodello utilizzando Amazon SageMaker AI [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model)e in [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) APIs modo analogo alla creazione di endpoint a modello singolo, ma ci sono diverse modifiche. [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) Quando si definisce il container del modello, è necessario passare un nuovo valore del parametro `Mode`: `MultiModel`. È inoltre necessario passare il campo `ModelDataUrl` che specifica il prefisso in S3 Amazon dove si trovano gli artefatti del modello, anziché il percorso di un artefatto di singolo modello, come si farebbe quando si distribuisce un singolo modello. Per gli endpoint a più modelli supportati da GPU, devi anche utilizzare un container con NVIDIA Triton Inference Server ottimizzato per l'esecuzione su istanze GPU. Per un elenco di immagini di container che funzionano con endpoint supportati da GPU, consulta [Container di inferenza Triton NVIDIA (solo supporto SM)](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only).

Per un notebook di esempio che dimostra come creare un endpoint multimodello supportato da GPUs, consulta [Esegui più modelli di deep learning con GPUs Amazon SageMaker AI Multi-model](https://github.com/aws/amazon-sagemaker-examples/blob/main/multi-model-endpoints/mme-on-gpu/cv/resnet50_mme_with_gpu.ipynb) endpoint (MME).

Nella procedura seguente vengono illustrate le fasi chiave per creare un endpoint a più modelli supportato dalla GPU.

**Per distribuire il modello (AWS SDK per Python (Boto 3))**

1. Definizione dell'immagine del container. [Per creare un endpoint multimodello con supporto GPU per i ResNet modelli, definisci il contenitore per utilizzare l'immagine del server NVIDIA Triton.](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) Questo container supporta endpoint a più modelli ed è ottimizzato per l'esecuzione su istanze GPU. Chiamiamo la funzione di utilità [SageMaker AI Python SDK](https://sagemaker.readthedocs.io/en/stable/v2.html) `image_uris.retrieve()` per ottenere l'indirizzo dell'immagine. Esempio:

   ```
   import sagemaker
   region = sagemaker_session.boto_region_name
   
   // Find the sagemaker-tritonserver image at 
   // https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-triton/resnet50/triton_resnet50.ipynb
   // Find available tags at https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only
   
   image = "<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/sagemaker-tritonserver:<TAG>".format(
       account_id=account_id_map[region], region=region
   )
   
   container = { 
                 'Image':        image,
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel',
                 "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "resnet"},
               }
   ```

1. Ottieni un client AWS SDK per Python (Boto3) SageMaker AI e crea il modello che utilizza questo contenitore.

   ```
   import boto3
   sagemaker_client = boto3.client('sagemaker')
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container])
   ```

1. (Facoltativo) Se si utilizza una pipeline di inferenza seriale, ottenere i container aggiuntivi da includere nella pipeline e includerli nell'argomento `Containers` di `CreateModel`:

   ```
   preprocessor_container = { 
                  'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<PREPROCESSOR_IMAGE>:<TAG>'
               }
   
   multi_model_container = { 
                 'Image': '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>',
                 'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                 'Mode':         'MultiModel'
               }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [preprocessor_container, multi_model_container]
               )
   ```
**Nota**  
È possibile utilizzare un solo multi-model-enabled endpoint in una pipeline di inferenza seriale.

1. (Facoltativo) Se il tuo caso d'uso non trae vantaggio dalla memorizzazione nella cache del modello, imposta il valore del campo `ModelCacheSetting` del parametro `MultiModelConfig` su `Disabled` e includilo nell'argomento `Container` della chiamata a `create_model`. Il valore di default del campo `ModelCacheSetting` è `Enabled`.

   ```
   container = { 
                   'Image': image, 
                   'ModelDataUrl': 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
                   'Mode': 'MultiModel' 
                   'MultiModelConfig': {
                           // Default value is 'Enabled'
                           'ModelCacheSetting': 'Disabled'
                   }
              }
   
   response = sagemaker_client.create_model(
                 ModelName        = '<MODEL_NAME>',
                 ExecutionRoleArn = role,
                 Containers       = [container]
               )
   ```

1. Configurare l'endpoint a più modelli con istanze supportate da GPU per il modello. Ti consigliamo di configurare gli endpoint con più di un'istanza per consentire un'elevata disponibilità e maggiori accessi alla cache.

   ```
   response = sagemaker_client.create_endpoint_config(
                   EndpointConfigName = '<ENDPOINT_CONFIG_NAME>',
                   ProductionVariants=[
                        {
                           'InstanceType':        'ml.g4dn.4xlarge',
                           'InitialInstanceCount': 2,
                           'InitialVariantWeight': 1,
                           'ModelName':            '<MODEL_NAME>',
                           'VariantName':          'AllTraffic'
                         }
                   ]
              )
   ```

1. Creare l'endpoint a più modelli utilizzando i parametri `EndpointName` e `EndpointConfigName`.

   ```
   response = sagemaker_client.create_endpoint(
                 EndpointName       = '<ENDPOINT_NAME>',
                 EndpointConfigName = '<ENDPOINT_CONFIG_NAME>')
   ```

# Invocare un endpoint a più modelli
<a name="invoke-multi-model-endpoint"></a>

Per richiamare un endpoint multimodello, usa l'[https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint) SageMaker AI Runtime proprio come richiameresti un endpoint a modello singolo, con una sola modifica. Passa un nuovo parametro `TargetModel` che specifica i modelli di destinazione nell'endpoint. La `InvokeEndpoint` richiesta SageMaker AI Runtime supporta `X-Amzn-SageMaker-Target-Model` una nuova intestazione che segue il percorso relativo del modello specificato per l'invocazione. Il sistema SageMaker AI costruisce il percorso assoluto del modello combinando il prefisso fornito come parte della chiamata `CreateModel` API con il percorso relativo del modello.

Le seguenti procedure sono le stesse per gli endpoint a più modelli supportati da CPU e GPU.

------
#### [ AWS SDK for Python (Boto 3) ]

La seguente richiesta di previsione di esempio utilizza [AWS SDK per Python (Boto 3)](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html) nel notebook di esempio.

```
response = runtime_sagemaker_client.invoke_endpoint(
                        EndpointName = "<ENDPOINT_NAME>",
                        ContentType  = "text/csv",
                        TargetModel  = "<MODEL_FILENAME>.tar.gz",
                        Body         = body)
```

------
#### [ AWS CLI ]

 L'esempio seguente mostra come creare una richiesta CSW con due righe utilizzando il simbolo AWS Command Line Interface (AWS CLI):

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name "<ENDPOINT_NAME>" \
  --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \
  --content-type "text/csv" \
  --target-model "<MODEL_NAME>.tar.gz"
  output_file.txt
```

Se l'inferenza ha avuto successo, viene effettuata una `output_file.txt` con informazioni sulle richieste di inferenza. Per altri esempi su come fare previsioni con AWS CLI, consulta [Fare previsioni con the AWS CLI](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#making-predictions-with-the-aws-cli) nella documentazione di SageMaker Python SDK.

------

L'endpoint a più modelli carica dinamicamente i modelli di destinazione in base alle esigenze. Puoi osservare questo comportamento quando si esegue il [notebook di esempio MME](https://sagemaker-examples.readthedocs.io/en/latest/advanced_functionality/multi_model_xgboost_home_value/xgboost_multi_model_endpoint_home_value.html) in quanto esegue l'iterazione di invocazioni casuali su più modelli di destinazione ospitati dietro un singolo endpoint. La prima richiesta per un determinato modello necessita di più tempo perché il modello deve essere scaricato da Amazon Simple Storage Service (Amazon S3) e caricato in memoria. Si tratta del cosiddetto *avvio a freddo* e, negli endpoint a più modelli, si prevede che venga ottimizzato per migliorare il rapporto prezzo/prestazioni dei clienti. Le chiamate successive terminano più velocemente perché non c'è alcun sovraccarico aggiuntivo dopo il caricamento del modello.

**Nota**  
Per le istanze basate su GPU, il codice di risposta HTTP con 507 dal container GPU indica una mancanza di memoria o di altre risorse. Ciò fa sì che i modelli non utilizzati vengano scaricati dal container per caricare i modelli utilizzati più di frequente.

## Riprova le richieste relative agli errori ModelNotReadyException
<a name="invoke-multi-model-config-retry"></a>

La prima volta che chiami un modello `invoke_endpoint`, questo viene scaricato da Amazon Simple Storage Service e caricato nel container di inferenza. In questo modo la risposta alla prima chiamata impiega più tempo. Le chiamate successive allo stesso modello terminano più velocemente, perché il modello è già caricato.

SageMaker L'intelligenza artificiale restituisce una risposta per una chiamata `invoke_endpoint` entro 60 secondi. Alcuni modelli sono troppo grandi per essere scaricati entro 60 secondi. Se il caricamento del modello non termina prima del limite di timeout di 60 secondi, la richiesta di `invoke_endpoint` restituisce il codice di errore `ModelNotReadyException` e il modello continua a essere scaricato e caricato nel container di inferenza per un massimo di 360 secondi. Se ricevi un codice di errore `ModelNotReadyException` per una richiesta di `invoke_endpoint`, riprova la richiesta. Per impostazione predefinita, le `invoke_endpoint` richieste di ripetizione AWS SDKs per Python (Boto 3) (utilizzando la [modalità Legacy retry](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#legacy-retry-mode)) e Java riprovano che generano errori. `ModelNotReadyException` Puoi configurare la strategie di ripetizione. per continuare a ripetere la richiesta per un massimo di 360 secondi. Se prevedi che il modello impieghi più di 60 secondi per essere scaricato e caricato nel container, imposta il timeout del socket SDK su 70 secondi. Per ulteriori informazioni sulla configurazione della strategia di ripetizione di AWS SDK per Python (Boto3), consulta [Configurazione di una modalità di ripetizione](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/retries.html#configuring-a-retry-mode). Il codice seguente mostra un esempio che configura la strategia di ripetizione per ritentare le chiamate a `invoke_endpoint` per un massimo di 180 secondi.

```
import boto3
from botocore.config import Config

# This example retry strategy sets the retry attempts to 2. 
# With this setting, the request can attempt to download and/or load the model 
# for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds)
config = Config(
    read_timeout=70,
    retries={
        'max_attempts': 2  # This value can be adjusted to 5 to go up to the 360s max timeout
    }
)
runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)
```

# Aggiungere o rimuovere modelli
<a name="add-models-to-endpoint"></a>

Puoi distribuire modelli aggiuntivi a un endpoint a più modelli e invocarli immediatamente tramite quell'endpoint. Quando si aggiunge un nuovo modello, non è necessario aggiornare o disattivare l'endpoint e in tal modo eviti il costo della creazione e dell'esecuzione di un endpoint separato per ogni nuovo modello. Il processo di aggiunta e rimozione dei modelli è lo stesso degli endpoint a più modelli basati su CPU e GPU.

 SageMaker L'intelligenza artificiale scarica i modelli inutilizzati dal contenitore quando l'istanza raggiunge la capacità di memoria ed è necessario scaricare altri modelli nel contenitore. SageMaker L'intelligenza artificiale elimina anche gli artefatti del modello inutilizzati dal volume di archiviazione dell'istanza quando il volume raggiunge la capacità massima ed è necessario scaricare nuovi modelli. La prima invocazione a un modello appena aggiunto impiega più tempo perché l'endpoint richiede tempo per scaricare il modello da S3 nella memoria del container nell'istanza che ospita l'endpoint.

Con l'endpoint già in esecuzione, copia un nuovo set di artefatti del modello nella posizione S3 di Amazon in cui archivi i modelli.

```
# Add an AdditionalModel to the endpoint and exercise it
aws s3 cp AdditionalModel.tar.gz s3://amzn-s3-demo-bucket/path/to/artifacts/
```

**Importante**  
Per aggiornare un modello, procedi come faresti per aggiungere un nuovo modello. Utilizza un nome nuovo e univoco. Non sovrascrivere gli artefatti del modello in S3 di Amazon perché la versione precedente del modello potrebbe ancora essere caricata nei container o nel volume di storage delle istanze nell'endpoint. Le invocazioni al nuovo modello potrebbero richiamare la versione precedente del modello. 

Le applicazioni client possono richiedere le previsioni dal modello di destinazione aggiuntivo non appena viene archiviato in S3.

```
response = runtime_sagemaker_client.invoke_endpoint(
                        EndpointName='<ENDPOINT_NAME>',
                        ContentType='text/csv',
                        TargetModel='AdditionalModel.tar.gz',
                        Body=body)
```

Per eliminare un modello da un endpoint a più modelli, interrompi l'invocazione del modello dai client e rimuovilo dal percorso S3 in cui sono archiviati gli artefatti del modello.

# Crea il tuo contenitore per gli endpoint multimodello di intelligenza artificiale SageMaker
<a name="build-multi-model-build-container"></a>

Fai riferimento alle seguenti sezioni per portare il tuo container e le tue dipendenze su endpoint a più modelli.

**Topics**
+ [Implementa le tue dipendenze degli endpoint a più modelli su istanze basate su CPU](#build-multi-model-container-cpu)
+ [Implementa le tue dipendenze degli endpoint a più modelli su istanze basate su GPU](#build-multi-model-container-gpu)
+ [Usa l'AI Inference Toolkit SageMaker](#multi-model-inference-toolkit)
+ [Contratto per container personalizzati per endpoint a più modelli](mms-container-apis.md)

## Implementa le tue dipendenze degli endpoint a più modelli su istanze basate su CPU
<a name="build-multi-model-container-cpu"></a>

Se nessuna delle immagini predefinite dei container soddisfa le tue esigenze, puoi creare un container personalizzato da utilizzare con endpoint a più modelli basati su CPU.

Le immagini personalizzate di Amazon Elastic Container Registry (Amazon ECR) distribuite in SageMaker Amazon AI devono rispettare il contratto di base descritto in che regola il SageMaker modo [Codice di inferenza personalizzato con servizi di hosting](your-algorithms-inference-code.md) in cui l'IA interagisce con un contenitore Docker che esegue il tuo codice di inferenza. Affinché un container sia in grado di caricare e servire più modelli contemporaneamente, è necessario seguire alcuni comportamenti aggiuntivi. APIs Questo contratto aggiuntivo include nuovi modelli APIs per caricare, elencare, ottenere e scaricare e un'API diversa per richiamare i modelli. Esistono anche diversi comportamenti per gli scenari di errore che APIs è necessario rispettare. Per indicare che il container è conforme ai requisiti aggiuntivi, puoi aggiungere il seguente comando al Dockerfile:

```
LABEL com.amazonaws.sagemaker.capabilities.multi-models=true
```

SageMaker L'intelligenza artificiale inserisce anche una variabile di ambiente nel contenitore

```
SAGEMAKER_MULTI_MODEL=true
```

Se stai creando un endpoint multimodello per una pipline di inferenza seriale, il file Docker deve avere le etichette necessarie per le pipeline di inferenza seriale e multimodello. Per ulteriori informazioni sulle pipeline di informazioni seriali, vedere [Esecuzione di previsioni in tempo reale con una pipeline di inferenza](inference-pipeline-real-time.md).

Per semplificare l'implementazione di questi requisiti per un container personalizzato, sono disponibili due librerie:
+ [Multi Model Server](https://github.com/awslabs/multi-model-server) è un framework open source per fornire modelli di machine learning che possono essere installati in contenitori per fornire il front-end che soddisfi i requisiti per il nuovo contenitore di endpoint multimodello. APIs Fornisce le funzionalità di front-end HTTP e gestione del modello richieste dagli endpoint a più modelli per ospitare più modelli all'interno di un singolo container, caricare modelli e scaricare modelli dal container in modo dinamico ed eseguire l'inferenza su un modello caricato specifico. Fornisce inoltre un back-end integrabile che supporta un gestore back-end personalizzato integrabile in cui puoi implementare il tuo algoritmo.
+ [SageMaker AI Inference Toolkit](https://github.com/aws/sagemaker-inference-toolkit) è una libreria che avvia Multi Model Server con una configurazione e impostazioni che lo rendono compatibile con gli endpoint AI multimodello. SageMaker Consente inoltre di modificare parametri per prestazioni importanti, ad esempio il numero di worker per modello, in base alle esigenze dello scenario. 

## Implementa le tue dipendenze degli endpoint a più modelli su istanze basate su GPU
<a name="build-multi-model-container-gpu"></a>

La funzionalità Bring your own container (BYOC) su endpoint multimodello con istanze supportate da GPU non è attualmente supportata dalle librerie Multi Model Server e AI Inference Toolkit. SageMaker 

[https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) Per importare le tue dipendenze, puoi creare il tuo contenitore usando [NVIDIA](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) Triton Inference Server supportato dall' SageMaker intelligenza artificiale come immagine di base del tuo file Docker:

```
FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
```

**Importante**  
I container con Triton Inference Server sono gli unici container supportati che puoi utilizzare per endpoint a più modelli basati su GPU.

## Usa l'AI Inference Toolkit SageMaker
<a name="multi-model-inference-toolkit"></a>

**Nota**  
L' SageMaker AI Inference Toolkit è supportato solo per endpoint multimodello supportati da CPU. L' SageMaker AI Inference Toolkit non è attualmente supportato per gli endpoint multimodello supportati da GPU.

I container predefiniti che supportano gli endpoint a più modelli sono elencati in [Algoritmi, framework e istanze supportati per endpoint multi-modello](multi-model-support.md). Se vuoi utilizzare qualsiasi altro framework o algoritmo, devi creare un container. Il modo più semplice per farlo è utilizzare [SageMaker AI Inference Toolkit](https://github.com/aws/sagemaker-inference-toolkit) per estendere un contenitore precostruito esistente. Il toolkit di inferenza SageMaker AI è un'implementazione per il server multimodello (MMS) che crea endpoint che possono essere implementati nell'intelligenza artificiale. SageMaker [Per un notebook di esempio che mostra come configurare e distribuire un contenitore personalizzato che supporti gli endpoint multimodello nell' SageMaker intelligenza artificiale, consulta il Multi-Model Endpoint BYOC Sample Notebook.](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_bring_your_own)

**Nota**  
Il toolkit di inferenza SageMaker AI supporta solo i gestori di modelli Python. Se desideri implementare il tuo gestore in qualsiasi altra lingua, devi creare il tuo contenitore che implementi l'endpoint multimodello aggiuntivo. APIs Per informazioni, consulta [Contratto per container personalizzati per endpoint a più modelli](mms-container-apis.md).

**Per estendere un contenitore utilizzando il toolkit di inferenza AI SageMaker**

1. Crea un handler di modelli. In MMS è previsto un handler di modelli, ossia un file Python che implementa funzioni per preelaborare, ottenere previsioni dal modello ed elaborare l'output in un handler di modelli. Per un esempio di handler di modelli, consulta [model\$1handler.py](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/multi_model_bring_your_own/container/model_handler.py) nel notebook di esempio.

1. Importa il toolkit di inferenza e utilizza la funzione `model_server.start_model_server` per avviare MMS. L'esempio seguente proviene dal file `dockerd-entrypoint.py` del notebook di esempio. Tieni presente che la chiamata a `model_server.start_model_server` passa l'handler di modelli descritto nella fase precedente:

   ```
   import subprocess
   import sys
   import shlex
   import os
   from retrying import retry
   from subprocess import CalledProcessError
   from sagemaker_inference import model_server
   
   def _retry_if_error(exception):
       return isinstance(exception, CalledProcessError or OSError)
   
   @retry(stop_max_delay=1000 * 50,
          retry_on_exception=_retry_if_error)
   def _start_mms():
       # by default the number of workers per model is 1, but we can configure it through the
       # environment variable below if desired.
       # os.environ['SAGEMAKER_MODEL_SERVER_WORKERS'] = '2'
       model_server.start_model_server(handler_service='/home/model-server/model_handler.py:handle')
   
   def main():
       if sys.argv[1] == 'serve':
           _start_mms()
       else:
           subprocess.check_call(shlex.split(' '.join(sys.argv[1:])))
   
       # prevent docker exit
       subprocess.call(['tail', '-f', '/dev/null'])
       
   main()
   ```

1. Nel tuo `Dockerfile`, copia l'handler di modelli dalla prima fase e specifica il file Python della fase precedente come punto di ingresso nel `Dockerfile`. Le seguenti righe provengono dal [Dockerfile](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/advanced_functionality/multi_model_bring_your_own/container/Dockerfile) utilizzato nel notebook di esempio:

   ```
   # Copy the default custom service file to handle incoming data and inference requests
   COPY model_handler.py /home/model-server/model_handler.py
   
   # Define an entrypoint script for the docker image
   ENTRYPOINT ["python", "/usr/local/bin/dockerd-entrypoint.py"]
   ```

1. Crea e registra il container. Il seguente script di shell del notebook di esempio costruisce il container e lo carica in un repository Amazon Elastic Container Registry nel tuo account AWS :

   ```
   %%sh
   
   # The name of our algorithm
   algorithm_name=demo-sagemaker-multimodel
   
   cd container
   
   account=$(aws sts get-caller-identity --query Account --output text)
   
   # Get the region defined in the current configuration (default to us-west-2 if none defined)
   region=$(aws configure get region)
   region=${region:-us-west-2}
   
   fullname="${account}.dkr.ecr.${region}.amazonaws.com/${algorithm_name}:latest"
   
   # If the repository doesn't exist in ECR, create it.
   aws ecr describe-repositories --repository-names "${algorithm_name}" > /dev/null 2>&1
   
   if [ $? -ne 0 ]
   then
       aws ecr create-repository --repository-name "${algorithm_name}" > /dev/null
   fi
   
   # Get the login command from ECR and execute it directly
   $(aws ecr get-login --region ${region} --no-include-email)
   
   # Build the docker image locally with the image name and then push it to ECR
   # with the full name.
   
   docker build -q -t ${algorithm_name} .
   docker tag ${algorithm_name} ${fullname}
   
   docker push ${fullname}
   ```

Ora puoi utilizzare questo contenitore per implementare endpoint multimodello nell'intelligenza artificiale. SageMaker 

**Topics**
+ [Implementa le tue dipendenze degli endpoint a più modelli su istanze basate su CPU](#build-multi-model-container-cpu)
+ [Implementa le tue dipendenze degli endpoint a più modelli su istanze basate su GPU](#build-multi-model-container-gpu)
+ [Usa l'AI Inference Toolkit SageMaker](#multi-model-inference-toolkit)
+ [Contratto per container personalizzati per endpoint a più modelli](mms-container-apis.md)

# Contratto per container personalizzati per endpoint a più modelli
<a name="mms-container-apis"></a>

Per gestire più modelli, il contenitore deve supportare una serie di modelli APIs che consentano ad Amazon SageMaker AI di comunicare con il container per caricare, elencare, ricevere e scaricare i modelli secondo necessità. `model_name`Viene utilizzato nel nuovo set di APIs come parametro di input chiave. Si prevede che il container del cliente tenga traccia dei modelli caricati utilizzando `model_name` come chiave di mappatura. Inoltre, `model_name` è un identificatore opaco e non è necessariamente il valore del parametro `TargetModel` passato nell'API `InvokeEndpoint`. Il `TargetModel` valore originale della `InvokeEndpoint` richiesta viene passato al contenitore APIs come `X-Amzn-SageMaker-Target-Model` intestazione che può essere utilizzata per scopi di registrazione.

**Nota**  
[Gli endpoint multimodello per le istanze basate su GPU sono attualmente supportati solo con il contenitore NVIDIA Triton Inference Server di SageMaker AI.](https://docs.aws.amazon.com/sagemaker/latest/dg/triton.html) Questo container implementa già il contratto definito di seguito. I clienti possono utilizzare direttamente questo container con i loro endpoint GPU a più modelli, senza alcun intervento aggiuntivo.

Puoi configurare quanto segue APIs sui tuoi contenitori per endpoint multimodello basati su CPU.

**Topics**
+ [Caricamento modello API](#multi-model-api-load-model)
+ [Elenco modelli API](#multi-model-api-list-model)
+ [Ottenere un modello API](#multi-model-api-get-model)
+ [Scarica modello API](#multi-model-api-unload-model)
+ [Invocare un modello API](#multi-model-api-invoke-model)

## Caricamento modello API
<a name="multi-model-api-load-model"></a>

Indica al container di caricare un particolare modello presente nel campo `url` del corpo nella memoria del container del cliente e di tenerne traccia con il `model_name` assegnato. Dopo aver caricato un modello, il container deve essere pronto per servire le richieste di inferenza utilizzando questo `model_name`.

```
POST /models HTTP/1.1
Content-Type: application/json
Accept: application/json

{
     "model_name" : "{model_name}",
     "url" : "/opt/ml/models/{model_name}/model",
}
```

**Nota**  
Se `model_name` è già caricato, l'API restituisce il codice 409. Ogni volta che un modello non può essere caricato a causa della mancanza di memoria o di qualsiasi altra risorsa, questa API dovrebbe restituire un codice di stato HTTP 507 all' SageMaker IA, che quindi avvia lo scaricamento dei modelli inutilizzati da recuperare.

## Elenco modelli API
<a name="multi-model-api-list-model"></a>

Restituisce l'elenco dei modelli caricati nella memoria del container del cliente.

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

Questa API supporta anche la paginazione.

```
GET /models HTTP/1.1
Accept: application/json

Response = 
{
    "models": [
        {
             "modelName" : "{model_name}",
             "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        {
            "modelName" : "{model_name}",
            "modelUrl" : "/opt/ml/models/{model_name}/model",
        },
        ....
    ]
}
```

SageMaker L'IA può inizialmente chiamare l'API List Models senza fornire un valore per. `next_page_token` Se un campo `nextPageToken` viene restituito come parte della risposta, verrà fornito come valore per `next_page_token` in una successiva chiamata List Models (Elenco modelli). Se `nextPageToken` non viene restituito, significa che non ci sono più modelli da restituire.

## Ottenere un modello API
<a name="multi-model-api-get-model"></a>

Questa è una semplice API di lettura sull'entità `model_name`.

```
GET /models/{model_name} HTTP/1.1
Accept: application/json

{
     "modelName" : "{model_name}",
     "modelUrl" : "/opt/ml/models/{model_name}/model",
}
```

**Nota**  
Se l'entità `model_name` non è caricata, l'API restituisce il codice 404.

## Scarica modello API
<a name="multi-model-api-unload-model"></a>

Indica alla piattaforma SageMaker AI di indicare al container del cliente di scaricare un modello dalla memoria. Viene quindi iniziata l'espulsione di un modello candidato come determinato dalla piattaforma quando avvia il processo di caricamento di un nuovo modello. Le risorse assegnate a `model_name` devono essere recuperate dal container quando l'API restituisce una risposta.

```
DELETE /models/{model_name}
```

**Nota**  
Se l'entità `model_name` non è caricata, l'API restituisce il codice 404.

## Invocare un modello API
<a name="multi-model-api-invoke-model"></a>

Effettua una richiesta di previsione dal particolare `model_name` fornito. La `InvokeEndpoint` richiesta SageMaker AI Runtime supporta `X-Amzn-SageMaker-Target-Model` una nuova intestazione che segue il percorso relativo del modello specificato per la chiamata. Il sistema SageMaker AI costruisce il percorso assoluto del modello combinando il prefisso fornito come parte della chiamata `CreateModel` API con il percorso relativo del modello.

```
POST /models/{model_name}/invoke HTTP/1.1
Content-Type: ContentType
Accept: Accept
X-Amzn-SageMaker-Custom-Attributes: CustomAttributes
X-Amzn-SageMaker-Target-Model: [relativePath]/{artifactName}.tar.gz
```

**Nota**  
Se l'entità `model_name` non è caricata, l'API restituisce il codice 404.

Inoltre, nelle istanze GPU, in caso di `InvokeEndpoint` errore a causa della mancanza di memoria o di altre risorse, questa API dovrebbe restituire un codice di stato HTTP 507 all' SageMaker IA, che quindi avvia lo scarico dei modelli inutilizzati da recuperare.

# Sicurezza degli endpoint a più modelli
<a name="multi-model-endpoint-security"></a>

I modelli e i dati in un endpoint a più modelli si trovano insieme nel volume di storage dell'istanza e nella memoria del container. Tutte le istanze per gli endpoint Amazon SageMaker AI vengono eseguite su un singolo contenitore tenant di tua proprietà. Solo i tuoi modelli possono essere eseguiti sull'endpoint a più modelli. È tua responsabilità gestire la mappatura delle richieste ai modelli e fornire agli utenti l'accesso ai modelli di destinazione corretti. SageMaker L'intelligenza artificiale utilizza [i ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) per fornire policy basate sull'identità IAM da utilizzare per specificare azioni e risorse consentite o negate e le condizioni in base alle quali le azioni sono consentite o negate.

Per impostazione predefinita, un principale IAM con le autorizzazioni [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) su un endpoint multi-modello può invocare qualsiasi modello all'indirizzo del prefisso S3 definito nell'operazione [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html), a condizione che il ruolo di esecuzione IAM definito nell'operazione disponga delle autorizzazioni per scaricare il modello. Se è necessario limitare l'accesso [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html) a un set limitato di modelli in S3, è possibile eseguire una delle seguenti operazioni:
+ Limitare le chiamate `InvokeEndpont` a modelli specifici ospitati nell'endpoint utilizzando la chiave di condizione IAM `sagemaker:TargetModel`. Ad esempio, il criterio seguente consente le richieste `InvokeEndpont` solo quando il valore del campo `TargetModel` corrisponde a una delle espressioni regolari specificate:

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Action": [
                  "sagemaker:InvokeEndpoint"
              ],
              "Effect": "Allow",
              "Resource":
              "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
              "Condition": {
                  "StringLike": {
                      "sagemaker:TargetModel": ["company_a/*", "common/*"]
                  }
              }
          }
      ]
  }
  ```

------

  Per informazioni sulle chiavi di condizione SageMaker AI, consulta [Condition Keys for Amazon SageMaker AI](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsagemaker.html#amazonsagemaker-policy-keys) nella *Guida per l'AWS Identity and Access Management utente*.
+ Creare endpoint multimodello con prefissi S3 più restrittivi. 

Per ulteriori informazioni su come l' SageMaker IA utilizza i ruoli per gestire l'accesso agli endpoint ed eseguire operazioni per tuo conto, consulta[Come utilizzare i ruoli di esecuzione dell' SageMaker IA](sagemaker-roles.md). I clienti potrebbero inoltre avere determinati requisiti di isolamento dei dati dettati dai propri requisiti di conformità che possono essere soddisfatti utilizzando le identità IAM.

# CloudWatch Metriche per le implementazioni di endpoint multimodello
<a name="multi-model-endpoint-cloudwatch-metrics"></a>

Amazon SageMaker AI fornisce parametri per gli endpoint in modo da poter monitorare la frequenza di accesso alla cache, il numero di modelli caricati e i tempi di attesa dei modelli per il caricamento, il download e il caricamento su un endpoint multimodello. Alcune metriche sono diverse per gli endpoint multimodello basati su CPU e GPU, pertanto le sezioni seguenti descrivono i CloudWatch parametri di Amazon che puoi utilizzare per ogni tipo di endpoint multimodello.

Per maggiori informazioni sui parametri, consulta **Parametri di caricamento del modello di endpoint a più modelli** e **Parametri dell'istanza del modello di endpoint a più modelli** in [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md). I parametri per modello non sono supportati. 

## CloudWatch metriche per endpoint multimodello supportati da CPU
<a name="multi-model-endpoint-cloudwatch-metrics-cpu"></a>

Puoi monitorare i seguenti parametri sugli endpoint a più modelli basati su CPU.

Il `AWS/SageMaker` namespace include il seguente modello di caricamento delle metriche dalle chiamate a. [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html)

I parametri sono disponibili a una frequenza di 1 minuto.

Per informazioni sulla durata di conservazione dei CloudWatch parametri, consulta [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*Amazon CloudWatch API* Reference.

**Parametri di caricamento del modello di endpoint multi-modello**


| Metrica | Description | 
| --- | --- | 
| ModelLoadingWaitTime  |  L'intervallo di tempo in cui una richiesta di invocazione ha atteso il download o il caricamento del modello di destinazione o entrambi per eseguire l'inferenza.  Unità: microsecondi  Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelUnloadingTime  |  L'intervallo di tempo necessario per scaricare il modello tramite la chiamata API `UnloadModel` del container.  Unità: microsecondi  Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelDownloadingTime |  L'intervallo di tempo impiegato per scaricare il modello da Amazon Simple Storage Service (Amazon S3). Unità: microsecondi Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelLoadingTime  |  L'intervallo di tempo necessario per caricare il modello tramite la chiamata API `LoadModel` del container. Unità: microsecondi  Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelCacheHit  |  Numero di richieste `InvokeEndpoint` inviate all'endpoint a più modelli per cui il modello è già stato caricato. La statistica media mostra il rapporto tra richieste per le quali il modello è già stato caricato. Unità: nessuna Statistiche valide: media, somma, numero di esempi  | 

**Dimensioni per i parametri di caricamento del modello endpoint a più modelli**


| Dimensione | Description | 
| --- | --- | 
| EndpointName, VariantName |  Filtra i parametri di invocazione dell'endpoint per il valore `ProductionVariant` dell'endpoint e della variante specificati.  | 

Gli spazi dei nomi `/aws/sagemaker/Endpoints` includono i seguenti parametri di istanza dalle chiamate a [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html).

I parametri sono disponibili a una frequenza di 1 minuto.

Per informazioni sulla durata di conservazione dei CloudWatch parametri, consulta [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*Amazon CloudWatch API* Reference.

**Parametri dell'istanza del modello endpoint a più modelli**


| Metrica | Description | 
| --- | --- | 
| LoadedModelCount  |  Numero di modelli caricati nei container dell'endpoint a più modelli. Questo parametro viene emesso per istanza. La statistica media con un periodo di 1 minuto indica il numero medio di modelli caricati per istanza. La statistica somma indica il numero totale di modelli caricati in tutte le istanze dell'endpoint. I modelli tracciati da questo parametro non sono necessariamente univoci perché un modello potrebbe essere caricato in più container dell'endpoint. Unità: nessuna Statistiche valide: media, somma, minimo, massimo, numero di esempi  | 
| CPUUtilization  |  La somma dell'utilizzo di ogni singolo core della CPU. L'utilizzo della CPU di ciascun core è compreso tra 0 e 100. Ad esempio, se ce ne sono quattro CPUs, l'`CPUUtilization`intervallo è compreso tra 0% e 400%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo delle CPU dei container principali e supplementari sull'istanza. Unità: percentuale  | 
| MemoryUtilization |  Percentuale di memoria utilizzata dai container su un'istanza. Questo intervallo di valori è compreso tra 0% e 100%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo di memoria dei container principali e supplementari sull'istanza. Unità: percentuale  | 
| DiskUtilization |  Percentuale di spazio su disco utilizzata dai container su un'istanza. Questo intervallo di valori è compreso tra 0% e 100%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo dello spazio su disco dei container principali e supplementari sull'istanza. Unità: percentuale  | 

## CloudWatch metriche per le implementazioni di endpoint multimodello con GPU
<a name="multi-model-endpoint-cloudwatch-metrics-gpu"></a>

Puoi monitorare i seguenti parametri sugli endpoint a più modelli basati su GPU.

Il `AWS/SageMaker` namespace include il seguente modello di caricamento delle metriche dalle chiamate a. [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html)

I parametri sono disponibili a una frequenza di 1 minuto.

Per informazioni sulla durata di conservazione dei CloudWatch parametri, consulta [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*Amazon CloudWatch API* Reference.

**Parametri di caricamento del modello di endpoint multi-modello**


| Metrica | Description | 
| --- | --- | 
| ModelLoadingWaitTime  |  L'intervallo di tempo in cui una richiesta di invocazione ha atteso il download o il caricamento del modello di destinazione o entrambi per eseguire l'inferenza.  Unità: microsecondi  Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelUnloadingTime  |  L'intervallo di tempo necessario per scaricare il modello tramite la chiamata API `UnloadModel` del container.  Unità: microsecondi  Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelDownloadingTime |  L'intervallo di tempo impiegato per scaricare il modello da Amazon Simple Storage Service (Amazon S3). Unità: microsecondi Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelLoadingTime  |  L'intervallo di tempo necessario per caricare il modello tramite la chiamata API `LoadModel` del container. Unità: microsecondi  Statistiche valide: media, somma, minimo, massimo, numero di esempi   | 
| ModelCacheHit  |  Numero di richieste `InvokeEndpoint` inviate all'endpoint a più modelli per cui il modello è già stato caricato. La statistica media mostra il rapporto tra richieste per le quali il modello è già stato caricato. Unità: nessuna Statistiche valide: media, somma, numero di esempi  | 

**Dimensioni per i parametri di caricamento del modello endpoint a più modelli**


| Dimensione | Description | 
| --- | --- | 
| EndpointName, VariantName |  Filtra i parametri di invocazione dell'endpoint per il valore `ProductionVariant` dell'endpoint e della variante specificati.  | 

Gli spazi dei nomi `/aws/sagemaker/Endpoints` includono i seguenti parametri di istanza dalle chiamate a [ InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html).

I parametri sono disponibili a una frequenza di 1 minuto.

Per informazioni sulla durata di conservazione dei CloudWatch parametri, consulta [GetMetricStatistics](https://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_GetMetricStatistics.html)*Amazon CloudWatch API* Reference.

**Parametri dell'istanza del modello endpoint a più modelli**


| Metrica | Description | 
| --- | --- | 
| LoadedModelCount  |  Numero di modelli caricati nei container dell'endpoint a più modelli. Questo parametro viene emesso per istanza. La statistica media con un periodo di 1 minuto indica il numero medio di modelli caricati per istanza. La statistica somma indica il numero totale di modelli caricati in tutte le istanze dell'endpoint. I modelli tracciati da questo parametro non sono necessariamente univoci perché un modello potrebbe essere caricato in più container dell'endpoint. Unità: nessuna Statistiche valide: media, somma, minimo, massimo, numero di esempi  | 
| CPUUtilization  |  La somma dell'utilizzo di ogni singolo core della CPU. L'utilizzo della CPU di ciascun core è compreso tra 0 e 100. Ad esempio, se ce ne sono quattro CPUs, l'`CPUUtilization`intervallo è compreso tra 0% e 400%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo delle CPU dei container principali e supplementari sull'istanza. Unità: percentuale  | 
| MemoryUtilization |  Percentuale di memoria utilizzata dai container su un'istanza. Questo intervallo di valori è compreso tra 0% e 100%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo di memoria dei container principali e supplementari sull'istanza. Unità: percentuale  | 
| GPUUtilization |  Percentuale di unità GPU utilizzata dai container su un'istanza. Il valore può variare tra 0 e 100 e viene moltiplicato per il numero di. GPUs Ad esempio, se ce ne sono quattro GPUs, l'`GPUUtilization`intervallo è compreso tra 0% e 400%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo delle GPU dei container principali e supplementari sull'istanza. Unità: percentuale  | 
| GPUMemoryUtilization |  Percentuale di memoria GPU utilizzata dai container su un'istanza. L'intervallo di valori è 0‐100 e viene moltiplicato per il numero di. GPUs Ad esempio, se ce ne sono quattro GPUs, l'`GPUMemoryUtilization`intervallo è 0%-400%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo di memoria GPU dei container principali e supplementari sull'istanza. Unità: percentuale  | 
| DiskUtilization |  Percentuale di spazio su disco utilizzata dai container su un'istanza. Questo intervallo di valori è compreso tra 0% e 100%. Per le varianti dell'endpoint, il valore è la somma dell'utilizzo dello spazio su disco dei container principali e supplementari sull'istanza. Unità: percentuale  | 

# Imposta il comportamento di memorizzazione nella cache del modello di SageMaker endpoint multimodello AI
<a name="multi-model-caching"></a>

Per impostazione predefinita, gli endpoint a più modelli memorizzano nella memoria (CPU o GPU, a seconda che si disponga di istanze supportate da CPU o GPU) e su disco per fornire inferenze a bassa latenza. I modelli memorizzati nella cache vengono scaricati ed and/or eliminati dal disco solo quando un contenitore esaurisce la memoria o lo spazio su disco per ospitare un nuovo modello di destinazione.

È possibile modificare il comportamento di memorizzazione nella cache di un endpoint a più modelli e abilitare o disabilitare esplicitamente la memorizzazione nella cache del modello impostando il parametro `ModelCacheSetting` quando si chiama [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model).

Consigliamo di impostare il valore del parametro `ModelCacheSetting` su `Disabled` per i casi d'uso che non traggono vantaggio dalla memorizzazione nella cache dei modelli. Ad esempio, quando è necessario fornire un numero elevato di modelli dall'endpoint, ma ogni modello viene richiamato una sola volta (o molto raramente). In questi casi d'uso, l'impostazione del valore del parametro `ModelCacheSetting` a `Disabled` consente transazioni al secondo (TPS) più elevate per le richieste `invoke_endpoint` rispetto alla modalità di memorizzazione nella cache predefinita. Il TPS più elevato in questi casi d'uso è dovuto al fatto che l' SageMaker IA esegue le seguenti operazioni dopo la richiesta: `invoke_endpoint`
+ Scarica in modo asincrono il modello dalla memoria e lo elimina dal disco immediatamente dopo la sua chiamata.
+ Consente una maggiore concomitanza per il download e il caricamento dei modelli nel container di inferenza. Per gli endpoint basati su CPU e GPU, la concorrenza è un fattore del numero di v dell'istanza CPUs del contenitore.

Per linee guida sulla scelta di un tipo di istanza SageMaker AI ML per un endpoint multimodello, consulta. [Raccomandazioni sulle istanze per le distribuzioni di endpoint a più modelli](multi-model-endpoint-instance.md)

# Imposta le Policy di dimensionamento automatico per le implementazioni di endpoint a più modelli
<a name="multi-model-endpoints-autoscaling"></a>

SageMaker Gli endpoint AI multimodello supportano completamente la scalabilità automatica, che gestisce le repliche dei modelli per garantire la scalabilità dei modelli in base ai modelli di traffico. Ti consigliamo di configurare il tuo endpoint a più modelli e le dimensioni delle istanze in base a [Raccomandazioni sulle istanze per le distribuzioni di endpoint a più modelli](multi-model-endpoint-instance.md) e di impostare il dimensionamento automatico dell'endpoint in base all'istanza. Le frequenze di invocazione utilizzate per attivare un evento di dimensionamento automatico si basano sul set aggregato di previsioni per l'intero set di modelli serviti dall'endpoint. Per ulteriori dettagli sulla configurazione della scalabilità automatica degli endpoint, consulta [Automatically Scale Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html) Models.

Puoi configurare policy di auto scaling con parametri predefiniti e personalizzati su endpoint a più modelli supportati da CPU e GPU.

**Nota**  
SageMaker Le metriche degli endpoint multimodello di intelligenza artificiale sono disponibili con una granularità di un minuto.

## Definizione di una policy di dimensionamento
<a name="multi-model-endpoints-autoscaling-define"></a>

Per specificare i parametri e i valori di target per una policy di dimensionamento, puoi configurare una policy di dimensionamento di monitoraggio dei target. Puoi utilizzare un parametro personalizzato o predefinito.

La configurazione di policy di dimensionamento è rappresentata da un blocco JSON. Salvi la tua configurazione di policy di dimensionamento come un blocco JSON in un file di testo. Si utilizza quel file di testo quando si richiama l'API AWS CLI Application Auto Scaling. Per ulteriori informazioni sulla sintassi della configurazione della policy, consulta `[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)` in *Application Auto Scaling API Reference*.

Le seguenti opzioni sono disponibili per definire una configurazione di una policy di dimensionamento di monitoraggio dei target.

### Utilizzo di un parametro predefinito
<a name="multi-model-endpoints-autoscaling-predefined"></a>

Per definire rapidamente una policy di dimensionamento con monitoraggio delle destinazioni per una variante, utilizza il parametro predefinito `SageMakerVariantInvocationsPerInstance`. `SageMakerVariantInvocationsPerInstance` è il numero medio di volte al minuto in cui ogni istanza per una variante viene richiamata. Consigliamo fortemente di utilizzare questo parametro.

Per utilizzare un parametro predefinito in una policy di dimensionamento, crea una configurazione di monitoraggio dei target per la tua policy. Nella configurazione di monitoraggio dei target, includi un `PredefinedMetricSpecification` per il parametro predefinito e un `TargetValue` per il valore target del parametro.

L'esempio seguente è una tipica configurazione di policy per il dimensionamento di monitoraggio dei target per una variante. In questa configurazione, utilizziamo il parametro predefinito `SageMakerVariantInvocationsPerInstance` per regolare il numero di istanze di variante in modo che ogni istanza abbia un parametro `InvocationsPerInstance` di `70`.

```
{"TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "InvocationsPerInstance"
    }
}
```

**Nota**  
È consigliabile utilizzarlo `InvocationsPerInstance` durante l'utilizzo di endpoint a più modelli. Il `TargetValue` di questo parametro dipende dai requisiti di latenza dell'applicazione. Ti consigliamo inoltre di testare il carico degli endpoint per impostare valori dei parametri di dimensionamento. Per ulteriori informazioni sui test di carico e sulla configurazione della scalabilità automatica per gli endpoint, consulta il blog [Configurazione degli endpoint di inferenza con scalabilità automatica in Amazon](https://aws.amazon.com/blogs/machine-learning/configuring-autoscaling-inference-endpoints-in-amazon-sagemaker/) AI. SageMaker 

### Utilizzo di un parametro personalizzato
<a name="multi-model-endpoints-autoscaling-custom"></a>

Se hai bisogno di definire una policy di dimensionamento di monitoraggio dei target che soddisfi i tuoi requisiti personalizzati, definisci un parametro personalizzato. Puoi definire un parametro personalizzato in base a qualsiasi parametro di variante di produzione metrica che si modifica in proporzione al dimensionamento.

Non SageMaker tutte le metriche di intelligenza artificiale funzionano per il tracciamento degli obiettivi. Il parametro deve essere un parametro di utilizzo valido e deve descrivere quanto impegnata è un'istanza. Il valore del parametro deve aumentare o diminuire in proporzione inversa al numero di istanze di variante. Ciò significa che il valore del parametro deve diminuire quando il numero di istanze aumenta.

**Importante**  
Prima di distribuire la scalabilità automatica nella produzione, devi testare la scalabilità automatica con il tuo parametro personalizzato.

#### Esempio di parametro personalizzato per un endpoint a più modelli supportato da CPU
<a name="multi-model-endpoints-autoscaling-custom-cpu"></a>

L'esempio seguente è una configurazione di monitoraggio dei target per una policy di dimensionamento. In questa configurazione, per un modello chiamato `my-model`, un parametro personalizzato di `CPUUtilization` regola il conteggio delle istanze sull'endpoint in base a un utilizzo medio della CPU del 50% in tutte le istanze.

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "CPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "ModelName","Value": "my-model"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

#### Esempio di parametro personalizzato per un endpoint a più modelli supportato da GPU
<a name="multi-model-endpoints-autoscaling-custom-gpu"></a>

L'esempio seguente è una configurazione di monitoraggio dei target per una policy di dimensionamento. In questa configurazione, per un modello chiamato `my-model`, un parametro personalizzato di `GPUUtilization` regola il conteggio delle istanze sull'endpoint in base a un utilizzo medio della GPU del 50% in tutte le istanze.

```
{"TargetValue": 50,
    "CustomizedMetricSpecification":
    {"MetricName": "GPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "ModelName","Value": "my-model"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```

## Aggiunta di un periodo di attesa
<a name="multi-model-endpoints-autoscaling-cooldown"></a>

Per aggiungere un periodo di attesa per il dimensionamento dell'endpoint, specifica un valore, in secondi, per `ScaleOutCooldown`. In maniera simile, per aggiungere un periodo di attesa per la riduzione del modello, aggiungi un valore, in secondi, per `ScaleInCooldown`. Per ulteriori informazioni su `ScaleInCooldown` e `ScaleOutCooldown`, consulta `[TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)` in *Application Auto Scaling API Reference*.

Di seguito è riportato un esempio di una configurazione di monitoraggio dei target per una policy di dimensionamento. In questa configurazione, il parametro predefinito `SageMakerVariantInvocationsPerInstance` viene utilizzato per regolare il dimensionamento in base a una media di `70` in tutte le istanze di tale variante. La configurazione fornisce un tempo di raffreddamento di riduzione di 10 minuti e un tempo di raffreddamento di aumento di 5 minuti.

```
{"TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {"PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```

# Endpoint multi-container
<a name="multi-container-endpoints"></a>

SageMaker Gli endpoint multi-container AI consentono ai clienti di distribuire più container, che utilizzano modelli o framework diversi, su un singolo endpoint AI. SageMaker I container possono essere eseguiti in sequenza come pipeline di inferenza oppure è possibile accedere a ciascun container singolarmente utilizzando la chiamata diretta per migliorare l'utilizzo degli endpoint e ottimizzare i costi.

Per informazioni sull'invocazione dei container in un endpoint multi-container in sequenza, consulta [Pipeline di inferenza in Amazon AI SageMaker](inference-pipelines.md).

Per informazioni sull'invocazione di un container specifico in un endpoint multi-container, consulta [Richiamare un endpoint multi-container con invocazione diretta](multi-container-direct.md)

**Topics**
+ [Per creare un endpoint multi-container (Boto 3)](multi-container-create.md)
+ [Aggiornare un endpoint multi-container](multi-container-update.md)
+ [Richiamare un endpoint multi-container con invocazione diretta](multi-container-direct.md)
+ [Sicurezza con endpoint multi-container con invocazione diretta](multi-container-security.md)
+ [Parametri per endpoint multi-container con invocazione diretta](multi-container-metrics.md)
+ [Endpoint multi-container con scalabilità automatica](multi-container-auto-scaling.md)
+ [Risolvere i problemi relativi agli endpoint multi-container](multi-container-troubleshooting.md)

# Per creare un endpoint multi-container (Boto 3)
<a name="multi-container-create"></a>

Crea un endpoint multi-contenitore [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)chiamando e [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) APIs come faresti per creare qualsiasi altro endpoint. [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) Puoi eseguire questi container in sequenza come pipeline di inferenza o eseguire ogni singolo container utilizzando la chiamata diretta. Gli endpoint multi-container presentano i seguenti requisiti per le chiamate `create_model`:
+ Utilizza il parametro `Containers` anziché `PrimaryContainer`e includi più di un container nel parametro `Containers`.
+ Il parametro `ContainerHostname` è obbligatorio per ogni container in un endpoint multi-container con invocazione diretta.
+ Imposta il parametro `Mode` del campo `InferenceExecutionConfig` per l'invocazione diretta `Direct` di ogni container o `Serial` per utilizzare i come pipeline di inferenza. La modalità predefinita è `Serial`. 

**Nota**  
Attualmente esiste un limite massimo di 15 container supportati su un endpoint multi-container.

L'esempio seguente crea un modello multi-container per l'invocazione diretta.

1. Crea elementi container e `InferenceExecutionConfig` con invocazione diretta.

   ```
   container1 = {
                    'Image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage1:mytag',
                    'ContainerHostname': 'firstContainer'
                }
   
   container2 = {
                    'Image': '123456789012.dkr.ecr.us-east-1.amazonaws.com/myimage2:mytag',
                    'ContainerHostname': 'secondContainer'
                }
   inferenceExecutionConfig = {'Mode': 'Direct'}
   ```

1. Crea il modello con gli elementi del container e imposta il campo `InferenceExecutionConfig`.

   ```
   import boto3
   sm_client = boto3.Session().client('sagemaker')
   
   response = sm_client.create_model(
                  ModelName = 'my-direct-mode-model-name',
                  InferenceExecutionConfig = inferenceExecutionConfig,
                  ExecutionRoleArn = role,
                  Containers = [container1, container2]
              )
   ```

Per creare un endpoint, devi quindi chiamare [create\$1endpoint\$1config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) e [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) come faresti per creare qualsiasi altro endpoint.

# Aggiornare un endpoint multi-container
<a name="multi-container-update"></a>

Per aggiornare un endpoint multi-container Amazon SageMaker AI, completa i seguenti passaggi.

1.  Chiama [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model) per creare un nuovo modello con un nuovo valore per il parametro `Mode` nel campo `InferenceExecutionConfig`.

1.  Chiama [create\$1endpoint\$1config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config) per creare una nuova configurazione di endpoint con un nome diverso utilizzando il nuovo modello creato nella fase precedente.

1.  Chiama [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.update_endpoint) per aggiornare l'endpoint con la nuova configurazione dell'endpoint creata nella fase precedente. 

# Richiamare un endpoint multi-container con invocazione diretta
<a name="multi-container-direct"></a>

SageMaker Gli endpoint multi-container AI consentono ai clienti di distribuire più container per distribuire modelli diversi su un endpoint AI. SageMaker È possibile ospitare fino a 15 container di inferenza diversi su un singolo endpoint. Utilizzando l'invocazione diretta, è possibile inviare una richiesta a un container di inferenza specifico ospitato su un endpoint multi-container.

 Per richiamare un endpoint multi-container con chiamata diretta, chiama [invoke\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint) come richiameresti qualsiasi altro endpoint e specifica quale container desideri richiamare utilizzando il parametro `TargetContainerHostname`.

 

 L'esempio seguente richiama direttamente `secondContainer` di un endpoint multi-container per ottenere una previsione.

```
import boto3
runtime_sm_client = boto3.Session().client('sagemaker-runtime')

response = runtime_sm_client.invoke_endpoint(
   EndpointName ='my-endpoint',
   ContentType = 'text/csv',
   TargetContainerHostname='secondContainer', 
   Body = body)
```

 Per ogni richiesta di chiamata diretta a un endpoint multi-container, solo il container con `TargetContainerHostname` elabora la richiesta di chiamata. Se esegui una qualsiasi delle seguenti operazioni, otterrai degli errori di convalida:
+ Specificare un `TargetContainerHostname` che non esiste nell'endpoint
+ Non specificare un valore per `TargetContainerHostname` in una richiesta a un endpoint configurato per la chiamata diretta
+ Specificare un valore per `TargetContainerHostname` in una richiesta a un endpoint non configurato per la chiamata diretta.

# Sicurezza con endpoint multi-container con invocazione diretta
<a name="multi-container-security"></a>

 Per gli endpoint multi-container con invocazione diretta, sono disponibili più container ospitati in un'unica istanza condividendo memoria e un volume di archiviazione. È tua responsabilità utilizzare contenitori sicuri, mantenere la corretta mappatura delle richieste ai contenitori di destinazione e fornire agli utenti l'accesso corretto ai contenitori di destinazione. SageMaker L'intelligenza artificiale utilizza i ruoli IAM per fornire policy basate sull'identità IAM da utilizzare per specificare se l'accesso a una risorsa è consentito o negato a quel ruolo e in quali condizioni. Per ulteriori informazioni sui ruoli IAM, consulta [Ruoli IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) nella *AWS Identity and Access Management Guida per l'utente di IAM*. Per informazioni sulle policy basate sull’identità, consulta [Policy basate sulle identità e policy basate su risorse](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html).

Per impostazione predefinita, un principale IAM con autorizzazioni `InvokeEndpoint` su un endpoint multi-container con invocazione diretta può richiamare qualsiasi container all'interno dell'endpoint con il nome dell'endpoint specificato al momento della chiamata a `invoke_endpoint`. Se devi limitare l'accesso `invoke_endpoint` a un set limitato di container all'interno di un endpoint multi-container, usa la chiave di condizione IAM `sagemaker:TargetContainerHostname`. Le seguenti policy mostrano come limitare le chiamate a container specifici all'interno di un endpoint.

Il criterio seguente consente le richieste `invoke_endpoint` solo quando il valore del campo `TargetContainerHostname` corrisponde a una delle espressioni regolari specificate.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "customIps*",
                        "common*"
                    ]
                }
            }
        }
    ]
}
```

------

La policy seguente nega le richieste `invoke_endpoint` quando il valore del campo `TargetContainerHostname` corrisponde a una delle espressioni regolari specificate nella dichiarazione `Deny`.

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Allow",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "model_name*"
                    ]
                }
            }
        },
        {
            "Action": [
                "sagemaker:InvokeEndpoint"
            ],
            "Effect": "Deny",
            "Resource": "arn:aws:sagemaker:us-east-1:111122223333:endpoint/endpoint_name",
            "Condition": {
                "StringLike": {
                    "sagemaker:TargetModel": [
                        "special-model_name*"
                    ]
                }
            }
        }
    ]
}
```

------

 *Per informazioni sulle chiavi di condizione SageMaker AI, consulta [Condition Keys for SageMaker AI nella Guida per](https://docs.aws.amazon.com/IAM/latest/UserGuide/list_amazonsagemaker.html#amazonsagemaker-policy-keys) l'AWS Identity and Access Management utente.*

# Parametri per endpoint multi-container con invocazione diretta
<a name="multi-container-metrics"></a>

Oltre ai parametri degli endpoint elencati in[Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md), l' SageMaker IA fornisce anche parametri per contenitore.

Le metriche per contenitore per endpoint multi-contenitore con invocazione diretta si trovano e sono classificate in due namespace: e. CloudWatch `AWS/SageMaker` `aws/sagemaker/Endpoints` Lo spazio dei nomi `AWS/SageMaker` include parametri relativi alle chiamate e lo spazio dei nomi `aws/sagemaker/Endpoints` include parametri di utilizzo della memoria e della CPU.

La tabella seguente elenca i parametri di container per endpoint multi-container con invocazione diretta. Tutti i parametri utilizzano la dimensione [`EndpointName, VariantName, ContainerName`], che filtra i parametri su un endpoint specifico, per una variante specifica e corrispondente a un container specifico. Questi parametri condividono gli stessi nomi dei parametri utilizzati per le pipeline di inferenza, ma a livello di container [`EndpointName, VariantName, ContainerName`].

 


|  |  |  |  | 
| --- |--- |--- |--- |
|  Nome parametro  |  Description  |  Dimensione  |  NameSpace  | 
|  Invocations  |  Il numero di richieste InvokeEndpoint inviate a un container all'interno di un endpoint. Per ottenere il numero totale di richieste inviate a quel container, utilizza la statistica Sum. Unità: nessuna statistica valida: Sum, Sample Count |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation4XX Errors  |  Numero di richieste InvokeEndpoint per cui il modello ha restituito un codice di risposta HTTP 4xx per un container specifico. 4xxPer ogni SageMaker risposta1, AI invia un. Unità: nessuna statistica valida: Average, Sum  |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  Invocation5XX Errors  |  Numero di richieste InvokeEndpoint per cui il modello ha restituito un codice di risposta HTTP 5xx per un container specifico. Per ogni 5xx risposta, SageMaker AI invia un1. Unità: nessuna statistica valida: Average, Sum  |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  ContainerLatency  |  Il tempo impiegato dal contenitore di destinazione per rispondere come visualizzato dall' SageMaker IA. ContainerLatencyinclude il tempo impiegato per inviare la richiesta, recuperare la risposta dal contenitore del modello e completare l'inferenza nel contenitore. Unità: microsecondi statistiche valide: Average, Sum, Min, Max, Sample Count |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  OverheadLatency  |  Il tempo aggiunto al tempo impiegato per rispondere a una richiesta del cliente da parte di SageMaker AI for overhead. OverheadLatencyviene misurato dal momento in cui l' SageMaker IA riceve la richiesta fino a quando non restituisce una risposta al client, meno il. ModelLatency La latenza di gestione può variare in base alle dimensioni di payload di richiesta e risposta, frequenza delle richieste e autenticazione o autorizzazione della richiesta, tra gli altri fattori. Unità: microsecondi statistiche valide: Average, Sum, Min, Max, `Conteggio di esempio `  |  EndpointName, VariantName, ContainerName  | AWS/SageMaker | 
|  CPUUtilization  | Percentuale di unità CPU utilizzate da ciascun container in esecuzione su un'istanza. Il valore varia dallo 0% al 100% e viene moltiplicato per il numero di. CPUs Ad esempio, se ce ne sono quattro CPUs, CPUUtilization può variare dallo 0% al 400%. Per gli endpoint con chiamata diretta, il numero di CPUUtilization metriche è uguale al numero di contenitori in quell'endpoint. Unità: percentuale  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 
|  MemoryUtilizaton  |  Percentuale di memoria utilizzata da ciascun container in esecuzione su un'istanza. Questo valore è compreso tra 0% e 100%. Analogamente agli endpoint con invocazione diretta CPUUtilization, il numero di metriche è uguale al numero di MemoryUtilization contenitori in quell'endpoint. Unità: percentuale  |  EndpointName, VariantName, ContainerName  | aws/sagemaker/Endpoints | 

Tutti i parametri della tabella precedente sono specifici per gli endpoint multi-container con invocazione diretta. Oltre a questi parametro speciali per container, esistono anche parametri a livello di variante con dimensione `[EndpointName, VariantName]` per tutti i parametri previsti nella tabella `ContainerLatency`.

# Endpoint multi-container con scalabilità automatica
<a name="multi-container-auto-scaling"></a>

Se desideri configurare la scalabilità automatica per un endpoint multi-container utilizzando il parametro `InvocationsPerInstance`, ti consigliamo che il modello in ogni container mostri un utilizzo e una latenza della CPU simili su ogni richiesta di inferenza. Questa soluzione è consigliata perché se il traffico verso l'endpoint multi-container passa da un modello a basso utilizzo della CPU a un modello ad alto utilizzo della CPU, ma il volume complessivo delle chiamate rimane lo stesso, l'endpoint non si scalerà orizzontalmente e potrebbero non esserci abbastanza istanze per gestire tutte le richieste verso il modello ad alto utilizzo della CPU. Per informazioni sugli endpoint di scalabilità automatica, consulta [Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon](endpoint-auto-scaling.md).

# Risolvere i problemi relativi agli endpoint multi-container
<a name="multi-container-troubleshooting"></a>

Le sezioni seguenti possono aiutarti a risolvere gli errori con endpoint multi-container.

## Errori di controllo dell'integrità
<a name="multi-container-ping-errors"></a>

 Con più container, la memoria degli endpoint e la CPU sono sottoposte a una maggiore pressione durante la creazione degli endpoint. In particolare, i parametri `MemoryUtilization` e `CPUUtilization` sono più elevati rispetto agli endpoint a container singolo, poiché la pressione di utilizzo è proporzionale al numero di container. Per questo motivo, ti consigliamo di scegliere tipi di istanza con memoria e CPU sufficienti per assicurarti che sull'istanza ci sia abbastanza memoria per caricare tutti i modelli (la stessa guida si applica alla distribuzione di una pipeline di inferenza). In caso contrario, la creazione dell'endpoint potrebbe fallire con un errore del tipo `XXX did not pass the ping health check`.

## Etichetta accept-bind-to-port =true Docker mancante
<a name="multi-container-missing-accept"></a>

I container in endpoint multi-container restano in ascolto sulla porta specificata nella variabile di ambiente `SAGEMAKER_BIND_TO_PORT` anziché la porta 8080. Quando un contenitore viene eseguito in un endpoint con più container, l' SageMaker IA fornisce automaticamente questa variabile di ambiente al contenitore. Se questa variabile di ambiente non è presente, i container utilizzano la porta 8080 per impostazione predefinita. Per indicare che il container soddisfa questo requisito, utilizza il comando seguente per aggiungere un'etichetta al dockerfile: 

```
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
```

 Altrimenti, verrà visualizzato un messaggio di errore come `Your Ecr Image XXX does not contain required com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true Docker label(s).`

 Se il container deve essere in ascolto su una seconda porta, scegli una porta nell'intervallo specificato dalla variabile di ambiente `SAGEMAKER_SAFE_PORT_RANGE`. Specificate il valore come intervallo inclusivo nel formato *XXXX* -*YYYY*, dove XXXX e YYYY sono numeri interi a più cifre. SageMaker L'intelligenza artificiale fornisce questo valore automaticamente quando esegui il contenitore in un endpoint multi-contenitore. 

# Pipeline di inferenza in Amazon AI SageMaker
<a name="inference-pipelines"></a>

Una *pipeline di inferenza* è un modello di SageMaker intelligenza artificiale di Amazon composto da una sequenza lineare da due a quindici contenitori che elaborano le richieste di inferenze sui dati. Utilizzi una pipeline di inferenza per definire e distribuire qualsiasi combinazione di algoritmi integrati di SageMaker intelligenza artificiale preaddestrati e algoritmi personalizzati confezionati in contenitori Docker. Puoi utilizzare una pipeline di inferenza per combinare attività data science di pre-elaborazione, previsioni e post-elaborazione. Le pipeline di inferenza sono completamente gestite.

Puoi aggiungere contenitori SageMaker AI Spark ML Serving e scikit-learn che riutilizzano i trasformatori di dati sviluppati per i modelli di addestramento. L'intera pipeline di inferenza assemblata può essere considerata come un modello di SageMaker intelligenza artificiale da utilizzare per effettuare previsioni in tempo reale o per elaborare trasformazioni in batch direttamente senza alcuna preelaborazione esterna. 

All'interno di un modello di pipeline di inferenza, l' SageMaker intelligenza artificiale gestisce le chiamate come una sequenza di richieste HTTP. Il primo contenitore della pipeline gestisce la richiesta iniziale, quindi la risposta intermedia viene inviata come richiesta al secondo contenitore e così via, per ogni contenitore della pipeline. SageMaker L'IA restituisce la risposta finale al client. 

Quando distribuisci il modello di pipeline, l' SageMaker intelligenza artificiale installa ed esegue tutti i contenitori su ogni istanza Amazon Elastic Compute Cloud (Amazon EC2) nell'endpoint o nel processo di trasformazione. Elaborazione delle caratteristiche e inferenze vengono eseguite con bassa latenza perché i container si trovano nelle stesse istanze EC2. Definisci i container per un modello di pipeline utilizzando l'operazione [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) o dalla console. Invece di impostare un `PrimaryContainer`, utilizza il parametro `Containers` per impostare i container che compongono la pipeline. Specifica anche l’ordine di esecuzione dei container. 

Un modello di pipeline è non modificabile, ma puoi aggiornare una pipeline di inferenza distribuendone una nuova utilizzando l'operazione [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Questa modularità supporta una maggiore flessibilità durante la sperimentazione. 

Per informazioni su come creare una pipeline di inferenza con il Model Registry, consulta. SageMaker [Implementazione della registrazione del modello con il registro dei modelli](model-registry.md)

Questa caratteristica non comporta costi supplementari. Paghi solo per le istanze in esecuzione su un endpoint.

**Topics**
+ [Notebook di esempio per pipeline di inferenza](#inference-pipeline-sample-notebooks)
+ [Elaborazione delle caratteristiche con Spark ML e Scikit-learn](inference-pipeline-mleap-scikit-learn-containers.md)
+ [Creazione di un modello di pipeline](inference-pipeline-create-console.md)
+ [Esecuzione di previsioni in tempo reale con una pipeline di inferenza](inference-pipeline-real-time.md)
+ [Trasformazioni in batch con pipeline di inferenza](inference-pipeline-batch.md)
+ [Log e parametri della pipeline di inferenza](inference-pipeline-logs-metrics.md)
+ [Risoluzione dei problemi delle pipeline di inferenza](inference-pipeline-troubleshoot.md)

## Notebook di esempio per pipeline di inferenza
<a name="inference-pipeline-sample-notebooks"></a>

Per un esempio che mostra come creare e implementare pipeline di inferenza, consulta il notebook di esempio [Inference Pipeline with SciKit-Learn and Linear Learner](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-python-sdk/scikit_learn_inference_pipeline). Per istruzioni sulla creazione e l'accesso alle istanze di notebook Jupyter da utilizzare per eseguire l'esempio in AI, consulta. SageMaker [Istanze SageMaker per notebook Amazon](nbi.md) 

**Per visualizzare un elenco di tutti gli esempi SageMaker AI, dopo aver creato e aperto un'istanza di notebook, scegli la SageMaker scheda Esempi AI.** Esistono tre notebook sulle pipeline di inferenza. I primi due notebook sulle pipeline di inferenza appena descritti si trovano nella cartella `advanced_functionality`, mentre il terzo si trova nella cartella `sagemaker-python-sdk`. Per aprire un notebook, seleziona la relativa scheda **Utilizza**, quindi scegli **Crea copia**.

# Elaborazione delle caratteristiche con Spark ML e Scikit-learn
<a name="inference-pipeline-mleap-scikit-learn-containers"></a>

Prima di addestrare un modello con algoritmi integrati di Amazon SageMaker AI o algoritmi personalizzati, puoi utilizzare i preprocessori Spark e scikit-learn per trasformare i tuoi dati e progettare le funzionalità. 

## Elaborazione di caratteristiche con Spark ML
<a name="feature-processing-spark"></a>

Puoi eseguire lavori Spark ML con [AWS Glue](https://docs.aws.amazon.com/glue/latest/dg/what-is-glue.html), un servizio ETL (estrazione, trasformazione, caricamento) senza server, dal tuo SageMaker notebook AI. Puoi inoltre eseguire la connessione a cluster EMR esistenti per eseguire processi Spark ML con [Amazon EMR](https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-what-is-emr.html). Per fare ciò, hai bisogno di un ruolo AWS Identity and Access Management (IAM) che conceda l'autorizzazione a effettuare chiamate dal tuo SageMaker notebook AI a. AWS Glue

**Nota**  
Per vedere quali versioni di Python e Spark sono AWS Glue supportate, consulta le note di rilascio di [AWS Glue](/glue/latest/dg/release-notes.html).

Dopo aver ingegnerizzato le funzionalità, puoi impacchettare e serializzare i lavori Spark ML MLeap in MLeap contenitori che puoi aggiungere a una pipeline di inferenza. Non è necessario utilizzare cluster Spark gestiti esternamente. Grazie a questo approccio, puoi ridimensionare senza problemi da un campione di righe a terabyte di dati. Gli stessi trasformatori funzionano per addestramento e inferenza, perciò non occorre duplicare la logica di pre-elaborazione e di progettazione caratteristiche né sviluppare una soluzione una tantum per rendere i modelli persistenti. Con pipeline di inferenza, non è necessario mantenere l'infrastruttura esterna e puoi effettuare previsioni direttamente da dati di input.

Quando esegui un job Spark ML su AWS Glue, una pipeline Spark ML viene serializzata in formato. [MLeap](https://github.com/combust/mleap) Quindi, puoi utilizzare il job con lo [SparkML Model Serving Container](https://github.com/aws/sagemaker-sparkml-serving-container) in una pipeline di inferenza SageMaker AI. *MLeap*è un formato di serializzazione e un motore di esecuzione per pipeline di apprendimento automatico. Supporta Spark, Scikit-learn e TensorFlow per addestrare le pipeline ed esportarle in una pipeline serializzata chiamata Bundle. MLeap Puoi deserializzare nuovamente i pacchetti in Spark per l'assegnazione del punteggio in modalità batch o in fase di esecuzione per alimentare i servizi API in tempo reale. MLeap 

Per un esempio che mostra come implementare un processo con Spark ML, consulta [Train an ML model using Apache Spark in Amazon EMR e distribuiscilo in](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-python-sdk/sparkml_serving_emr_mleap_abalone) un notebook di esempio AI. SageMaker 

## Elaborazione di caratteristiche con Scikit Learn
<a name="feature-processing-with-scikit"></a>

Puoi eseguire e impacchettare lavori scikit-learn in contenitori direttamente in Amazon AI. SageMaker Per un esempio di codice Python per la compilazione di un modello di caratterizzazione scikit-learn che esegue l’addestramento in base al [data set sui fiori della famiglia degli iris di Fisher](http://archive.ics.uci.edu/ml/datasets/Iris) e prevede la specie di iris in base alle misurazioni morfologiche, consulta [IRIS Training and Prediction with Sagemaker Scikit-learn](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/sagemaker-python-sdk/scikit_learn_iris). 

# Creazione di un modello di pipeline
<a name="inference-pipeline-create-console"></a>

Per creare un modello di pipeline che può essere distribuito su un endpoint o utilizzato per un processo di trasformazione in batch, utilizza la console Amazon SageMaker AI o l'operazione. `CreateModel` 

**Per creare una pipeline di inferenza (console)**

1. Apri la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Scegli **Modelli**, quindi seleziona **Crea modelli** dal gruppo **Inferenza**. 

1. Nella pagina **Crea modello**, Nella pagina indica un nome per il modello, scegli un ruolo IAM e, se desideri utilizzare un VPC privato, specificane i valori.   
![\[La pagina per la creazione di un modello per una pipeline di inferenza.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/create-pipeline-model.png)

1. Per aggiungere informazioni sui container nella pipeline di inferenza, scegli **Aggiungi container** e **Successivo**.

1. Completa i campi per ogni container nell'ordine di esecuzione scelto, fino a un massimo di quindici. Completa **Opzioni di input container**, **Posizione dell'immagine del codice di inferenza** e, facoltativamente, i campi **Posizione degli artefatti del modello**, **Nome host container** ed **Variabili di ambiente**.  
![\[Creazione di un modello di pipeline con container.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/create-pipeline-model-containers.png)

   La **MyInferencePipelineModel**pagina riassume le impostazioni per i contenitori che forniscono l'input per il modello. Se hai fornito le variabili di ambiente in una definizione di contenitore corrispondente, SageMaker AI le mostra nel campo **Variabili d'ambiente**.  
![\[Il riepilogo delle impostazioni di container per il modello di pipeline.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/pipeline-MyInferencePipelinesModel-recap.png)

# Esecuzione di previsioni in tempo reale con una pipeline di inferenza
<a name="inference-pipeline-real-time"></a>

Puoi utilizzare modelli addestrati in una pipeline di inferenza per effettuare previsioni in tempo reale direttamente senza eseguire pre-elaborazione esterna. Quando configuri la pipeline, puoi scegliere di utilizzare i trasformatori di funzionalità integrati già disponibili in Amazon AI. SageMaker In alternativa, puoi implementare la tua logica di trasformazione utilizzando poche righe di codice scikit-learn o Spark. 

[MLeap](https://combust.github.io/mleap-docs/), un formato di serializzazione e un motore di esecuzione per pipeline di apprendimento automatico, supporta Spark, scikit-learn e TensorFlow per addestrare le pipeline ed esportarle in una pipeline serializzata chiamata Bundle. MLeap Puoi deserializzare nuovamente i pacchetti in Spark per l'assegnazione del punteggio in modalità batch o in fase di esecuzione per alimentare i servizi API in tempo reale. MLeap 

I container in una pipeline restano in ascolto sulla porta specificata nella variabile di ambiente `SAGEMAKER_BIND_TO_PORT` (anziché 8080). Quando viene eseguita in una pipeline di inferenza, l'intelligenza artificiale fornisce automaticamente questa variabile di ambiente ai contenitori SageMaker . Se questa variabile di ambiente non è presente, i container utilizzano la porta 8080 per impostazione predefinita. Per indicare che il container soddisfa questo requisito, utilizza il comando seguente per aggiungere un'etichetta al dockerfile:

```
LABEL com.amazonaws.sagemaker.capabilities.accept-bind-to-port=true
```

Se il container deve essere in ascolto su una seconda porta, scegli una porta nell'intervallo specificato dalla variabile di ambiente `SAGEMAKER_SAFE_PORT_RANGE`. Specificate il valore come intervallo inclusivo nel formato**"XXXX-YYYY"**, dove `XXXX` e `YYYY` sono numeri interi a più cifre. SageMaker L'intelligenza artificiale fornisce questo valore automaticamente quando esegui il contenitore in una pipeline multicontainer.

**Nota**  
Per utilizzare immagini Docker personalizzate in una pipeline che include [algoritmi integrati di SageMaker intelligenza artificiale](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html), è necessaria una policy di Amazon [Elastic Container Registry (Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)). Il tuo repository Amazon ECR deve concedere all' SageMaker IA l'autorizzazione per estrarre l'immagine. Per ulteriori informazioni, consulta [Risoluzione dei problemi relativi alle autorizzazioni Amazon ECR per le pipeline di inferenza](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions).

## Creazione e distribuzione un endpoint della pipeline di inferenza
<a name="inference-pipeline-real-time-sdk"></a>

Il codice seguente crea e implementa un modello di pipeline di inferenza in tempo reale con SparkML e XGBoost modelli in serie utilizzando AI SDK. SageMaker 

```
from sagemaker.model import Model
from sagemaker.pipeline_model import PipelineModel
from sagemaker.sparkml.model import SparkMLModel

sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
sparkml_model = SparkMLModel(model_data=sparkml_data)
xgb_model = Model(model_data=xgb_model.model_data, image=training_image)

model_name = 'serial-inference-' + timestamp_prefix
endpoint_name = 'serial-inference-ep-' + timestamp_prefix
sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])
sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)
```

## Richiesta di inferenza in tempo reale da un endpoint della pipeline di inferenza
<a name="inference-pipeline-endpoint-request"></a>

L'esempio seguente mostra come eseguire previsioni in tempo reale chiamando un endpoint di inferenza e passando un payload della richiesta in formato JSON:

```
import sagemaker
from sagemaker.predictor import json_serializer, json_deserializer, Predictor

payload = {
        "input": [
            {
                "name": "Pclass",
                "type": "float",
                "val": "1.0"
            },
            {
                "name": "Embarked",
                "type": "string",
                "val": "Q"
            },
            {
                "name": "Age",
                "type": "double",
                "val": "48.0"
            },
            {
                "name": "Fare",
                "type": "double",
                "val": "100.67"
            },
            {
                "name": "SibSp",
                "type": "double",
                "val": "1.0"
            },
            {
                "name": "Sex",
                "type": "string",
                "val": "male"
            }
        ],
        "output": {
            "name": "features",
            "type": "double",
            "struct": "vector"
        }
    }

predictor = Predictor(endpoint=endpoint_name, sagemaker_session=sagemaker.Session(), serializer=json_serializer,
                                content_type='text/csv', accept='application/json')

print(predictor.predict(payload))
```

La risposta che si ottiene da `predictor.predict(payload)` è il risultato dell'inferenza del modello.

## Esempio di pipeline di inferenza in tempo reale
<a name="inference-pipeline-example"></a>

Puoi eseguire questo [notebook di esempio utilizzando il SKLearn predittore](https://github.com/awslabs/amazon-sagemaker-examples/blob/master/sagemaker-python-sdk/scikit_learn_randomforest/Sklearn_on_SageMaker_end2end.ipynb) che mostra come implementare un endpoint, eseguire una richiesta di inferenza e quindi deserializzare la risposta. Trova questo taccuino e altri esempi nell'[ GitHub archivio di SageMaker esempi di Amazon](https://github.com/awslabs/amazon-sagemaker-examples).

# Trasformazioni in batch con pipeline di inferenza
<a name="inference-pipeline-batch"></a>

Per ottenere inferenze su un intero set di dati esegui una trasformazione in batch su un modello addestrato. Lo stesso modello di pipeline di inferenza creato e distribuito in un endpoint per l'elaborazione in tempo reale può essere utilizzato in un processo di trasformazione in batch. Per eseguire un processo di trasformazione in batch in una pipeline, scarica i dati di input da Amazon S3 e inviali in una o più richieste HTTP al modello di pipeline di inferenza. Per un esempio che mostra come preparare i dati per una trasformazione in batch, consulta «Sezione 2 - Preelabora i dati grezzi sull'alloggiamento utilizzando Scikit Learn» degli [endpoint Amazon SageMaker Multi-Model utilizzando il notebook di esempio Linear Learner](https://github.com/awslabs/amazon-sagemaker-examples/tree/master/advanced_functionality/multi_model_linear_learner_home_value). Per informazioni sulle trasformazioni in batch di Amazon SageMaker AI, consulta[Trasformazione in batch per l'inferenza con Amazon SageMaker AI](batch-transform.md). 

**Nota**  
Per utilizzare immagini Docker personalizzate in una pipeline che include [algoritmi integrati di Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html), è necessaria una policy [Amazon Elastic Container Registry (ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)). Il tuo repository Amazon ECR deve concedere all' SageMaker IA l'autorizzazione per estrarre l'immagine. Per ulteriori informazioni, consulta [Risoluzione dei problemi relativi alle autorizzazioni Amazon ECR per le pipeline di inferenza](inference-pipeline-troubleshoot.md#inference-pipeline-troubleshoot-permissions).

L'esempio seguente mostra come eseguire un processo di trasformazione utilizzando l'SDK [Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable). In questo esempio, `model_name` è la pipeline di inferenza che combina SparkML e XGBoost modelli (creati negli esempi precedenti). La posizione Amazon S3 specificata da `input_data_path` contiene i dati di input, in formato CSV, che devono essere scaricati e inviati al modello Spark ML. Al termine del processo di trasformazione, la posizione Amazon S3 specificata da `output_data_path` contiene i dati di output restituiti dal XGBoost modello in formato CSV.

```
import sagemaker
input_data_path = 's3://{}/{}/{}'.format(default_bucket, 'key', 'file_name')
output_data_path = 's3://{}/{}'.format(default_bucket, 'key')
transform_job = sagemaker.transformer.Transformer(
    model_name = model_name,
    instance_count = 1,
    instance_type = 'ml.m4.xlarge',
    strategy = 'SingleRecord',
    assemble_with = 'Line',
    output_path = output_data_path,
    base_transform_job_name='inference-pipelines-batch',
    sagemaker_session=sagemaker.Session(),
    accept = CONTENT_TYPE_CSV)
transform_job.transform(data = input_data_path, 
                        content_type = CONTENT_TYPE_CSV, 
                        split_type = 'Line')
```

# Log e parametri della pipeline di inferenza
<a name="inference-pipeline-logs-metrics"></a>

Il monitoraggio è importante per mantenere l'affidabilità, la disponibilità e le prestazioni delle risorse SageMaker AI di Amazon. Per monitorare e risolvere i problemi delle prestazioni della pipeline di inferenza, usa i CloudWatch log e i messaggi di errore di Amazon. Per informazioni sugli strumenti di monitoraggio forniti dall'intelligenza artificiale, consulta SageMaker . [Monitoraggio AWS delle risorse in Amazon SageMaker AI](monitoring-overview.md)

## Utilizzo di parametri per monitorare i modelli multicontainer
<a name="inference-pipeline-metrics"></a>

Per monitorare i modelli multi-container in Inference Pipelines, usa Amazon. CloudWatch CloudWatchraccoglie dati grezzi e li elabora in metriche leggibili e quasi in tempo reale. SageMaker I job e gli endpoint di formazione basati sull'intelligenza artificiale scrivono CloudWatch metriche e registri nel namespace. `AWS/SageMaker` 

Le seguenti tabelle elencano i parametri e le dimensioni per gli elementi seguenti:
+ Invocazioni dell'endpoint
+ Processi di addestramento, processi di trasformazione in batch e istanze di endpoint

Una *dimensione* è una name/value coppia che identifica in modo univoco una metrica. Puoi assegnare a un parametro fino a 10 dimensioni. Per ulteriori informazioni sul monitoraggio con CloudWatch, vedere. [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md) 

**Parametri di invocazione dell'endpoint**

Lo spazio dei nomi `AWS/SageMaker` include i seguenti parametri di richiesta dalle chiamate a [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InvokeEndpoint.html).

I parametri sono segnalati a intervalli di 1 minuto.


| Metrica | Description | 
| --- | --- | 
| Invocation4XXErrors |  Numero di richieste `InvokeEndpoint` per cui il modello ha restituito un codice di risposta HTTP `4xx`. Per ogni `4xx` risposta, SageMaker AI invia un`1`. Unità: nessuna Statistiche valide: `Average`, `Sum`  | 
| Invocation5XXErrors |  Numero di richieste `InvokeEndpoint` per cui il modello ha restituito un codice di risposta HTTP `5xx`. Per ogni `5xx` risposta, SageMaker AI invia un`1`. Unità: nessuna Statistiche valide: `Average`, `Sum`  | 
| Invocations |  Richieste `number of InvokeEndpoint` inviate a un endpoint di un modello.  Per ottenere il numero totale di richieste inviate a un endpoint di un modello, utilizza la statistica `Sum`. Unità: nessuna Statistiche valide: `Sum`, `Sample Count`  | 
| InvocationsPerInstance |  Il numero di invocazioni degli endpoint inviate a un modello, normalizzato da in ciascuna. `InstanceCount` `ProductionVariant` SageMaker AI invia 1/ `numberOfInstances` come valore per ogni richiesta, dove `numberOfInstances` è il numero di istanze attive per l'endpoint al ProductionVariant momento della richiesta. Unità: nessuna Statistiche valide: `Sum`  | 
| ModelLatency | Il tempo richiesto dal modello o dai modelli per rispondere. Questo include il tempo richiesto per inviare la richiesta, recuperare la risposta dal container di modello e completare l'inferenza nel container. ModelLatency è il tempo totale impiegato da tutti i container in una pipeline di inferenza.Unità: microsecondiStatistiche valide: `Average`, `Sum`, `Min`, `Max`, conteggio di esempio | 
| OverheadLatency |  Il tempo aggiunto al tempo impiegato per rispondere a una richiesta del cliente da parte di SageMaker AI for overhead. `OverheadLatency`viene misurato dal momento in cui l' SageMaker IA riceve la richiesta fino a quando non restituisce una risposta al client, meno il. `ModelLatency` La latenza di gestione può variare in base alle dimensioni di payload di richiesta e risposta, frequenza delle richieste e autenticazione o autorizzazione della richiesta, tra gli altri fattori. Unità: microsecondi Statistiche valide: `Average`, `Sum`, `Min`, `Max`, `Sample Count`  | 
| ContainerLatency | Il tempo impiegato da un contenitore Inference Pipelines per rispondere come visualizzato dall'IA. SageMaker ContainerLatencyinclude il tempo impiegato per inviare la richiesta, recuperare la risposta dal contenitore del modello e completare l'inferenza nel contenitore.Unità: microsecondiStatistiche valide: `Average`, `Sum`, `Min`, `Max`, `Sample Count` | 

**Dimensioni dei parametri di invocazione dell'endpoint**


| Dimensione | Description | 
| --- | --- | 
| EndpointName, VariantName, ContainerName |  Filtra i parametri di invocazione dell'endpoint per un `ProductionVariant` presso l'endpoint specificato e la variante specificata.  | 

****Per un endpoint della pipeline di inferenza, CloudWatch elenca le metriche di latenza per contenitore nel tuo account come Endpoint Container Metrics e **Endpoint Variant Metrics nello spazio dei nomi** AI, come segue. SageMaker **** Il parametro `ContainerLatency` viene visualizzato solo per pipeline di inferenza.

![\[La dashboard per CloudWatch una pipeline di inferenza.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/pipeline-endpoint-metrics.png)


Per ogni endpoint e ogni container, i parametri di latenza visualizzano i nomi di container, endpoint, variante e metrica.

![\[I parametri di latenza per un endpoint.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/pipeline-endpoint-metrics-details.png)


**Parametri delle istanze endpoint, dei processi di addestramento e dei processi di trasformazione in batch**

Gli spazi dei nomi `/aws/sagemaker/TrainingJobs`, `/aws/sagemaker/TransformJobs` e `/aws/sagemaker/Endpoints` includono i seguenti parametri per i processi di addestramento e le istanze endpoint.

I parametri sono segnalati a intervalli di 1 minuto.


| Metrica | Description | 
| --- | --- | 
| CPUUtilization |  Percentuale di unità CPU utilizzate dai container in esecuzione su un'istanza. Il valore varia dallo 0% al 100% e viene moltiplicato per il numero di. CPUs Ad esempio, se ce ne sono quattro CPUs, `CPUUtilization` può variare dallo 0% al 400%. Per i processi di addestramento, `CPUUtilization` corrisponde all'utilizzo della CPU del container di algoritmi in esecuzione sull'istanza. Per i processi di trasformazione in batch, `CPUUtilization` corrisponde all'utilizzo della CPU del container di trasformazione in esecuzione sull'istanza. Per modelli multi-container, `CPUUtilization` è la somma dell'utilizzo della CPU per tutti i container in esecuzione sull'istanza. Per le varianti di endpoint, `CPUUtilization` è la somma dell'utilizzo della CPU per tutti i container in esecuzione nell'istanza. Unità: percentuale  | 
| MemoryUtilization | Percentuale di memoria utilizzata dai container in esecuzione su un'istanza. Questo valore è compreso tra 0% e 100%.Per i processi di addestramento, `MemoryUtilization` è la memoria utilizzata dal container degli algoritmi in esecuzione sull'istanza.Per i processi di trasformazione in batch, `MemoryUtilization` è la memoria utilizzata dal container di trasformazione in esecuzione sull'istanza.Per i modelli multi-container, MemoryUtilization è la somma della memoria utilizzata da tutti i container in esecuzione sull'istanza.Per le varianti di endpoint, `MemoryUtilization` è la somma della memoria utilizzata da tutti i container in esecuzione sull'istanza.Unità: percentuale | 
| GPUUtilization |  La percentuale di unità GPU utilizzate dai contenitori in esecuzione su un'istanza. `GPUUtilization`varia dallo 0% al 100% e viene moltiplicata per il numero di. GPUs Ad esempio, se ce ne sono quattro GPUs, `GPUUtilization` può variare dallo 0% al 400%. Per i processi di addestramento, `GPUUtilization` è la GPU utilizzata dal container degli algoritmi in esecuzione sull'istanza. Per i processi di trasformazione in batch, `GPUUtilization` è la GPU utilizzata dal container di trasformazione in esecuzione sull'istanza. Per modelli multi-container, `GPUUtilization` è la somma della GPU utilizzata da tutti i container in esecuzione sull'istanza. Per le varianti di endpoint, `GPUUtilization` è la somma della GPU utilizzata da tutti i container in esecuzione sull'istanza. Unità: percentuale  | 
| GPUMemoryUtilization |  La percentuale di memoria GPU utilizzata dai contenitori in esecuzione su un'istanza. GPUMemoryL'utilizzo varia dallo 0% al 100% e viene moltiplicato per il numero di. GPUs Ad esempio, se ce ne sono quattro GPUs, `GPUMemoryUtilization` può variare dallo 0% al 400%. Per i processi di addestramento, `GPUMemoryUtilization` è la memoria GPU utilizzata dal container degli algoritmi in esecuzione sull'istanza. Per i processi di trasformazione in batch, `GPUMemoryUtilization` è la memoria GPU utilizzata dal container di trasformazione in esecuzione sull'istanza. Per i modelli multi-container, `GPUMemoryUtilization` è la somma della GPU utilizzata da tutti i container in esecuzione sull'istanza. Per le versioni di endpoint, `GPUMemoryUtilization` è la somma della memoria GPU utilizzata da tutti i container in esecuzione nell'istanza. Unità: percentuale  | 
| DiskUtilization |  La percentuale di spazio su disco utilizzata dai contenitori in esecuzione su un'istanza. DiskUtilization varia dallo 0% al 100%. Questo parametro non è supportato per i processi di trasformazione in batch. Per i processi di addestramento, `DiskUtilization` è lo spazio su disco utilizzato dal container degli algoritmi in esecuzione sull'istanza. Per le varianti di endpoint, `DiskUtilization` è la somma dello spazio su disco utilizzato da tutti i container forniti in esecuzione sull'istanza. Unità: percentuale  | 

**Dimensioni dei parametri delle istanze dell'endpoint, dei processi di addestramento e dei processi di trasformazione in batch**


| Dimensione | Description | 
| --- | --- | 
| Host |  Per i processi di addestramento, `Host` ha il formato `[training-job-name]/algo-[instance-number-in-cluster]`. Utilizza questa dimensione per filtrare i parametri di istanza per i processi di addestramento e l'istanza specificati. Questo formato di dimensione è presente solo nello spazio dei nomi `/aws/sagemaker/TrainingJobs`. Per i processi di trasformazione in batch, `Host` ha il formato `[transform-job-name]/[instance-id]`. Utilizza questa dimensione per filtrare i parametri dell'istanza per il processo di trasformazione in batch e l'istanza specificati. Questo formato di dimensione è presente solo nello spazio dei nomi `/aws/sagemaker/TransformJobs`. Per gli endpoint, `Host` ha il formato `[endpoint-name]/[ production-variant-name ]/[instance-id]`. Utilizza questa dimensione per filtrare i parametri di istanza per l'endpoint, la variante e l'istanza specificati. Questo formato di dimensione è presente solo nello spazio dei nomi `/aws/sagemaker/Endpoints`.  | 

Per aiutarti a eseguire il debug dei processi di formazione, degli endpoint e delle configurazioni del ciclo di vita delle istanze notebook, l' SageMaker IA invia anche tutto ciò che un contenitore di algoritmi, un contenitore modello o una configurazione del ciclo di vita di un'istanza notebook invia ad Amazon Logs. `stdout` `stderr` CloudWatch Puoi utilizzare queste informazioni per il debug e l'analisi dell'avanzamento.

## Utilizzo di log per monitorare una pipeline di inferenza
<a name="inference-pipeline-logs"></a>

La tabella seguente elenca i gruppi di log e i flussi di log che SageMaker AI. invia ad Amazon CloudWatch 

Un *flusso di log* è una sequenza di eventi di log che condividono la stessa origine. Ogni fonte separata di log in CloudWatch costituisce un flusso di log separato. Un *gruppo di log* è un gruppo di flussi di log che condividono le stesse impostazioni di conservazione, monitoraggio e controllo degli accessi.

**Log**

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/inference-pipeline-logs-metrics.html)

**Nota**  
SageMaker L'IA crea il gruppo di `/aws/sagemaker/NotebookInstances` log quando si crea un'istanza di notebook con una configurazione del ciclo di vita. Per ulteriori informazioni, consulta [Personalizzazione di un'istanza di SageMaker notebook utilizzando uno script LCC](notebook-lifecycle-config.md).

Per ulteriori informazioni sulla registrazione SageMaker AI, consulta. [CloudWatch Registri per Amazon SageMaker AI](logging-cloudwatch.md) 

# Risoluzione dei problemi delle pipeline di inferenza
<a name="inference-pipeline-troubleshoot"></a>

Per risolvere i problemi relativi alla pipeline di inferenza, utilizza CloudWatch i log e i messaggi di errore. Se utilizzi immagini Docker personalizzate in una pipeline che include algoritmi integrati di Amazon SageMaker AI, potresti riscontrare anche problemi di autorizzazione. Per concedere le autorizzazioni richieste, crea una policy Amazon Elastic Container Registry (Amazon ECR).

**Topics**
+ [Risoluzione dei problemi relativi alle autorizzazioni Amazon ECR per le pipeline di inferenza](#inference-pipeline-troubleshoot-permissions)
+ [Usa i CloudWatch log per risolvere i problemi relativi alle pipeline di inferenza SageMaker AI](#inference-pipeline-troubleshoot-logs)
+ [Utilizzo dei messaggi di errore per la risoluzione dei problemi relativi alla pipeline di inferenza](#inference-pipeline-troubleshoot-errors)

## Risoluzione dei problemi relativi alle autorizzazioni Amazon ECR per le pipeline di inferenza
<a name="inference-pipeline-troubleshoot-permissions"></a>

Quando utilizzi immagini Docker personalizzate in una pipeline che include [algoritmi integrati di SageMaker intelligenza artificiale](https://docs.aws.amazon.com/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html), hai bisogno di una policy [Amazon](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html) ECR. La policy consente al tuo repository Amazon ECR di concedere l'autorizzazione all' SageMaker IA per estrarre l'immagine. La policy deve aggiungere le seguenti autorizzazioni:

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "allowSageMakerToPull",
            "Effect": "Allow",
            "Principal": {
                "Service": "sagemaker.amazonaws.com"
            },
            "Action": [
                "ecr:GetDownloadUrlForLayer",
                "ecr:BatchGetImage",
                "ecr:BatchCheckLayerAvailability"
            ],
            "Resource": "*"
        }
    ]
}
```

------

## Usa i CloudWatch log per risolvere i problemi relativi alle pipeline di inferenza SageMaker AI
<a name="inference-pipeline-troubleshoot-logs"></a>

SageMaker L'intelligenza artificiale pubblica i log dei container per gli endpoint che distribuiscono una pipeline di inferenza su CloudWatch Amazon nel seguente percorso per ogni contenitore.

```
/aws/sagemaker/Endpoints/{EndpointName}/{Variant}/{InstanceId}/{ContainerHostname}
```

Ad esempio, i log per questo endpoint vengono pubblicati nei seguenti gruppi di log e flussi:

```
EndpointName: MyInferencePipelinesEndpoint
Variant: MyInferencePipelinesVariant
InstanceId: i-0179208609ff7e488
ContainerHostname: MyContainerName1 and MyContainerName2
```

```
logGroup: /aws/sagemaker/Endpoints/MyInferencePipelinesEndpoint
logStream: MyInferencePipelinesVariant/i-0179208609ff7e488/MyContainerName1
logStream: MyInferencePipelinesVariant/i-0179208609ff7e488/MyContainerName2
```

Un *flusso di log* è una sequenza di eventi di log che condividono la stessa origine. Ogni fonte di accesso separata costituisce un flusso di log separato CloudWatch . Un *gruppo di log* è un gruppo di flussi di log che condividono le stesse impostazioni di conservazione, monitoraggio e controllo degli accessi.

**Per vedere i gruppi di log e i flussi**

1. Apri la CloudWatch console all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Nella pagina di navigazione scegli **Log**.

1. In **Gruppi di log**, applicare il filtro **MyInferencePipelinesEndpoint**:   
![\[I gruppi di CloudWatch log filtrati per l'endpoint della pipeline di inferenza.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/pipeline-log-group-filter.png)

1. **Per visualizzare i flussi di log, nella pagina CloudWatch **Log Groups**, scegliete**MyInferencePipelinesEndpoint**, quindi Search Log Group.**  
![\[Il flusso di CloudWatch log per la pipeline di inferenza.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/pipeline-log-streams-2.png)

Per un elenco dei log pubblicati da SageMaker AI, vedi. [Log e parametri della pipeline di inferenza](inference-pipeline-logs-metrics.md)

## Utilizzo dei messaggi di errore per la risoluzione dei problemi relativi alla pipeline di inferenza
<a name="inference-pipeline-troubleshoot-errors"></a>

I messaggi di errore della pipeline di inferenza indicano quali container non sono riusciti. 

Se si verifica un errore mentre l' SageMaker IA richiama un endpoint, il servizio restituisce un `ModelError` (codice di errore 424), che indica quale contenitore ha avuto esito negativo. Se il payload della richiesta (la risposta del contenitore precedente) supera il limite di 5 MB, SageMaker AI fornisce un messaggio di errore dettagliato, ad esempio: 

Risposta ricevuta da MyContainerName 1 con codice di stato 200. Tuttavia, il payload della richiesta da MyContainerName 1 a MyContainerName 2 è di 6000000 byte, che ha superato il limite massimo di 5 MB.

``

Se un contenitore non supera il controllo dello stato del ping mentre l' SageMaker IA sta creando un endpoint, restituisce un `ClientError` e indica tutti i contenitori che non hanno superato il controllo ping nell'ultimo controllo di integrità.

# Elimina endpoint e risorse
<a name="realtime-endpoints-delete-resources"></a>

Elimina gli endpoint per evitare di incorrere in addebiti.

## Eliminazione di un endpoint
<a name="realtime-endpoints-delete-endpoint"></a>

Elimina l'endpoint a livello di codice utilizzando AWS SDK per Python (Boto3), con o utilizzando in modo interattivo la AWS CLI console AI. SageMaker 

SageMaker L'intelligenza artificiale libera tutte le risorse che sono state distribuite al momento della creazione dell'endpoint. L'eliminazione di un endpoint non eliminerà la configurazione dell'endpoint o il modello AI. SageMaker Vedi [Eliminazione di una configurazione endpoint](#realtime-endpoints-delete-endpoint-config) e [Eliminazione di un modello](#realtime-endpoints-delete-model) per informazioni su come eliminare la configurazione dell'endpoint e il modello di intelligenza artificiale. SageMaker 

------
#### [ AWS SDK per Python (Boto3) ]

Utilizza l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) per eliminare il tuo endpoint. Specifica l'endpoint per il campo `EndpointName`.

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Delete endpoint
sagemaker_client.delete_endpoint(EndpointName=endpoint_name)
```

------
#### [ AWS CLI ]

Per eliminare l’endpoint, usa il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint.html). Specifica il nome dell'endpoint per il flag `endpoint-name`.

```
aws sagemaker delete-endpoint --endpoint-name <endpoint-name>
```

------
#### [ SageMaker AI Console ]

Elimina l'endpoint in modo interattivo con la SageMaker console AI.

1. **Nel menu di [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)navigazione della console SageMaker AI, scegli Inferenza.**

1. Seleziona **Endpoint** nel menu a discesa. Apparirà un elenco di endpoint creati nel tuo AWS account per nome, Amazon Resource Name (ARN), ora di creazione, stato e data e ora dell'ultimo aggiornamento dell'endpoint.

1. Seleziona l’endpoint da eliminare.

1. Seleziona il pulsante a discesa **Azioni** nell'angolo in alto a destra.

1. Scegli **Elimina**.

------

## Eliminazione di una configurazione endpoint
<a name="realtime-endpoints-delete-endpoint-config"></a>

Elimina la configurazione dell'endpoint in modo programmatico utilizzando AWS SDK per Python (Boto3), con o in modo interattivo la AWS CLI console AI. SageMaker L'eliminazione di una configurazione endpoint non elimina gli endpoint creati utilizzando questa configurazione. Per informazioni su come eliminare l'endpoint, consulta [Eliminazione di un endpoint](#realtime-endpoints-delete-endpoint).

Non eliminare una configurazione endpoint utilizzata da un endpoint attivo o mentre l'endpoint viene aggiornato o creato. Se elimini la configurazione endpoint di un endpoint attivo o in fase di creazione o aggiornamento potresti perdere la visibilità del tipo di istanza utilizzato dall'endpoint.

------
#### [ AWS SDK per Python (Boto3) ]

Utilizza l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpointConfig.html) per eliminare il tuo endpoint. Specifica il nome della configurazione endpoint per il campo `EndpointConfigName`.

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Specify the name of your endpoint configuration
endpoint_config_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Delete endpoint configuration
sagemaker_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
```

Facoltativamente, puoi utilizzare l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) per restituire informazioni sul nome dei modelli distribuiti (varianti di produzione), come il nome del modello e il nome della configurazione dell'endpoint associata a quel modello distribuito. Specifica il nome dell'endpoint per il campo `EndpointConfigName`. 

```
# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Store DescribeEndpointConfig response into a variable that we can index in the next step.
response = sagemaker_client.describe_endpoint_config(EndpointConfigName=endpoint_name)

# Delete endpoint
endpoint_config_name = response['ProductionVariants'][0]['EndpointConfigName']
                        
# Delete endpoint configuration
sagemaker_client.delete_endpoint_config(EndpointConfigName=endpoint_config_name)
```

[Per ulteriori informazioni sugli altri elementi di risposta restituiti da`DescribeEndpointConfig`, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html)la guida di riferimento delle API. SageMaker ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html)

------
#### [ AWS CLI ]

Usa il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-endpoint-config.html) per eliminare la configurazione endpoint. Specifica il nome della configurazione endpoint per il flag `endpoint-config-name`.

```
aws sagemaker delete-endpoint-config \
                        --endpoint-config-name <endpoint-config-name>
```

Facoltativamente, puoi utilizzare il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html) per restituire informazioni sul nome dei modelli distribuiti (varianti di produzione), come il nome del modello e il nome della configurazione dell'endpoint associata a quel modello distribuito. Specifica il nome dell'endpoint per il flag `endpoint-config-name`.

```
aws sagemaker describe-endpoint-config --endpoint-config-name <endpoint-config-name>
```

Verrà restituita una risposta JSON. Puoi copiare e incollare, utilizzare un parser JSON o utilizzare uno strumento creato per l'analisi JSON per ottenere il nome della configurazione endpoint associato a quell'endpoint.

------
#### [ SageMaker AI Console ]

Elimina la configurazione dell'endpoint in modo interattivo con la console SageMaker AI.

1. **Nel menu di [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)navigazione della console SageMaker AI, scegli Inference.**

1. Dal menu a discesa, scegli **Configurazioni endpoint**. Apparirà un elenco di configurazioni endpoint create nel tuo account AWS per nome, nome della risorsa Amazon (ARN) e data creazione.

1. Seleziona la configurazione endpoint da eliminare.

1. Seleziona il pulsante a discesa **Azioni** nell'angolo in alto a destra.

1. Scegli **Elimina**.

------

## Eliminazione di un modello
<a name="realtime-endpoints-delete-model"></a>

Elimina il tuo modello di SageMaker intelligenza artificiale in modo programmatico utilizzando AWS SDK per Python (Boto3), con o utilizzando in modo interattivo la AWS CLI console AI. SageMaker L'eliminazione di un modello SageMaker AI elimina solo la voce del modello che è stata creata in AI. SageMaker L’eliminazione di un modello non elimina artefatti del modello, codici di inferenza o il ruolo IAM specificato durante la creazione del modello.

------
#### [ AWS SDK per Python (Boto3) ]

Utilizza l'[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html)API per eliminare il tuo modello di SageMaker intelligenza artificiale. Specifica il nome del modello per il campo `ModelName`.

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Specify the name of your endpoint configuration
model_name='<model_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Delete model
sagemaker_client.delete_model(ModelName=model_name)
```

Facoltativamente, puoi utilizzare l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) per restituire informazioni sul nome dei modelli distribuiti (varianti di produzione), come il nome del modello e il nome della configurazione dell'endpoint associata a quel modello distribuito. Specifica il nome dell'endpoint per il campo `EndpointConfigName`. 

```
# Specify the name of your endpoint
endpoint_name='<endpoint_name>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Store DescribeEndpointConfig response into a variable that we can index in the next step.
response = sagemaker_client.describe_endpoint_config(EndpointConfigName=endpoint_name)

# Delete endpoint
model_name = response['ProductionVariants'][0]['ModelName']
sagemaker_client.delete_model(ModelName=model_name)
```

Per ulteriori informazioni sugli altri elementi di risposta restituiti da`DescribeEndpointConfig`, [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html)consulta la [guida di riferimento dell'SageMaker API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Operations_Amazon_SageMaker_Service.html).

------
#### [ AWS CLI ]

Usa il [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/delete-model.html)comando per eliminare il tuo modello di SageMaker intelligenza artificiale. Specifica il nome del modello per il flag `model-name`.

```
aws sagemaker delete-model \
                        --model-name <model-name>
```

Facoltativamente, puoi utilizzare il comando [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/describe-endpoint-config.html) per restituire informazioni sul nome dei modelli distribuiti (varianti di produzione), come il nome del modello e il nome della configurazione dell'endpoint associata a quel modello distribuito. Specifica il nome dell'endpoint per il flag `endpoint-config-name`.

```
aws sagemaker describe-endpoint-config --endpoint-config-name <endpoint-config-name>
```

Verrà restituita una risposta JSON. È possibile copiare e incollare, utilizzare un parser JSON o utilizzare uno strumento creato per l'analisi JSON per ottenere il nome del modello associato all'endpoint.

------
#### [ SageMaker AI Console ]

Elimina il tuo modello di SageMaker intelligenza artificiale in modo interattivo con la console SageMaker AI.

1. Nel menu di [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)navigazione della console SageMaker AI, scegli **Inference**.

1. Dal menu a discesa, scegli **Modelli**. Apparirà un elenco di modelli creati nel tuo AWS account per nome, Amazon Resource Name (ARN) e ora di creazione.

1. Seleziona il modello che intendi eliminare.

1. Seleziona il pulsante a discesa **Azioni** nell'angolo in alto a destra.

1. Scegli **Delete** (Elimina).

------

# Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon
<a name="endpoint-auto-scaling"></a>

Amazon SageMaker AI supporta il ridimensionamento automatico (auto scaling) per i tuoi modelli ospitati. *Dimensionamento automatico* modifica dinamicamente il numero di istanze assegnate a un modello in risposta alle variazioni nel carico di lavoro. Quando il carico di lavoro aumenta, la scalabilità automatica offre più istanze online. Quando il carico di lavoro diminuisce, la scalabilità automatica rimuove le istanze non necessarie in modo da non pagare per le istanze assegnate che non vengono utilizzate.

**Topics**
+ [Panoramica della policy sulla scalabilità automatica](endpoint-auto-scaling-policy.md)
+ [Prerequisiti per il dimensionamento automatico](endpoint-auto-scaling-prerequisites.md)
+ [Configurazione del modello di scalabilità automatica con la console](endpoint-auto-scaling-add-console.md)
+ [Registrazione di un modello](endpoint-auto-scaling-add-policy.md)
+ [Definizione di una policy di dimensionamento](endpoint-auto-scaling-add-code-define.md)
+ [Applicazione di una policy di scalabilità](endpoint-auto-scaling-add-code-apply.md)
+ [Istruzioni per la modifica di una policy di dimensionamento](endpoint-auto-scaling-edit.md)
+ [Disattivare temporaneamente le policy di dimensionamento](endpoint-auto-scaling-suspend-scaling-activities.md)
+ [Eliminazione di una policy di dimensionamento](endpoint-auto-scaling-delete.md)
+ [Controllare lo stato di un’attività di dimensionamento descrivendo le attività di dimensionamento](endpoint-scaling-query-history.md)
+ [Scalare un endpoint a zero istanze](endpoint-auto-scaling-zero-instances.md)
+ [Test del caricamento della configurazione di scalabilità automatica](endpoint-scaling-loadtest.md)
+ [Utilizzalo CloudFormation per creare una politica di scalabilità](endpoint-scaling-cloudformation.md)
+ [Aggiornare gli endpoint che utilizzano il dimensionamento automatico](endpoint-scaling-update.md)
+ [Eliminare gli endpoint configurati per il dimensionamento automatico](endpoint-delete-with-scaling.md)

# Panoramica della policy sulla scalabilità automatica
<a name="endpoint-auto-scaling-policy"></a>

Per utilizzare il dimensionamento automatico, è necessario definire una policy di dimensionamento che aggiunge e rimuove il numero di istanze per la variante di produzione in risposta ai carichi di lavoro effettivi.

Per scalare automaticamente in base alle variazioni del carico di lavoro, sono disponibili due opzioni: policy di dimensionamento con monitoraggio delle destinazioni e policy di dimensionamento per fasi. 

Nella maggior parte dei casi, è consigliato l’utilizzo di policy di dimensionamento con monitoraggio delle destinazioni. Con il monitoraggio del target, scegli una CloudWatch metrica Amazon e un valore obiettivo. Auto Scaling crea e gestisce gli CloudWatch allarmi relativi alla politica di scalabilità e calcola l'aggiustamento della scalabilità in base alla metrica e al valore target. La policy aggiunge e rimuove il numero di istanze in base alle esigenze, per mantenere la metrica in corrispondenza del valore di destinazione specificato o vicino a esso. Ad esempio, una policy di dimensionamento che utilizza il parametro predefinito `InvocationsPerInstance` con un valore target di 70 può mantenere `InvocationsPerInstance` a o vicino a 70. Per ulteriori informazioni, consulta [Policy di dimensionamento del monitoraggio di target](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-target-tracking.html) nella *Guida per l'utente di Application Auto Scaling*.

Puoi utilizzare il dimensionamento per fasi quando richiedi una configurazione avanzata, ad esempio specificando quante istanze distribuire in quali condizioni. Ad esempio, è necessario utilizzare il dimensionamento per fasi per consentire a un endpoint di aumentare orizzontalmente partendo da zero istanze attive. Per una panoramica delle policy di dimensionamento per fasi, consulta [Policy di dimensionamento per fasi](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) nella *Guida per l’utente di Application Auto Scaling*.

Per creare una policy di dimensionamento con monitoraggio degli obiettivi, è necessario specificare quanto segue:
+ **Metrica: la CloudWatch metrica** da monitorare, ad esempio il numero medio di chiamate per istanza. 
+ **Valore di destinazione** - Il valore di destinazione per la metrica, ad esempio 70 invocazioni per istanza al minuto.

Puoi creare policy di dimensionamento con monitoraggio degli obiettivi sia con parametri predefiniti che personalizzati. Una metrica predefinita viene definita in un'enumerazione in modo che sia possibile specificarla per nome nel codice o utilizzarla nella console di intelligenza artificiale. SageMaker In alternativa, è possibile utilizzare l’ AWS CLI o l’API Application Auto Scaling per applicare una policy di dimensionamento con monitoraggio delle destinazioni in base a una metrica predefinita o personalizzata.

Le attività di dimensionamento vengono eseguite con tempi di raffreddamento intermedi per evitare rapide fluttuazioni della capacità. Facoltativamente, puoi configurare i tempi di raffreddamento per la tua policy di dimensionamento. 

Per ulteriori informazioni sui concetti chiave del dimensionamento automatico, è possibile consultare la seguente sezione.

## Dimensionamento basato su pianificazione
<a name="scheduled-scaling"></a>

È anche possibile creare azioni pianificate per eseguire attività di dimensionamento a orari specifici. È possibile creare operazioni pianificate sia una tantum che ricorrenti. Dopo l’esecuzione di un’azione pianificata, la policy di dimensionamento può continuare a prendere decisioni sull’opportunità di scalare dinamicamente in base alle modifiche del carico di lavoro. Il ridimensionamento pianificato può essere gestito solo dall'API Application Auto Scaling AWS CLI o dall'API Application Auto Scaling. Per ulteriori informazioni, consulta [Dimensionamento pianificato](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) nella *Guida per l'utente di Dimensionamento automatico delle applicazioni*.

## Limiti di dimensionamento minimo e massimo
<a name="endpoint-auto-scaling-target-capacity"></a>

In fase di configurazione del dimensionamento automatico, è necessario specificare i limiti di dimensionamento prima di creare una policy. I limiti per i valori minimo e massimo vengono impostati separatamente.

Il valore massimo deve essere almeno 1 e uguale o minore del valore specificato per il valore massimo.

Il valore massimo deve essere uguale o superiore al valore specificato per il valore minimo. SageMaker La scalabilità automatica dell'IA non impone un limite per questo valore.

Per determinare i limiti di dimensionamento necessari per il traffico tipico, testa la configurazione del dimensionamento automatico con il tasso di traffico previsto verso il modello.

Se il traffico di una variante diventa zero, l' SageMaker IA si ridimensiona automaticamente fino al numero minimo di istanze specificato. In questo caso, l' SageMaker IA emette metriche con un valore pari a zero.

Esistono tre opzioni per specificare le capacità minima e massima:

1. Utilizza la console per aggiornare le impostazioni **Conteggio istanze minimo** e **Conteggio istanze massimo**.

1. Usa le `--max-capacity` opzioni AWS CLI e includi `--min-capacity` e quando esegui il [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)comando.

1. Chiama l'[RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)API e specifica i `MaxCapacity` parametri `MinCapacity` and.

**Suggerimento**  
È possibile aumentare orizzontalmente in modo manuale incrementando il valore minimo oppure ridurre orizzontalmente in modo manuale diminuendo il valore massimo.

## Periodo di attesa
<a name="endpoint-auto-scaling-target-cooldown"></a>

Un *tempo di raffreddamento* viene utilizzato per proteggersi dal sovradimensionamento quando il modello viene ridotto orizzontalmente (riduzione della capacità) o aumentato orizzontalmente (aumento della capacità). A tale scopo, rallenta le successive attività di dimensionamento fino alla scadenza del periodo. Nello specifico, blocca l’eliminazione delle istanze per le richieste di riduzione orizzontale e limita la creazione di istanze per le richieste di aumento orizzontale. Per ulteriori informazioni, consulta [Definizione dei tempi di raffreddamento](https://docs.aws.amazon.com/autoscaling/application/userguide/target-tracking-scaling-policy-overview.html#target-tracking-cooldown) nella *Guida per l’utente di Application Auto Scaling*. 

Configura il tempo di raffreddamento nella policy di dimensionamento. 

Se non specifichi un tempo di raffreddamento per ridurre orizzontalmente o aumentare orizzontalmente, la policy di dimensionamento utilizza il valore predefinito, pari a 300 secondi per ognuno.

Se le istanze vengono aggiunte o rimosse troppo rapidamente quando testi la configurazione di dimensionamento, prova ad aumentare questo valore. Puoi vedere questo comportamento se il traffico verso il tuo modello ha molti picchi oppure se hai più policy di dimensionamento definite per una variante.

Se le istanze non vengono aggiunte abbastanza rapidamente per affrontare un aumento del traffico, considera la diminuzione di questo valore.

## Risorse correlate
<a name="auto-scaling-related-resources"></a>

Per ulteriori informazioni sul dimensionamento automatico della configurazione, consulta le risorse seguenti:
+ La sezione [application-autoscaling](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling) di *Riferimento ai comandi AWS CLI *.
+ [Riferimento API di Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/APIReference/)
+ [Application Auto Scaling User Guide](https://docs.aws.amazon.com/autoscaling/application/userguide/)

**Nota**  
SageMaker L'intelligenza artificiale ha recentemente introdotto nuove funzionalità di inferenza basate su endpoint di inferenza in tempo reale. Crei un endpoint SageMaker AI con una configurazione dell'endpoint che definisce il tipo di istanza e il numero iniziale di istanze per l'endpoint. Quindi, crea un componente di inferenza, che è un oggetto di hosting SageMaker AI che puoi utilizzare per distribuire un modello su un endpoint. Per informazioni sulla scalabilità dei componenti di inferenza, vedi [SageMaker AI aggiunge nuove funzionalità di inferenza per aiutare a ridurre i costi e la latenza di implementazione del modello di base e Riduce i costi](https://aws.amazon.com/blogs/aws/amazon-sagemaker-adds-new-inference-capabilities-to-help-reduce-foundation-model-deployment-costs-and-latency/) [di implementazione del modello del 50% in media utilizzando le più recenti funzionalità di intelligenza artificiale sul blog](https://aws.amazon.com/blogs/machine-learning/reduce-model-deployment-costs-by-50-on-average-using-sagemakers-latest-features/). SageMaker AWS 

# Prerequisiti per il dimensionamento automatico
<a name="endpoint-auto-scaling-prerequisites"></a>

Prima di poter utilizzare la scalabilità automatica, devi aver già creato un endpoint modello Amazon SageMaker AI. È possibile avere più versioni del modello per lo stesso endpoint. Ogni modello viene definito [variante (modello) di produzione](model-ab-testing.md). Per maggiori informazioni sulla distribuzione di un endpoint di un modello, consulta [Implementa il modello su AI Hosting Services SageMaker](ex1-model-deployment.md#ex1-deploy-model).

Per attivare la scalabilità automatica per un modello, puoi utilizzare la console SageMaker AI, AWS Command Line Interface (AWS CLI) o un AWS SDK tramite l'API Application Auto Scaling. 
+ Se è la prima volta che configuri il dimensionamento per un modello, è consigliabile [Configurazione del modello di scalabilità automatica con la console](endpoint-auto-scaling-add-console.md). 
+ Quando si utilizza AWS CLI o l'API Application Auto Scaling, il flusso consiste nel registrare il modello come destinazione scalabile, definire la politica di scalabilità e quindi applicarla. **Sulla console SageMaker AI, in **Inference** nel riquadro di navigazione, scegli Endpoints.** Trova il nome dell’endpoint del modello, quindi sceglilo per trovare il nome della variante. È necessario specificare sia il nome dell’endpoint che il nome della variante per attivare il dimensionamento automatico per un modello.

L'auto scaling è reso possibile da una combinazione di Amazon SageMaker AI CloudWatch, Amazon e Application Auto APIs Scaling. Per informazioni sulle autorizzazioni minime richieste, consulta [Esempi di policy basate su identità di Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/security_iam_id-based-policy-examples.html) nella *Guida per l’utente di Application Auto Scaling*.

La policy IAM `SagemakerFullAccessPolicy` dispone di tutte le autorizzazioni IAM necessarie per eseguire il dimensionamento automatico. Per ulteriori informazioni sulle autorizzazioni SageMaker AI IAM, consulta. [Come utilizzare i ruoli di esecuzione dell' SageMaker IA](sagemaker-roles.md)

Se gestisci una policy di autorizzazioni personalizzata, devi includere le autorizzazioni seguenti:

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "sagemaker:DescribeEndpoint",
        "sagemaker:DescribeEndpointConfig",
        "sagemaker:UpdateEndpointWeightsAndCapacities"
      ],
      "Resource": "*"
    },
    {    
        "Effect": "Allow",
        "Action": [
            "application-autoscaling:*"
        ],
        "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "iam:CreateServiceLinkedRole",
      "Resource": "arn:aws:iam::*:role/aws-service-role/sagemaker.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint",
      "Condition": {
        "StringLike": { "iam:AWSServiceName": "sagemaker.application-autoscaling.amazonaws.com"	}
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "cloudwatch:PutMetricAlarm",
        "cloudwatch:DescribeAlarms",
        "cloudwatch:DeleteAlarms"
      ],
      "Resource": "*"
    }
  ]
}
```

------

## Ruolo collegato al servizio
<a name="endpoint-auto-scaling-slr"></a>

Il dimensionamento automatico utilizza il ruolo collegato al servizio `AWSServiceRoleForApplicationAutoScaling_SageMakerEndpoint`. Il ruolo collegato al servizio concede ad Application Auto Scaling l’autorizzazione per descrivere gli allarmi per le policy, per monitorare i livelli di capacità attuale e per scalare la risorsa di destinazione. Questo ruolo viene creato automaticamente. Affinché la creazione automatica di un ruolo abbia esito positivo, è necessario disporre dell’autorizzazione per l’azione `iam:CreateServiceLinkedRole`. Per ulteriori informazioni, consulta [Ruoli collegati ai servizi](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-service-linked-roles.html) nella *Guida per l'utente di Application Auto Scaling*.

# Configurazione del modello di scalabilità automatica con la console
<a name="endpoint-auto-scaling-add-console"></a>

**Per configurare il dimensionamento automatico per un modello (console)**

1. Apri la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione, scegli **Inferenza**, quindi **Endpoint**. 

1. Scegli il tuo endpoint e quindi, per **Impostazioni del runtime dell’endpoint**, scegli la variante.

1. Selezionare **Configura dimensionamento automatico**.

1. Nella pagina **Configura la scalabilità automatica della variante**, per **Scalabilità automatica della variante**, procedi come segue:

   1. Per **Conteggio istanze minimo**, digita il numero minimo di istanze che la policy di dimensionamento deve mantenere. Almeno un'istanza è necessaria.

   1. Per **Conteggio istanze massimo**, digita il numero massimo di istanze che la policy di dimensionamento deve mantenere.

1. Per **Policy di dimensionamento integrata**, procedi come segue:

   1. Per **Parametro target**, `SageMakerVariantInvocationsPerInstance` viene selezionato automaticamente per la metrica e non può essere modificato.

   1. Per **Valore target**, digita il numero medio di invocazioni per istanza al minuto per il modello. Per determinare questo valore, segui le linee guida in [Test di caricamento](endpoint-scaling-loadtest.md).

   1. (Facoltativo) Per **Disattivazione dimensionamento verticale (secondi)** e **Disattivazione dimensionamento orizzontale (secondi)**, inserisci la quantità di tempo, in secondi, per ogni tempo di raffreddamento.

   1. (Facoltativo) Seleziona **Disabilita il dimensionamento verticale** se non desideri che il dimensionamento automatico termini l’istanza quando il traffico diminuisce.

1. Scegli **Save** (Salva).

Questa procedura registra un modello come un target scalabile con Application Auto Scaling. Quando registri un modello, Application Auto Scaling esegue controlli di convalida per garantire che siano rispettate le seguenti condizioni:
+ Il modello esiste
+ Le autorizzazioni sono sufficienti
+ Non stai registrando una variante con un’istanza che è una istanza a prestazioni espandibili, ad esempio T2
**Nota**  
SageMaker L'intelligenza artificiale non supporta la scalabilità automatica per istanze espandibili come T2, perché consentono già una maggiore capacità con carichi di lavoro aumentati. Per informazioni sulle istanze a prestazioni espandibili, consulta [Tipi di istanze Amazon EC2](https://aws.amazon.com/ec2/instance-types/).

# Registrazione di un modello
<a name="endpoint-auto-scaling-add-policy"></a>

Prima di aggiungere una policy di dimensionamento al modello, è necessario registrare il modello per il dimensionamento automatico e definire i limiti di dimensionamento per il modello.

Le seguenti procedure spiegano come registrare un modello (variante di produzione) per la scalabilità automatica utilizzando AWS Command Line Interface (AWS CLI) o l'API Application Auto Scaling.

**Topics**
+ [Registrazione di un modello (AWS CLI)](#endpoint-auto-scaling-add-cli)
+ [Registrazione di un modello (API di dimensionamento automatico dell’applicazione)](#endpoint-auto-scaling-add-api)

## Registrazione di un modello (AWS CLI)
<a name="endpoint-auto-scaling-add-cli"></a>

Per registrare la variante di produzione, utilizzate il [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)comando con i seguenti parametri:
+ `--service-namespace` – Impostare questo valore su `sagemaker`.
+ `--resource-id` – L'identificatore di risorsa del modello (in particolare, la variante di produzione). Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante di produzione. Ad esempio, `endpoint/my-endpoint/variant/my-variant`.
+ `--scalable-dimension` – Impostare questo valore su `sagemaker:variant:DesiredInstanceCount`.
+ `--min-capacity` - Il numero minimo di istanze. Questo valore deve essere impostato su almeno 1 e deve essere uguale o minore rispetto al valore specificato per `max-capacity`.
+ `--max-capacity` - Il numero massimo di istanze. Questo valore deve essere impostato su almeno 1 e deve essere uguale o maggiore rispetto al valore specificato per `min-capacity`.

**Example**  
L’esempio seguente mostra come registrare una variante denominata `my-variant`, in esecuzione sull’endpoint `my-endpoint`, che viene dimensionata in modo dinamico per avere da una a otto istanze.  

```
aws application-autoscaling register-scalable-target \
  --service-namespace sagemaker \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount \
  --min-capacity 1 \
  --max-capacity 8
```

## Registrazione di un modello (API di dimensionamento automatico dell’applicazione)
<a name="endpoint-auto-scaling-add-api"></a>

Per registrare il modello con Application Auto Scaling, utilizzare l'azione API [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html) Application Auto Scaling con i parametri seguenti:
+ `ServiceNamespace` – Impostare questo valore su `sagemaker`.
+ `ResourceID` – l'identificatore di risorsa per la variante di produzione. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/my-endpoint/variant/my-variant`.
+ `ScalableDimension` – Impostare questo valore su `sagemaker:variant:DesiredInstanceCount`.
+ `MinCapacity` - Il numero minimo di istanze. Questo valore deve essere impostato su almeno 1 e deve essere uguale o minore rispetto al valore specificato per `MaxCapacity`.
+ `MaxCapacity` - Il numero massimo di istanze. Questo valore deve essere impostato su almeno 1 e deve essere uguale o maggiore rispetto al valore specificato per `MinCapacity`.

**Example**  
L’esempio seguente mostra come registrare una variante denominata `my-variant`, in esecuzione sull’endpoint `my-endpoint`, che viene dimensionata in modo dinamico per utilizzare da una a otto istanze.  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "MinCapacity": 1,
    "MaxCapacity": 8
}
```

# Definizione di una policy di dimensionamento
<a name="endpoint-auto-scaling-add-code-define"></a>

Prima di aggiungere una policy di dimensionamento al modello, salva la configurazione come blocco JSON in un file di testo. Utilizzate quel file di testo quando richiamate AWS Command Line Interface (AWS CLI) o l'API Application Auto Scaling. È possibile ottimizzare la scalabilità scegliendo una metrica appropriata. CloudWatch Tuttavia, prima di utilizzare una metrica personalizzata in produzione, è necessario testare il dimensionamento automatico con la metrica personalizzata.

**Topics**
+ [Specificate una metrica predefinita (metrica:) CloudWatch InvocationsPerInstance](#endpoint-auto-scaling-add-code-predefined)
+ [Specificate una metrica predefinita ad alta risoluzione (CloudWatch metrics: and) ConcurrentRequestsPerModel ConcurrentRequestsPerCopy](#endpoint-auto-scaling-add-code-high-res)
+ [Definisci una metrica personalizzata (CloudWatch metrica:) CPUUtilization](#endpoint-auto-scaling-add-code-custom)
+ [Definisci una metrica personalizzata (CloudWatch metrica:) ExplanationsPerInstance](#endpoint-auto-scaling-online-explainability)
+ [Specificare i tempi di raffreddamento](#endpoint-auto-scaling-add-code-cooldown)

Questa sezione mostra esempi di configurazioni per policy di dimensionamento con monitoraggio delle destinazioni.

## Specificate una metrica predefinita (metrica:) CloudWatch InvocationsPerInstance
<a name="endpoint-auto-scaling-add-code-predefined"></a>

**Example**  
Di seguito è riportato un esempio di configurazione della policy con monitoraggio delle destinazioni per una variante che mantiene la media delle invocazioni per istanza a 70. Salva questa configurazione in un file denominato `config.json`.  

```
{
    "TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    }
}
```
Per ulteriori informazioni, consulta [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)l'*Application Auto Scaling API* Reference.

## Specificate una metrica predefinita ad alta risoluzione (CloudWatch metrics: and) ConcurrentRequestsPerModel ConcurrentRequestsPerCopy
<a name="endpoint-auto-scaling-add-code-high-res"></a>

Con le seguenti CloudWatch metriche ad alta risoluzione, puoi impostare politiche di scalabilità per il volume di richieste simultanee ricevute dai tuoi modelli:

**ConcurrentRequestsPerModel**  
Il numero di richieste simultanee ricevute da un container di modelli.

**ConcurrentRequestsPerCopy**  
Il numero di richieste simultanee ricevute da un componente di inferenza.

Queste metriche tengono traccia del numero di richieste simultanee gestite dai container di modelli, incluse le richieste in coda all’interno dei container. Per i modelli che inviano la risposta di inferenza come flusso di token, queste metriche tengono traccia di ogni richiesta fino a quando il modello non invia l’ultimo token per la richiesta.

Essendo metriche ad alta risoluzione, emettono dati più frequentemente rispetto alle metriche standard. CloudWatch Le metriche standard, ad esempio `InvocationsPerInstance`, emettono dati una volta al minuto. Tuttavia, queste metriche ad alta risoluzione emettono dati ogni 10 secondi. Pertanto, con l’aumento del traffico simultaneo verso i modelli, la policy esegue l’aumento orizzontale molto più rapidamente rispetto alle metriche standard. Tuttavia, man mano che il traffico verso i modelli diminuisce, la policy si riduce orizzontalmente alla stessa velocità delle metriche standard.

Di seguito è riportato un esempio di configurazione della policy con monitoraggio delle destinazioni che aggiunge istanze se il numero di richieste simultanee per modello è maggiore di 5. Salva questa configurazione in un file denominato `config.json`.

```
{
    "TargetValue": 5.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantConcurrentRequestsPerModelHighResolution"
    }
}
```

In caso di utilizzo di componenti di inferenza per implementare più modelli sullo stesso endpoint, è possibile creare una policy equivalente. In tal caso, imposta `PredefinedMetricType` su `SageMakerInferenceComponentConcurrentRequestsPerCopyHighResolution`.

Per ulteriori informazioni, consulta [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)l'*Application Auto Scaling API* Reference.

## Definisci una metrica personalizzata (CloudWatch metrica:) CPUUtilization
<a name="endpoint-auto-scaling-add-code-custom"></a>

Per creare una policy di dimensionamento con monitoraggio delle destinazioni con una metrica personalizzata, specifica il nome, il namespace, l’unità, la statistica e nessuna o più dimensioni della metrica. Una dimensione è composta da un nome di dimensione e un valore di dimensione. È possibile utilizzare qualsiasi metrica di variante di produzione che varia in proporzione alla capacità. 

**Example**  
La configurazione di esempio seguente mostra una policy di dimensionamento con monitoraggio delle destinazioni con una metrica personalizzata. La policy scala la variante in base a un utilizzo medio della CPU del 50% in tutte le istanze. Salva questa configurazione in un file denominato `config.json`.  

```
{
    "TargetValue": 50.0,
    "CustomizedMetricSpecification":
    {
        "MetricName": "CPUUtilization",
        "Namespace": "/aws/sagemaker/Endpoints",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "VariantName","Value": "my-variant"}
        ],
        "Statistic": "Average",
        "Unit": "Percent"
    }
}
```
Per ulteriori informazioni, consulta [CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)l'*Application Auto Scaling API* Reference. 

## Definisci una metrica personalizzata (CloudWatch metrica:) ExplanationsPerInstance
<a name="endpoint-auto-scaling-online-explainability"></a>

In caso di spiegabilità online attivata, l’endpoint emette una metrica `ExplanationsPerInstance` che restituisce il numero medio di record spiegati al minuto, per istanza, per una variante. L'utilizzo delle risorse per spiegare i record può essere più diverso da quello dei record di previsione. È vivamente consigliabile utilizzare questa metrica per il dimensionamento degli endpoint con monitoraggio delle destinazioni con la spiegabilità online attivata.

È possibile creare più policy con monitoraggio delle destinazioni per una destinazione scalabile. Prendi in considerazione l’aggiunta della policy `InvocationsPerInstance` dalla sezione [Specificate una metrica predefinita (metrica:) CloudWatch InvocationsPerInstance](#endpoint-auto-scaling-add-code-predefined) (oltre alla policy `ExplanationsPerInstance`). Se la maggior parte delle invocazioni non restituisce una spiegazione a causa del valore di soglia impostato nel parametro `EnableExplanations`, l’endpoint può scegliere la policy `InvocationsPerInstance`. Se il numero di spiegazioni è elevato, l'endpoint può utilizzare la policy `ExplanationsPerInstance`. 

**Example**  
La configurazione di esempio seguente mostra una policy di dimensionamento con monitoraggio delle destinazioni con una metrica personalizzata. Il dimensionamento della policy regola il numero di istanze di variante in modo che ogni istanza abbia una metrica `ExplanationsPerInstance` di 20. Salva questa configurazione in un file denominato `config.json`.  

```
{
    "TargetValue": 20.0,
    "CustomizedMetricSpecification":
    {
        "MetricName": "ExplanationsPerInstance",
        "Namespace": "AWS/SageMaker",
        "Dimensions": [
            {"Name": "EndpointName", "Value": "my-endpoint" },
            {"Name": "VariantName","Value": "my-variant"}
        ],
        "Statistic": "Sum"
    }
}
```

Per ulteriori informazioni, consulta [CustomizedMetricSpecification](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_CustomizedMetricSpecification.html)l'*Application Auto Scaling API* Reference. 

## Specificare i tempi di raffreddamento
<a name="endpoint-auto-scaling-add-code-cooldown"></a>

Facoltativamente, è possibile definire i tempi di raffreddamento nella policy di dimensionamento con monitoraggio delle destinazioni specificando i parametri `ScaleOutCooldown` e `ScaleInCooldown`. 

**Example**  
Di seguito è riportato un esempio di configurazione della policy con monitoraggio delle destinazioni per una variante che mantiene la media delle invocazioni per istanza a 70. La configurazione della policy fornisce un tempo di raffreddamento per la riduzione orizzontale di 10 minuti (600 secondi) e un tempo di raffreddamento per l’aumento orizzontale di 5 minuti (300 secondi). Salva questa configurazione in un file denominato `config.json`.   

```
{
    "TargetValue": 70.0,
    "PredefinedMetricSpecification":
    {
        "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
    },
    "ScaleInCooldown": 600,
    "ScaleOutCooldown": 300
}
```
Per ulteriori informazioni, consulta [TargetTrackingScalingPolicyConfiguration](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html)l'*Application Auto Scaling API* Reference. 

# Applicazione di una policy di scalabilità
<a name="endpoint-auto-scaling-add-code-apply"></a>

Dopo la registrazione di un modello e la definizione di una policy di dimensionamento, applica la policy di dimensionamento al modello registrato. Questa sezione mostra come applicare una policy di dimensionamento utilizzando l’ AWS Command Line Interface (AWS CLI) o l’API Application Auto Scaling. 

**Topics**
+ [Applicare una policy di dimensionamento con monitoraggio delle destinazioni (AWS CLI)](#endpoint-auto-scaling-add-code-apply-cli)
+ [Applica una policy di dimensionamento (API di Application Auto Scaling)](#endpoint-auto-scaling-add-code-apply-api)

## Applicare una policy di dimensionamento con monitoraggio delle destinazioni (AWS CLI)
<a name="endpoint-auto-scaling-add-code-apply-cli"></a>

Per applicare una politica di scalabilità al tuo modello, usa il [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html) AWS CLI comando con i seguenti parametri:
+ `--policy-name` – Il nome della policy di dimensionamento.
+ `--policy-type` – Impostare questo valore su `TargetTrackingScaling`.
+ `--resource-id` – L'identificatore di risorsa per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/my-endpoint/variant/my-variant`.
+ `--service-namespace` – Impostare questo valore su `sagemaker`.
+ `--scalable-dimension` – Impostare questo valore su `sagemaker:variant:DesiredInstanceCount`.
+ `--target-tracking-scaling-policy-configuration` - La configurazione di una policy di dimensionamento con monitoraggio delle destinazioni da utilizzare per il modello.

**Example**  
L’esempio seguente applica una policy di dimensionamento con monitoraggio delle destinazioni denominata `my-scaling-policy` a una variante denominata `my-variant`, in esecuzione sull’endpoint `my-endpoint`. Per l’opzione `--target-tracking-scaling-policy-configuration` specifica il file `config.json` creato in precedenza.   

```
aws application-autoscaling put-scaling-policy \
  --policy-name my-scaling-policy \
  --policy-type TargetTrackingScaling \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --service-namespace sagemaker \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount \
  --target-tracking-scaling-policy-configuration file://config.json
```

## Applica una policy di dimensionamento (API di Application Auto Scaling)
<a name="endpoint-auto-scaling-add-code-apply-api"></a>

Per applicare una policy di dimensionamento a una variante con l'API Application Auto Scaling, utilizzare l'azione API Application Auto Scaling [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html) con i parametri seguenti:
+ `PolicyName` – Il nome della policy di dimensionamento.
+ `ServiceNamespace` – Impostare questo valore su `sagemaker`.
+ `ResourceID` – L'identificatore di risorsa per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/my-endpoint/variant/my-variant`.
+ `ScalableDimension` – Impostare questo valore su `sagemaker:variant:DesiredInstanceCount`.
+ `PolicyType` – Impostare questo valore su `TargetTrackingScaling`.
+ `TargetTrackingScalingPolicyConfiguration` – La configurazione di una policy di dimensionamento di monitoraggio dei target da utilizzare per la variante.

**Example**  
L’esempio seguente applica una policy di dimensionamento con monitoraggio delle destinazioni denominata `my-scaling-policy` a una variante denominata `my-variant`, in esecuzione sull’endpoint `my-endpoint`. La configurazione della policy mantiene la media delle invocazioni per istanza a 70.  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "my-scaling-policy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": {
        "TargetValue": 70.0,
        "PredefinedMetricSpecification":
        {
            "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
        }
    }
}
```

# Istruzioni per la modifica di una policy di dimensionamento
<a name="endpoint-auto-scaling-edit"></a>

Dopo aver creato una policy di dimensionamento, è possibile modificare qualsiasi impostazione relativa a essa, ad eccezione del nome.

 Per modificare una politica di ridimensionamento di Target Tracking con Console di gestione AWS, utilizza la stessa procedura utilizzata. [Configurazione del modello di scalabilità automatica con la console](endpoint-auto-scaling-add-console.md)

È possibile utilizzare l'API Application Auto Scaling AWS CLI o l'API Application Auto Scaling per modificare una politica di scalabilità nello stesso modo in cui si crea una nuova politica di scaling. Per ulteriori informazioni, consulta [Applicazione di una policy di scalabilità](endpoint-auto-scaling-add-code-apply.md).

# Disattivare temporaneamente le policy di dimensionamento
<a name="endpoint-auto-scaling-suspend-scaling-activities"></a>

Dopo aver configurato il dimensionamento automatico, sono disponibili le seguenti opzioni se è necessario esaminare un problema senza interferenze dovute alle policy di dimensionamento dinamico:
+ Sospendi temporaneamente e riprendi le attività di scalabilità chiamando il comando [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)CLI o l'azione [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)API, specificando un valore booleano per entrambi e. `DynamicScalingInSuspended` `DynamicScalingOutSuspended`   
**Example**  

  L’esempio seguente mostra come sospendere le policy di dimensionamento per una variante denominata `my-variant`, in esecuzione sull’endpoint `my-endpoint`.

  ```
  aws application-autoscaling register-scalable-target \
    --service-namespace sagemaker \
    --resource-id endpoint/my-endpoint/variant/my-variant \
    --scalable-dimension sagemaker:variant:DesiredInstanceCount \
    --suspended-state '{"DynamicScalingInSuspended":true,"DynamicScalingOutSuspended":true}'
  ```
+ Impedisci che specifiche policy di dimensionamento con monitoraggio delle destinazioni riducano orizzontalmente una variante disabilitando la parte di riduzione orizzontale della policy. Questo metodo impedisce alla policy di dimensionamento di eliminare istanze, consentendo tuttavia di crearle in base alle esigenze.

  Disabilita temporaneamente e quindi abilita le attività di scalabilità modificando la policy utilizzando il comando [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)CLI o l'azione [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)API, specificando un valore booleano per. `DisableScaleIn`  
**Example**  

  Di seguito è riportato un esempio di configurazione con monitoraggio delle destinazioni per una policy di dimensionamento con aumento orizzontale, ma non riduzione orizzontale. 

  ```
  {
      "TargetValue": 70.0,
      "PredefinedMetricSpecification":
      {
          "PredefinedMetricType": "SageMakerVariantInvocationsPerInstance"
      },
      "DisableScaleIn": true
  }
  ```

# Eliminazione di una policy di dimensionamento
<a name="endpoint-auto-scaling-delete"></a>

Se una policy di dimensionamento non è più necessaria, è possibile eliminarla in qualsiasi momento.

**Topics**
+ [Eliminare tutte le policy di dimensionamento e annullare la registrazione del modello (console)](#endpoint-auto-scaling-delete-console)
+ [Eliminare una policy di scalabilità (AWS CLI o Application Auto Scaling API)](#endpoint-auto-scaling-delete-code)

## Eliminare tutte le policy di dimensionamento e annullare la registrazione del modello (console)
<a name="endpoint-auto-scaling-delete-console"></a>

**Per eliminare tutte le policy di dimensionamento e annullare la registrazione della variante come destinazione scalabile**

1. Apri la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Nel riquadro di navigazione, seleziona **Endpoint**.

1. Scegli il tuo endpoint e quindi, per **Impostazioni del runtime dell’endpoint**, scegli la variante.

1. Selezionare **Configura dimensionamento automatico**.

1. Selezionare **Annulla registrazione del dimensionamento automatico**.

## Eliminare una policy di scalabilità (AWS CLI o Application Auto Scaling API)
<a name="endpoint-auto-scaling-delete-code"></a>

È possibile utilizzare l'API Application Auto Scaling AWS CLI o l'API Application Auto Scaling per eliminare una politica di scalabilità da una variante.

### Eliminazione una policy di dimensionamento (AWS CLI)
<a name="endpoint-auto-scaling-delete-code-cli"></a>

Per eliminare una politica di ridimensionamento da una variante, utilizzate il [delete-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/delete-scaling-policy.html)comando con i seguenti parametri:
+ `--policy-name` – Il nome della policy di dimensionamento.
+ `--resource-id` – L'identificatore di risorsa per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/my-endpoint/variant/my-variant`.
+ `--service-namespace` – Impostare questo valore su `sagemaker`.
+ `--scalable-dimension` – Impostare questo valore su `sagemaker:variant:DesiredInstanceCount`.

**Example**  
L’esempio seguente elimina una policy di dimensionamento con monitoraggio delle destinazioni denominata `my-scaling-policy` da una variante denominata `my-variant`, in esecuzione sull’endpoint `my-endpoint`.  

```
aws application-autoscaling delete-scaling-policy \
  --policy-name my-scaling-policy \
  --resource-id endpoint/my-endpoint/variant/my-variant \
  --service-namespace sagemaker \
  --scalable-dimension sagemaker:variant:DesiredInstanceCount
```

### Elimina una policy di dimensionamento (API Application Auto Scaling)
<a name="endpoint-auto-scaling-delete-code-api"></a>

Per eliminare una policy di dimensionamento dalla tua variante, utilizza l'azione API Application Auto Scaling; [DeleteScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeleteScalingPolicy.html) con i parametri seguenti:
+ `PolicyName` – Il nome della policy di dimensionamento.
+ `ServiceNamespace` – Impostare questo valore su `sagemaker`.
+ `ResourceID` – L'identificatore di risorsa per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/my-endpoint/variant/my-variant`.
+ `ScalableDimension` – Impostare questo valore su `sagemaker:variant:DesiredInstanceCount`.

**Example**  
L’esempio seguente elimina una policy di dimensionamento con monitoraggio delle destinazioni denominata `my-scaling-policy` da una variante denominata `my-variant`, in esecuzione sull’endpoint `my-endpoint`.  

```
POST / HTTP/1.1
Host: application-autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20230506T182145Z
User-Agent: aws-cli/2.0.0 Python/3.7.5 Windows/10 botocore/2.0.0dev4
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "my-scaling-policy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount"
}
```

# Controllare lo stato di un’attività di dimensionamento descrivendo le attività di dimensionamento
<a name="endpoint-scaling-query-history"></a>

È possibile controllare lo stato di un’attività di dimensionamento per un endpoint con dimensionamento automatico descrivendo le attività di dimensionamento. Application Auto Scaling fornisce informazioni descrittive sulle attività di dimensionamento nel namespace specificato per le sei settimane precedenti. Per ulteriori informazioni, consulta [Attività di dimensionamento per Application Auto Scaling](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-scaling-activities.html) nella *Guida per l’utente di Application Auto Scaling*.

Per verificare lo stato di un'attività di ridimensionamento, utilizzate il [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)comando. Non è possibile controllare lo stato di un’attività di dimensionamento utilizzando la console.

**Topics**
+ [Descrivere le attività di dimensionamento (AWS CLI)](#endpoint-how-to)
+ [Identificare attività di dimensionamento automatico bloccate da quote di istanza (AWS CLI)](#endpoint-identify-blocked-autoscaling)

## Descrivere le attività di dimensionamento (AWS CLI)
<a name="endpoint-how-to"></a>

Per descrivere le attività di scalabilità per tutte le risorse SageMaker AI registrate con Application Auto Scaling, usa [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)il comando, `sagemaker` specificando l'opzione. `--service-namespace`

```
aws application-autoscaling describe-scaling-activities \
  --service-namespace sagemaker
```

Per descrivere le attività di dimensionamento per una risorsa specifica, includi l’opzione `--resource-id`. 

```
aws application-autoscaling describe-scaling-activities \
  --service-namespace sagemaker \
  --resource-id endpoint/my-endpoint/variant/my-variant
```

L’esempio seguente mostra l’output prodotto all’esecuzione di questo comando.

```
{
    "ActivityId": "activity-id",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "Description": "string",
    "Cause": "string",
    "StartTime": timestamp,
    "EndTime": timestamp,
    "StatusCode": "string",
    "StatusMessage": "string"
}
```

## Identificare attività di dimensionamento automatico bloccate da quote di istanza (AWS CLI)
<a name="endpoint-identify-blocked-autoscaling"></a>

Quando esegui l’aumento orizzontale (aggiunta di altre istanze), potresti raggiungere la quota di istanze a livello di account. È possibile utilizzare il [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)comando per verificare se è stata raggiunta la quota di istanza. Quando superi la quota, il dimensionamento automatico si blocca. 

Per verificare se hai raggiunto la quota di istanza, usa il [describe-scaling-activities](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/describe-scaling-activities.html)comando e specifica l'ID della risorsa per l'`--resource-id`opzione. 

```
aws application-autoscaling describe-scaling-activities \
    --service-namespace sagemaker \
    --resource-id endpoint/my-endpoint/variant/my-variant
```

All'interno della sintassi return, controlla le chiavi [StatusCode](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusCode) e [StatusMessage](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_ScalingActivity.html#autoscaling-Type-ScalingActivity-StatusMessage) e i valori associati. `StatusCode` restituiti`Failed`. All'interno di `StatusMessage` è presente un messaggio che indica che è stata raggiunta la quota di servizio a livello di account. Di seguito è riportato un esempio di come tale messaggio potrebbe presentarsi: 

```
{
    "ActivityId": "activity-id",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/my-endpoint/variant/my-variant",
    "ScalableDimension": "sagemaker:variant:DesiredInstanceCount",
    "Description": "string",
    "Cause": "minimum capacity was set to 110",
    "StartTime": timestamp,
    "EndTime": timestamp,
    "StatusCode": "Failed",
    "StatusMessage": "Failed to set desired instance count to 110. Reason: The 
    account-level service limit 'ml.xx.xxxxxx for endpoint usage' is 1000 
    Instances, with current utilization of 997 Instances and a request delta 
    of 20 Instances. Please contact AWS support to request an increase for this 
    limit. (Service: AmazonSageMaker; Status Code: 400; 
    Error Code: ResourceLimitExceeded; Request ID: request-id)."
}
```

# Scalare un endpoint a zero istanze
<a name="endpoint-auto-scaling-zero-instances"></a>

In fase di configurazione del dimensionamento automatico per un endpoint, è possibile consentire al processo di ridurre orizzontalmente a zero il numero di istanze in servizio. In questo modo, risparmi sui costi nei periodi in cui l’endpoint non gestisce richieste di inferenza e quindi non richiede istanze attive. 

Tuttavia, dopo la riduzione orizzontale a zero istanze, l’endpoint non può rispondere alle richieste di inferenza in entrata finché non esegue il provisioning di almeno un’istanza. Per automatizzare il processo di provisioning, è possibile creare una policy di dimensionamento per fasi con Application Auto Scaling. Quindi, assegni la politica a un CloudWatch allarme Amazon.

Dopo aver impostato la policy di dimensionamento per fasi e l’allarme, l’endpoint esegue automaticamente il provisioning di un’istanza subito dopo aver ricevuto una richiesta di inferenza a cui non può rispondere. Il processo di provisioning richiede diversi minuti. Durante questo periodo, qualsiasi tentativo di invocare l’endpoint genera un errore.

Le procedure seguenti spiegano come impostare il dimensionamento automatico per un endpoint in modo che esegua una riduzione orizzontale fino a zero istanze e un aumento orizzontale a partire da zero istanze. Le procedure utilizzano comandi con l’ AWS CLI.

**Prima di iniziare**

Prima che l’endpoint possa essere ridotto orizzontalmente fino a zero istanze e aumentato orizzontalmente da partire da zero istanze, deve soddisfare i seguenti requisiti:
+ È in servizio.
+ Ospita uno o più componenti di inferenza. Un endpoint può essere ridotto orizzontalmente fino a zero istanze e aumentato orizzontalmente da partire da zero istanze solo se ospita componenti di inferenza.

  Per informazioni sull'hosting dei componenti di inferenza sugli endpoint SageMaker AI, consulta. [Implementazione di modelli per l’inferenza in tempo reale](realtime-endpoints-deploy-models.md)
+ Nella configurazione dell’endpoint, per l’oggetto `ManagedInstanceScaling` di variante di produzione, il parametro `MinInstanceCount` è stato impostato su `0`.

  Per informazioni di riferimento su questo parametro, vedere. [ProductionVariantManagedInstanceScaling](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariantManagedInstanceScaling.html)

**Per consentire la riduzione orizzontale di un endpoint fino a zero istanze (AWS CLI)**

Per ogni componente di inferenza ospitato dall’endpoint, procedi come segue:

1. Registra il componente di inferenza come destinazione scalabile. Una volta registrato, imposta la capacità minima su `0`, come mostrato dal comando seguente:

   ```
   aws application-autoscaling register-scalable-target \
     --service-namespace sagemaker \
     --resource-id inference-component/inference-component-name \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --min-capacity 0 \
     --max-capacity n
   ```

   In questo esempio, sostituiscilo *inference-component-name* con il nome del tuo componente di inferenza. *n*Sostituitelo con il numero massimo di copie del componente di inferenza da fornire durante la scalabilità orizzontale.

   Per ulteriori informazioni su questo comando e su ciascuno dei relativi parametri, consultate la sezione *AWS CLI Command [register-scalable-target](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/register-scalable-target.html)*Reference.

1. Applica una policy con monitoraggio delle destinazioni al componente di inferenza, come mostrato dal comando seguente:

   ```
   aws application-autoscaling put-scaling-policy \
     --policy-name my-scaling-policy \
     --policy-type TargetTrackingScaling \
     --resource-id inference-component/inference-component-name \
     --service-namespace sagemaker \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --target-tracking-scaling-policy-configuration file://config.json
   ```

   In questo esempio, sostituiscilo *inference-component-name* con il nome del tuo componente di inferenza.

   Nell’esempio, il file `config.json` contiene una configurazione della policy con monitoraggio delle destinazioni, come la seguente:

   ```
   {
     "PredefinedMetricSpecification": {
         "PredefinedMetricType": "SageMakerInferenceComponentInvocationsPerCopy"
     },
     "TargetValue": 1,
     "ScaleInCooldown": 300,
     "ScaleOutCooldown": 300
   }
   ```

   Per ulteriori esempi di configurazioni di policy con monitoraggio, consulta [Definizione di una policy di dimensionamento](endpoint-auto-scaling-add-code-define.md).

   Per ulteriori informazioni su questo comando e su ciascuno dei relativi parametri, [put-scaling-policy](https://docs.aws.amazon.com/cli/latest/reference/application-autoscaling/put-scaling-policy.html)consultate la sezione *AWS CLI Command Reference*.

**Per consentire l’aumento orizzontale di un endpoint a partire da zero istanze (AWS CLI)**

Per ogni componente di inferenza ospitato dall’endpoint, procedi come segue:

1. Applica una policy di dimensionamento per fasi al componente di inferenza, come mostrato dal comando seguente:

   ```
   aws application-autoscaling put-scaling-policy \
     --policy-name my-scaling-policy \
     --policy-type StepScaling \
     --resource-id inference-component/inference-component-name \
     --service-namespace sagemaker \
     --scalable-dimension sagemaker:inference-component:DesiredCopyCount \
     --step-scaling-policy-configuration file://config.json
   ```

   In questo esempio, sostituiscilo *my-scaling-policy* con un nome univoco per la tua politica. Sostituisci *inference-component-name* con il nome del tuo componente di inferenza.

   Nell’esempio, il file `config.json` contiene una configurazione della policy di dimensionamento per fasi, come la seguente:

   ```
   {
       "AdjustmentType": "ChangeInCapacity",
       "MetricAggregationType": "Maximum",
       "Cooldown": 60,
       "StepAdjustments":
         [
            {
              "MetricIntervalLowerBound": 0,
              "ScalingAdjustment": 1
            }
         ]
   }
   ```

   Quando viene attivata questa politica di scalabilità in fasi, l' SageMaker intelligenza artificiale fornisce le istanze necessarie per supportare le copie dei componenti di inferenza.

   Dopo aver creato la policy di dimensionamento per fasi, prendi nota del relativo nome della risorsa Amazon (ARN). Nella fase successiva è necessario l'ARN per l' CloudWatch allarme.

   Per ulteriori informazioni sulle policy di dimensionamento per fasi, consulta [Policy di dimensionamento per fasi](https://docs.aws.amazon.com/autoscaling/application/userguide/application-auto-scaling-step-scaling-policies.html) nella *Guida per l’utente di Application Auto Scaling*.

1. Crea un CloudWatch allarme e assegnagli la politica di scalabilità dei passaggi, come mostrato nell'esempio seguente:

   ```
   aws cloudwatch put-metric-alarm \
   --alarm-actions step-scaling-policy-arn \
   --alarm-description "Alarm when SM IC endpoint invoked that has 0 instances." \
   --alarm-name ic-step-scaling-alarm \
   --comparison-operator GreaterThanThreshold  \
   --datapoints-to-alarm 1 \
   --dimensions "Name=InferenceComponentName,Value=inference-component-name" \
   --evaluation-periods 1 \
   --metric-name NoCapacityInvocationFailures \
   --namespace AWS/SageMaker \
   --period 60 \
   --statistic Sum \
   --threshold 1
   ```

   In questo esempio, sostituisci *step-scaling-policy-arn* con l'ARN della tua politica di scalabilità graduale. *ic-step-scaling-alarm*Sostituiscilo con un nome a tua scelta. Sostituisci *inference-component-name* con il nome del tuo componente di inferenza. 

   Questo esempio imposta il `--metric-name` parametro su. `NoCapacityInvocationFailures` SageMaker L'intelligenza artificiale emette questa metrica quando un endpoint riceve una richiesta di inferenza, ma l'endpoint non ha istanze attive per soddisfare la richiesta. Quando si verifica questo evento, l’allarme avvia la policy di dimensionamento per fasi della fase precedente.

   *Per ulteriori informazioni su questo comando e su ciascuno dei relativi parametri, consulta la sezione Command Reference. [put-metric-alarm](https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-alarm.html)AWS CLI *

# Test del caricamento della configurazione di scalabilità automatica
<a name="endpoint-scaling-loadtest"></a>

Esegui test di carico per scegliere una configurazione di dimensionamento che funzioni come desideri.

Le seguenti linee guida per i test di carico presumono che tu stia utilizzando una policy di dimensionamento che utilizzi la metrica di destinazione predefinita `SageMakerVariantInvocationsPerInstance`.

**Topics**
+ [Determinazione delle caratteristiche delle prestazioni](#endpoint-scaling-loadtest-variant)
+ [Calcolo del carico di destinazione](#endpoint-scaling-loadtest-calc)

## Determinazione delle caratteristiche delle prestazioni
<a name="endpoint-scaling-loadtest-variant"></a>

Esegui il test di carico per trovare il picco `InvocationsPerInstance` che la tua variante di produzione del modello è in grado di gestire e la latenza delle richieste, mentre aumenta la concorrenza.

Questo valore dipende dal tipo di istanza scelto, dai payload che i client inviati in genere dai client del modello e dalle prestazioni di eventuali dipendenze esterne del modello.

**Per individuare il picco requests-per-second (RPS) che la variante di produzione del modello è in grado di gestire e la latenza delle richieste**

1. Configura un endpoint con il modello utilizzando una singola istanza. Per informazioni su come configurare un endpoint, consulta [Implementa il modello su AI Hosting Services SageMaker](ex1-model-deployment.md#ex1-deploy-model).

1. Utilizza un test di carico per generare un numero sempre maggiore di richieste parallele e monitorare le richieste al secondo (RPS) e la latenza del modello nell'output dello strumento di test di carico. 
**Nota**  
È inoltre possibile monitorare requests-per-minute anziché RPS. In questo caso non moltiplicare per 60 nell'equazione per calcolare `SageMakerVariantInvocationsPerInstance` come riportato di seguito.

   Quando la latenza del modello aumenta o la percentuale di transazioni di successo diminuisce, questo è il livello di RPS massimo che il modello è in grado di gestire.

## Calcolo del carico di destinazione
<a name="endpoint-scaling-loadtest-calc"></a>

Dopo aver trovato le caratteristiche di prestazioni della variante, puoi determinare il livello massimo di RPS che dobbiamo consentire venga inviato a un'istanza. La soglia utilizzata per il dimensionamento deve essere inferiore a questo valore massimo. Utilizza la seguente equazione in combinazione con un test di carico per determinare il valore corretto per la metrica di destinazione `SageMakerVariantInvocationsPerInstance` nella tua configurazione di dimensionamento.

```
SageMakerVariantInvocationsPerInstance = (MAX_RPS * SAFETY_FACTOR) * 60
```

Dove `MAX_RPS` è il numero massimo di RPS che hai stabilito in precedenza e `SAFETY_FACTOR` è il fattore di sicurezza scelto per assicurare che i tuoi client non superino il livello massimo di RPS. Moltiplica per 60 per convertire da RPS invocations-per-minute a corrispondere alla CloudWatch metrica al minuto utilizzata dall' SageMaker IA per implementare la scalabilità automatica (non è necessario farlo se hai misurato invece di). requests-per-minute requests-per-second

**Nota**  
SageMaker L'intelligenza artificiale consiglia di iniziare il test con un valore di 0,5. `SAFETY_FACTOR` Verifica la tua configurazione di dimensionamento per garantire che funzioni nel modo previsto con il tuo modello, sia per aumentare sia per ridurre orizzontalmente il traffico dei clienti sull’endpoint.

# Utilizzalo CloudFormation per creare una politica di scalabilità
<a name="endpoint-scaling-cloudformation"></a>

L’esempio seguente mostra come configurare il dimensionamento automatico dei modelli su un endpoint con CloudFormation.

```
  Endpoint:
    Type: "AWS::SageMaker::Endpoint"
    Properties:
      EndpointName: yourEndpointName
      EndpointConfigName: yourEndpointConfigName

  ScalingTarget:
    Type: "AWS::ApplicationAutoScaling::ScalableTarget"
    Properties:
      MaxCapacity: 10
      MinCapacity: 2
      ResourceId: endpoint/my-endpoint/variant/my-variant
      RoleARN: arn
      ScalableDimension: sagemaker:variant:DesiredInstanceCount
      ServiceNamespace: sagemaker

  ScalingPolicy:
    Type: "AWS::ApplicationAutoScaling::ScalingPolicy"
    Properties:
      PolicyName: my-scaling-policy
      PolicyType: TargetTrackingScaling
      ScalingTargetId:
        Ref: ScalingTarget
      TargetTrackingScalingPolicyConfiguration:
        TargetValue: 70.0
        ScaleInCooldown: 600
        ScaleOutCooldown: 30
        PredefinedMetricSpecification:
          PredefinedMetricType: SageMakerVariantInvocationsPerInstance
```

Per ulteriori informazioni, consulta [Crea risorse Application Auto Scaling con AWS CloudFormation](https://docs.aws.amazon.com/autoscaling/application/userguide/creating-resources-with-cloudformation.html) nella *Guida per l’utente di Application Auto Scaling*.

# Aggiornare gli endpoint che utilizzano il dimensionamento automatico
<a name="endpoint-scaling-update"></a>

Quando aggiorni un endpoint, Application Auto Scaling verifica se uno qualsiasi dei modelli su tale endpoint è una destinazione per il dimensionamento automatico. Se l’aggiornamento modifica il tipo di istanza per qualsiasi modello che è una destinazione per il dimensionamento automatico, l’aggiornamento non va a buon fine. 

Nel Console di gestione AWS, viene visualizzato un avviso che indica che è necessario annullare la registrazione del modello dal ridimensionamento automatico prima di poterlo aggiornare. Se stai tentando di aggiornare l'endpoint chiamando l'API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), la chiamata ha esito negativo. Prima di aggiornare l'endpoint, elimina tutte le politiche di scalabilità configurate per esso e annulla la registrazione della variante come destinazione scalabile chiamando l'azione API Application Auto Scaling [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html). Dopo aver aggiornato l’endpoint, puoi registrare la variante aggiornata come destinazione scalabile e collegare una policy di dimensionamento.

Esiste tuttavia un'eccezione. Se modifichi il modello per una variante configurata per la scalabilità automatica, la scalabilità automatica di Amazon SageMaker AI consente l'aggiornamento. Ciò avviene perché la modifica del modello, di solito, non incide abbastanza sulle prestazioni da giustificare un cambiamento nel comportamento di dimensionamento. Se aggiorni un modello per una variante configurata per il dimensionamento automatico, assicurati che la modifica al modello non influenzi significativamente le prestazioni e il comportamento di dimensionamento.

Quando aggiorni gli endpoint SageMaker AI a cui è applicata la scalabilità automatica, completa i seguenti passaggi:

**Per aggiornare un endpoint con dimensionamento automatico applicato**

1. Annulla la registrazione dell'endpoint come target scalabile chiamando. [DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)

1. Poiché il dimensionamento automatico è bloccato mentre l’operazione di aggiornamento è in corso (o se è stato disattivato il dimensionamento automatico nella fase precedente), è possibile adottare la precauzione aggiuntiva di aumentare il numero di istanze per l’endpoint durante l’aggiornamento. A questo scopo, aggiornare i conteggi delle istanze per le varianti di produzione ospitate a livello di endpoint chiamando [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html).

1. Chiamare ripetutamente [ DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) finché il valore del campo `EndpointStatus` della risposta è `InService`.

1. Chiamare [ DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) per ottenere i valori della configurazione endpoint corrente.

1. Creare una nuova configurazione dell'endpoint chiamando [ CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). Per le varianti di produzione in cui si desidera mantenere il conteggio o il peso dell'istanza esistente, utilizzare lo stesso nome della variante dalla risposta dalla chiamata [ DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) al passaggio precedente. Per tutti gli altri valori, utilizzare i valori ottenuti come risposta quando è stato chiamato [ DescribeEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpointConfig.html) nella fase precedente.

1. Aggiornare l'endpoint chiamando [ UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Specifica la configurazione dell'endpoint creata nella fase precedente come il campo `EndpointConfig`. Se si desidera mantenere le proprietà di variante come il conteggio delle istanze o il peso, impostare il valore del parametro `RetainAllVariantProperties` su `True`. Specifica che le varianti di produzione con lo stesso nome verranno aggiornate con il `DesiredInstanceCount` più recente dalla risposta dalla chiamata a `DescribeEndpoint`, indipendentemente dai valori del campo `InitialInstanceCount` nel nuovo `EndpointConfig`.

1. (Facoltativo) Riattiva il ridimensionamento automatico [RegisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_RegisterScalableTarget.html)chiamando e. [PutScalingPolicy](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_PutScalingPolicy.html)

**Nota**  
Le fasi 1 e 7 sono necessarie solo se stai aggiornando un endpoint con le seguenti modifiche:  
Modifica del tipo di istanza per una variante di produzione con dimensionamento automatico configurato
Rimozione di una variante di produzione con dimensionamento automatico configurato.

# Eliminare gli endpoint configurati per il dimensionamento automatico
<a name="endpoint-delete-with-scaling"></a>

Se elimini un endpoint, Application Auto Scaling verifica se uno qualsiasi dei modelli su tale endpoint è una destinazione per il dimensionamento automatico. Se qualcuno lo è e disponi dell'autorizzazione per annullare la registrazione del modello, Application Auto Scaling annulla la registrazione di tali modelli come target scalabili senza avvisarti. Se utilizzi una politica di autorizzazione personalizzata che non prevede l'autorizzazione per l'[DeregisterScalableTarget](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_DeregisterScalableTarget.html)azione, devi richiedere l'accesso a questa azione prima di eliminare l'endpoint.

**Nota**  
Come utente IAM potresti non disporre di autorizzazioni sufficienti per eliminare un endpoint se un altro utente ha configurato il dimensionamento automatico per una variante su tale endpoint.

# Volumi di archiviazione delle istanze
<a name="host-instance-storage"></a>

Quando crei un endpoint, Amazon SageMaker AI collega un volume di archiviazione Amazon Elastic Block Store (Amazon EBS) alle istanze Amazon EC2 che ospitano l’endpoint. La dimensione del volume di storage è scalabile e le opzioni di archiviazione sono suddivise in due categorie: storage con supporto SSD e storage con supporto HDD. 

Per ulteriori informazioni sull'archiviazione e le funzionalità di Amazon EBS, consulta le pagine seguenti:
+ [Funzionalità di Amazon EBS](https://aws.amazon.com/ebs/features/)
+ [Guida per l'utente di Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html)

Per un elenco completo dei volumi di archiviazione delle istanze host, vedere [Tabella dei volumi di archiviazione delle istanze host](https://aws.amazon.com/releasenotes/host-instance-storage-volumes-table/) 

**Nota**  
Amazon SageMaker AI collega un volume di archiviazione Amazon Elastic Block Store (Amazon EBS) alle istanze Amazon EC2 solo quando crei i tipi di endpoint [Inferenza asincrona](async-inference.md) o [Inferenza in tempo reale](realtime-endpoints.md). Per ulteriori informazioni sulla personalizzazione del volume di storage Amazon EBS, consulta [Parametri degli endpoint di SageMaker AI per l’inferenza di modelli di grandi dimensioni](large-model-inference-hosting.md).

# Convalida dei modelli in produzione
<a name="model-validation"></a>

 SageMaker AI consente di testare più modelli o versioni di modelli sullo lo stesso endpoint utilizzando le varianti. Una variante è costituita da un’istanza ML e dai componenti di distribuzione specificati in un modello di SageMaker AI. È possibile avere più varianti dietro un endpoint. Ogni variante può avere un tipo di istanza diverso o un modello SageMaker AI che può essere dimensionato automaticamente in modo indipendente dagli altri. I modelli all'interno delle varianti possono essere addestrati utilizzando diversi set di dati, diversi algoritmi, diversi framework ML o qualsiasi combinazione di tutti questi. Tutte le varianti alla base di un endpoint condividono lo stesso codice di inferenza. SageMaker AI supporta due tipi di varianti: varianti di produzione e varianti shadow. 

 Se hai più varianti di produzione dietro un endpoint, puoi allocare una parte delle tue richieste di inferenza a ciascuna variante. Ogni richiesta viene indirizzata a una sola delle varianti di produzione. La variante di produzione a cui è stata indirizzata la richiesta fornisce la risposta al chiamante. È possibile confrontare le prestazioni delle varianti di produzione l'una rispetto all'altra. 

 È inoltre possibile avere una variante shadow corrispondente a una variante di produzione dietro un endpoint. Una parte delle richieste di inferenza che vanno alla variante di produzione viene replicata nella variante shadow. Le risposte della variante shadow vengono registrate per il confronto e non restituite al chiamante. Ciò consente di testare le prestazioni della variante shadow senza esporre il chiamante alla risposta prodotta dalla variante shadow. 

**Topics**
+ [Modelli di test con varianti di produzione](model-ab-testing.md)
+ [Modelli di test con varianti ombra](model-shadow-deployment.md)

# Modelli di test con varianti di produzione
<a name="model-ab-testing"></a>

 I data scientist e i tecnici spesso cercano di migliorare le prestazioni nei flussi di lavoro di ML di produzione utilizzando vari modi, ad esempio [Ottimizzazione automatica dei modelli con AI SageMaker](automatic-model-tuning.md), eseguendo l’addestramento con dati aggiuntivi o più recenti, migliorando la selezione delle funzionalità, utilizzando istanze meglio aggiornate e container di distribuzione. Puoi utilizzare le varianti di produzione per confrontare modelli, istanze e container e scegliere il candidato con le migliori prestazioni per rispondere alle richieste di inferenza. 

 Con gli endpoint multivarianti di SageMaker intelligenza artificiale puoi distribuire le richieste di invocazione degli endpoint su più varianti di produzione fornendo la distribuzione del traffico per ciascuna variante, oppure puoi richiamare una variante specifica direttamente per ogni richiesta. In questo argomento esaminiamo entrambi i metodi di test dei modelli ML. 

**Topics**
+ [Test dei modelli con la distribuzione del traffico](#model-testing-traffic-distribution)
+ [Test dei modelli con l'invocazione di varianti specifiche](#model-testing-target-variant)
+ [Esempio di A/B test del modello](#model-ab-test-example)

## Test dei modelli con la distribuzione del traffico
<a name="model-testing-traffic-distribution"></a>

 Per testare più modelli con la distribuzione del traffico, occorre specificare la percentuale di traffico che viene instradato a ciascun modello, indicando il peso per ogni variante di produzione nella configurazione dell'endpoint. Per informazioni, consulta [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). Il diagramma seguente ne mostra il funzionamento in modo più dettagliato. 

![\[Esempio che mostra come funziona la distribuzione del traffico tra modelli utilizzando l'intelligenza artificiale. InvokeEndpoint SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-traffic-distribution.png)


## Test dei modelli con l'invocazione di varianti specifiche
<a name="model-testing-target-variant"></a>

 Per testare più modelli richiamando modelli specifici per ogni richiesta, specifica la versione specifica del modello che desideri richiamare fornendo un valore per il `TargetVariant` parametro quando chiami. [InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) SageMaker L'intelligenza artificiale garantisce che la richiesta venga elaborata dalla variante di produzione specificata. Se con la distribuzione del traffico già applicata specifichi un valore per il parametro `TargetVariant`, il routing di destinazione sostituisce la distribuzione casuale del traffico. Il diagramma seguente ne mostra il funzionamento in modo più dettagliato. 

![\[Esempio che mostra come InvokeEndpoint funziona l'invocazione di modelli specifici per ogni richiesta utilizzando l' SageMaker intelligenza artificiale.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-target-variant.png)


## Esempio di A/B test del modello
<a name="model-ab-test-example"></a>

 L'esecuzione di A/B test tra un nuovo modello e un vecchio modello con traffico di produzione può essere una fase finale efficace del processo di convalida di un nuovo modello. Durante i A/B test, si testano diverse varianti dei modelli e si confrontano le prestazioni di ciascuna variante. Se la versione più recente del modello offre prestazioni migliori rispetto alla versione già esistente, sostituisci la versione precedente del modello con la nuova versione in produzione. 

 L'esempio seguente mostra come eseguire il test dei A/B modelli. Un notebook che implementa questo esempio è disponibile nell'argomento relativo ai [test A/B dei modelli ML in produzione](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_endpoints/a_b_testing/a_b_testing.html). 

### Fase 1: creazione e distribuzione di modelli
<a name="model-ab-test-step1"></a>

 Definisci innanzitutto dove si trovano i modelli Amazon S3. Queste posizioni verranno utilizzate quando implementi i modelli nelle fasi successive: 

```
model_url = f"s3://{path_to_model_1}"
model_url2 = f"s3://{path_to_model_2}"
```

 Quindi, crei gli oggetti del modello con i dati dell'immagine e del modello. Questi oggetti del modello vengono utilizzati per distribuire le varianti di produzione in un endpoint. I modelli sono sviluppati tramite l’addestramento dei modelli ML con diversi set di dati, algoritmi o framework ML e diversi iperparametri: 

```
from sagemaker.amazon.amazon_estimator import get_image_uri

model_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
model_name2 = f"DEMO-xgb-churn-pred2-{datetime.now():%Y-%m-%d-%H-%M-%S}"
image_uri = get_image_uri(boto3.Session().region_name, 'xgboost', '0.90-1')
image_uri2 = get_image_uri(boto3.Session().region_name, 'xgboost', '0.90-2')

sm_session.create_model(
    name=model_name,
    role=role,
    container_defs={
        'Image': image_uri,
        'ModelDataUrl': model_url
    }
)

sm_session.create_model(
    name=model_name2,
    role=role,
    container_defs={
        'Image': image_uri2,
        'ModelDataUrl': model_url2
    }
)
```

 Ora crei due varianti di produzione, ognuna con propri requisiti di modello e risorse (tipo di istanza e conteggi). In tal modo puoi testare anche i modelli in diversi tipi di istanza. 

 Imposta un peso iniziale pari a 1 per entrambe le varianti. Ciò significa che il 50% delle richieste va a `Variant1` e il restante 50% delle richieste va a `Variant2`. La somma dei pesi di entrambe le varianti è 2 e ogni variante ha un'assegnazione di peso pari a 1. Ciò significa che ogni variante riceve 1/2 (o il 50%) del traffico totale. 

```
from sagemaker.session import production_variant

variant1 = production_variant(
               model_name=model_name,
               instance_type="ml.m5.xlarge",
               initial_instance_count=1,
               variant_name='Variant1',
               initial_weight=1,
           )

variant2 = production_variant(
               model_name=model_name2,
               instance_type="ml.m5.xlarge",
               initial_instance_count=1,
               variant_name='Variant2',
               initial_weight=1,
           )
```

 Finalmente siamo pronti a implementare queste varianti di produzione su un endpoint di SageMaker intelligenza artificiale. 

```
endpoint_name = f"DEMO-xgb-churn-pred-{datetime.now():%Y-%m-%d-%H-%M-%S}"
print(f"EndpointName={endpoint_name}")

sm_session.endpoint_from_production_variants(
    name=endpoint_name,
    production_variants=[variant1, variant2]
)
```

### Fase 2: invocazione dei modelli distribuiti
<a name="model-ab-test-step2"></a>

 A questo punto puoi inviare le richieste all'endpoint per ottenere le inferenze in tempo reale. Utilizzi sia la distribuzione del traffico che l'indirizzamento diretto. 

 Per prima cosa usi la distribuzione del traffico configurata nella fase precedente. Ogni risposta di inferenza contiene il nome della variante di produzione che elabora la richiesta e pertanto puoi osservare che il traffico verso le due varianti di produzione è approssimativamente uguale. 

```
# get a subset of test data for a quick test
!tail -120 test_data/test-dataset-input-cols.csv > test_data/test_sample_tail_input_cols.csv
print(f"Sending test traffic to the endpoint {endpoint_name}. \nPlease wait...")

with open('test_data/test_sample_tail_input_cols.csv', 'r') as f:
    for row in f:
        print(".", end="", flush=True)
        payload = row.rstrip('\n')
        sm_runtime.invoke_endpoint(
            EndpointName=endpoint_name,
            ContentType="text/csv",
            Body=payload
        )
        time.sleep(0.5)

print("Done!")
```

 SageMaker L'intelligenza artificiale emette metriche come `Latency` e `Invocations` per ogni variante in Amazon. CloudWatch Per un elenco completo delle metriche emesse dall' SageMaker IA, consulta. [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md) Facciamo una query CloudWatch per ottenere il numero di invocazioni per variante, per mostrare come le invocazioni sono suddivise tra le varianti per impostazione predefinita: 

![\[Esempio di CloudWatch numero di invocazioni per variante.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-variant-invocations.png)


 Ora invochi una versione specifica del modello definendo `Variant1` come `TargetVariant` nella chiamata a `invoke_endpoint`. 

```
print(f"Sending test traffic to the endpoint {endpoint_name}. \nPlease wait...")
with open('test_data/test_sample_tail_input_cols.csv', 'r') as f:
    for row in f:
        print(".", end="", flush=True)
        payload = row.rstrip('\n')
        sm_runtime.invoke_endpoint(
            EndpointName=endpoint_name,
            ContentType="text/csv",
            Body=payload,
            TargetVariant="Variant1"
        ) 
        time.sleep(0.5)
```

 Per confermare che tutte le nuove chiamate sono state elaborate da`Variant1`, possiamo interrogare CloudWatch per ottenere il numero di invocazioni per variante. Puoi notare che per le invocazioni più recenti (con l'ultimo timestamp), tutte le richieste sono state elaborate da `Variant1`, come avevi specificato. Non sono presenti invocazioni eseguite per `Variant2`. 

![\[Esempio CloudWatch di numero di invocazioni per ogni variante.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-invocations-target1.png)


### Fase 3: valutazione delle prestazioni del modello
<a name="model-ab-test-step3"></a>

 Per vedere quale versione del modello offre prestazioni migliori, valutiamo l'accuratezza, la precisione, il richiamo, il punteggio F1 e il ricevitore che opera charactersistic/Area sotto la curva per ciascuna variante. Per prima cosa, osserva i parametri per `Variant1`: 

![\[Esempio di curva caratteristica di funzionamento del ricevitore per la Variant1.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-curve.png)


Ora osserva i parametri per `Variant2`:

![\[Esempio di curva caratteristica di funzionamento del ricevitore per la Variant2.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model2-curve.png)


 Per la maggior parte dei parametri definiti, `Variant2` ha le prestazioni migliori e pertanto è la versione ottimale da utilizzare in produzione. 

### Fase 4: incremento del traffico verso il modello migliore
<a name="model-ab-test-step4"></a>

 Ora che hai determinato che `Variant2` funziona meglio di `Variant1`, puoi indirizzarvi più traffico. Possiamo continuare a utilizzare per `TargetVariant` richiamare una variante di modello specifica, ma un approccio più semplice consiste nell'aggiornare i pesi assegnati a ciascuna variante chiamando. [UpdateEndpointWeightsAndCapacities](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html) In questo modo la distribuzione del traffico alle varianti di produzione viene modificata senza richiedere aggiornamenti per l'endpoint. Tieni presente che nella sezione di configurazione hai impostato i pesi di variante in modo da dividere il traffico 50/50. Le CloudWatch metriche per le chiamate totali per ciascuna variante di seguito ci mostrano i modelli di invocazione per ciascuna variante: 

![\[CloudWatch Metriche di esempio per il totale delle chiamate per ogni variante.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-invocations-even-dist.png)


 Ora spostiamo il 75% del traffico `Variant2` assegnando nuovi pesi a ciascuna variante che utilizza. `UpdateEndpointWeightsAndCapacities` SageMaker L'intelligenza artificiale ora invia il 75% delle richieste di inferenza `Variant2` e il restante 25% delle richieste a. `Variant1` 

```
sm.update_endpoint_weights_and_capacities(
    EndpointName=endpoint_name,
    DesiredWeightsAndCapacities=[
        {
            "DesiredWeight": 25,
            "VariantName": variant1["VariantName"]
        },
        {
            "DesiredWeight": 75,
            "VariantName": variant2["VariantName"]
        }
    ]
)
```

 Le CloudWatch metriche relative alle chiamate totali per ciascuna variante mostrano un numero maggiore di invocazioni per: `Variant2` `Variant1` 

![\[CloudWatch Metriche di esempio per le chiamate totali per ogni variante.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-invocations-75-25.png)


 Continua a monitorare i parametri e quando ritieni che le prestazioni di una variante siano soddisfacenti, instrada il 100% del traffico verso quella variante. Puoi utilizzare [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html) per aggiornare le assegnazioni del traffico alle varianti. Il peso per `Variant1` è impostato su 0 e il peso per `Variant2` è impostato su 1. SageMaker L'IA ora invia il 100% di tutte le richieste di inferenza a`Variant2`. 

```
sm.update_endpoint_weights_and_capacities(
    EndpointName=endpoint_name,
    DesiredWeightsAndCapacities=[
        {
            "DesiredWeight": 0,
            "VariantName": variant1["VariantName"]
        },
        {
            "DesiredWeight": 1,
            "VariantName": variant2["VariantName"]
        }
    ]
)
```

 Le CloudWatch metriche per le chiamate totali per ciascuna variante mostrano che tutte le richieste di inferenza vengono elaborate da `Variant2` e che non vi sono richieste di inferenza elaborate da. `Variant1` 

![\[CloudWatch Metriche di esempio per il totale delle chiamate per ogni variante.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/model-invocations-best-model.png)


 A questo punto puoi aggiornare in modo sicuro l'endpoint ed eliminare `Variant1` dall'endpoint. Inoltre puoi continuare a testare i nuovi modelli in produzione aggiungendo nuove varianti all'endpoint e ripetendo le fasi da 2 a 4. 

# Modelli di test con varianti ombra
<a name="model-shadow-deployment"></a>

 È possibile utilizzare implementazioni shadow dei modelli di SageMaker AI per creare varianti shadow di lunga durata, in modo da convalidare qualsiasi nuovo componente candidato dello stack di distribuzione dei modelli prima di promuoverlo alla produzione. Il diagramma seguente ne mostra il funzionamento delle varianti shadow in modo più dettagliato. 

![\[Dettagli di una variante shadow.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/juxtaposer/shadow-variant.png)


## Implementa varianti shadow
<a name="model-shadow-deployment-deploy"></a>

 L'esempio di codice seguente mostra come è possibile implementare varianti shadow a livello di codice, Sostituisci il *testo segnaposto dell'utente* dell’esempio con le tue informazioni. 

1.  Crea due modelli SageMaker AI: uno per la tua variante di produzione e l’altro per la tua variante shadow. 

   ```
   import boto3
   from sagemaker import get_execution_role, Session
                   
   aws_region = "aws-region"
   
   boto_session = boto3.Session(region_name=aws_region)
   sagemaker_client = boto_session.client("sagemaker")
   
   role = get_execution_role()
   
   bucket = Session(boto_session).default_bucket()
   
   model_name1 = "name-of-your-first-model"
   model_name2 = "name-of-your-second-model"
   
   sagemaker_client.create_model(
       ModelName = model_name1,
       ExecutionRoleArn = role,
       Containers=[
           {
               "Image": "ecr-image-uri-for-first-model",
               "ModelDataUrl": "s3-location-of-trained-first-model" 
           }
       ]
   )
   
   sagemaker_client.create_model(
       ModelName = model_name2,
       ExecutionRoleArn = role,
       Containers=[
           {
               "Image": "ecr-image-uri-for-second-model",
               "ModelDataUrl": "s3-location-of-trained-second-model" 
           }
       ]
   )
   ```

1.  Crea una configurazione endpoint Specifica sia la variante di produzione che quella shadow nella configurazione. 

   ```
   endpoint_config_name = name-of-your-endpoint-config
   
   create_endpoint_config_response = sagemaker_client.create_endpoint_config(
       EndpointConfigName=endpoint_config_name,
       ProductionVariants=[
           {
               "VariantName": name-of-your-production-variant,
               "ModelName": model_name1,
               "InstanceType": "ml.m5.xlarge",
               "InitialInstanceCount": 1,
               "InitialVariantWeight": 1,
           }
       ],
       ShadowProductionVariants=[
           {
               "VariantName": name-of-your-shadow-variant,
               "ModelName": model_name2,
               "InstanceType": "ml.m5.xlarge",
               "InitialInstanceCount": 1,
               "InitialVariantWeight": 1,
           }
      ]
   )
   ```

1. Crea un endpoint.

   ```
   create_endpoint_response = sm.create_endpoint(
       EndpointName=name-of-your-endpoint,
       EndpointConfigName=endpoint_config_name,
   )
   ```

# Spiegabilità online con Clarify SageMaker
<a name="clarify-online-explainability"></a>

Questa guida mostra come configurare la spiegabilità online con Clarify. SageMaker Con gli endpoint di [inferenza in tempo reale](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) dell' SageMaker intelligenza artificiale, puoi analizzare la spiegabilità in tempo reale, in modo continuo. La funzione di spiegabilità online si inserisce nella parte **Deploy to production** del flusso di lavoro [Amazon AI Machine SageMaker Learning](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-mlconcepts.html).

## Come funziona la spiegabilità online di Clarify
<a name="clarify-online-explainability-how-it-works"></a>

L'immagine seguente mostra l'architettura di SageMaker intelligenza artificiale per l'hosting di un endpoint che serve richieste di spiegabilità. Descrive le interazioni tra un endpoint, il contenitore del modello e lo strumento esplicativo Clarify. SageMaker 

![\[SageMaker Architettura di intelligenza artificiale che mostra l'hosting di un endpoint che fornisce richieste di spiegabilità su richiesta.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/clarify/DeveloperGuideArchitecture.png)


Ecco come funziona la spiegabilità online di Clarify. L'applicazione invia una `InvokeEndpoint` richiesta in stile REST all'AI Runtime Service. SageMaker Il servizio indirizza questa richiesta a un endpoint SageMaker AI per ottenere previsioni e spiegazioni. Il servizio riceve la risposta dall'endpoint. Infine, il servizio invia la risposta all'applicazione.

Per aumentare la disponibilità degli endpoint, l' SageMaker intelligenza artificiale tenta automaticamente di distribuire le istanze degli endpoint in più zone di disponibilità, in base al numero di istanze nella configurazione dell'endpoint. Su un'istanza di endpoint, su una nuova richiesta di spiegabilità, lo strumento esplicativo di SageMaker Clarify richiama il contenitore del modello per le previsioni. Quindi calcola e restituisce le attribuzioni delle caratteristiche.

Ecco i quattro passaggi per creare un endpoint che utilizzi la spiegabilità online di Clarify: SageMaker 

1. [Verifica se il tuo modello di SageMaker intelligenza artificiale pre-addestrato è compatibile con la spiegabilità online seguendo i passaggi di verifica preliminare.](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-precheck.html)

1. [Crea una configurazione degli endpoint con la configurazione](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) esplicativa di SageMaker Clarify utilizzando l'API. `CreateEndpointConfig`

1. [Crea un endpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) e fornisci la configurazione dell'endpoint all'IA utilizzando l'API. SageMaker `CreateEndpoint` Il servizio avvia l’istanza di calcolo ML e implementa il modello come specificato nella configurazione.

1. [Richiama l'endpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html): dopo che l'endpoint è in servizio, chiama l'API SageMaker AI Runtime `InvokeEndpoint` per inviare richieste all'endpoint. L'endpoint restituisce quindi spiegazioni e previsioni.

# Contro preliminare del container del modello
<a name="clarify-online-explainability-precheck"></a>

Questa sezione mostra come controllare preventivamente la compatibilità degli input e degli output del container del modello prima di configurare un endpoint. L'esplicativo SageMaker Clarify è **indipendente dal modello, ma presenta requisiti per l'input e l'output** del contenitore del modello.

**Nota**  
È possibile aumentare l'efficienza configurando il container per supportare le richieste batch, che supportano due o più record in un'unica richiesta. Ad esempio, un singolo record è una singola riga di dati CSV o una singola riga di dati JSON Lines. SageMaker Clarify tenterà di inviare un mini-batch di record al contenitore del modello prima di ricorrere alle richieste di record singoli.

## Input del container del modello
<a name="clarify-online-explainability-input"></a>

------
#### [ CSV ]

Il container del modello supporta l'input in CSV con tipo MIME: `text/csv`. La tabella seguente mostra alcuni esempi di input supportati SageMaker da Clarify.


| Input del container del modello (rappresentazione di stringhe) | Commenti | 
| --- | --- | 
|  '1,2,3,4'  |  Record singolo che utilizza quattro caratteristiche numeriche.  | 
|  '1,2,3,4\$1n5,6,7,8'  |  Due record, separati da un'interruzione di riga \$1n.  | 
|  '"Questo è un buon prodotto",5'  |  Record singolo che contiene una caratteristica testuale e una numerica.  | 
|  '"Questo è un buon prodotto",5\$1n"Pessima esperienza di acquisto",1'  |  Due record.  | 

------
#### [ JSON Lines ]

SageMaker AI supporta anche l'input nel [formato denso JSON Lines](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html#cm-jsonlines) con tipo MIME:`application/jsonlines`, come mostrato nella tabella seguente.


| Input del container del modello | Commenti | 
| --- | --- | 
|  '\$1"data":\$1"caratteristiche":[1,2,3,4]\$1\$1'  |  Record singolo; è possibile estrarre un elenco di funzionalità per espressione. JMESPath `data.features`  | 
|  '\$1"data":\$1"features":[1,2,3,4]\$1\$1\$1n\$1"data":\$1"features":[5,6,7,8]\$1\$1'  |  Due record.  | 
|  '\$1"features":["Questo è un buon prodotto",5]\$1'  |  Record singolo; è possibile estrarre un elenco di funzionalità per JMESPath espressione. `features`  | 
|  '\$1"features":["Questo è un buon prodotto",5]\$1\$1n\$1"features":["Pessima esperienza di acquisto",1]\$1'  |  Due record.  | 

------

## Output del container del modello
<a name="clarify-online-explainability-output"></a>

L'output del container del modello dovrebbe anche essere in formato CSV o JSON Lines denso. Inoltre, il contenitore del modello dovrebbe includere le probabilità dei record di input, che SageMaker Clarify utilizza per calcolare le attribuzioni delle funzionalità.

I seguenti esempi di dati riguardano gli output del container del modello in **formato CSV**.

------
#### [ Probability only ]

Per problemi di regressione e classificazione binaria, il container del modello emette un singolo valore di probabilità (punteggio) dell'etichetta prevista. Queste probabilità possono essere estratte utilizzando l'indice di colonna 0. Per problemi multiclasse, il container del modello emette un elenco di probabilità (punteggi). Per problemi multiclasse, se non viene fornito alcun indice, vengono estratti tutti i valori.


| Input del container del modello | Output del container del modello (rappresentazione di stringhe) | 
| --- | --- | 
|  Record singolo  |  '0.6'  | 
|  Due record (risultati in una riga)  |  '0.6,0.3'  | 
|  Due record (risultati in due righe)  |  '0.6\$1n0.3'  | 
|  Record singolo di un modello multiclasse (tre classi)  |  '0.1,0.6,0.3'  | 
|  Due record di un modello multiclasse (tre classi)  |  '0.1,0.6,0.3\$1n0,2,0,5,0,3'  | 

------
#### [ Predicted label and probabilities ]

Il container del modello emette l'etichetta prevista seguita dalla relativa probabilità in formato **CSV**. Le probabilità possono essere estratte utilizzando l'indice `1`.


| Input del container del modello | Output del container del modello | 
| --- | --- | 
|  Record singolo  |  '1,0.6'  | 
|  Due record  |  '1,0.6\$1n0,0.3'  | 

------
#### [ Predicted labels header and probabilities ]

Un container modello multiclasse addestrato da Autopilot può essere configurato per generare la **rappresentazione in stringa** dell'elenco delle etichette e delle probabilità previste in formato **CSV**. Nell'esempio seguente è possibile estrarre le probabilità per indice `1`. Le intestazioni delle etichette possono essere estratte per indice `1` e le intestazioni delle etichette possono essere estratte utilizzando l'indice `0`.


| Input del container del modello | Output del container del modello | 
| --- | --- | 
|  Record singolo  |  '"[\$1'gatto\$1',\$1'cane\$1',\$1'pesce\$1']","[0.1,0.6,0.3]"'  | 
|  Due record  |  '"[\$1'gatto\$1',\$1'cane\$1',\$1'pesce\$1']", "[0.1,0.6,0.3]"\$1n"[\$1'gatto\$1',\$1'cane\$1',\$1'pesce\$1']","[0.2,0.5,0.3]"'  | 

------

I seguenti esempi di dati riguardano gli output del container del modello in formato **JSON Lines**.

------
#### [ Probability only ]

In questo esempio, il container del modello emette la probabilità che può essere estratta mediante [https://jmespath.org/](https://jmespath.org/)espressione `score` in formato **JSON Lines**.


| Input del container del modello | Output del container del modello | 
| --- | --- | 
|  Record singolo  |  '\$1"score":0.6\$1'  | 
|  Due record  |  '\$1"punteggio":0.6\$1\$1n\$1"punteggio":0.3\$1'  | 

------
#### [ Predicted label and probabilities ]

In questo esempio, un container modello multiclasse genera un elenco di intestazioni di etichette insieme a un elenco di probabilità in formato **JSON Lines**. Le probabilità possono essere estratte per `JMESPath`espressione `probability` e le intestazioni delle etichette possono essere estratte per `JMESPath` espressione `predicted labels`.


| Input del container del modello | Output del container del modello | 
| --- | --- | 
|  Record singolo  |  '\$1"etichette\$1previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]\$1'  | 
|  Due record  |  '\$1"etichette\$1previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]\$1\$1n\$1"etichette\$1previste":["gatto","cane","pesce"],"probabilità":[0.2,0.5,0.3]\$1'  | 

------
#### [ Predicted labels header and probabilities ]

In questo esempio, un container modello multiclasse emette un elenco di intestazioni di etichette e probabilità in formato **JSON Lines**. Le probabilità possono essere estratte per `JMESPath` espressione `probability` e le intestazioni delle etichette possono essere estratte per `JMESPath` espressione `predicted labels`.


| Input del container del modello | Output del container del modello | 
| --- | --- | 
|  Record singolo  |  '\$1"etichette\$1previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]\$1'  | 
|  Due record  |  '\$1"etichette\$1previste":["gatto","cane","pesce"],"probabilità":[0.1,0.6,0.3]\$1\$1n\$1"etichette\$1previste":["gatto","cane","pesce"],"probabilità":[0.2,0.5,0.3]\$1'  | 

------

## Validazione del container del modello
<a name="clarify-online-explainability-container-validation"></a>

Ti consigliamo di distribuire il modello su un endpoint di inferenza in tempo reale di SageMaker intelligenza artificiale e di inviare richieste all'endpoint. Esamina manualmente le richieste (input del container del modello) e le risposte (output del container del modello) per assicurarti che entrambe siano conformi ai requisiti delle sezioni **Input del container del modello** e **Output del container del modello**. Se il container del modello supporta le richieste batch, è possibile iniziare con una singola richiesta di record e quindi provare due o più record.

I comandi seguenti mostrano come richiedere una risposta utilizzando AWS CLI. AWS CLI È preinstallato nelle istanze SageMaker Studio Classic e Notebook. SageMaker Se devi installare il AWS CLI, segui questa guida all'[installazione](https://aws.amazon.com/cli/).

```
aws sagemaker-runtime invoke-endpoint \
  --endpoint-name $ENDPOINT_NAME \
  --content-type $CONTENT_TYPE \
  --accept $ACCEPT_TYPE \
  --body $REQUEST_DATA \
  $CLI_BINARY_FORMAT \
  /dev/stderr 1>/dev/null
```

I parametri sono definiti come segue:
+ `$ENDPOINT NAME`: Il nome dell'endpoint.
+ `$CONTENT_TYPE`: Il tipo MIME della richiesta (input del container del modello).
+ `$ACCEPT_TYPE`: il tipo MIME della risposta (output del container del modello).
+ `$REQUEST_DATA`: La stringa payload richiesta.
+ `$CLI_BINARY_FORMAT`: il formato del parametro CLI (Command Line Interface). Per la AWS CLI v1, questo parametro deve rimanere vuoto. Per v2, questo parametro deve essere impostato su `--cli-binary-format raw-in-base64-out`.

**Nota**  
AWS CLI [v2 passa i parametri binari come stringhe codificate in base64 come impostazioni predefinite.](https://docs.aws.amazon.com/cli/latest/userguide/cliv2-migration.html#cliv2-migration-binaryparam)

Negli esempi AWS CLI seguenti viene utilizzata la versione v1:

------
#### [ Request and response in CSV format ]
+ la richiesta è costituita da un singolo record e la risposta è il relativo valore di probabilità.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `0.6`
+ la richiesta è composta da due record e la risposta include le relative probabilità e il modello separa le probabilità con una virgola. L'espressione `$'content'` in `--body` indica al comando di interpretare `\n` il contenuto come un'interruzione di riga.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-sagemaker-xgboost-model \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `0.6,0.3`
+ la richiesta è composta da due record, la risposta include le relative probabilità e il modello separa le probabilità con un'interruzione di riga.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `0.6`

  `0.3`
+ la richiesta è costituita da un singolo record e la risposta è costituita da valori di probabilità (modello multiclasse, tre classi).

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body '1,2,3,4' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `0.1,0.6,0.3`
+ la richiesta è composta da due record e la risposta include i relativi valori di probabilità (modello multiclasse, tre classi).

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-1 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `0.1,0.6,0.3`

  `0.2,0.5,0.3`
+ la richiesta è composta da due record e la risposta include l'etichetta e la probabilità previste.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-2 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `1,0.6`

  `0,0.3`
+ la richiesta è composta da due record e la risposta include le intestazioni e le probabilità delle etichette.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-3 \
    --content-type text/csv \
    --accept text/csv \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `"['cat','dog','fish']","[0.1,0.6,0.3]"`

  `"['cat','dog','fish']","[0.2,0.5,0.3]"`

------
#### [ Request and response in JSON Lines format ]
+ la richiesta è costituita da un singolo record e la risposta è il relativo valore di probabilità.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body '{"features":["This is a good product",5]}' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `{"score":0.6}`
+ la richiesta contiene due record e la risposta include l'etichetta e la probabilità previste.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-2 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `{"predicted_label":1,"probability":0.6}`

  `{"predicted_label":0,"probability":0.3}`
+ la richiesta contiene due record e la risposta include le intestazioni e le probabilità delle etichette.

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-3 \
    --content-type application/jsonlines \
    --accept application/jsonlines \
    --body $'{"data":{"features":[1,2,3,4]}}\n{"data":{"features":[5,6,7,8]}}' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.1,0.6,0.3]}`

  `{"predicted_labels":["cat","dog","fish"],"probabilities":[0.2,0.5,0.3]}`

------
#### [ Request and response in different formats ]
+ la richiesta è in formato CSV e la risposta è in formato JSON Lines:

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-csv-in-jsonlines-out \
    --content-type text/csv \
    --accept application/jsonlines \
    --body $'1,2,3,4\n5,6,7,8' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `{"probability":0.6}`

  `{"probability":0.3}`
+ la richiesta è in formato JSON Lines e la risposta è in formato CSV:

  ```
  aws sagemaker-runtime invoke-endpoint \
    --endpoint-name test-endpoint-jsonlines-in-csv-out \
    --content-type application/jsonlines \
    --accept text/csv \
    --body $'{"features":[1,2,3,4]}\n{"features":[5,6,7,8]}' \
    /dev/stderr 1>/dev/null
  ```

  Output:

  `0.6`

  `0.3`

------

al termine delle convalide, [elimina](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-delete-resources.html) l'endpoint di test.

# Configura e crea un endpoint
<a name="clarify-online-explainability-create-endpoint"></a>

Crea una nuova configurazione dell'endpoint adatta al tuo modello e usa questa configurazione per creare l'endpoint. È possibile utilizzare il contenitore del modello convalidato nella [fase di controllo preliminare](https://docs.aws.amazon.com/sagemaker/latest/dg/clarify-online-explainability-precheck.html) per creare un endpoint e abilitare la funzionalità di spiegabilità online di SageMaker Clarify.

Utilizzate l'`sagemaker_client`oggetto per creare un endpoint utilizzando l'API. [CreateEndpointConfig](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_CreateEndpointConfig.html) Imposta il membro `ClarifyExplainerConfig` all'interno del parametro `ExplainerConfig` come segue:

```
sagemaker_client.create_endpoint_config(
    EndpointConfigName='name-of-your-endpoint-config',
    ExplainerConfig={
        'ClarifyExplainerConfig': {
            'EnableExplanations': '`true`',
            'InferenceConfig': {
                ...
            },
            'ShapConfig': {
                ...
            }
        },
    },
    ProductionVariants=[{
        'VariantName': 'AllTraffic',
        'ModelName': 'name-of-your-model',
        'InitialInstanceCount': 1,
        'InstanceType': 'ml.m5.xlarge',
    }]
     ...
)
sagemaker_client.create_endpoint(
    EndpointName='name-of-your-endpoint',
    EndpointConfigName='name-of-your-endpoint-config'
)
```

La prima chiamata all'oggetto `sagemaker_client` crea una nuova configurazione dell'endpoint con la funzione di spiegabilità abilitata. La seconda chiamata utilizza la configurazione dell'endpoint per avviare l'endpoint.

**Nota**  
Puoi anche ospitare più modelli in un unico contenitore dietro un [endpoint multimodello di inferenza SageMaker AI in tempo reale](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) e configurare la spiegabilità online con Clarify. SageMaker 

# L'espressione `EnableExplanations`
<a name="clarify-online-explainability-create-endpoint-enable"></a>

Il parametro `EnableExplanations` è una stringa di espressione booleana [https://jmespath.org/](https://jmespath.org/). Viene valutato per **ogni record** nella richiesta di spiegabilità. Se questo parametro viene valutato come **vero**, il record verrà spiegato. Se questo parametro viene valutato come **falso**, le spiegazioni non verranno generate.

SageMaker Clarify deserializza l'output del contenitore del modello per ogni record in una struttura di dati compatibile con JSON, quindi utilizza il parametro per valutare i dati. `EnableExplanations`

**Note**  
Esistono due opzioni per i record a seconda del formato di output del container del modello.  
Se l'output del container del modello è in formato CSV, un record viene caricato come array JSON.
Se l'output del container del modello è in formato JSON Lines, un record viene caricato come oggetto JSON.

Il `EnableExplanations` parametro è un' JMESPath espressione che può essere passata durante le operazioni o. `InvokeEndpoint` `CreateEndpointConfig` Se l' JMESPath espressione fornita non è valida, la creazione dell'endpoint avrà esito negativo. Se l'espressione è valida, ma il risultato della valutazione dell'espressione è imprevisto, l'endpoint verrà creato correttamente, ma verrà generato un errore quando l'endpoint viene richiamato. Testa l'espressione `EnableExplanations` utilizzando l'API `InvokeEndpoint`, quindi applicala alla configurazione dell'endpoint.

Di seguito sono riportate alcuni esempi di espressioni `EnableExplanations`valide. Negli esempi, un' JMESPath espressione racchiude un valore letterale utilizzando caratteri backtick. Ad esempio ``true``, significa vero.


| Espressione (rappresentazione di stringhe) | Output del container del modello (rappresentazione di stringhe) | Risultato della valutazione (booleano) | Significato | 
| --- | --- | --- | --- | 
|  '`true`'  |  (N/D)  |  True  |  Attiva la spiegabilità online incondizionatamente.  | 
|  '`false`'  |  (N/D)  |  False  |  Disattiva la spiegabilità online incondizionatamente.  | 
|  '[1]>`0.5`'  |  '1,0.6'  |  True  |  Per ogni record, il container del modello restituisce l'etichetta e la probabilità previste. Spiega un record se la sua probabilità (all'indice 1) è maggiore di 0,5.  | 
|  'probabilità>`0,5`'  |  '\$1"etichetta\$1prevista":1,"probabilità":0,6\$1'  |  True  |  Per ogni record, il container del modello emette dati JSON. Spiega un record se la sua probabilità è maggiore di 0,5.  | 
|  '\$1contiene(probabilità[:-1], max(probabilità))'  |  '\$1"probabilità": [0,4, 0,1, 0,4], "etichette":["gatto","cane","pesce"]\$1'  |  False  |  Per un modello multiclasse: spiega a un record se l'etichetta prevista (la classe che ha il valore di probabilità massimo) è l'ultima classe. Letteralmente, l'espressione significa che il valore di probabilità massimo non è nell'elenco delle probabilità, esclusa l'ultima.  | 

# Set di dati sintetici
<a name="clarify-online-explainability-create-endpoint-synthetic"></a>

SageMaker Clarify utilizza l'algoritmo Kernel SHAP. Dato un record (chiamato anche campione o istanza) e la configurazione SHAP, l'esplicatore genera innanzitutto un set di dati sintetico. SageMaker Clarify quindi interroga il contenitore del modello per le previsioni del set di dati, quindi calcola e restituisce le attribuzioni delle funzionalità. La dimensione del set di dati sintetico influisce sul tempo di esecuzione dello strumento esplicativo Clarify. I set di dati sintetici più grandi richiedono più tempo per ottenere previsioni dei modelli rispetto a quelli più piccoli.

 La dimensione del set di dati sintetici è determinata dalla formula seguente:

```
Synthetic dataset size = SHAP baseline size * n_samples
```

La dimensione della linea di base SHAP è il numero di record nei dati di base SHAP. Queste informazioni sono tratte da `ShapBaselineConfig`.

La dimensione di `n_samples` è impostata dal parametro `NumberOfSamples` nella configurazione dello strumento esplicativo e dal numero di caratteristiche. Se il numero di caratteristiche è `n_features`, allora `n_samples` è il seguente: 

```
n_samples = MIN(NumberOfSamples, 2^n_features - 2)
```

Quanto segue mostra `n_samples` se `NumberOfSamples` non è fornito.

```
n_samples = MIN(2*n_features + 2^11, 2^n_features - 2)
```

Ad esempio, un record tabulare con 10 caratteristiche ha una dimensione di base SHAP pari a 1. Se `NumberOfSamples` non viene fornito, il set di dati sintetico contiene 1.022 record. Se il record ha 20 caratteristiche, il set di dati sintetico contiene 2.088 record.

Per i problemi di PNL, `n_features` è uguale al numero di caratteristiche non testuali più il numero di unità di testo.

**Nota**  
L'API `InvokeEndpoint` ha un limite di timeout per le richieste. Se il set di dati sintetici è troppo grande, lo strumento esplicativo potrebbe non essere in grado di completare il calcolo entro questo limite. Se necessario, utilizza le informazioni precedenti per comprendere e ridurre la dimensione di base SHAP e `NumberOfSamples`. Se il container del modello è configurato per gestire le richieste batch, puoi anche modificare il valore di `MaxRecordCount`.

# richiamare l'endpoint
<a name="clarify-online-explainability-invoke-endpoint"></a>

Dopo l'esecuzione dell'endpoint, utilizzate l'[InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)API SageMaker AI Runtime nel servizio AI Runtime per inviare richieste o richiamare l' SageMaker endpoint. In risposta, le richieste vengono gestite come richieste di spiegabilità dall'esplicatore Clarify. SageMaker 

**Nota**  
Per richiamare un endpoint, scegli una delle seguenti opzioni:  
Per istruzioni sull'uso di Boto3 o sull'invocazione di un endpoint, vedere. AWS CLI [Invocare modelli per l’inferenza in tempo reale](realtime-endpoints-test-endpoints.md)
[Per utilizzare l' SageMaker SDK per Python per richiamare un endpoint, consulta l'API Predictor.](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html)

## Richiesta
<a name="clarify-online-explainability-request"></a>

L'API `InvokeEndpoint` ha un parametro opzionale `EnableExplanations`, che è mappato all'intestazione HTTP `X-Amzn-SageMaker-Enable-Explanations`. Se viene fornito questo parametro, sostituisce il parametro `EnableExplanations` di `ClarifyExplainerConfig`.

**Nota**  
I parametri richiesti `ContentType` e `Accept` dell’API `InvokeEndpoint` sono richiesti. I formati supportati includono il tipo MIME `text/csv` e `application/jsonlines`.

Utilizza il `sagemaker_runtime_client` per inviare una richiesta all'endpoint, come segue:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName='name-of-your-endpoint',
    EnableExplanations='`true`',
    ContentType='text/csv',
    Accept='text/csv',
    Body='1,2,3,4',  # single record (of four numerical features)
)
```

Per gli endpoint multi-modello, passa un parametro `TargetModel` aggiuntivo nella precedente richiesta di esempio per specificare a quale modello indirizzare l’endpoint. L'endpoint a più modelli carica dinamicamente i modelli di destinazione in base alle esigenze. Per ulteriori informazioni sugli endpoint multi-modello, consulta [Endpoint multi-modello](multi-model-endpoints.md). Consultate il [SageMaker Clarify Online Explainability on Multi-Model Endpoint Sample Notebook](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-clarify/online_explainability/tabular_multi_model_endpoint/multi_model_xgboost_with_online_explainability.ipynb) per un esempio di come configurare e richiamare più modelli di destinazione da un singolo endpoint.

## Risposta
<a name="clarify-online-explainability-response"></a>

Se l'endpoint viene creato con `ExplainerConfig`, viene utilizzato un nuovo schema di risposta. Questo nuovo schema è diverso e non è compatibile con un endpoint privo del parametro `ExplainerConfig` fornito.

Il tipo MIME della risposta è `application/json` e il payload della risposta può essere decodificato da byte UTF-8 in un oggetto JSON. Quanto segue mostra che i membri di questo oggetto JSON sono i seguenti:
+ `version`: la versione dello schema di risposta in formato stringa. Ad esempio, `1.0`.
+ `predictions`: le previsioni effettuate dalla richiesta sono le seguenti:
  + `content_type`: il tipo MIME delle previsioni, che si riferisce a `ContentType` della risposta del container del modello.
  + `data`: la stringa di dati delle previsioni fornita come payload della risposta del container del modello per la richiesta.
+ `label_headers`: le intestazioni delle etichette del parametro `LabelHeaders`. Viene fornito nella configurazione dello strumento esplicativo o nell'output del container del modello.
+ `explanations`: le spiegazioni fornite nel payload della richiesta. Se non viene spiegato alcun record, questo membro restituisce l'oggetto vuoto `{}`.
+ 
  + `kernel_shap`: una chiave che si riferisce a un array di spiegazioni Kernel SHAP per ogni record della richiesta. Se un record non viene spiegato, la spiegazione corrispondente è `null`.

L'elemento `kernel_shap` dispone dei seguenti membri:
+ `feature_header`: il nome dell'intestazione delle caratteristiche fornite dal parametro `FeatureHeaders` nella configurazione dello strumento esplicativo`ExplainerConfig`.
+ `feature_type`: il tipo di caratteristica dedotto dallo strumento esplicativo o fornito nel parametro `FeatureTypes` in `ExplainerConfig`. Questo elemento è disponibile solo per problemi di spiegabilità della PNL.
+ `attributions`: un array di oggetti di attribuzione. Le caratteristiche del testo possono avere più oggetti di attribuzione, ciascuno per un'unità. L'oggetto attribuzione ha i seguenti membri:
  + `attribution`: un elenco di valori di probabilità, fornito per ogni classe.
  + `description`: la descrizione delle unità di testo, disponibile solo per problemi di spiegabilità della PNL.
    + `partial_text`: la parte del testo spiegata dallo strumento esplicativo.
    + `start_idx`: un indice a base zero per identificare la posizione dell'array all'inizio del frammento di testo parziale.

# Esempi di codice: SDK per Python
<a name="clarify-online-explainability-examples"></a>

Questa sezione fornisce codice di esempio per creare e richiamare un endpoint che utilizza la spiegabilità online di Clarify. SageMaker Questi esempi di codice utilizzano [AWS SDK per Python](https://aws.amazon.com/sdk-for-python/).

## Dati tabulari
<a name="clarigy-online-explainability-examples-tabular"></a>

L'esempio seguente utilizza dati tabulari e un modello di intelligenza artificiale chiamato. SageMaker `model_name` In questo esempio, il container del modello accetta dati in formato CSV e ogni record ha quattro caratteristiche numeriche. In questa configurazione minima, **solo a scopo dimostrativo**, i dati di base SHAP sono impostati su zero. Fai riferimento a [Linee di base SHAP per la spiegabilità](clarify-feature-attribute-shap-baselines.md) per informazioni come scegliere valori più appropriati per `ShapBaseline`.

Configura l'endpoint come segue:

```
endpoint_config_name = 'tabular_explainer_endpoint_config'
response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[{
        'VariantName': 'AllTraffic',
        'ModelName': model_name,
        'InitialInstanceCount': 1,
        'InstanceType': 'ml.m5.xlarge',
    }],
    ExplainerConfig={
        'ClarifyExplainerConfig': {
            'ShapConfig': {
                'ShapBaselineConfig': {
                    'ShapBaseline': '0,0,0,0',
                },
            },
        },
    },
)
```

Utilizza la configurazione dell'endpoint per creare un endpoint, come segue:

```
endpoint_name = 'tabular_explainer_endpoint'
response = sagemaker_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name,
)
```

Utilizza l'API `DescribeEndpoint` per controllare lo stato di avanzamento della creazione di un endpoint, come segue:

```
response = sagemaker_client.describe_endpoint(
    EndpointName=endpoint_name,
)
response['EndpointStatus']
```

Dopo che lo stato dell'endpoint è "InService«, richiama l'endpoint con un record di test, come segue:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType='text/csv',
    Accept='text/csv',
    Body='1,2,3,4',
)
```

**Nota**  
Nell'esempio di codice precedente, per gli endpoint multimodello, passa un parametro `TargetModel` aggiuntivo nella richiesta per specificare a quale modello indirizzare l'endpoint.

Supponiamo che la risposta abbia un codice di stato 200 (nessun errore) e si cara il corpo della risposta nel modo seguente:

```
import codecs
import json
json.load(codecs.getreader('utf-8')(response['Body']))
```

L'azione predefinita per l'endpoint consiste nello spiegare il record. Di seguito viene mostrato l'output dell'oggetto JSON restituito.

```
{
    "version": "1.0",
    "predictions": {
        "content_type": "text/csv; charset=utf-8",
        "data": "0.0006380207487381"
    },
    "explanations": {
        "kernel_shap": [
            [
                {
                    "attributions": [
                        {
                            "attribution": [-0.00433456]
                        }
                    ]
                },
                {
                    "attributions": [
                        {
                            "attribution": [-0.005369821]
                        }
                    ]
                },
                {
                    "attributions": [
                        {
                            "attribution": [0.007917749]
                        }
                    ]
                },
                {
                    "attributions": [
                        {
                            "attribution": [-0.00261214]
                        }
                    ]
                }
            ]
        ]
    }
}
```

Utilizza il parametro `EnableExplanations` per abilitare le spiegazioni su richiesta, come segue:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType='text/csv',
    Accept='text/csv',
    Body='1,2,3,4',
    EnableExplanations='[0]>`0.8`',
)
```

**Nota**  
Nell'esempio di codice precedente, per gli endpoint multimodello, passa un parametro `TargetModel` aggiuntivo nella richiesta per specificare a quale modello indirizzare l'endpoint.

In questo esempio, il valore di previsione è inferiore al valore di soglia di `0.8`, quindi il record non viene spiegato:

```
{
    "version": "1.0",
    "predictions": {
        "content_type": "text/csv; charset=utf-8",
        "data": "0.6380207487381995"
    },
    "explanations": {}
}
```

Utilizza gli strumenti di visualizzazione per aiutare a interpretare le spiegazioni restituite. L'immagine seguente mostra come è possibile utilizzare i grafici SHAP per comprendere in che modo ciascuna funzionalità contribuisce alla previsione. Il valore di base del diagramma, chiamato anche valore previsto, è la previsione media del set di dati di addestramento. Le funzionalità che spingono il valore previsto verso l'alto sono rosse, mentre quelle che spingono il valore previsto verso il basso sono blu. Per ulteriori informazioni, vedere [layout della forza additiva SHAP](https://shap.readthedocs.io/en/latest/generated/shap.plots.force.html).

![\[Esempio di grafico SHAP, che può essere utilizzato per capire come ogni funzionalità contribuisce alla previsione.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/clarify/force-plot.png)


Vedi il [notebook di esempio completo per i dati tabulari](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-clarify/online_explainability/tabular/tabular_online_explainability_with_sagemaker_clarify.ipynb). 

## Dati di testo
<a name="clarigy-online-explainability-examples-text"></a>

Questa sezione fornisce un esempio di codice per creare e richiamare un endpoint dispiegabilità online per dati di testo. Il codice di esempio utilizza SDK per Python.

L'esempio seguente utilizza dati di testo e un modello di SageMaker intelligenza artificiale chiamato. `model_name` In questo esempio, il container del modello accetta dati in formato CSV e ogni record è una singola stringa.

```
endpoint_config_name = 'text_explainer_endpoint_config'
response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[{
        'VariantName': 'AllTraffic',
        'ModelName': model_name,
        'InitialInstanceCount': 1,
        'InstanceType': 'ml.m5.xlarge',
    }],
    ExplainerConfig={
        'ClarifyExplainerConfig': {
            'InferenceConfig': {
                'FeatureTypes': ['text'],
                'MaxRecordCount': 100,
            },
            'ShapConfig': {
                'ShapBaselineConfig': {
                    'ShapBaseline': '"<MASK>"',
                },
                'TextConfig': {
                    'Granularity': 'token',
                    'Language': 'en',
                },
                'NumberOfSamples': 100,
            },
        },
    },
)
```
+ `ShapBaseline`: un token speciale riservato all'elaborazione del linguaggio naturale (NLP).
+ `FeatureTypes`: identifica la caratteristica come testo. Se questo parametro non viene fornito, lo strumento esplicativo tenterà di dedurre il tipo di caratteristica.
+ `TextConfig`: specifica l'unità di granularità e il linguaggio per l'analisi delle caratteristiche del testo. In questo esempio, la lingua è l'inglese e per granularità `token` si intende una parola nel testo inglese.
+ `NumberOfSamples`: un limite per impostare i limiti superiori della dimensione del set di dati sintetici.
+ `MaxRecordCount`: il numero massimo di record in una richiesta che il container del modello è in grado di gestire. Questo parametro è impostato per stabilizzare le prestazioni.

Utilizza la configurazione dell'endpoint per creare l'endpoint, come segue:

```
endpoint_name = 'text_explainer_endpoint'
response = sagemaker_client.create_endpoint(
    EndpointName=endpoint_name,
    EndpointConfigName=endpoint_config_name,
)
```

Quando lo stato dell'endpoint diventa `InService`, richiama l'endpoint. Il seguente esempio di codice utilizza un record di test come segue:

```
response = sagemaker_runtime_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType='text/csv',
    Accept='text/csv',
    Body='"This is a good product"',
)
```

Se la richiesta viene completata correttamente, il corpo della risposta restituirà un oggetto JSON valido simile al seguente:

```
{
    "version": "1.0",
    "predictions": {
        "content_type": "text/csv",
        "data": "0.9766594\n"
    },
    "explanations": {
        "kernel_shap": [
            [
                {
                    "attributions": [
                        {
                            "attribution": [
                                -0.007270948666666712
                            ],
                            "description": {
                                "partial_text": "This",
                                "start_idx": 0
                            }
                        },
                        {
                            "attribution": [
                                -0.018199033666666628
                            ],
                            "description": {
                                "partial_text": "is",
                                "start_idx": 5
                            }
                        },
                        {
                            "attribution": [
                                0.01970993241666666
                            ],
                            "description": {
                                "partial_text": "a",
                                "start_idx": 8
                            }
                        },
                        {
                            "attribution": [
                                0.1253469515833334
                            ],
                            "description": {
                                "partial_text": "good",
                                "start_idx": 10
                            }
                        },
                        {
                            "attribution": [
                                0.03291143366666657
                            ],
                            "description": {
                                "partial_text": "product",
                                "start_idx": 15
                            }
                        }
                    ],
                    "feature_type": "text"
                }
            ]
        ]
    }
}
```

Utilizza gli strumenti di visualizzazione per interpretare le attribuzioni di testo restituite. L'immagine seguente mostra come utilizzare l'utilità di visualizzazione captum per capire come ogni parola contribuisce alla previsione. Maggiore è la saturazione del colore, maggiore è l'importanza data alla parola. In questo esempio, un colore rosso brillante altamente saturo indica un forte contributo negativo. Un colore verde altamente saturo indica un forte contributo positivo. Il colore bianco indica che la parola ha un contributo neutro. Consulta la libreria [captum](https://github.com/pytorch/captum) per ulteriori informazioni sull'analisi e il rendering delle attribuzioni.

![\[Utilità di visualizzazione Captum utilizzata per capire come ogni parola contribuisce alla previsione.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/clarify/word-importance.png)


Vedi il [notebook di esempio completo per i dati di testo](https://github.com/aws/amazon-sagemaker-examples/blob/main/sagemaker-clarify/online_explainability/natural_language_processing/nlp_online_explainability_with_sagemaker_clarify.ipynb). 

# Guida alla risoluzione dei problemi
<a name="clarify-online-explainability-troubleshooting"></a>

Se riscontrate errori nell'utilizzo della spiegabilità online di SageMaker Clarify, consultate gli argomenti di questa sezione.

**`InvokeEndpoint`L'API fallisce con l'errore «:Read timeout on endpoint...ReadTimeoutError»** 

Questo errore indica che la richiesta non può essere completata entro il limite di tempo di 60 secondi impostato dal [timeout della richiesta](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html).

Per ridurre la latenza della richiesta, prova quanto segue:
+ Ottimizza le prestazioni del modello durante l'inferenza. Ad esempio, SageMaker AI [Neo](https://aws.amazon.com/sagemaker/neo/) può ottimizzare i modelli per l'inferenza.
+ Consente al container del modello di gestire le richieste batch.
+ Utilizza un grande `MaxRecordCount` per ridurre il numero di chiamate dallo strumento esplicativo al container del modello. Ciò ridurrà la latenza e il sovraccarico della rete.
+ Utilizza un tipo di istanza a cui sono assegnate più risorse. In alternativa, assegna più istanze all'endpoint per bilanciare il carico.
+ Riduce il numero di record all'interno di una singola richiesta `InvokeEndpoint`.
+ Riduce il numero di record nei dati di base.
+ Utilizza un valore `NumberOfSamples` inferiore per ridurre le dimensioni del set di dati sintetici. Per ulteriori informazioni su come il numero di campioni influisce sul set di dati sintetico, consulta [Set di dati sintetici](clarify-online-explainability-create-endpoint-synthetic.md).

# Fine-tuning dei modelli con componenti di inferenza dell’adattatore
<a name="realtime-endpoints-adapt"></a>

Con Amazon SageMaker AI, puoi ospitare modelli di base preformati senza dover creare i tuoi modelli da zero. Tuttavia, per personalizzare un modello di fondazione generico in base alle esigenze specifiche della tua azienda, devi crearne una versione ottimizzata con fine-tuning. Una tecnica di fine-tuning conveniente è il Low-Rank Adaptation (LoRA). Il principio alla base di LoRA è che solo una piccola parte di un modello di fondazione di grandi dimensioni deve essere aggiornata per eseguire l’adattamento a nuove attività o domini. Un adattatore LoRA aumenta l’inferenza da un modello di fondazione con un numero minimo di livelli di adattatore aggiuntivi.

*Se ospiti il tuo modello base di base utilizzando un componente di inferenza SageMaker AI, puoi perfezionare quel modello di base con adattatori LoRa creando componenti di inferenza degli adattatori.* Quando viene creato un componente di inferenza di un adattatore, occorre specificare quanto segue:
+ Il *componente di inferenza di base* che deve contenere il componente di inferenza dell’adattatore. Il componente di inferenza di base contiene il modello di fondazione che desideri adattare. Il componente di inferenza dell’adattatore utilizza le risorse di calcolo assegnate al componente di inferenza di base.
+ La posizione nella quale è stato archiviato l’adattatore LoRA in Amazon S3.

Dopo aver creato il componente di inferenza dell’adattatore, è possibile invocarlo direttamente. Quando lo fai, l' SageMaker intelligenza artificiale combina l'adattatore con il modello base per aumentare la risposta generata.

**Prima di iniziare**

Prima di creare un componente di inferenza dell’adattatore, è necessario soddisfare i seguenti requisiti: 
+ Disponibilità di un componente di inferenza di base che contiene il modello di fondazione da adattare. Hai implementato questo componente di inferenza su un SageMaker endpoint di intelligenza artificiale. 

  Per ulteriori informazioni sull’implementazione di componenti di inferenza sugli endpoint, consulta [Implementazione di modelli per l’inferenza in tempo reale](realtime-endpoints-deploy-models.md).
+ Disponibilità di un modello di adattatore LoRA e archiviazione degli artefatti del modello come file `tar.gz` in Amazon S3. Specifica l’URI S3 degli artefatti quando crei il componente di inferenza dell’adattatore.

Gli esempi seguenti utilizzano SDK per Python (Boto3) per creare e invocare un componente di inferenza di un adattatore.

**Example Chiamata `create_inference_component` per creare un componente di inferenza dell’adattatore**  
L’esempio seguente crea un componente di inferenza dell’adattatore e lo assegna a un componente di inferenza di base:  

```
sm_client.create_inference_component(
    InferenceComponentName = adapter_ic_name,
    EndpointName = endpoint_name,
    Specification={
        "BaseInferenceComponentName": base_inference_component_name,
        "Container": {
            "ArtifactUrl": adapter_s3_uri
        },
    },
)
```
Quando utilizzi questo esempio nel tuo codice, sostituisci i valori segnaposto come segue:  
+ *adapter\$1ic\$1name*— Un nome univoco per il componente di inferenza dell'adattatore.
+ *endpoint\$1name*— Il nome dell'endpoint che ospita il componente di inferenza di base.
+ *base\$1inference\$1component\$1name*— Il nome del componente di inferenza di base che contiene il modello di base da adattare.
+ *adapter\$1s3\$1uri*— L'URI S3 che individua il `tar.gz` file con gli artefatti dell'adattatore LoRa.
Si crea un componente di inferenza dell’adattatore con un codice simile al codice per un normale componente di inferenza, con la differenza che, per il parametro `Specification`, si omette la chiave `ComputeResourceRequirements`. Quando si invoca un componente di inferenza dell’adattatore, questo viene caricato dal componente di inferenza di base. Il componente di inferenza dell’adattatore utilizza le risorse di calcolo del componente di inferenza di base.  
Per ulteriori informazioni sulla creazione e sull’implementazione di componenti di inferenza con SDK per Python (Boto3), consulta [Implementa modelli con Python SDKs](realtime-endpoints-deploy-models.md#deploy-models-python).

Dopo aver creato un componente di inferenza dell’adattatore, puoi invocarlo specificandone il nome in una richiesta `invoke_endpoint`.

**Example Chiamata all’`invoke_endpoint` per invocare un componente di inferenza dell’adattatore**  
L’esempio seguente invoca un componente di inferenza dell’adattatore:  

```
response = sm_rt_client.invoke_endpoint(
    EndpointName = endpoint_name,
    InferenceComponentName = adapter_ic_name,
    Body = json.dumps(
        {
            "inputs": prompt,
            "parameters": {"max_new_tokens": 100, "temperature":0.9}
        }
    ),
    ContentType = "application/json",
)

adapter_reponse = response["Body"].read().decode("utf8")["generated_text"]
```
Quando utilizzi questo esempio nel tuo codice, sostituisci i valori segnaposto come segue:  
+ *endpoint\$1name*— Il nome dell'endpoint che ospita i componenti di inferenza di base e dell'adattatore.
+ *adapter\$1ic\$1name*— Il nome del componente di inferenza dell'adattatore.
+ *prompt*— Il prompt per la richiesta di inferenza.
Per ulteriori informazioni sull’invocazione di componenti di inferenza con SDK per Python (Boto3), consulta [Invocare modelli per l’inferenza in tempo reale](realtime-endpoints-test-endpoints.md).

# Implementa modelli con Amazon SageMaker Serverless Inference
<a name="serverless-endpoints"></a>

Amazon SageMaker Serverless Inference è un'opzione di inferenza appositamente progettata che consente di distribuire e scalare modelli di machine learning senza configurare o gestire alcuna infrastruttura sottostante. Inferenza Serverless On-demand è ideale per carichi di lavoro che presentano periodi di inattività tra picchi di traffico e possono tollerare avvii a freddo. Gli endpoint serverless avviano automaticamente le risorse di calcolo e le ridimensionano in base al traffico, eliminando la necessità di scegliere i tipi di istanza o gestire le policy di scalabilità. In questo modo si elimina l'onere indifferenziato della selezione e della gestione dei server. Inferenza Serverless si integra con AWS Lambda per offrire elevata disponibilità, tolleranza agli errori integrata e scalabilità automatica. Con un pay-per-use modello, Serverless Inference è un'opzione conveniente se hai uno schema di traffico poco frequente o imprevedibile. Nei periodi in cui non ci sono richieste, Inferenza Serverless ridimensiona l'endpoint fino a 0, aiutandoti a ridurre al minimo i costi. [Per ulteriori informazioni sui prezzi di Serverless Inference on-demand, consulta Amazon Pricing. SageMaker ](https://aws.amazon.com/sagemaker/pricing/)

Facoltativamente, puoi anche utilizzare Simultaneità con provisioning con Inferenza Serverless. Inferenza Serverless con simultaneità con provisioning è un'opzione conveniente in caso di picchi di traffico prevedibili. Provisioned Concurrency ti consente di implementare modelli su endpoint serverless con prestazioni prevedibili e scalabilità elevata mantenendo gli endpoint caldi. SageMaker L'intelligenza artificiale garantisce che, in base al numero di Provisioned Concurrency allocate, le risorse di calcolo siano inizializzate e pronte a rispondere entro millisecondi. Per Inferenza Serverless con Simultaneità con provisioning, paghi in base alla capacità di calcolo utilizzata per elaborare le richieste di inferenza, fatturate in millisecondi, e alla quantità di dati elaborati. Paghi anche per l'utilizzo di Simultaneità con provisioning, in base alla memoria configurata, alla durata fornita e alla quantità di concorrenza abilitata. [Per ulteriori informazioni sui prezzi di Serverless Inference with Provisioned Concurrency, consulta Amazon Pricing. SageMaker ](https://aws.amazon.com/sagemaker/pricing/)

[Puoi integrare Serverless Inference con le tue MLOps pipeline per semplificare il flusso di lavoro ML e puoi utilizzare un endpoint serverless per ospitare un modello registrato con Model Registry.](model-registry.md)

Serverless Inference è generalmente disponibile in 21 AWS regioni: Stati Uniti orientali (Virginia settentrionale), Stati Uniti orientali (Ohio), Stati Uniti occidentali (California settentrionale), Stati Uniti occidentali (Oregon), Africa (Città del Capo), Asia Pacifico (Hong Kong), Asia Pacifico (Mumbai), Asia Pacifico (Tokyo), Asia Pacifico (Seoul), Asia Pacifico (Osaka), Asia Pacifico (Singapore), Asia Pacifico (Sydney), Canada (Centrale), Europa (Francoforte), Europa (Irlanda), Europa (Londra), Europa (Parigi), Europa (Stoccolma), Europa (Milano), Medio Oriente (Bahrein), Sud America (San Paolo). Per ulteriori informazioni sulla disponibilità regionale di Amazon SageMaker AI, consulta l'[Elenco dei servizi AWS regionali](https://aws.amazon.com/about-aws/global-infrastructure/regional-product-services/).

## Come funziona
<a name="serverless-endpoints-how-it-works"></a>

Il diagramma seguente mostra il flusso di lavoro di Inferenza Serverless on-demand e i vantaggi dell'utilizzo di un endpoint serverless.

![\[Diagramma che mostra il flusso di lavoro di Inferenza serverless.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/serverless-endpoints-how-it-works.png)


Quando crei un endpoint serverless on-demand, l' SageMaker IA effettua il provisioning e gestisce le risorse di elaborazione per te. Quindi, puoi effettuare richieste di inferenza all'endpoint e ricevere previsioni del modello in risposta. SageMaker L'intelligenza artificiale aumenta e riduce le risorse di calcolo in base alle esigenze per gestire il traffico delle richieste e paghi solo per ciò che utilizzi.

Per Simultaneità con provisioning, Inferenza Serverless si integra anche con Ridimensionamento automatico dell’applicazione, in modo da poter gestire Simultaneità con provisioning in base a un parametro destinazione o a una pianificazione. Per ulteriori informazioni, consulta [Dimensionamento automatico del provisioning simultaneo per un endpoint serverless](serverless-endpoints-autoscale.md).

Nelle sezioni seguenti vengono forniti ulteriori dettagli sull'inferenza serverless e sul relativo funzionamento.

**Topics**
+ [Supporto container](#serverless-endpoints-how-it-works-containers)
+ [Dimensioni della memoria](#serverless-endpoints-how-it-works-memory)
+ [Chiamate simultanee](#serverless-endpoints-how-it-works-concurrency)
+ [Riduzione al minimo degli avvii a freddo](#serverless-endpoints-how-it-works-cold-starts)
+ [Esclusione delle funzionalità](#serverless-endpoints-how-it-works-exclusions)

### Supporto container
<a name="serverless-endpoints-how-it-works-containers"></a>

Per il tuo contenitore di endpoint, puoi scegliere un contenitore SageMaker fornito dall'intelligenza artificiale o portarne uno tuo. SageMaker L'intelligenza artificiale fornisce contenitori per i suoi algoritmi integrati e immagini Docker predefinite per alcuni dei framework di machine learning più comuni, come Apache, e Chainer. MXNet TensorFlow PyTorch Per un elenco delle SageMaker immagini disponibili, consulta Available [Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md). Se stai portando il tuo contenitore, devi modificarlo per farlo funzionare con l' SageMaker intelligenza artificiale. Per informazioni sull'uso del tuo container, consulta [Adatta il tuo contenitore di inferenza per Amazon SageMaker AI](adapt-inference-container.md).

La dimensione massima dell'immagine del container che è possibile utilizzare è di 10 GB. Per gli endpoint serverless, consigliamo di creare un solo worker nel container e caricare solo una copia del modello. Tieni presente che questo è diverso dagli endpoint in tempo reale, in cui alcuni contenitori di SageMaker intelligenza artificiale possono creare un worker per ogni vCPU per elaborare le richieste di inferenza e caricare il modello in ogni lavoratore.

Se disponi già di un container per un endpoint in tempo reale, puoi utilizzare lo stesso container per l'endpoint serverless, sebbene alcune funzionalità siano escluse. Per ulteriori informazioni sulle funzionalità dei container che non sono supportate in Inferenza Serverless, consulta [Esclusione delle funzionalità](#serverless-endpoints-how-it-works-exclusions). Se scegli di utilizzare lo stesso contenitore, l' SageMaker intelligenza artificiale deposita (conserva) una copia dell'immagine del contenitore fino a quando non elimini tutti gli endpoint che utilizzano l'immagine. SageMaker L'intelligenza artificiale crittografa l'immagine copiata quando è inattiva con una chiave di proprietà dell'IA. SageMaker AWS KMS 

### Dimensioni della memoria
<a name="serverless-endpoints-how-it-works-memory"></a>

L'endpoint serverless ha una dimensione RAM minima di 1024 MB (1 GB) e la dimensione RAM massima che puoi scegliere è di 6144 MB (6 GB). Le dimensioni di memoria che puoi scegliere sono 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB o 6144 MB. Inferenza Serverless assegna automaticamente le risorse di calcolo in modo proporzionale alla memoria selezionata. Se scegli una dimensione di memoria maggiore, il tuo contenitore ha accesso a più v. CPUs Scegli la dimensione della memoria del tuo endpoint in base alle dimensioni del modello. In genere, la dimensione della memoria deve essere almeno pari a quella del modello. Potrebbe essere necessario eseguire dei benchmark per scegliere la giusta selezione di memoria per il modello in base alla latenza. SLAs Per una guida dettagliata al benchmark, consulta [Introduzione all'Amazon SageMaker Serverless Inference](https://aws.amazon.com/blogs/machine-learning/introducing-the-amazon-sagemaker-serverless-inference-benchmarking-toolkit/) Benchmarking Toolkit. Gli incrementi delle dimensioni della memoria hanno prezzi diversi; consulta la [pagina dei prezzi di Amazon SageMaker AI](https://aws.amazon.com/sagemaker/pricing/) per ulteriori informazioni.

Indipendentemente dalla dimensione di memoria scelta, l'endpoint serverless ha a disposizione 5 GB di archiviazione temporanea su disco. Per informazioni sui problemi relativi alle autorizzazioni dei container quando si lavora con l’archiviazione, consulta [Risoluzione dei problemi](serverless-endpoints-troubleshooting.md).

### Chiamate simultanee
<a name="serverless-endpoints-how-it-works-concurrency"></a>

Inferenza Serverless On-demand gestisce policy e quote di scalabilità predefinite per la capacità dell'endpoint. Gli endpoint serverless hanno una quota per il numero di chiamate simultanee che possono essere elaborate contemporaneamente. Se l'endpoint viene richiamato prima che termini l'elaborazione della prima richiesta, gestisce la seconda richiesta contemporaneamente.

La simultaneità totale che puoi condividere tra tutti gli endpoint serverless del tuo account dipende dalla tua Regione:
+ Per le Regioni Stati Uniti orientali (Ohio), Stati Uniti orientali (Virginia settentrionale), Stati Uniti occidentali (Oregon), Asia Pacifico (Singapore), Asia Pacifico (Sydney), Asia Pacifico (Tokyo), Europa (Francoforte), Europa (Irlanda), la simultaneità totale che puoi condividere tra tutti gli endpoint serverless per Regione nel tuo account è 1000.
+ Per le Regioni Stati Uniti occidentali (California settentrionale), Africa (Città del Capo), Asia Pacifico (Hong Kong), Asia Pacifico (Mumbai), Asia Pacifico (Osaka - Locale), Asia Pacifico (Seoul), Canada (Centrale), Europa (Londra), Europa (Milano), Europa (Parigi), Europa (Stoccolma) Medio Oriente (Bahrein) e Sud America (San Paolo), la simultaneità totale per Regione nel tuo account è 500.

Puoi impostare la simultaneità massima per un singolo endpoint fino a 200 e il numero totale di endpoint serverless che puoi ospitare in una Regione è 50. La simultaneità massima per un singolo endpoint impedisce a tale endpoint di accettare tutte le chiamate consentite per l'account e tutte le chiamate degli endpoint oltre il limite massimo vengono limitate.

**Nota**  
La simultaneità assegnata a un endpoint serverless deve essere sempre inferiore o uguale alla simultaneità massima assegnata a tale endpoint.

Per informazioni su come impostare la simultaneità massima per l'endpoint, consulta [Creare una configurazione endpoint](serverless-endpoints-create-config.md). Per ulteriori informazioni su quote e limiti, consulta la sezione [Endpoint e quote di Amazon SageMaker AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html) nel. *Riferimenti generali di AWS* Per richiedere un aumento delle restrizioni dei servizi, consulta [Supporto AWS](https://console.aws.amazon.com/support). Per istruzioni su come richiedere un aumento dei limiti del servizio, consulta [Regioni e quote supportate](regions-quotas.md).

### Riduzione al minimo degli avvii a freddo
<a name="serverless-endpoints-how-it-works-cold-starts"></a>

Se l'endpoint Inferenza Serverless on-demand non riceve traffico per un po' di tempo e poi improvvisamente riceve nuove richieste, l'endpoint può impiegare del tempo prima che l'endpoint attivi le risorse di elaborazione necessarie per elaborare le richieste. Questo procedimento è chiamato *avvio a freddo*. Poiché gli endpoint serverless forniscono risorse di calcolo su richiesta, l'endpoint potrebbe subire avvii a freddo. Un avvio a freddo può verificarsi anche se le richieste simultanee superano l'utilizzo corrente delle richieste simultanee. L'orario di avvio a freddo dipende dalle dimensioni del modello, dal tempo necessario per scaricare il modello e dal tempo di avvio del container.

Per monitorare la durata dell'orario di avvio a freddo, puoi utilizzare il CloudWatch parametro Amazon `OverheadLatency` per monitorare il tuo endpoint serverless. Questo parametro tiene traccia del tempo necessario per lanciare nuove risorse di calcolo per il tuo endpoint. Per ulteriori informazioni sull'utilizzo delle CloudWatch metriche con gli endpoint serverless, consulta. [Allarmi e log per il monitoraggio delle metriche da endpoint serverless](serverless-endpoints-monitoring.md)

Puoi ridurre al minimo le partenze a freddo utilizzando Provisioned Concurrency. SageMaker L'intelligenza artificiale mantiene l'endpoint caldo e pronto a rispondere in millisecondi, per il numero di Provisioned Concurrency allocate.

### Esclusione delle funzionalità
<a name="serverless-endpoints-how-it-works-exclusions"></a>

Alcune delle funzionalità attualmente disponibili per SageMaker AI Real-time Inference non sono supportate per Serverless Inference, tra cui pacchetti di modelli AWS marketplace GPUs, registri Docker privati, endpoint multimodel, configurazione VPC, isolamento di rete, acquisizione dati, più varianti di produzione, Model Monitor e pipeline di inferenza.

Non puoi convertire un endpoint in tempo reale basato su istanze in un endpoint serverless. Se provi ad aggiornare il tuo endpoint in tempo reale a serverless, ricevi un messaggio `ValidationError`. Puoi convertire un endpoint serverless in un endpoint serverless in tempo reale, ma una volta effettuato l'aggiornamento, non puoi ripristinarlo alla versione serverless.

## Nozioni di base
<a name="serverless-endpoints-get-started"></a>

Puoi creare, aggiornare, descrivere ed eliminare un endpoint serverless utilizzando la console SageMaker AI AWS SDKs, l'[SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-serverless-inference) e il. AWS CLI Puoi richiamare il tuo endpoint utilizzando l' AWS SDKs[SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-serverless-inference) e il. AWS CLI Per gli endpoint serverless con Simultaneità con provisioning, puoi utilizzare Dimensionamento automatico dell’applicazione per ridimensionare automaticamente Simultaneità con provisioning in base a un parametro o a una pianificazione di destinazione. Per ulteriori informazioni su come configurare e utilizzare un endpoint serverless, leggi la guida [Operazioni degli endpoint serverless](serverless-endpoints-create-invoke-update-delete.md). Per ulteriori informazioni sul dimensionamento automatico degli endpoint serverless con Simultaneità con provisioning, consulta [Dimensionamento automatico del provisioning simultaneo per un endpoint serverless](serverless-endpoints-autoscale.md).

**Nota**  
 Dimensionamento automatico dell’applicazione per Inferenza Serverless con Simultaneità con provisioning non è attualmente supportato su AWS CloudFormation. 

### Notebook e blog di esempio
<a name="serverless-endpoints-get-started-nbs"></a>

[Per esempi di notebook Jupyter che mostrano flussi di lavoro endpoint end-to-end serverless, consulta i notebook di esempio Serverless Inference.](https://github.com/aws/amazon-sagemaker-examples/tree/master/serverless-inference)

# Operazioni degli endpoint serverless
<a name="serverless-endpoints-create-invoke-update-delete"></a>

A differenza di altri endpoint SageMaker AI in tempo reale, Serverless Inference gestisce le risorse di calcolo per te, riducendo la complessità in modo che tu possa concentrarti sul tuo modello ML anziché sulla gestione dell'infrastruttura. La seguente guida evidenzia le funzionalità fondamentali degli endpoint serverless: come creare, richiamare, aggiornare, descrivere o eliminare un endpoint. Puoi utilizzare la console SageMaker AI AWS SDKs, l'[SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-serverless-inference) o il AWS CLI per gestire i tuoi endpoint serverless.

**Topics**
+ [Completa i prerequisiti](serverless-endpoints-prerequisites.md)
+ [Creazione di endpoint serverless](serverless-endpoints-create.md)
+ [Richiamo di un endpoint serverless](serverless-endpoints-invoke.md)
+ [Aggiornamento di un endpoint serverless](serverless-endpoints-update.md)
+ [Descrivere un endpoint serverless](serverless-endpoints-describe.md)
+ [Eliminazione di un endpoint serverless](serverless-endpoints-delete.md)

# Completa i prerequisiti
<a name="serverless-endpoints-prerequisites"></a>

Il seguente argomento descrive i prerequisiti che è necessario completare prima di creare un endpoint serverless. Questi prerequisiti includono la corretta memorizzazione degli artefatti del modello, la configurazione di un AWS IAM con le autorizzazioni corrette e la selezione di un'immagine del contenitore.

**Per completare i prerequisiti**

1. **Configura un account. AWS ** Per prima cosa sono necessari un AWS account e un utente AWS Identity and Access Management amministratore. Per istruzioni su come configurare un AWS account, vedi [Come posso creare e attivare un nuovo AWS account?](https://aws.amazon.com/premiumsupport/knowledge-center/create-and-activate-aws-account/) . Per istruzioni su come proteggere l’account con un utente amministratore IAM, consultare [Creazione del primo utente e gruppo di amministratori IAM](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html) nella *Guida per l’utente IAM*.

1. **Creare un bucket Amazon S3**. Usare un bucket Amazon S3 per archiviare gli artefatti del modello. Per informazioni su come creare un bucket, consultare [Creare il primo bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/creating-bucket.html) nella *Guida per l’utente di Amazon S3*.

1. **Caricare gli artefatti del modello nel bucket S3.** Per istruzioni su come caricare il modello nel bucket, consultare [Carica un oggetto nel bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/uploading-an-object-bucket.html) nella *Guida per l’utente di Amazon S3*.

1. **Crea un ruolo IAM per Amazon SageMaker AI.** Amazon SageMaker AI deve accedere al bucket S3 che memorizza il tuo modello. Crea un ruolo IAM con una policy che consenta all' SageMaker IA di accedere in lettura al tuo bucket. La procedura seguente mostra come creare un ruolo nella console, ma puoi anche utilizzare l'[CreateRole](https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html)API della *IAM User Guide*. Per informazioni su come concedere al ruolo autorizzazioni più granulari in base al caso d'uso, consultare [Come utilizzare i ruoli di esecuzione dell' SageMaker IA](sagemaker-roles.md#sagemaker-roles-createmodel-perms).

   1. Accedere alla [console IAM](https://console.aws.amazon.com/iam/).

   1. Nella barra di navigazione, scegliere **Ruoli**.

   1. Selezionare **Crea ruolo**.

   1. Per **Seleziona il tipo di entità affidabile**, scegli **AWS il servizio**, quindi scegli **SageMaker AI**.

   1. Scegliere **Prossimo: Autorizzazioni**, quindi **Prossimo: Tag**.

   1. (Facoltativo) Aggiungere tag come coppie chiave-valore se si desidera avere metadati per il ruolo.

   1. Scegliere **Prossimo: Rivedi**.

   1.  In **Nome ruolo**, inserisci un nome per il nuovo ruolo che sia unico all'interno del tuo AWS account. Non è possibile modificare il nome del ruolo dopo averlo creato.

   1. (Facoltativo) In **Descrizione ruolo**, immettere una descrizione per il nuovo ruolo.

   1. Scegli **Crea ruolo**.

1. **Associa le autorizzazioni del bucket S3 al tuo SageMaker ruolo AI.** Dopo aver creato un ruolo IAM, allega una policy che autorizzi l' SageMaker IA ad accedere al bucket S3 contenente gli artefatti del modello.

   1. Nella scheda di navigazione della console IAM, scegliere **Ruoli**.

   1. Dall'elenco dei ruoli, cercare per nome il ruolo creato nella fase precedente.

   1. Scegli il tuo ruolo, quindi scegli **Collega policy**.

   1. In **Collega autorizzazioni**, scegli **Crea policy**.

   1. Seleziona la visualizzazione **Crea policy** e quindi la scheda **JSON**.

   1. Nell'editor JSON, aggiungi la seguente istruzione della policy. Assicurati di sostituire `<your-bucket-name>` con il nome del bucket S3 che memorizza gli artefatti del modello. Se desideri limitare l'accesso a una cartella o a un file specifico nel bucket, puoi anche specificare il percorso della cartella Amazon S3, ad esempio `<your-bucket-name>/<model-folder>`.

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Sid": "VisualEditor0",
                  "Effect": "Allow",
                  "Action": "s3:GetObject",
                  "Resource": "arn:aws:s3:::<your-bucket-name>/*"
              }
          ]
      }
      ```

------

   1. Scegli **Successivo: Tag**.

   1. (Facoltativo) Aggiungere tag alla policy nelle coppie chiave-valore.

   1. Scegli **Prossimo: Rivedi**.

   1. Per **Nome**, inserire un nome per la nuova policy.

   1. (Facoltativo) Aggiungere una **Descrizione** per la policy.

   1. Scegli **Crea policy**.

   1. Dopo aver creato la policy, torna a **Roles** nella [console IAM](https://console.aws.amazon.com/iam/) e seleziona il tuo ruolo AI. SageMaker 

   1. Scegli **Collega policy**.

   1. Per **Collega autorizzazioni**, cercare la policy creata per nome. Selezionarla e scegliere **Collega policy**.

1. **Selezionare un'immagine preconfigurata del container Docker oppure crearne una personalizzata.** Il contenitore che scegli serve per l'inferenza sul tuo endpoint. SageMaker L'intelligenza artificiale fornisce contenitori per algoritmi integrati e immagini Docker predefinite per alcuni dei framework di machine learning più comuni, come Apache, e Chainer. MXNet TensorFlow PyTorch Per un elenco completo delle SageMaker immagini disponibili, consulta Available [Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

   Se nessuno dei contenitori SageMaker AI esistenti soddisfa le tue esigenze, potresti dover creare il tuo contenitore Docker. Per informazioni su come creare l'immagine Docker e renderla compatibile con l' SageMaker intelligenza artificiale, consulta. [Container con codice di inferenza personalizzato](your-algorithms-inference-main.md) Per utilizzare il contenitore con un endpoint serverless, l'immagine del contenitore deve risiedere in un repository Amazon ECR all'interno dello stesso AWS account che crea l'endpoint.

1. **(Facoltativo) Registrare il proprio modello con Model Registry.** [SageMaker Model Registry](model-registry.md) ti aiuta a catalogare e gestire le versioni dei tuoi modelli da utilizzare nelle pipeline ML. Per ulteriori informazioni sulla registrazione di una versione del modello, consultare [Creazione di un gruppo di modelli](model-registry-model-group.md) e [Registrazione di una versione del modello](model-registry-version.md). Per un esempio di flusso di lavoro Model Registry e Serverless Inference, vedere il seguente [notebook di esempio](https://github.com/aws/amazon-sagemaker-examples/blob/main/serverless-inference/serverless-model-registry.ipynb).

1. **(Facoltativo) Porta una AWS KMS chiave.** Quando configuri un endpoint serverless, hai la possibilità di specificare una chiave KMS che l' SageMaker IA utilizza per crittografare la tua immagine Amazon ECR. Tenere presente che la policy della chiave per la chiave KMS deve concedere l'accesso al ruolo IAM specificato durante la configurazione endpoint. Per ulteriori informazioni sulle chiavi KMS, consultare la [AWS Key Management Service Guida per gli sviluppatori di ](https://docs.aws.amazon.com/kms/latest/developerguide/overview.html).

# Creazione di endpoint serverless
<a name="serverless-endpoints-create"></a>

**Importante**  
Le politiche IAM personalizzate che consentono ad Amazon SageMaker Studio o Amazon SageMaker Studio Classic di creare SageMaker risorse Amazon devono inoltre concedere le autorizzazioni per aggiungere tag a tali risorse. L’autorizzazione per aggiungere tag alle risorse è necessaria perché Studio e Studio Classic applicano automaticamente tag a tutte le risorse che creano. Se una policy IAM consente a Studio e Studio Classic di creare risorse ma non consente l'etichettatura, possono verificarsi errori AccessDenied "" durante il tentativo di creare risorse. Per ulteriori informazioni, consulta [Fornisci le autorizzazioni per etichettare SageMaker le risorse AI](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS politiche gestite per Amazon SageMaker AI](security-iam-awsmanpol.md)che danno i permessi per creare SageMaker risorse includono già le autorizzazioni per aggiungere tag durante la creazione di tali risorse.

Per creare un endpoint serverless, puoi utilizzare la console Amazon SageMaker AI APIs, o il. AWS CLIÈ possibile creare un endpoint serverless utilizzando un processo simile a quello di un [endpoint in tempo reale](realtime-endpoints.md).

**Topics**
+ [Creazione di un modello](serverless-endpoints-create-model.md)
+ [Creare una configurazione endpoint](serverless-endpoints-create-config.md)
+ [Creare un endpoint](serverless-endpoints-create-endpoint.md)

# Creazione di un modello
<a name="serverless-endpoints-create-model"></a>

Per creare il modello è necessario fornire la posizione degli artefatti del modello e l'immagine del container. Puoi anche utilizzare una versione del [SageMaker modello](model-registry.md) da Model Registry. Gli esempi nelle sezioni seguenti mostrano come creare un modello utilizzando l'[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API, il Model Registry e la [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

## Per creare un modello (utilizzando Model Registry)
<a name="serverless-endpoints-create-model-registry"></a>

[Model Registry](model-registry.md) è una funzionalità dell' SageMaker intelligenza artificiale che ti aiuta a catalogare e gestire le versioni del tuo modello da utilizzare nelle pipeline ML. Per utilizzare Model Registry con Serverless Inference è necessario prima registrare una versione del modello in un gruppo di modelli di Model Registry. Per informazioni su come registrare un modello in Model Registry, seguire le procedure in [Creazione di un gruppo di modelli](model-registry-model-group.md) e [Registrazione di una versione del modello](model-registry-version.md).

L'esempio seguente richiede l'ARN di una versione registrata del modello e utilizza l'[AWS SDK for Python (Boto3) per chiamare l'API](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html). [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) Per Serverless Inference, Model Registry è attualmente supportato solo dall' AWS SDK for Python (Boto3). Per l'esempio, specificare i valori seguenti:
+ Per `model_name`, inserire un nome per il modello.
+ Infatti`sagemaker_role`, puoi utilizzare il ruolo predefinito SageMaker creato dall'intelligenza artificiale o un ruolo IAM SageMaker AI personalizzato dal passaggio 4 della sezione. [Completa i prerequisiti](serverless-endpoints-prerequisites.md)
+ Per `ModelPackageName`, specificare l'ARN per la versione del modello, che deve essere registrata su un gruppo di modelli in Model Registry.

```
#Setup
import boto3
import sagemaker
region = boto3.Session().region_name
client = boto3.client("sagemaker", region_name=region)

#Role to give SageMaker AI permission to access AWS services.
sagemaker_role = sagemaker.get_execution_role()

#Specify a name for the model
model_name = "<name-for-model>"

#Specify a Model Registry model version
container_list = [
    {
        "ModelPackageName": <model-version-arn>
     }
 ]

#Create the model
response = client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    container_list
)
```

## Per creare un modello (utilizzando l'API)
<a name="serverless-endpoints-create-model-api"></a>

L'esempio seguente utilizza l'[AWS SDK for Python (Boto3) per chiamare l'](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)API. [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html) Specifica i seguenti valori:
+ `sagemaker_role,`Puoi infatti utilizzare il ruolo predefinito SageMaker creato dall'intelligenza artificiale o un ruolo IAM SageMaker AI personalizzato dal passaggio 4 della sezione. [Completa i prerequisiti](serverless-endpoints-prerequisites.md)
+ Per `model_url`, specificare l'URI di Amazon S3 per il proprio modello.
+ Per `container`, recuperare il container che si desidera utilizzare tramite il relativo percorso Amazon ECR. Questo esempio utilizza un contenitore fornito dall' SageMaker intelligenza artificiale XGBoost . Se non hai selezionato un contenitore SageMaker AI o ne hai portato uno tuo, consulta il passaggio 6 della [Completa i prerequisiti](serverless-endpoints-prerequisites.md) sezione per ulteriori informazioni.
+ Per `model_name`, inserire un nome per il modello.

```
#Setup
import boto3
import sagemaker
region = boto3.Session().region_name
client = boto3.client("sagemaker", region_name=region)

#Role to give SageMaker AI permission to access AWS services.
sagemaker_role = sagemaker.get_execution_role()

#Get model from S3
model_url = "s3://amzn-s3-demo-bucket/models/model.tar.gz"

#Get container image (prebuilt example)
from sagemaker import image_uris
container = image_uris.retrieve("xgboost", region, "0.90-1")

#Create model
model_name = "<name-for-model>"

response = client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    Containers = [{
        "Image": container,
        "Mode": "SingleModel",
        "ModelDataUrl": model_url,
    }]
)
```

## Per creare un modello (utilizzando la console)
<a name="serverless-endpoints-create-model-console"></a>

1. Accedi alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. Nella scheda di navigazione, scegliere **Inferenza**.

1. Dopodiché, scegliere **Modelli**.

1. Scegliere **Crea modello**.

1. In **Nome modello**, inserisci un nome per il modello che sia univoco per il tuo account e Regione AWS.

1. Per il **ruolo IAM**, seleziona un ruolo IAM che hai già creato (vedi[Completa i prerequisiti](serverless-endpoints-prerequisites.md)) o consenti all' SageMaker IA di crearne uno per te.

1. In **Definizione container 1**, per **Opzioni di input del container**, selezionare **Fornisci gli artefatti del modello e la posizione di input**.

1. Per **Fornisci artefatti del modello e opzioni di immagine di inferenza**, selezionare **Utilizza un singolo modello**.

1. Per **Posizione dell'immagine del codice di inferenza**, inserisci un percorso Amazon ECR verso un container. L'immagine deve essere un'immagine di prima parte SageMaker fornita dall'intelligenza artificiale (ad esempio TensorFlow XGBoost) o un'immagine che risiede in un repository Amazon ECR all'interno dello stesso account in cui stai creando l'endpoint. Se non disponi di un container, torna alla fase 6 della sezione [Completa i prerequisiti](serverless-endpoints-prerequisites.md) per ulteriori informazioni.

1. Per **Posizione degli artefatti dei modelli**, inserire l'URI di Amazon S3 nel proprio modello ML. Ad esempio, `s3://amzn-s3-demo-bucket/models/model.tar.gz`.

1. (Facoltativo) Per **Tag**, aggiungere coppie chiave-valore per creare metadati per il modello.

1. Scegli **Crea modello**.

# Creare una configurazione endpoint
<a name="serverless-endpoints-create-config"></a>

Dopo aver creato un modello, creare una configurazione endpoint. È quindi possibile distribuire il modello utilizzando le specifiche nella configurazione endpoint. Nella configurazione, si specifica se si desidera un endpoint in tempo reale o serverless. Per creare una configurazione endpoint serverless, puoi utilizzare la [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home), l'[CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)API o il. AWS CLI Gli approcci all'API e alla console sono descritti nelle seguenti sezioni.

## Per creare una configurazione endpoint (mediante l’API)
<a name="serverless-endpoints-create-config-api"></a>

L'esempio seguente utilizza l'[AWS SDK for Python (Boto3) per chiamare l'](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)API. [CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) Specifica i seguenti valori:
+ Per `EndpointConfigName`, scegliere un nome per la configurazione endpoint. Il nome deve essere univoco all'interno dell’account in una Regione.
+ (Facoltativo) Per`KmsKeyId`, usa l'ID chiave, l'ARN della chiave, il nome alias o l'alias ARN per qualsiasi AWS KMS chiave che desideri utilizzare. SageMaker L'intelligenza artificiale utilizza questa chiave per crittografare la tua immagine Amazon ECR.
+ Per `ModelName`, usare il nome del modello da distribuire. Dovrebbe essere lo stesso modello usato nella fase [Creazione di un modello](serverless-endpoints-create-model.md).
+ Per `ServerlessConfig`:
  + Imposta `MemorySizeInMB` su `2048`. Per questo esempio, abbiamo impostato le dimensioni della memoria su 2048 MB, ma è possibile scegliere uno dei valori seguenti: 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB o 6144 MB. 
  + Imposta `MaxConcurrency` su `20`. Per questo esempio, impostiamo il numero massimo di simultaneità su 20. Il numero massimo di richiami simultanei che è possibile impostare per un endpoint serverless è 200, mentre il valore minimo che è possibile scegliere è 1.
  + (Facoltativo) Per utilizzare Concorrenza assegnata, impostare `ProvisionedConcurrency` su 10. Per questo esempio, impostiamo Concorrenza assegnata su 10. Il numero `ProvisionedConcurrency` per un endpoint serverless deve essere inferiore o uguale al numero `MaxConcurrency`. È possibile lasciarlo vuoto se si desidera utilizzare l'endpoint Serverless Inference su richiesta. È possibile scalare dinamicamente Effettua il provisioning di simultaneità. Per ulteriori informazioni, consulta [Dimensionamento automatico del provisioning simultaneo per un endpoint serverless](serverless-endpoints-autoscale.md).

```
response = client.create_endpoint_config(
   EndpointConfigName="<your-endpoint-configuration>",
   KmsKeyId="arn:aws:kms:us-east-1:123456789012:key/143ef68f-76fd-45e3-abba-ed28fc8d3d5e",
   ProductionVariants=[
        {
            "ModelName": "<your-model-name>",
            "VariantName": "AllTraffic",
            "ServerlessConfig": {
                "MemorySizeInMB": 2048,
                "MaxConcurrency": 20,
                "ProvisionedConcurrency": 10,
            }
        } 
    ]
)
```

## Per creare una configurazione endpoint (mediante la console)
<a name="serverless-endpoints-create-config-console"></a>

1. Accedi alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. Nella scheda di navigazione, scegliere **Inferenza**.

1. Quindi, scegliere **Configurazioni endpoint**.

1. Scegliere **Crea configurazione endpoint**.

1. Per **Nome configurazione endpoint**, inserire un nome univoco all'interno dell'account in una Regione.

1. Per **Tipo di endpoint**, selezionare **Serverless**.  
![\[Screenshot dell'opzione relativa al tipo di endpoint nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/serverless-endpoints-endpoint-config.png)

1. Per le **varianti di produzione**, scegliere **Aggiungi modello**.

1. In **Aggiungi modello**, selezionare il modello da utilizzare dall'elenco dei modelli, quindi scegliere **Salva**.

1. Dopo aver aggiunto il modello, in **Azioni**, scegliere **Modifica**.

1. Per **Dimensioni memoria**, scegliere le dimensioni della memoria desiderate in GB.  
![\[Screenshot dell'opzione relativa alle dimensioni della memoria nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/serverless-endpoints-endpoint-config-2.png)

1. Per **Max simultaneità**, inserire il numero massimo di invocazioni simultanee desiderato per l'endpoint. Il valore massimo inseribile è 200, mentre quello minimo è 1.

1. (Facoltativo) Per utilizzare Simultaneità assegnata, inserire il numero desiderato di chiamate simultanee nel campo dell’impostazione **Simultaneità assegnata**. Il numero di richiami simultanei assegnati deve essere minore o uguale al numero massimo di richiami simultanei.

1. Selezionare **Salva**.

1. (Facoltativo) Per **Tag**, immettere le coppie chiave-valore se si desidera creare metadati per la configurazione endpoint.

1. Scegliere **Crea configurazione endpoint**.

# Creare un endpoint
<a name="serverless-endpoints-create-endpoint"></a>

Per creare un endpoint serverless, puoi utilizzare la [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home), l'[CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)API o il. AWS CLI Gli approcci all'API e alla console sono descritti nelle seguenti sezioni. Una volta creato l'endpoint, potrebbero essere necessari alcuni minuti prima che l'endpoint diventi disponibile.

## Per creare un endpoint (mediante l’API)
<a name="serverless-endpoints-create-endpoint-api"></a>

L'esempio seguente utilizza l'[AWS SDK for Python (Boto3) per chiamare l'](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)API. [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) Specifica i seguenti valori:
+ Per `EndpointName`, inserire un nome per l'endpoint che sia univoco all'interno di una Regione nel proprio account.
+ Per `EndpointConfigName`, utilizzare il nome della configurazione endpoint creata nella sezione precedente.

```
response = client.create_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-endpoint-config>"
)
```

## Per creare un endpoint dell'interfaccia (mediante la console)
<a name="serverless-endpoints-create-endpoint-console"></a>

1. Accedi alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. Nella scheda di navigazione, scegliere **Inferenza**.

1. Dopodiché, scegliere **Endpoint**.

1. Seleziona **Crea endpoint**.

1. Per **Nome dell'endpoint**, inserire nel proprio account un nome univoco all'interno di una Regione.

1. Per **Collega configurazione endpoint**, selezionare **Utilizza una configurazione endpoint esistente**.

1. Per **Configurazione endpoint**, selezionare il nome della configurazione endpoint creata nella sezione precedente, quindi scegliere **Seleziona la configurazione endpoint**.

1. (Facoltativo) Per **Tag**, immettere le coppie chiave-valore se si desidera creare metadati per l'endpoint.

1. Seleziona **Crea endpoint**.  
![\[Screenshot della pagina di creazione e configurazione endpoint nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/serverless-endpoints-create.png)

# Richiamo di un endpoint serverless
<a name="serverless-endpoints-invoke"></a>

Per eseguire l'inferenza utilizzando un endpoint serverless, è necessario inviare una richiesta HTTP all'endpoint. Puoi utilizzare l'[InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html)API o AWS CLI, che effettuano una `POST` richiesta per richiamare il tuo endpoint. Il numero massimo di richieste e le dimensioni payload della risposta per le chiamate serverless è di 4 MB. Per gli endpoint serverless:
+ Il modello deve essere scaricato e il server deve rispondere correttamente a `/ping` entro 3 minuti.
+ Il timeout a cui il container deve rispondere alle richieste di inferenza su `/invocations` è di 1 minuto.

## Per richiamare un endpoint
<a name="serverless-endpoints-invoke-api"></a>

L'esempio seguente utilizza l'[AWS SDK for Python (Boto3) per chiamare l'](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)API. [InvokeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) Nota che, a differenza delle altre chiamate API riportate in questa guida, è necessario utilizzare SageMaker Runtime Runtime come client. `InvokeEndpoint` Specifica i seguenti valori:
+ Per `endpoint_name`, usare il nome dell'endpoint serverless in servizio che si desidera richiamare.
+ Per `content_type`, specificare il tipo MIME dei dati di input nel corpo della richiesta (ad esempio, `application/json`).
+ Per `payload`, usare il payload di richiesta per l'inferenza. Il payload deve essere in byte o un oggetto simile a un file.

```
runtime = boto3.client("sagemaker-runtime")

endpoint_name = "<your-endpoint-name>"
content_type = "<request-mime-type>"
payload = <your-request-body>

response = runtime.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType=content_type,
    Body=payload
)
```

# Aggiornamento di un endpoint serverless
<a name="serverless-endpoints-update"></a>

Prima di aggiornare l'endpoint, creare una nuova configurazione endpoint o utilizzare una configurazione endpoint esistente. Nella configurazione endpoint vanno specificate le modifiche per l'aggiornamento. Quindi, puoi aggiornare il tuo endpoint con la [console SageMaker AI, l'API](https://console.aws.amazon.com/sagemaker/home) o il [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). AWS CLI Il processo di aggiornamento di un endpoint serverless è identico al processo di aggiornamento di un [endpoint in tempo reale](realtime-endpoints.md). Tieni presente che quando aggiorni l'endpoint, potresti riscontrare partenze a freddo quando effettui richieste all'endpoint, poiché l' SageMaker IA deve reinizializzare il contenitore e il modello.

È possibile aggiornare un endpoint serverless su richiesta con un endpoint serverless con la simultaneità assegnata o modificare il valore Simultaneità assegnata per un endpoint serverless esistente con simultaneità assegnata. In entrambi i casi, sarà necessario creare una nuova configurazione endpoint serverless con il valore desiderato per Simultaneità assegnata e applicare `UpdateEndpoint` all'endpoint serverless esistente. Per ulteriori informazioni sulla creazione di una nuova configurazione endpoint serverless con Simultaneità assegnata, consultare [Creare una configurazione endpoint](serverless-endpoints-create-config.md).

Se si desidera rimuovere Simultaneità assegnata da un endpoint serverless, sarà necessario creare una nuova configurazione endpoint senza specificare alcun valore per Simultaneità assegnata e quindi applicare `UpdateEndpoint` all'endpoint.

**Nota**  
L'aggiornamento di un endpoint di inferenza in tempo reale a un endpoint serverless su richiesta o a un endpoint serverless con Simultaneità assegnata non è attualmente supportato.

## Aggiornamento dell’endpoint
<a name="serverless-endpoints-update-endpoint"></a>

Dopo aver creato una nuova configurazione di endpoint serverless, puoi utilizzare la console AI [AWS SDK per Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)o la [console SageMaker AI](https://console.aws.amazon.com/sagemaker/) per aggiornare un endpoint serverless esistente. Nelle sezioni seguenti sono descritti esempi di come aggiornare l'endpoint utilizzando AWS SDK per Python (Boto3) la console di SageMaker intelligenza artificiale.

### Per aggiornare l’endpoint (mediante Boto3)
<a name="serverless-endpoints-update-endpoint-api"></a>

L’esempio seguente utilizza [AWS SDK per Python (Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) per chiamare il metodo [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/update_endpoint.html). È necessario specificare almeno i seguenti parametri durante la chiamata al metodo:
+ Per `EndpointName`, usare il nome dell'endpoint che si sta aggiornando.
+ Per `EndpointConfigName`, utilizzare il nome della configurazione endpoint che si desidera utilizzare per l’aggiornamento.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<new-endpoint-config>",
)
```

### Per aggiornare l'endpoint (tramite la console)
<a name="serverless-endpoints-update-endpoint-console"></a>

1. Accedi alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/).

1. Nella scheda di navigazione, scegliere **Inferenza**.

1. Dopodiché, scegliere **Endpoint**.

1. Nell'elenco degli endpoint, selezionare quello che si desidera aggiornare.

1. Scegliere **Cambia** nella sezione **Impostazioni della configurazione endpoint**.

1. Per **Modifica configurazione endpoint**, scegliere **Utilizza una configurazione endpoint esistente**.

1. Dall'elenco delle configurazioni endpoint, selezionare quella da utilizzare per l'aggiornamento.

1. Scegliere **Seleziona la configurazione endpoint**.

1. Scegliere **Aggiorna endpoint**.

# Descrivere un endpoint serverless
<a name="serverless-endpoints-describe"></a>

Potrebbe essere necessario recuperare informazioni sull'endpoint, inclusi dettagli come l'ARN dell'endpoint, lo stato corrente, la configurazione di distribuzione e i motivi dell’errore. Puoi trovare informazioni sul tuo endpoint utilizzando la [console SageMaker AI](https://console.aws.amazon.com/sagemaker/home), l'[DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API o il. AWS CLI

## Per descrivere un endpoint (mediante l’API)
<a name="serverless-endpoints-describe-api"></a>

L'esempio seguente utilizza l'[AWS SDK for Python (Boto3) per chiamare l'](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#id309)API. [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) Per `EndpointName`, utilizzare il nome dell'endpoint da controllare.

```
response = client.describe_endpoint(
    EndpointName="<your-endpoint-name>",
)
```

## Per descrivere un endpoint dell'interfaccia (mediante la console)
<a name="serverless-endpoints-describe-console"></a>

1. Accedi alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. Nella scheda di navigazione, scegliere **Inferenza**.

1. Dopodiché, scegliere **Endpoint**.

1. Nell'elenco di endpoint, selezionare quello da controllare.

La pagina dell'endpoint contiene le informazioni sull'endpoint.

# Eliminazione di un endpoint serverless
<a name="serverless-endpoints-delete"></a>

Puoi eliminare il tuo endpoint serverless utilizzando la [console SageMaker AI](https://console.aws.amazon.com/sagemaker/home), l'[DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html)API o il. AWS CLI Gli esempi seguenti mostrano come eliminare l'endpoint tramite l'API e la SageMaker console AI.

## Per eliminare un endpoint (mediante l’API)
<a name="serverless-endpoints-delete-api"></a>

L'esempio seguente utilizza l'[AWS SDK for Python (Boto3) per chiamare l'](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)API. [DeleteEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) Per `EndpointName`, utilizzare il nome dell'endpoint serverless che si desidera eliminare.

```
response = client.delete_endpoint(
    EndpointName="<your-endpoint-name>",
)
```

## Per eliminare un endpoint (mediante la console)
<a name="serverless-endpoints-delete-console"></a>

1. Accedi alla [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/home).

1. Nella scheda di navigazione, scegliere **Inferenza**.

1. Dopodiché, scegliere **Endpoint**.

1. Nell'elenco di endpoint, scegliere quello da eliminare.

1. Selezionare l'elenco a discesa **Azioni**, quindi scegliere **Elimina**.

1. Quando viene richiesto di nuovo, scegliere **Elimina**.

L'endpoint dovrebbe ora iniziare il processo di eliminazione.

# Allarmi e log per il monitoraggio delle metriche da endpoint serverless
<a name="serverless-endpoints-monitoring"></a>

Per monitorare il tuo endpoint serverless, puoi utilizzare gli allarmi di Amazon CloudWatch. CloudWatch è un servizio che raccoglie metriche in tempo reale dalle tue applicazioni e risorse AWS. Un allarme controlla i parametri man mano che vengono raccolti e ti dà la possibilità di specificare in anticipo una soglia e le azioni da intraprendere in caso di superamento di tale soglia. Ad esempio, l'allarme CloudWatch può inviarti una notifica se l'endpoint supera una soglia di errore. Configurando gli allarmi CloudWatch, ottieni visibilità sulle prestazioni e sulla funzionalità del tuo endpoint. Per ulteriori informazioni sugli allarmi CloudWatch, consulta [Utilizzo degli allarmi di Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) nella *Guida per l'utente di Amazon CloudWatch*.

## Monitoraggio con CloudWatch
<a name="serverless-endpoints-monitoring-metrics"></a>

I parametri riportati di seguito sono un elenco esaustivo di parametri per gli endpoint serverless. Qualsiasi parametro non elencato di seguito non viene pubblicato per gli endpoint serverless. Per ulteriori informazioni sulle metriche seguenti, consulta [Monitor Amazon SageMaker AI with Amazon CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html).

### Parametri degli endpoint comuni
<a name="serverless-endpoints-monitoring-metrics-common"></a>

Questi parametri CloudWatch sono gli stessi pubblicati oggi per gli endpoint in tempo reale.

La metrica `OverheadLatency` tiene traccia di tutta la latenza aggiuntiva aggiunta da SageMaker AI, inclusa l’ora di avvio a freddo per il lancio di nuove risorse di calcolo per l’endpoint serverless. Rispetto agli endpoint serverless on-demand, `OverheadLatency` per gli endpoint serverless con provisioning di simultaneità sono generalmente significativamente inferiori.

Gli endpoint serverless possono anche utilizzare i parametri `Invocations4XXErrors`, `Invocations5XXErrors`, `Invocations`, `ModelLatency`, `ModelSetupTime` e `MemoryUtilization`. Per ulteriori informazioni su questi parametri, consulta [SageMaker Metriche di invocazione degli endpoint AI](monitoring-cloudwatch.md#cloudwatch-metrics-endpoint-invocation).

### Parametri comuni degli endpoint serverless
<a name="serverless-endpoints-monitoring-metrics-serverless"></a>

Questi parametri CloudWatch sono pubblicati sia per gli endpoint serverless on-demand che per gli endpoint serverless con provisioning di simultaneità.


| Nome parametro | Descrizione | Unità/statistiche | 
| --- | --- | --- | 
| ServerlessConcurrentExecutionsUtilization | Il numero di esecuzioni simultanee diviso per il numero massimo di simultaneità. | Unità: nessunaStatistiche valide: medio, massimo, minimo | 

### Endpoint serverless con parametri di provisioning di simultaneità
<a name="serverless-endpoints-monitoring-metrics-serverless-pc"></a>

Questi parametri CloudWatch sono pubblicati per gli endpoint serverless con provisioning di simultaneità.


| Nome parametro | Descrizione | Unità/statistiche | 
| --- | --- | --- | 
| ServerlessProvisionedConcurrencyExecutions | Il numero di esecuzioni simultanee gestite dall'endpoint. | Unità: numeroStatistiche valide: medio, massimo, minimo | 
| ServerlessProvisionedConcurrencyUtilization | Il numero di esecuzioni simultanee diviso per il numero di simultaneità allocato. | Unità: nessunaStatistiche valide: medio, massimo, minimo | 
| ServerlessProvisionedConcurrencyInvocations | Il numero di richieste InvokeEndpoint gestite dal provisioning di simultaneità. | Unità: numeroStatistiche valide: medio, massimo, minimo | 
| ServerlessProvisionedConcurrencySpilloverInvocations | Il numero di richieste InvokeEndpoint non gestite dal provisioning di simultaneità, ovvero gestite da Inferenza Serverless on-demand. | Unità: numeroStatistiche valide: medio, massimo, minimo | 

## Log
<a name="serverless-endpoints-monitoring-logs"></a>

Se desideri monitorare i log dal tuo endpoint per il debug o l'analisi dei progressi, puoi utilizzare File di log Amazon CloudWatch. Il gruppo di log fornito da SageMaker AI che è possibile utilizzare per gli endpoint serverless è `/aws/sagemaker/Endpoints/[EndpointName]`. Per ulteriori informazioni sull’utilizzo dei log CloudWatch in SageMaker AI, consulta [CloudWatch Registri per Amazon SageMaker AI](logging-cloudwatch.md). Per ulteriori informazioni sui file di log di CloudWatch, consulta [Che cos'è Amazon CloudWatch Logs?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/WhatIsCloudWatchLogs.html) nella *Guida per l'utente di Amazon CloudWatch Logs*.

# Dimensionamento automatico del provisioning simultaneo per un endpoint serverless
<a name="serverless-endpoints-autoscale"></a>

 Amazon SageMaker AI esegue automaticamente la riduzione o l’aumento orizzontale degli endpoint serverless on demand. Per gli endpoint serverless con Simultaneità con provisioning, puoi utilizzare Dimensionamento automatico dell’applicazione per ridimensionare con aumento o diminuzione Simultaneità con provisioning in base al tuo profilo di traffico, ottimizzando in tal modo i costi. 

 Di seguito sono riportati i prerequisiti per il dimensionamento automatico di Simultaneità con provisioning su endpoint serverless: 
+ [Registrazione di un modello](#serverless-endpoints-autoscale-register)
+ [Definizione di una policy di dimensionamento](#serverless-endpoints-autoscale-define)
+ [Applicazione di una policy di scalabilità](#serverless-endpoints-autoscale-apply)

 Prima di poter utilizzare il dimensionamento automatico, devi aver già distribuito un modello su un endpoint serverless con Simultaneità con provisioning. I modelli distribuiti sono indicati come [varianti di produzione](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). Vedi [Creare una configurazione endpoint](serverless-endpoints-create-config.md) e [Creare un endpoint](serverless-endpoints-create-endpoint.md) per ulteriori informazioni sulla distribuzione di un modello su un endpoint serverless con Simultaneità con provisioning. Per specificare i parametri e i valori di target per una policy di dimensionamento, devi configurare una policy di dimensionamento di monitoraggio. Per ulteriori informazioni su come definire una policy di dimensionamento, vedi [Definizione di una policy di dimensionamento](#serverless-endpoints-autoscale-define). Dopo la registrazione di un modello e la definizione di una policy di dimensionamento, applica la policy di dimensionamento al modello registrato. Per informazioni su come applicare la policy di dimensionamento, vedi [Applicazione di una policy di scalabilità](#serverless-endpoints-autoscale-apply). 

 Per i dettagli su altri prerequisiti e componenti utilizzati con il dimensionamento automatico, consulta la sezione [Prerequisiti per il dimensionamento automatico](endpoint-auto-scaling-prerequisites.md) nella [documentazione sul dimensionamento automatico SageMaker AI](endpoint-auto-scaling.md). 

## Registrazione di un modello
<a name="serverless-endpoints-autoscale-register"></a>

 Per aggiungere il dimensionamento automatico a un endpoint serverless con Simultaneità con provisioning, devi prima registrare il tuo modello (variante di produzione) utilizzando AWS CLI o l’API di dimensionamento automatico dell’applicazione. 

### Registrazione di un modello (AWS CLI)
<a name="serverless-endpoints-autoscale-register-cli"></a>

 Per registrare il tuo modello, utilizza il comando `register-scalable-target` AWS CLI con i parametri seguenti: 
+  `--service-namespace`: imposta questo valore su `sagemaker`. 
+  `--resource-id` – L'identificatore di risorsa per il modello (in particolare, la variante di produzione). Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante di produzione. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--scalable-dimension`: imposta questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `--min-capacity` – Il numero minimo di Simultaneità con provisioning per il modello. Imposta `--min-capacity` su almeno 1. Deve essere uguale o inferiore al valore specificato per `--max-capacity`. 
+  `--max-capacity` – Il numero massimo di Simultaneità con provisioning da abilitare con il dimensionamento automatico dell’applicazione. Imposta `--max-capacity` su un minimo di 1. Deve essere maggiore o uguale al valore specificato per `--min-capacity`. 

 L'esempio seguente mostra come registrare un modello denominato `MyVariant` che viene dimensionato in modo dinamico per avere un valore di Simultaneità con provisioning da 1 a 10: 

```
aws application-autoscaling register-scalable-target \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --min-capacity 1 \
    --max-capacity 10
```

### Registrazione di un modello (API di dimensionamento automatico dell’applicazione)
<a name="serverless-endpoints-autoscale-register-api"></a>

 Per registrare il modello, usa l’azione API `RegisterScalableTarget` Application Auto Scaling con i parametri seguenti: 
+  `ServiceNamespace`: imposta questo valore su `sagemaker`. 
+  `ResourceId` – L'identificatore di risorsa per il modello (in particolare, la variante di produzione). Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante di produzione. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ScalableDimension`: imposta questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `MinCapacity` – Il numero minimo di Simultaneità con provisioning per il modello. Imposta `MinCapacity` su almeno 1. Deve essere uguale o inferiore al valore specificato per `MaxCapacity`. 
+  `MaxCapacity` – Il numero massimo di Simultaneità con provisioning da abilitare con il dimensionamento automatico dell’applicazione. Imposta `MaxCapacity` su un minimo di 1. Deve essere maggiore o uguale al valore specificato per `MinCapacity`. 

 L'esempio seguente mostra come registrare un modello denominato `MyVariant` che viene dimensionato in modo dinamico per avere un valore di Simultaneità con provisioning da 1 a 10: 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.RegisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndPoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "MinCapacity": 1,
    "MaxCapacity": 10
}
```

## Definizione di una policy di dimensionamento
<a name="serverless-endpoints-autoscale-define"></a>

 Per specificare i parametri e i valori di target per una policy di dimensionamento, configuri una policy di dimensionamento di monitoraggio dei target. Definisci la policy di dimensionamento come un blocco JSON in un file di testo. Puoi quindi usare questo file di testo quando richiami il AWS CLI o l'API Application Auto Scaling. Per definire rapidamente una policy di dimensionamento di monitoraggio della destinazione per un endpoint serverless, utilizza il parametro predefinito `SageMakerVariantProvisionedConcurrencyUtilization`. 

```
{
    "TargetValue": 0.5,
    "PredefinedMetricSpecification": 
    {
        "PredefinedMetricType": "SageMakerVariantProvisionedConcurrencyUtilization"
    },
    "ScaleOutCooldown": 1,
    "ScaleInCooldown": 1
}
```

## Applicazione di una policy di scalabilità
<a name="serverless-endpoints-autoscale-apply"></a>

 Dopo aver registrato il modello, puoi applicare una policy di dimensionamento al tuo endpoint serverless con Simultaneità con provisioning. Consulta [Applicazione di una policy di dimensionamento di monitoraggio della destinazione](#serverless-endpoints-autoscale-apply-target) per applicare una policy di dimensionamento di monitoraggio della destinazione da te definita. Se il flusso del traffico verso l'endpoint serverless segue una routine prevedibile, anziché applicare una policy di dimensionamento basata sul monitoraggio della destinazione, potresti voler pianificare le azioni di scalabilità in momenti specifici. Per ulteriori informazioni sulle azioni di pianificazione del dimensionamento, consulta [Dimensionamento pianificato](#serverless-endpoints-autoscale-apply-scheduled). 

### Applicazione di una policy di dimensionamento di monitoraggio della destinazione
<a name="serverless-endpoints-autoscale-apply-target"></a>

 Puoi utilizzare Console di gestione AWS, AWS CLI o l'API Application Auto Scaling, per applicare una policy di dimensionamento di monitoraggio della destinazione all'endpoint serverless con Simultaneità con provisioning. 

#### Applicazione di una policy di dimensionamento di monitoraggio della destinazione (AWS CLI)
<a name="serverless-endpoints-autoscale-apply-target-cli"></a>

 Per applicare una policy di dimensionamento al tuo modello, utilizza il comando `put-scaling-policy` dell’AWS CLI con i parametri seguenti: 
+  `--policy-name` – Il nome della policy di dimensionamento. 
+  `--policy-type` – Impostare questo valore su `TargetTrackingScaling`. 
+  `--resource-id` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace` – Impostare questo valore su `sagemaker`. 
+  `--scalable-dimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `--target-tracking-scaling-policy-configuration` – La configurazione di una policy di dimensionamento con monitoraggio degli obiettivi da utilizzare per il modello. 

 L'esempio seguente mostra come applicare una policy di dimensionamento con monitoraggio della destinazione denominata `MyScalingPolicy` a un modello denominato `MyVariant`. La configurazione della policy viene salvata in un file denominato `scaling-policy.json`. 

```
aws application-autoscaling put-scaling-policy \
    --policy-name MyScalingPolicy \
    --policy-type TargetTrackingScaling \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --target-tracking-scaling-policy-configuration file://[file-localtion]/scaling-policy.json
```

#### Applica una policy di dimensionamento con monitoraggio della destinazione (API di Application Auto Scaling)
<a name="serverless-endpoints-autoscale-apply-target-api"></a>

 Per applicare una policy di dimensionamento al modello, utilizzare l'azione dell’API `PutScalingPolicy` Application Auto Scaling con i parametri seguenti: 
+  `PolicyName` – Il nome della policy di dimensionamento. 
+  `PolicyType` – Impostare questo valore su `TargetTrackingScaling`. 
+  `ResourceId` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace` – Impostare questo valore su `sagemaker`. 
+  `ScalableDimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `TargetTrackingScalingPolicyConfiguration` – La configurazione di una policy di dimensionamento con monitoraggio delle destinazioni da utilizzare per il modello. 

 L'esempio seguente mostra come applicare una policy di dimensionamento con monitoraggio della destinazione denominata `MyScalingPolicy` a un modello denominato `MyVariant`. La configurazione della policy viene salvata in un file denominato `scaling-policy.json`. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.PutScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "MyScalingPolicy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "PolicyType": "TargetTrackingScaling",
    "TargetTrackingScalingPolicyConfiguration": 
    {
        "TargetValue": 0.5,
        "PredefinedMetricSpecification": 
        {
            "PredefinedMetricType": "SageMakerVariantProvisionedConcurrencyUtilization"
        }
    }
}
```

#### Applicazione di una policy di dimensionamento di monitoraggio della destinazione (Console di gestione AWS)
<a name="serverless-endpoints-autoscale-apply-target-console"></a>

 Per applicare una policy di dimensionamento con monitoraggio della destinazione con la Console di gestione AWS: 

1.  Accedi alla [console di Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/). 

1.  Nel pannello di navigazione, scegli **Inferenza**. 

1.  Scegli **Endpoint** per visualizzare un elenco di tutti gli endpoint. 

1.  Scegli l'endpoint per cui applicare la policy di dimensionamento. Apparirà una pagina con le impostazioni dell'endpoint, con i modelli (variante di produzione) elencati nella sezione **Impostazioni di runtime dell'endpoint**. 

1.  Seleziona la variante di produzione a cui desideri applicare la policy di dimensionamento e scegli **Configurazione di Auto Scaling**. Viene visualizzata la pagina **Configura il dimensionamento automatico della variante**.   
![\[Screenshot della finestra di dialogo Configura il dimensionamento automatico della variante nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/serverless-endpoints-variant-autoscaling.png)

1.  Immetti i valori minimo e massimo della Simultaneità con provisioning nei campi **Simultaneità allocata minima** e **Simultaneità allocata massima**, rispettivamente, nella sezione **Scalabilità automatica della variante**. La simultaneità allocata minima deve essere minore o uguale alla simultaneità allocata massima. 

1.  Inserisci il valore target nel campo **Valore target** per il parametro target, `SageMakerVariantProvisionedConcurrencyUtilization`. 

1.  (Facoltativo) Inserisci i valori di disattivazione del dimensionamento verticale e orizzontale (in secondi), rispettivamente, nei campi **Disattivazione dimensionamento verticale** e **Disattivazione dimensionamento orizzontale**. 

1.  (Facoltativo) Seleziona **Disabilita il dimensionamento verticale** se non desideri che il dimensionamento automatico elimini l'istanza quando il traffico diminuisce. 

1.  Seleziona **Salva**. 

### Dimensionamento pianificato
<a name="serverless-endpoints-autoscale-apply-scheduled"></a>

 Se il traffico verso il tuo endpoint serverless con Simultaneità con provisioning segue uno schema di routine, potresti voler pianificare le azioni di pianificazione del dimensionamento in momenti specifici, per ridimensionare o aumentare la Simultaneità con provisioning. Puoi utilizzare AWS CLI o il dimensionamento automatico dell’applicazione per pianificazione le azioni di dimensionamento. 

#### Dimensionamento pianificato (AWS CLI)
<a name="serverless-endpoints-autoscale-apply-scheduled-cli"></a>

 Per applicare una policy di dimensionamento al tuo modello, utilizza il comando `put-scheduled-action` dell’AWS CLI con i parametri seguenti: 
+  `--schedule-action-name` – Il nome dell’azione di dimensionamento. 
+  `--schedule` – Un'espressione Cron che specifica l’ora di inizio e fine dell'azione di dimensionamento con una pianificazione ricorrente. 
+  `--resource-id` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace` – Impostare questo valore su `sagemaker`. 
+  `--scalable-dimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `--scalable-target-action` – La destinazione dell'azione di dimensionamento. 

 Nell'esempio seguente viene mostrato come aggiungere un'azione di dimensionamento denominata `MyScalingAction` a un modello denominato `MyVariant` in una pianificazione ricorrente. Alla pianificazione specificata (ogni giorno alle 12:15 UTC), se l'attuale Simultaneità con provisioning è inferiore al valore indicato per `MinCapacity`. Il dimensionamento automatico dell’applicazione aumenta la simultaneità con provisioning fino al valore specificato da `MinCapacity`. 

```
aws application-autoscaling put-scheduled-action \
    --scheduled-action-name 'MyScalingAction' \
    --schedule 'cron(15 12 * * ? *)' \
    --service-namespace sagemaker \
    --resource-id endpoint/MyEndpoint/variant/MyVariant \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --scalable-target-action 'MinCapacity=10'
```

#### Dimensionamento pianificato (API di dimensionamento automatico dell’applicazione)
<a name="serverless-endpoints-autoscale-apply-scheduled-api"></a>

 Per applicare una policy di dimensionamento al modello, utilizzare l'azione dell’API `PutScheduledAction` Application Auto Scaling con i parametri seguenti: 
+  `ScheduleActionName` – Il nome dell’azione di dimensionamento. 
+  `Schedule` – Un'espressione Cron che specifica l’ora di inizio e fine dell'azione di dimensionamento con una pianificazione ricorrente. 
+  `ResourceId` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace` – Impostare questo valore su `sagemaker`. 
+  `ScalableDimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 
+  `ScalableTargetAction` – La destinazione dell'azione di dimensionamento. 

 Nell'esempio seguente viene mostrato come aggiungere un'azione di dimensionamento denominata `MyScalingAction` a un modello denominato `MyVariant` in una pianificazione ricorrente. Alla pianificazione specificata (ogni giorno alle 12:15 UTC), se l'attuale Simultaneità con provisioning è inferiore al valore indicato per `MinCapacity`. Il dimensionamento automatico dell’applicazione aumenta la simultaneità con provisioning fino al valore specificato da `MinCapacity`. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.PutScheduledAction
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ScheduledActionName": "MyScalingAction",
    "Schedule": "cron(15 12 * * ? *)",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
    "ScalableTargetAction": "MinCapacity=10"
        }
    }
}
```

# Eliminazione
<a name="serverless-endpoints-autoscale-cleanup"></a>

 Dopo aver finito di utilizzare il dimensionamento automatico per l’endpoint serverless con Provisioned Concurrency, è necessario ripulire le risorse create. Questo comporta l’eliminazione della policy di dimensionamento e l’annullamento della registrazione del modello da Application Auto Scaling. La pulizia garantisce di non incorrere in costi inutili per le risorse che non utilizzi più. 

## Eliminazione di una policy di dimensionamento
<a name="serverless-endpoints-autoscale-delete"></a>

 È possibile eliminare una policy di dimensionamento con la Console di gestione AWS, AWS CLI o l'API di Application Auto Scaling. Per ulteriori informazioni sull’eliminazione di una policy di dimensionamento con la Console di gestione AWS, consulta [Eliminazione di una policy di dimensionamento](endpoint-auto-scaling-delete.md) nella [documentazione sul dimensionamento automatico di SageMaker AI](endpoint-auto-scaling.md). 

### Eliminazione una policy di dimensionamento (AWS CLI)
<a name="serverless-endpoints-autoscale-delete-cli"></a>

 Per applicare una policy di dimensionamento al tuo modello, utilizza il comando `delete-scaling-policy` dell’AWS CLI con i parametri seguenti: 
+  `--policy-name` – Il nome della policy di dimensionamento. 
+  `--resource-id` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace` – Impostare questo valore su `sagemaker`. 
+  `--scalable-dimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 

 L'esempio seguente elimina una policy di dimensionamento denominata `MyScalingPolicy` da un modello denominato `MyVariant`. 

```
aws application-autoscaling delete-scaling-policy \
    --policy-name MyScalingPolicy \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant
```

### Eliminazione di una policy di dimensionamento (API Application Auto Scaling)
<a name="serverless-endpoints-autoscale-delete-api"></a>

 Per eliminare una policy di dimensionamento al modello, utilizzare l'azione dell’API `DeleteScalingPolicy` Application Auto Scaling con i parametri seguenti: 
+  `PolicyName` – Il nome della policy di dimensionamento. 
+  `ResourceId` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace` – Impostare questo valore su `sagemaker`. 
+  `ScalableDimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 

 Nell'esempio seguente viene utilizzata l'API Application Auto Scaling per eliminare una policy di dimensionamento denominata `MyScalingPolicy` da un modello denominato `MyVariant`. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeleteScalingPolicy
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "PolicyName": "MyScalingPolicy",
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
}
```

## Annullamento della registrazione di un modello
<a name="serverless-endpoints-autoscale-deregister"></a>

 È possibile annullare la registrazione di un modello con la Console di gestione AWS, AWS CLI o l'API di Application Auto Scaling. 

### Annullamento della registrazione di un modello (AWS CLI)
<a name="serverless-endpoints-deregister-model-cli"></a>

 Per annullare la registrazione di un modello da Application Auto Scaling, utilizza il comando `deregister-scalable-target` AWS CLI; con i parametri seguenti: 
+  `--resource-id` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `--service-namespace` – Impostare questo valore su `sagemaker`. 
+  `--scalable-dimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 

 Nell'esempio seguente viene annullata la registrazione di un modello denominato `MyVariant` da Application Auto Scaling. 

```
aws application-autoscaling deregister-scalable-target \
    --service-namespace sagemaker \
    --scalable-dimension sagemaker:variant:DesiredProvisionedConcurrency \
    --resource-id endpoint/MyEndpoint/variant/MyVariant
```

### Annullamento della registrazione di un modello (API di dimensionamento automatico dell’applicazione)
<a name="serverless-endpoints-autoscale-deregister-api"></a>

 Per annullare la registrazione di un modello da `DeregisterScalableTarget` Application Auto Scaling, usa l'azione dell’API Application Auto Scaling con i seguenti parametri: 
+  `ResourceId` – L'identificatore di risorse per la variante. Per questo parametro, il tipo di risorsa è `endpoint` e l'identificatore univoco è il nome della variante. Ad esempio, `endpoint/MyEndpoint/variant/MyVariant`. 
+  `ServiceNamespace` – Impostare questo valore su `sagemaker`. 
+  `ScalableDimension` – Impostare questo valore su `sagemaker:variant:DesiredProvisionedConcurrency`. 

 L'esempio seguente utilizza l'API Application Auto Scaling per annullare la registrazione di un modello denominato `MyVariant` da Application Auto Scaling. 

```
POST / HTTP/1.1
Host: autoscaling.us-east-2.amazonaws.com
Accept-Encoding: identity
X-Amz-Target: AnyScaleFrontendService.DeregisterScalableTarget
X-Amz-Date: 20160506T182145Z
User-Agent: aws-cli/1.10.23 Python/2.7.11 Darwin/15.4.0 botocore/1.4.8
Content-Type: application/x-amz-json-1.1
Authorization: AUTHPARAMS

{
    "ServiceNamespace": "sagemaker",
    "ResourceId": "endpoint/MyEndpoint/variant/MyVariant",
    "ScalableDimension": "sagemaker:variant:DesiredProvisionedConcurrency",
}
```

### Annullamento della registrazione di un modello (Console di gestione AWS)
<a name="serverless-endpoints-autoscale-deregister-console"></a>

 Per annullare la registrazione di un modello (variante di produzione) con la Console di gestione AWS: 

1.  Apri la [console di Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker/). 

1.  Nel pannello di navigazione, scegli **Inferenza**. 

1.  Scegli **Endpoint** per visualizzare un elenco degli endpoint. 

1.  Scegli l'endpoint serverless che ospita la variante di produzione. Apparirà una pagina con le impostazioni dell'endpoint, con le varianti di produzione elencate nella sezione **Impostazioni di runtime dell'endpoint**. 

1.  Seleziona la variante di produzione per cui desideri annullare la registrazione e scegli **Configurazione di Auto Scaling**. Viene visualizzata la pagina **Configura il dimensionamento automatico della variante**. 

1.  Selezionare **Annulla registrazione del dimensionamento automatico**. 

# Risoluzione dei problemi
<a name="serverless-endpoints-troubleshooting"></a>

**Importante**  
Le policy IAM personalizzate che consentono ad Amazon SageMaker Studio o Amazon SageMaker Studio Classic di creare risorse Amazon SageMaker devono inoltre concedere le autorizzazioni per aggiungere tag a tali risorse. L’autorizzazione per aggiungere tag alle risorse è necessaria perché Studio e Studio Classic applicano automaticamente tag a tutte le risorse che creano. Se una policy IAM consente a Studio e Studio Classic di creare risorse ma non consente il tagging, possono verificarsi errori di tipo “AccessDenied” quando provi a creare le risorse. Per ulteriori informazioni, consulta [Fornisci le autorizzazioni per etichettare SageMaker le risorse AI](security_iam_id-based-policy-examples.md#grant-tagging-permissions).  
[AWS politiche gestite per Amazon SageMaker AI](security-iam-awsmanpol.md) che forniscono autorizzazioni per creare risorse SageMaker includono già le autorizzazioni per aggiungere tag durante la creazione di tali risorse.

In caso di problemi con Serverless Inference, consulta i seguenti suggerimenti per la risoluzione dei problemi.

## Problemi relativi ai container
<a name="serverless-endpoints-troubleshooting-containers"></a>

Se il container che usi per un endpoint serverless è lo stesso che usi per un endpoint basato su istanze, è possibile che il container non disponga delle autorizzazioni per scrivere file. Questo può accadere per i seguenti motivi:
+ L'endpoint serverless non riesce a creare o aggiornare a causa di un errore di controllo dell’integrità del ping.
+ I file di log Amazon CloudWatch per l'endpoint mostrano che il container non riesce a scrivere su alcuni file o directory a causa di un errore di autorizzazione.

Per risolvere questo problema, puoi provare ad aggiungere autorizzazioni di lettura, scrittura ed esecuzione per `other` al file o alla directory, quindi provare a ricostruire il container. Per completare queste fasi, procedi come segue:

1. Nel file Docker che hai usato per creare il tuo container, aggiungi il seguente comando: `RUN chmod o+rwX <file or directory name>`

1. Ricostruisci il container.

1. Carica la nuova immagine del container in Amazon ECR.

1. Prova a creare o aggiornare nuovamente l'endpoint serverless.

# Inferenza asincrona
<a name="async-inference"></a>

Amazon SageMaker Asynchronous Inference è una funzionalità dell' SageMaker intelligenza artificiale che mette in coda le richieste in entrata e le elabora in modo asincrono. Questa opzione è ideale per richieste con payload di grandi dimensioni (fino a 1 GB), tempi di elaborazione lunghi (fino a un'ora) e requisiti di latenza quasi in tempo reale. L'inferenza asincrona consente di risparmiare sui costi ridimensionando automaticamente il numero di istanze a zero quando non ci sono richieste da elaborare, in modo da pagare solo quando l'endpoint sta elaborando le richieste.

## Come funziona
<a name="async-inference-how-it-works"></a>

La creazione di un endpoint di inferenza asincrona è simile alla creazione di endpoint di inferenza in tempo reale. Puoi utilizzare i tuoi modelli di SageMaker intelligenza artificiale esistenti e devi solo specificare l'`AsyncInferenceConfig`oggetto durante la creazione della configurazione dell'endpoint con il campo nell'API. `EndpointConfig` `CreateEndpointConfig` Il seguente diagramma mostra l'architettura e il flusso di lavoro di inferenza asincrona.

![\[Diagramma di architettura dell’inferenza asincrona che mostra come un utente invoca un endpoint.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/async-architecture.png)


Per invocare l’endpoint, è necessario inserire il payload della richiesta in Amazon S3. È inoltre necessario fornire un puntatore a questo payload nell’ambito della richiesta `InvokeEndpointAsync`. Al momento della chiamata, l' SageMaker IA mette in coda la richiesta per l'elaborazione e restituisce un identificatore e una posizione di output come risposta. Al momento dell'elaborazione, l' SageMaker intelligenza artificiale colloca il risultato nella posizione Amazon S3. Facoltativamente, puoi scegliere di ricevere notifiche di successo o di errore con Amazon SNS. Per ulteriori informazioni su come configurare le notifiche asincrone, consulta [Controllo dei risultati della previsione](async-inference-check-predictions.md).

**Nota**  
La presenza di un oggetto di configurazione di inferenza asincrona (`AsyncInferenceConfig`) nella configurazione dell'endpoint implica che l'endpoint può ricevere solo chiamate asincrone.

## Come si inizia?
<a name="async-inference-how-to-get-started"></a>

Se sei un utente alle prime armi di Amazon SageMaker Asynchronous Inference, ti consigliamo di fare quanto segue:
+ Leggi [Operazioni asincrone degli endpoint](async-inference-create-invoke-update-delete.md) per informazioni su come creare, richiamare, aggiornare ed eliminare un endpoint asincrono.
+ [Esplora il notebook di esempio di [Asynchronous](https://github.com/aws/amazon-sagemaker-examples/blob/main/async-inference/Async-Inference-Walkthrough.ipynb) Inference nel repository aws/. amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) GitHub 

Tieni presente che se l'endpoint utilizza una delle funzionalità elencate nella pagina [Esclusioni](deployment-guardrails-exclusions.md), non puoi utilizzare l’inferenza asincrona.

# Operazioni asincrone degli endpoint
<a name="async-inference-create-invoke-update-delete"></a>

Questa guida illustra i prerequisiti da soddisfare per creare un endpoint asincrono e spiega come creare, richiamare ed eliminare gli endpoint asincroni. [Puoi creare, aggiornare, eliminare e richiamare endpoint asincroni con l'SDK AWS SDKs Amazon Python. SageMaker ](https://sagemaker.readthedocs.io/en/stable/overview.html#sagemaker-asynchronous-inference)

**Topics**
+ [Completa i prerequisiti](async-inference-create-endpoint-prerequisites.md)
+ [Come creare un endpoint di inferenza asincrona](async-inference-create-endpoint.md)
+ [Richiama un endpoint asincrono](async-inference-invoke-endpoint.md)
+ [Aggiorna un endpoint asincrono](async-inference-update-endpoint.md)
+ [Elimina un endpoint asincrono](async-inference-delete-endpoint.md)

# Completa i prerequisiti
<a name="async-inference-create-endpoint-prerequisites"></a>

Il seguente argomento descrive i prerequisiti che è necessario completare prima di creare un endpoint asincrono. Questi prerequisiti includono la corretta memorizzazione degli artefatti del modello, la configurazione di un AWS IAM con le autorizzazioni corrette e la selezione di un'immagine del contenitore.

**Per completare i prerequisiti**

1. **Crea un ruolo IAM per Amazon SageMaker AI.**

   L'inferenza asincrona richiede l'accesso all'URI del bucket Amazon S3. Per facilitare questa operazione, crea un ruolo IAM in grado di eseguire l' SageMaker intelligenza artificiale e che disponga dell'autorizzazione per accedere ad Amazon S3 e Amazon SNS. Utilizzando questo ruolo, l' SageMaker intelligenza artificiale può funzionare sul tuo account e accedere al tuo bucket Amazon S3 e agli argomenti di Amazon SNS.

   Puoi creare un ruolo IAM utilizzando la console IAM, AWS SDK per Python (Boto3) oppure. AWS CLI Di seguito è riportato un esempio di come creare un ruolo IAM e collegare le policy necessarie alla console IAM.

   1. Accedi Console di gestione AWS e apri la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Nel pannello di navigazione della console IAM, scegliere **Ruoli** e quindi **Crea ruolo**.

   1. Per **Seleziona tipo di entità attendibile**, seleziona **Servizio AWS **.

   1. Scegliere il servizio a cui concedere l'autorizzazione ad assumere il ruolo. In questo caso, scegli **SageMaker AI**. Quindi scegliere **Next: Permissions (Successivo: Autorizzazioni)**.
      + Questo crea automaticamente una policy IAM che garantisce l'accesso a servizi correlati come Amazon S3, Amazon ECR e Logs. CloudWatch 

   1. Scegli **Successivo: Tag**.

   1. (Facoltativo) Aggiungere metadati al ruolo collegando i tag come coppie chiave-valore. Per ulteriori informazioni sull'utilizzo dei tag con IAM, consulta [Tagging delle risorse IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_tags.html).

   1. Scegli **Prossimo: Rivedi**.

   1. Digita un **Nome ruolo**. 

   1. Se possibile, digitare un nome del ruolo o un suffisso del nome del ruolo. I nomi dei ruoli devono essere univoci all'interno del tuo account. AWS Non si distinguono per caso. Ad esempio, non è possibile creare ruoli denominati sia `PRODROLE` che `prodrole`. Poiché altre AWS risorse potrebbero fare riferimento al ruolo, non è possibile modificare il nome del ruolo dopo che è stato creato.

   1. (Facoltativo) In **Role description (Descrizione ruolo)**, immettere una descrizione per il nuovo ruolo.

   1. Rivedere il ruolo e scegliere **Crea ruolo**.

      Nota il ruolo dell' SageMaker IA ARN. Per trovare il ruolo ARN tramite la console, effettua le seguenti operazioni:

      1. Vai alla console IAM: [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

      1. Seleziona **Ruoli**.

      1. Cerca il ruolo appena creato digitando il nome del ruolo nel campo di ricerca.

      1. Seleziona il ruolo.

      1. L'ARN del ruolo si trova nella parte superiore della pagina **Riepilogo**.

1. **Aggiungi le autorizzazioni Amazon SageMaker AI, Amazon S3 e Amazon SNS al tuo ruolo IAM.**

   Una volta creato il ruolo, concedi le autorizzazioni SageMaker AI, Amazon S3 e, facoltativamente, Amazon SNS al tuo ruolo IAM.

   Nella console IAM, scegli **Ruoli**. Cerca il ruolo creato digitando il nome del ruolo nel campo **Cerca**.

   1. Scegli il tuo ruolo.

   1. Quindi, scegli **Collega policy**.

   1. Amazon SageMaker Asynchronous Inference necessita dell'autorizzazione per eseguire le seguenti azioni:`"sagemaker:CreateModel"`,, `"sagemaker:CreateEndpointConfig"` e. `"sagemaker:CreateEndpoint"` `"sagemaker:InvokeEndpointAsync"` 

      Queste azioni sono incluse nella policy. `AmazonSageMakerFullAccess` Aggiungi questa policy al tuo ruolo IAM. Cerca `AmazonSageMakerFullAccess` nel campo **Cerca**. Seleziona `AmazonSageMakerFullAccess`.

   1. Scegli **Collega policy**.

   1. Quindi, scegli **Collega policy** per aggiungere le autorizzazioni Amazon S3.

   1. Seleziona **Crea policy**.

   1. Seleziona la scheda `JSON`.

   1. Aggiungi la seguente dichiarazione di policy:

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Action": [
                      "s3:GetObject",
                      "s3:PutObject",
                      "s3:AbortMultipartUpload",
                      "s3:ListBucket"  
                  ],
                  "Effect": "Allow",
                  "Resource": "arn:aws:s3:::bucket_name/*"
              }
          ]
      }
      ```

------

   1. Scegli **Successivo: Tag**.

   1. Digitare un **Nome policy**.

   1. Scegli **Crea policy**.

   1. Ripeti le stesse fasi che hai già completato per aggiungere le autorizzazioni Amazon S3 al fine di aggiungere le autorizzazioni Amazon SNS. Per la dichiarazione sulla policy, collega quanto segue:

------
#### [ JSON ]

****  

      ```
      {
          "Version":"2012-10-17",		 	 	 
          "Statement": [
              {
                  "Action": [
                      "sns:Publish"
                  ],
                  "Effect": "Allow",
      "Resource": "arn:aws:sns:us-east-1:111122223333:SNS_Topic"
              }
          ]
      }
      ```

------

1. **Carica i tuoi dati di inferenza (ad es. modello di machine learning, dati di esempio) **su Amazon S3**.**

1. **Seleziona un'immagine di inferenza Docker predefinita o crea la tua immagine Docker di inferenza.**

   SageMaker L'intelligenza artificiale fornisce contenitori per i suoi algoritmi integrati e immagini Docker predefinite per alcuni dei framework di machine learning più comuni, come Apache, e Chainer. MXNet TensorFlow PyTorch Per un elenco completo delle immagini SageMaker AI disponibili, consulta Available [Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md). Se scegli di utilizzare un contenitore fornito dall' SageMaker IA, puoi aumentare il timeout dell'endpoint e le dimensioni del payload rispetto ai valori predefiniti impostando le variabili di ambiente nel contenitore. Per informazioni su come impostare le diverse variabili di ambiente per ogni framework, consulta la fase Creazione di un modello per la creazione di un endpoint asincrono.

   Se nessuno dei contenitori SageMaker AI esistenti soddisfa le tue esigenze e non disponi di un container personale, potresti dover creare un nuovo contenitore Docker. Per informazioni su come creare un'immagine Docker, consulta [Container con codice di inferenza personalizzato](your-algorithms-inference-main.md).

1. **Creare un argomento Amazon SNS (opzionale)**

   Crea un argomento Amazon Simple Notification Service (Amazon SNS) che invii notifiche relative alle richieste che hanno completato l'elaborazione. Amazon SNS è un servizio di notifica per applicazioni orientate alla messaggistica, con più abbonati che richiedono e ricevono notifiche «push» di messaggi urgenti tramite una scelta di protocolli di trasporto, tra cui HTTP, Amazon SQS ed e-mail. Puoi specificare gli argomenti di Amazon SNS quando crei un oggetto `EndpointConfig` quando specifichi `AsyncInferenceConfig` utilizzando l'API `EndpointConfig`. 

   Completa la procedura per creare e sottoscrivere un argomento Amazon SNS.

   1. Utilizzando la console di Amazon SNS, crea un argomento. Per le istruzioni, consulta la sezione [Creazione di un argomento Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) nella *Guida per gli sviluppatori* di *Amazon Simple Notification Service*.

   1. Effettuare la sottoscrizione all'argomento. Per le istruzioni, consulta la sezione [Sottoscrizione a un argomento di Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-create-subscribe-endpoint-to-topic.html) nella *Guida per gli sviluppatori* di *Amazon Simple Notification Service*.

   1. Quando ricevi un'e-mail in cui è richiesto di confermare la sottoscrizione all'argomento, conferma l'iscrizione.

   1. Prendi nota del nome della risorsa Amazon (ARN) dell'argomento. L'argomento Amazon SNS che hai creato è un'altra risorsa del tuo AWS account e ha un ARN unico. Il nome ARN presenta il formato seguente:

      ```
      arn:aws:sns:aws-region:account-id:topic-name
      ```

   Per ulteriori informazioni su Amazon SNS, consulta la [Guida per gli sviluppatori di Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html).

# Come creare un endpoint di inferenza asincrona
<a name="async-inference-create-endpoint"></a>

Crea un endpoint asincrono nello stesso modo in cui creeresti un endpoint utilizzando i servizi di hosting AI: SageMaker 
+ Crea un modello in AI con. SageMaker `CreateModel`
+ Crea una configurazione endpoint con `CreateEndpointConfig`.
+ Crea un endpoint HTTPS con `CreateEndpoint`.

Per creare un endpoint, devi prima creare un modello con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html), in cui punti all'artefatto del modello e a un percorso di registro Docker (immagine). Quindi crei una configurazione specificando uno o più modelli creati utilizzando l'`CreateModel`API per la distribuzione e le risorse di cui desideri che l' SageMaker IA fornisca. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) Crea un endpoint con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) utilizzando la configurazione specificata nella richiesta. Puoi aggiornare un endpoint asincrono con l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Invia e ricevi richieste di inferenza dal modello ospitato sull'endpoint con `InvokeEndpointAsync`. Puoi eliminare i tuoi endpoint con l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html).

Per un elenco completo delle SageMaker immagini disponibili, consulta Available [Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md). Per informazioni su come creare un'immagine Docker, consulta [Container con codice di inferenza personalizzato](your-algorithms-inference-main.md).

**Topics**
+ [Creazione di un modello](async-inference-create-endpoint-create-model.md)
+ [Creazione di una configurazione endpoint](async-inference-create-endpoint-create-endpoint-config.md)
+ [Creazione endpoint](async-inference-create-endpoint-create-endpoint.md)

# Creazione di un modello
<a name="async-inference-create-endpoint-create-model"></a>

L'esempio seguente mostra come creare un modello utilizzando AWS SDK per Python (Boto3). Le prime righe definiscono:
+ `sagemaker_client`: Un oggetto client SageMaker AI di basso livello che semplifica l'invio e la ricezione di richieste ai AWS servizi.
+ `sagemaker_role`: una variabile stringa con il ruolo SageMaker AI IAM Amazon Resource Name (ARN).
+ `aws_region`: una variabile di stringa con il nome della tua AWS regione.

```
import boto3

# Specify your AWS Region
aws_region='<aws_region>'

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# Role to give SageMaker permission to access AWS services.
sagemaker_role= "arn:aws:iam::<account>:role/*"
```

Successivamente, specifica la posizione del modello preformato archiviato in Amazon S3. In questo esempio, utilizziamo un XGBoost modello pre-addestrato denominato`demo-xgboost-model.tar.gz`. L'URI completo di Amazon S3 è memorizzato in una variabile stringa `model_url`:

```
#Create a variable w/ the model S3 URI
s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
bucket_prefix='saved_models'
model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz"

#Specify S3 bucket w/ model
model_url = f"s3://{s3_bucket}/{model_s3_key}"
```

Specifica un container principale. Per il container principale, specifica l'immagine Docker contenente il codice di inferenza, gli artefatti (dall’addestramento precedente) e la mappa dell'ambiente personalizzata che il codice di inferenza utilizza quando distribuisci il modello per le previsioni.

 In questo esempio, specifichiamo un'immagine del contenitore dell'algoritmo XGBoost integrato: 

```
from sagemaker import image_uris

# Specify an AWS container image. 
container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')
```

Crea un modello in Amazon SageMaker AI con`CreateModel`. Specificare le impostazioni seguenti:
+ `ModelName`: un nome per il modello (in questo esempio viene memorizzato come una variabile di stringa chiamata `model_name`).
+ `ExecutionRoleArn`: Amazon Resource Name (ARN) del ruolo IAM che Amazon SageMaker AI può assumere per accedere agli artefatti del modello e alle immagini Docker per la distribuzione su istanze di calcolo ML o per lavori di trasformazione in batch.
+ `PrimaryContainer`: il percorso dell'immagine docker principale contenente il codice di inferenza, gli artefatti associati e la mappa dell'ambiente personalizzata che il codice di inferenza utilizza quando il modello è distribuito per le previsioni.

```
model_name = '<The_name_of_the_model>'

#Create model
create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url,
    })
```

Per un elenco completo dei parametri SageMaker API, consulta la [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)descrizione nella Guida di riferimento delle API.

Se utilizzi un contenitore fornito dall' SageMaker intelligenza artificiale, puoi aumentare il timeout del server del modello e le dimensioni del payload dai valori predefiniti ai valori massimi supportati dal framework impostando le variabili di ambiente in questo passaggio. Potresti non essere in grado di sfruttare le dimensioni massime di timeout e payload supportate da Asynchronous Inference se non imposti esplicitamente queste variabili. L'esempio seguente mostra come impostare le variabili di ambiente per un contenitore di inferenza basato su. PyTorch TorchServe

```
model_name = '<The_name_of_the_model>'

#Create model
create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url,
        'Environment': {
            'TS_MAX_REQUEST_SIZE': '100000000',
            'TS_MAX_RESPONSE_SIZE': '100000000',
            'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'
        },
    })
```

Dopo aver finito di creare l'endpoint, dovresti verificare di aver impostato correttamente le variabili di ambiente stampandole dallo script `inference.py`. La tabella seguente elenca le variabili di ambiente per diversi framework che potete impostare per modificare i valori predefiniti.


| Framework | Variabili di ambiente | 
| --- | --- | 
|  PyTorch 1.8 (basato su TorchServe)  |  'TS\$1MAX\$1REQUEST\$1SIZE': '100000000' 'TS\$1MAX\$1RESPONSE\$1SIZE': '100000000' 'TS\$1DEFAULT\$1RESPONSE\$1TIMEOUT': '1000'  | 
|  PyTorch 1.4 (basato su MMS)  |  'MMS\$1MAX\$1REQUEST\$1SIZE': '1000000000' 'MMS\$1MAX\$1RESPONSE\$1SIZE': '1000000000' 'MMS\$1DEFAULT\$1RESPONSE\$1TIMEOUT': '900'  | 
|  HuggingFace Contenitore di inferenza (basato su MMS)  |  'MMS\$1MAX\$1REQUEST\$1SIZE': '2000000000' 'MMS\$1MAX\$1RESPONSE\$1SIZE': '2000000000' 'MMS\$1DEFAULT\$1RESPONSE\$1TIMEOUT': '900'  | 

# Creazione di una configurazione endpoint
<a name="async-inference-create-endpoint-create-endpoint-config"></a>

Una volta creato un modello, crea una configurazione dell'endpoint con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). I servizi di hosting Amazon SageMaker AI utilizzano questa configurazione per distribuire modelli. Nella configurazione, identifichi uno o più modelli, creati utilizzando with [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html), per distribuire le risorse di cui desideri che Amazon SageMaker AI fornisca. Specifica l'oggetto `AsyncInferenceConfig` e fornisci una posizione di output Amazon S3 per `OutputConfig`. Facoltativamente, puoi specificare gli argomenti di [Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/welcome.html) su cui inviare notifiche sui risultati delle previsioni. Per ulteriori informazioni sugli argomenti Amazon SNS, consulta [Configurazione di Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html).

Nell'esempio seguente viene illustrato come creare una configurazione endpoint utilizzando AWS SDK per Python (Boto3):

```
import datetime
from time import gmtime, strftime

# Create an endpoint config name. Here we create one based on the date  
# so it we can search endpoints based on creation time.
endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}"

# The name of the model that you want to host. This is the name that you specified when creating the model.
model_name='<The_name_of_your_model>'

create_endpoint_config_response = sagemaker_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request.
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint.
    ProductionVariants=[
        {
            "VariantName": "variant1", # The name of the production variant.
            "ModelName": model_name, 
            "InstanceType": "ml.m5.xlarge", # Specify the compute instance type.
            "InitialInstanceCount": 1 # Number of instances to launch initially.
        }
    ],
    AsyncInferenceConfig={
        "OutputConfig": {
            # Location to upload response outputs when no location is provided in the request.
            "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output"
            # (Optional) specify Amazon SNS topics
            "NotificationConfig": {
                "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name",
                "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name",
            }
        },
        "ClientConfig": {
            # (Optional) Specify the max number of inflight invocations per instance
            # If no value is provided, Amazon SageMaker will choose an optimal value for you
            "MaxConcurrentInvocationsPerInstance": 4
        }
    }
)

print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")
```

Nell'esempio precedente, si specificano le seguenti chiavi `OutputConfig` per il campo `AsyncInferenceConfig`:
+ `S3OutputPath`: posizione in cui caricare gli output di risposta quando nella richiesta non viene fornita alcuna posizione.
+ `NotificationConfig`: (facoltativo) Argomenti SNS che inviano notifiche all'utente quando una richiesta di inferenza ha esito positivo (`SuccessTopic`) o negativo (`ErrorTopic`).

È inoltre possibile specificare il seguente argomento opzionale per `ClientConfig` nel campo `AsyncInferenceConfig`:
+ `MaxConcurrentInvocationsPerInstance`: (Facoltativo) Il numero massimo di richieste simultanee inviate dal client SageMaker AI al contenitore del modello.

# Creazione endpoint
<a name="async-inference-create-endpoint-create-endpoint"></a>

Una volta completata la configurazione del modello e dell'endpoint, utilizza l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html)per creare l'endpoint. Il nome dell'endpoint deve essere univoco all'interno di una AWS regione del tuo AWS account. 

L’esempio seguente crea un endpoint utilizzando la configurazione endpoint specificata nella richiesta. Amazon SageMaker AI utilizza l'endpoint per fornire risorse e distribuire modelli.

```
# The name of the endpoint.The name must be unique within an AWS Region in your AWS account.
endpoint_name = '<endpoint-name>' 

# The name of the endpoint configuration associated with this endpoint.
endpoint_config_name='<endpoint-config-name>'

create_endpoint_response = sagemaker_client.create_endpoint(
                                            EndpointName=endpoint_name, 
                                            EndpointConfigName=endpoint_config_name)
```

Quando chiami l'`CreateEndpoint`API, Amazon SageMaker Asynchronous Inference invia una notifica di test per verificare che tu abbia configurato un argomento Amazon SNS. Amazon SageMaker Asynchronous Inference invia anche notifiche di test dopo le chiamate a e. `UpdateEndpoint` `UpdateEndpointWeightsAndCapacities` Ciò consente all' SageMaker IA di verificare che tu disponga delle autorizzazioni richieste. La notifica può essere semplicemente ignorata. La notifica di test ha il seguente formato:

```
{
    "eventVersion":"1.0",
    "eventSource":"aws:sagemaker",
    "eventName":"TestNotification"
}
```

# Richiama un endpoint asincrono
<a name="async-inference-invoke-endpoint"></a>

Ottieni inferenze dal modello ospitato sul tuo endpoint asincrono con `InvokeEndpointAsync`. 

**Nota**  
Se non l'hai già fatto, carica i tuoi dati di inferenza (ad esempio, modello di machine learning, dati di esempio) su Amazon S3.

Specifica i seguenti campi nella richiesta:
+ Per `InputLocation`, specifica la posizione dei tuoi dati di inferenza.
+ Per `EndpointName`, specifica il nome dell'endpoint.
+ (Facoltativo) Per `InvocationTimeoutSeconds`, puoi impostare il timeout massimo per le richieste. Puoi impostare questo valore su un massimo di 3600 secondi (un'ora) per richiesta. Se non specifichi questo campo nella richiesta, per impostazione predefinita la richiesta scade a 15 minuti.

```
# Create a low-level client representing Amazon SageMaker Runtime
sagemaker_runtime = boto3.client("sagemaker-runtime", region_name=<aws_region>)

# Specify the location of the input. Here, a single SVM sample
input_location = "s3://bucket-name/test_point_0.libsvm"

# The name of the endpoint. The name must be unique within an AWS Region in your AWS account. 
endpoint_name='<endpoint-name>'

# After you deploy a model into production using SageMaker AI hosting 
# services, your client applications use this API to get inferences 
# from the model hosted at the specified endpoint.
response = sagemaker_runtime.invoke_endpoint_async(
                            EndpointName=endpoint_name, 
                            InputLocation=input_location,
                            InvocationTimeoutSeconds=3600)
```

Riceverai una risposta come stringa JSON con l'ID della richiesta e il nome del bucket Amazon S3 che riceverà la risposta alla chiamata API dopo l'elaborazione.

# Aggiorna un endpoint asincrono
<a name="async-inference-update-endpoint"></a>

Aggiorna un endpoint asincrono con l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). Quando aggiorni un endpoint, l' SageMaker IA effettua innanzitutto il provisioning e passa alla nuova configurazione dell'endpoint specificata prima di eliminare le risorse che erano state fornite nella precedente configurazione dell'endpoint. Non eliminare un dispositivo `EndpointConfig` con un endpoint attivo o mentre le operazioni `UpdateEndpoint` o `CreateEndpoint` vengono eseguite sull'endpoint. 

```
# The name of the endpoint. The name must be unique within an AWS Region in your AWS account.
endpoint_name='<endpoint-name>'

# The name of the endpoint configuration associated with this endpoint.
endpoint_config_name='<endpoint-config-name>'

sagemaker_client.update_endpoint(
                                EndpointConfigName=endpoint_config_name,
                                EndpointName=endpoint_name
                                )
```

Quando Amazon SageMaker AI riceve la richiesta, imposta lo stato dell'endpoint su **Aggiornamento**. Dopo aver aggiornato l'endpoint asincrono, imposta lo stato su. **InService** Per controllare lo stato di un endpoint. utilizza l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html). Per un elenco completo dei parametri che è possibile specificare durante l'aggiornamento di un endpoint, consulta l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html).

# Elimina un endpoint asincrono
<a name="async-inference-delete-endpoint"></a>

Elimina un endpoint asincrono in modo simile a come elimineresti un endpoint ospitato dall'IA con l'API. SageMaker [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteEndpoint.html) Specifica il nome dell'endpoint asincrono da eliminare. Quando elimini un endpoint, l' SageMaker intelligenza artificiale libera tutte le risorse distribuite al momento della creazione dell'endpoint. L’eliminazione di un modello non elimina artefatti del modello, codici di inferenza o il ruolo IAM specificato durante la creazione del modello.

Elimina il tuo modello di SageMaker intelligenza artificiale con l'[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeleteModel.html)API o con la console AI. SageMaker 

------
#### [ Boto3 ]

```
import boto3 

# Create a low-level SageMaker service client.
sagemaker_client = boto3.client('sagemaker', region_name=<aws_region>)
sagemaker_client.delete_endpoint(EndpointName='<endpoint-name>')
```

------
#### [ SageMaker AI console ]

1. Vai alla console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/).

1. Espandi l'elenco a discesa **Inferenza**.

1. Selezionare **Endpoints (Endpoint)**.

1. Cerca l’endpoint nella barra di ricerca **Cerca endpoint**.

1. Seleziona il tuo endpoint.

1. Scegli **Elimina**.

------

Oltre a eliminare l'endpoint asincrono, potresti voler cancellare altre risorse utilizzate per creare l'endpoint, come il repository Amazon ECR (se hai creato un'immagine di inferenza personalizzata), il modello SageMaker AI e la configurazione asincrona dell'endpoint stesso. 

# Allarmi e log per il monitoraggio delle metriche da endpoint asincroni
<a name="async-inference-monitor"></a>

Puoi monitorare SageMaker AI utilizzando Amazon CloudWatch, che raccoglie i dati non elaborati e li elabora trasformandoli in metriche leggibili quasi in tempo reale. Con Amazon CloudWatch, puoi accedere alle informazioni storiche per una prospettiva migliore sulle prestazioni del servizio o dell'applicazione Web. Per ulteriori informazioni su Amazon CloudWatch, consulta [Che cos'è Amazon CloudWatch?](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/WhatIsCloudWatch.html)

## Monitoraggio con CloudWatch
<a name="async-inference-monitor-cloudwatch"></a>

I parametri riportati di seguito sono un elenco esaustivo di parametri per gli endpoint asincroni e si trovano nello spazio dei nomi `AWS/SageMaker`. Qualsiasi parametro non elencato di seguito non viene pubblicato se l'endpoint è abilitato per l'inferenza asincrona. Tali parametri includono (ma non sono limitati a):
+ Latenza generale
+ Invocazioni
+ InvocationsPerInstance

### Parametri degli endpoint comuni
<a name="async-inference-monitor-cloudwatch-common"></a>

Questi parametri sono gli stessi pubblicati oggi per gli endpoint in tempo reale. Per ulteriori informazioni su altre metriche in Amazon CloudWatch, consulta [Monitor SageMaker AI with Amazon CloudWatch](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html).


| Nome parametro | Descrizione | Unità/statistiche | 
| --- | --- | --- | 
| `Invocation4XXErrors` | Numero di richieste in cui il modello ha restituito un codice di risposta HTTP 4xx. Per ogni risposta 4xx, viene inviato 1; altrimenti, viene inviato 0. | Unità: nessunaStatistiche valide: Average, Sum | 
| `Invocation5XXErrors` | Numero di richieste InvokeEndpoint in cui il modello ha restituito un codice di risposta HTTP 5xx. Per ogni risposta 5xx, viene inviato 1; altrimenti, viene inviato 0. | Unità: nessunaStatistiche valide: Average, Sum | 
| `ModelLatency` | L’intervallo di tempo impiegato da un modello per rispondere come mostrato in SageMaker AI. Questo intervallo include il tempo per le comunicazioni locali impiegato per inviare la richiesta e recuperare la risposta dal container di un modello e il tempo richiesto per completare l'inferenza nel container. | Unità: microsecondi Statistiche valide: media, somma, minimo, massimo, numero di esempi | 

### Parametri degli endpoint di inferenza asincrona
<a name="async-inference-monitor-cloudwatch-async"></a>

Questi parametri sono pubblicati per gli endpoint abilitati all'inferenza asincrona. I parametri seguenti sono pubblicati con la dimensione `EndpointName`.


| Nome parametro | Descrizione | Unità/statistiche | 
| --- | --- | --- | 
| `ApproximateBacklogSize` | Il numero di elementi in coda per un endpoint che sono attualmente in fase di elaborazione o che devono ancora essere elaborati. | Unità: numero Statistiche valide: medio, massimo, minimo  | 
| `ApproximateBacklogSizePerInstance` | Numero di elementi nella coda diviso per il numero di istanze dietro un endpoint. Questo parametri viene utilizzato principalmente per configurare il dimensionamento automatico delle applicazioni per un endpoint abilitato alla modalità asincrona. | Unità: numeroStatistiche valide: medio, massimo, minimo | 
| `ApproximateAgeOfOldestRequest` | Permanenza della richiesta più vecchia in coda. | Unità: secondiStatistiche valide: medio, massimo, minimo | 
| `HasBacklogWithoutCapacity` | Il valore di questo parametro è `1` quando ci sono richieste in coda ma non ci sono istanze dietro l'endpoint. Il valore è `0` in tutti gli altri momenti. Puoi utilizzare questo parametro per scalare automaticamente l'endpoint da zero istanze dopo aver ricevuto una nuova richiesta in coda. | Unità: numeroStatistiche valide: media | 

I parametri seguenti sono pubblicati con le dimensioni `EndpointName` e `VariantName`.


| Nome parametro | Descrizione | Unità/statistiche | 
| --- | --- | --- | 
| `RequestDownloadFailures` | Quando si verifica un errore di inferenza a causa di un problema durante il download della richiesta da Amazon S3. | Unità: numeroStatistiche valide: somma | 
| `ResponseUploadFailures` | Quando si verifica un errore di inferenza a causa di un problema durante il caricamento della risposta su Amazon S3. | Unità: numeroStatistiche valide: somma | 
| `NotificationFailures` | Quando si verifica un problema di pubblicazione delle notifiche. | Unità: numeroStatistiche valide: somma | 
| `RequestDownloadLatency` | Tempo totale per scaricare il payload di richiesta. | Unità: microsecondiStatistiche valide: media, somma, minimo, massimo, numero di esempi | 
| `ResponseUploadLatency` | Tempo totale per caricare il payload di risposta. | Unità: microsecondi Statistiche valide: media, somma, minimo, massimo, numero di esempi | 
| `ExpiredRequests` | Numero di richieste in coda che non riescono a causa del raggiungimento del TTL della richiesta specificata. | Unità: numeroStatistiche valide: somma | 
| `InvocationFailures` | Se una chiamata fallisce per qualsiasi motivo. | Unità: numeroStatistiche valide: somma | 
| `InvocationsProcesssed` | Numero di chiamate asincrone elaborate dall'endpoint. | Unità: numeroStatistiche valide: somma | 
| `TimeInBacklog` | Tempo totale in cui la richiesta è rimasta in coda prima dell'elaborazione. Questo non include il tempo di elaborazione effettivo (ad esempio tempo di download, tempo di caricamento, latenza del modello). | Unità: millisecondiStatistiche valide: media, somma, minimo, massimo, numero di esempi | 
| `TotalProcessingTime` | L’ora in cui la richiesta di inferenza è stata ricevuta da SageMaker AI fino al termine dell’elaborazione della richiesta. Ciò include il tempo di arretrato e il tempo necessario per caricare e inviare eventuali notifiche di risposta. | Unità: millisecondiStatistiche valide: media, somma, minimo, massimo, numero di esempi | 

Amazon SageMaker Asynchronous Inference include anche parametri a livello di host. Per informazioni sulle metriche a livello di host, consulta [SageMaker AI Jobs and Endpoint Metrics](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-jobs).

## Log
<a name="async-inference-monitor-logs"></a>

Oltre ai [Registri dei log dei container](https://docs.aws.amazon.com/sagemaker/latest/dg/logging-cloudwatch.html) pubblicati su Amazon CloudWatch nel tuo account, ottieni anche un nuovo log della piattaforma per tracciare ed eseguire il debugging delle richieste di inferenza.

I nuovi log vengono pubblicati nel gruppo di log endpoint:

```
/aws/sagemaker/Endpoints/[EndpointName]
```

Il nome del flusso di log è composto da: 

```
[production-variant-name]/[instance-id]/data-log.
```

Le righe di registro contengono l'ID di inferenza della richiesta in modo che gli errori possano essere facilmente mappati su una particolare richiesta.

# Controllo dei risultati della previsione
<a name="async-inference-check-predictions"></a>

Ci sono diversi modi per controllare i risultati delle previsioni dal proprio endpoint asincrono. Alcune di queste opzioni sono:

1. Argomenti di Amazon SNS.

1. Controllo degli output nel tuo bucket Amazon S3.

## Argomenti di Amazon SNS
<a name="async-inference-check-predictions-sns-topic"></a>

Amazon SNS è un servizio di notifica per applicazioni orientate alla messaggistica, in cui più abbonati richiedono e ricevono notifiche push di messaggi urgenti tramite una scelta di protocolli di trasporto, tra cui HTTP, Amazon SQS ed e-mail. Amazon SageMaker Asynchronous Inference pubblica notifiche quando crei un endpoint con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html) e specifichi un argomento Amazon SNS.

**Nota**  
Per ricevere le notifiche Amazon SNS, il tuo ruolo IAM deve disporre delle autorizzazioni `sns:Publish`. Consulta [Completa i prerequisiti](async-inference-create-endpoint-prerequisites.md) per informazioni sui requisiti da soddisfare per utilizzare Asynchronous Inference.

Per utilizzare Amazon SNS per controllare i risultati della previsione dal tuo endpoint asincrono, devi prima creare un argomento, abbonarti all'argomento, confermare la tua sottoscrizione all'argomento e annotare il nome della risorsa Amazon (ARN) di quell'argomento. Per informazioni dettagliate su come creare, sottoscrivere e trovare l'ARN Amazon di un argomento Amazon SNS, consulta [Configurazione di Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html).

Inserisci gli ARN dell'argomento di Amazon SNS nel campo `AsyncInferenceConfig` quando crei una configurazione endpoint con `CreateEndpointConfig`. Puoi specificare sia un Amazon SNS `ErrorTopic` che un `SuccessTopic`.

```
import boto3

sagemaker_client = boto3.client('sagemaker', region_name=<aws_region>)

sagemaker_client.create_endpoint_config(
    EndpointConfigName=<endpoint_config_name>, # You specify this name in a CreateEndpoint request.
    # List of ProductionVariant objects, one for each model that you want to host at this endpoint.
    ProductionVariants=[
        {
            "VariantName": "variant1", # The name of the production variant.
            "ModelName": "model_name", 
            "InstanceType": "ml.m5.xlarge", # Specify the compute instance type.
            "InitialInstanceCount": 1 # Number of instances to launch initially.
        }
    ],
    AsyncInferenceConfig={
        "OutputConfig": {
            # Location to upload response outputs when no location is provided in the request.
            "S3OutputPath": "s3://<bucket>/<output_directory>"
            "NotificationConfig": {
                "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name",
                "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name",
            }
        }
    }
)
```

Dopo aver creato l'endpoint e averlo richiamato, riceverai una notifica dal tuo argomento Amazon SNS. Ad esempio, se hai effettuato una sottoscrizione per ricevere notifiche e-mail dal tuo argomento, riceverai una notifica e-mail ogni volta che richiami il tuo endpoint. Il seguente esempio illustra il contenuto JSON di una notifica e-mail per un richiamo riuscito.

```
{
   "awsRegion":"us-east-1",
   "eventTime":"2022-01-25T22:46:00.608Z",
   "receivedTime":"2022-01-25T22:46:00.455Z",
   "invocationStatus":"Completed",
   "requestParameters":{
      "contentType":"text/csv",
      "endpointName":"<example-endpoint>",
      "inputLocation":"s3://<bucket>/<input-directory>/input-data.csv"
   },
   "responseParameters":{
      "contentType":"text/csv; charset=utf-8",
      "outputLocation":"s3://<bucket>/<output_directory>/prediction.out"
   },
   "inferenceId":"11111111-2222-3333-4444-555555555555", 
   "eventVersion":"1.0",
   "eventSource":"aws:sagemaker",
   "eventName":"InferenceResult"
}
```

## Controlla il tuo Bucket S3
<a name="async-inference-check-predictions-s3-bucket"></a>

Quando richiami un endpoint con `InvokeEndpointAsync`, questo restituisce un oggetto di risposta. Puoi utilizzare l'oggetto di risposta per ottenere l'URI di Amazon S3 in cui è archiviato l'output. Con la posizione di output, puoi utilizzare una classe di sessione SageMaker Python SDK SageMaker AI per verificare un output a livello di programmazione.

Quanto segue memorizza il dizionario di output di `InvokeEndpointAsync` come una variabile denominata risposta. Con la variabile risposta, ottieni quindi l'URI dell’output di Amazon S3 e lo archivi come una variabile stringa chiamata `output_location`. 

```
import uuid
import boto3

sagemaker_runtime = boto3.client("sagemaker-runtime", region_name=<aws_region>)

# Specify the S3 URI of the input. Here, a single SVM sample
input_location = "s3://bucket-name/test_point_0.libsvm" 

response = sagemaker_runtime.invoke_endpoint_async(
    EndpointName='<endpoint-name>',
    InputLocation=input_location,
    InferenceId=str(uuid.uuid4()), 
    ContentType="text/libsvm" #Specify the content type of your data
)

output_location = response['OutputLocation']
print(f"OutputLocation: {output_location}")
```

Per ulteriori informazioni sui tipi di contenuti supportati, consulta [Formati di dati comuni per l’inferenza](cdf-inference.md).

Con la posizione di output di Amazon S3, puoi quindi utilizzare una [classe di sessione SageMaker Python SDK SageMaker AI](https://sagemaker.readthedocs.io/en/stable/api/utility/session.html?highlight=session) per leggere i file in Amazon S3. Il seguente esempio di codice mostra come creare una funzione (`get_ouput`) che tenta ripetutamente di leggere un file dalla posizione di output di Amazon S3:

```
import sagemaker
import urllib, time
from botocore.exceptions import ClientError

sagemaker_session = sagemaker.session.Session()

def get_output(output_location):
    output_url = urllib.parse.urlparse(output_location)
    bucket = output_url.netloc
    key = output_url.path[1:]
    while True:
        try:
            return sagemaker_session.read_s3_file(
                                        bucket=output_url.netloc, 
                                        key_prefix=output_url.path[1:])
        except ClientError as e:
            if e.response['Error']['Code'] == 'NoSuchKey':
                print("waiting for output...")
                time.sleep(2)
                continue
            raise
            
output = get_output(output_location)
print(f"Output: {output}")
```

# Scalabilità automatica di un endpoint asincrono
<a name="async-inference-autoscale"></a>

Amazon SageMaker AI supporta il dimensionamento automatico (auto scaling) dell’endpoint asincrono. Auto Scaling modifica dinamicamente il numero di istanze assegnate a un modello in risposta alle variazioni nel carico di lavoro. A differenza di altri modelli ospitati supportati da Amazon SageMaker AI, con inferenza asincrona puoi anche ridurre verticalmente a zero le istanze degli endpoint asincroni. Le richieste ricevute quando non ci sono istanze vengono messe in coda per l'elaborazione una volta che l'endpoint è stato dimensionato.

Per scalare automaticamente l'endpoint asincrono è necessario almeno:
+ Registrare un modello distribuito (variante di produzione).
+ Definizione di una policy di dimensionamento.
+ Applica la policy di scalabilità automatica.

Per poter utilizzare il dimensionamento automatico, è necessario aver già implementato un modello su un endpoint di SageMaker AI. I modelli distribuiti sono indicati come [varianti di produzione](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). Per ulteriori informazioni sulla [distribuzione di un modello su un endpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/ex1-model-deployment.html#ex1-deploy-model), vedere Implementazione del modello sui servizi di hosting SageMaker. Per specificare i parametri e i valori di target per una policy di dimensionamento, configuri una policy di dimensionamento di monitoraggio. Per informazioni su come definire una policy di dimensionamento, vedere [Definire una policy di dimensionamento](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-add-code-define.html). Dopo la registrazione di un modello e la definizione di una policy di dimensionamento, applica la policy di dimensionamento al modello registrato. Per informazioni su come applicare una policy di dimensionamento, vedere [Applicare una policy di dimensionamento](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-add-code-apply.html).

Per ulteriori informazioni su come definire una policy di dimensionamento aggiuntiva opzionale che aumenti l'endpoint dopo aver ricevuto una richiesta dopo che l'endpoint è stato ridimensionato a zero, consulta [Facoltativo: definire una policy di dimensionamento che parta da zero per le nuove richieste](#async-inference-autoscale-scale-up). Se non specifichi questa policy opzionale, l'endpoint avvia la scalabilità da zero solo dopo che il numero di richieste di backlog supera il valore di tracciamento previsto.

 Per dettagli su altri prerequisiti e componenti utilizzati con il dimensionamento automatico, consulta la sezione [Prerequisiti](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling-prerequisites.html) nella documentazione sul dimensionamento automatico di SageMaker AI.

**Nota**  
Se si collegano più policy di dimensionamento allo stesso gruppo di dimensionamento automatico, è possibile che si verifichino conflitti di ridimensionamento. Quando si verifica un conflitto, Dimensionamento automatico Amazon EC2 sceglie la policy che offre la capacità maggiore per aumentare o ridurre orizzontalmente. Per ulteriori informazioni su questo comportamento, consulta [Policy di dimensionamento dinamico multiplo](https://docs.aws.amazon.com/autoscaling/ec2/userguide/as-scale-based-on-demand.html#multiple-scaling-policy-resolution) nella *documentazione di Dimensionamento automatico Amazon EC2*.

## Definizione di una policy di dimensionamento
<a name="async-inference-autoscale-define-async"></a>

Per specificare i parametri e i valori di target per una policy di dimensionamento, configuri una policy di dimensionamento di monitoraggio dei target. Definisci la policy di dimensionamento come un blocco JSON in un file di testo. Questo file di testo viene utilizzato quando si chiama la AWS CLI o l'API Application Auto Scaling. Per ulteriori informazioni sulla sintassi della configurazione della policy, consulta [https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html](https://docs.aws.amazon.com/autoscaling/application/APIReference/API_TargetTrackingScalingPolicyConfiguration.html) in Application Auto Scaling API Reference.

Per gli endpoint asincroni, SageMaker AI consiglia vivamente di creare una configurazione di policy per il dimensionamento del monitoraggio delle destinazioni per una variante. In questo esempio di configurazione, utilizziamo un parametro personalizzato, `CustomizedMetricSpecification`, chiamato `ApproximateBacklogSizePerInstance`.

```
TargetTrackingScalingPolicyConfiguration={
        'TargetValue': 5.0, # The target value for the metric. Here the metric is: ApproximateBacklogSizePerInstance
        'CustomizedMetricSpecification': {
            'MetricName': 'ApproximateBacklogSizePerInstance',
            'Namespace': 'AWS/SageMaker',
            'Dimensions': [
                {'Name': 'EndpointName', 'Value': <endpoint_name> }
            ],
            'Statistic': 'Average',
        }
    }
```

## Definisci una policy di dimensionamento che porti a zero
<a name="async-inference-autoscale-define-async-zero"></a>

Di seguito viene illustrato come definire e registrare la variante di endpoint con il dimensionamento automatico delle applicazioni utilizzando AWS SDK per Python (Boto3). Dopo aver definito un oggetto client di basso livello che rappresenta il dimensionamento automatico dell'applicazione con Boto3, utilizziamo il metodo [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target) per registrare la variante di produzione. Abbiamo impostato `MinCapacity` su 0 perché Inferenza asincrona consente di scalare automaticamente a 0 quando non ci sono richieste da elaborare.

```
# Common class representing application autoscaling for SageMaker 
client = boto3.client('application-autoscaling') 

# This is the format in which application autoscaling references the endpoint
resource_id='endpoint/' + <endpoint_name> + '/variant/' + <'variant1'> 

# Define and register your endpoint variant
response = client.register_scalable_target(
    ServiceNamespace='sagemaker', 
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount', # The number of EC2 instances for your Amazon SageMaker model endpoint variant.
    MinCapacity=0,
    MaxCapacity=5
)
```

Per una descrizione dettagliata dell'API di dimensionamento automatico dell’applicazione, consulta la documentazione di [Dimensionamento dell’applicazione Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/application-autoscaling.html#ApplicationAutoScaling.Client.register_scalable_target).

## Facoltativo: definire una policy di dimensionamento che parta da zero per le nuove richieste
<a name="async-inference-autoscale-scale-up"></a>

Potresti avere un caso d'uso in cui hai richieste sporadiche o periodi con un numero ridotto di richieste. Se l'endpoint è stato ridimensionato a zero istanze durante questi periodi, l'endpoint non aumenterà nuovamente fino a quando il numero di richieste in coda non supererà l'obiettivo specificato nella policy di dimensionamento. Ciò può comportare lunghi tempi di attesa per le richieste in coda. La sezione seguente mostra come creare una policy di dimensionamento aggiuntiva che aumenti l'endpoint partendo da zero istanze dopo aver ricevuto qualsiasi nuova richiesta in coda. L'endpoint sarà in grado di rispondere alle nuove richieste più rapidamente invece di attendere che la dimensione della coda superi l'obiettivo.

Per creare una policy di dimensionamento il tuo endpoint che parta da zero istanze, procedi come segue:

1. Crea una policy di dimensionamento che definisca il comportamento desiderato, ovvero quello di scalare l'endpoint quando è a zero istanze ma ha richieste in coda. Di seguito viene illustrato come definire una policy di dimensionamento chiamata `HasBacklogWithoutCapacity-ScalingPolicy` utilizzando AWS SDK per Python (Boto3). Quando la coda è maggiore di zero e anche il numero corrente di istanze per l'endpoint è pari a zero, la policy ridimensiona l'endpoint verso l'alto. In tutti gli altri casi, la policy non influisce sulla dimensionamento dell'endpoint.

   ```
   response = client.put_scaling_policy(
       PolicyName="HasBacklogWithoutCapacity-ScalingPolicy",
       ServiceNamespace="sagemaker",  # The namespace of the service that provides the resource.
       ResourceId=resource_id,  # Endpoint name
       ScalableDimension="sagemaker:variant:DesiredInstanceCount",  # SageMaker supports only Instance Count
       PolicyType="StepScaling",  # 'StepScaling' or 'TargetTrackingScaling'
       StepScalingPolicyConfiguration={
           "AdjustmentType": "ChangeInCapacity", # Specifies whether the ScalingAdjustment value in the StepAdjustment property is an absolute number or a percentage of the current capacity. 
           "MetricAggregationType": "Average", # The aggregation type for the CloudWatch metrics.
           "Cooldown": 300, # The amount of time, in seconds, to wait for a previous scaling activity to take effect. 
           "StepAdjustments": # A set of adjustments that enable you to scale based on the size of the alarm breach.
           [ 
               {
                 "MetricIntervalLowerBound": 0,
                 "ScalingAdjustment": 1
               }
             ]
       },    
   )
   ```

1. Crea un allarme CloudWatch con il parametro personalizzato `HasBacklogWithoutCapacity`. Quando viene attivato, l'allarme avvia la policy di dimensionamento precedentemente definita. Per ulteriori informazioni sul parametro `HasBacklogWithoutCapacity`, consulta [Parametri degli endpoint di inferenza asincrona](async-inference-monitor.md#async-inference-monitor-cloudwatch-async).

   ```
   response = cw_client.put_metric_alarm(
       AlarmName=step_scaling_policy_alarm_name,
       MetricName='HasBacklogWithoutCapacity',
       Namespace='AWS/SageMaker',
       Statistic='Average',
       EvaluationPeriods= 2,
       DatapointsToAlarm= 2,
       Threshold= 1,
       ComparisonOperator='GreaterThanOrEqualToThreshold',
       TreatMissingData='missing',
       Dimensions=[
           { 'Name':'EndpointName', 'Value':endpoint_name },
       ],
       Period= 60,
       AlarmActions=[step_scaling_policy_arn]
   )
   ```

Ora dovresti disporre di una policy di dimensionamento e di un allarme CloudWatch che aumentino il tuo endpoint da zero istanze ogni volta che la coda ha richieste in sospeso.

# Risoluzione dei problemi
<a name="async-inference-troubleshooting"></a>

Le domande frequenti seguenti possono essere utili per risolvere i problemi con gli endpoint di inferenza asincrona di Amazon SageMaker.

## D: Ho abilitato il dimensionamento automatico. Come posso trovare il conteggio istanze dietro l'endpoint in un dato momento?
<a name="async-troubleshooting-q1"></a>

Puoi utilizzare i metodi seguenti per trovare il conteggio istanze del tuo endpoint:
+ Puoi utilizzare l’API [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) di SageMaker AI per descrivere il numero di istanze alla base dell’endpoint in un determinato momento.
+ Puoi ottenere il numero di istanze visualizzando i parametri di Amazon CloudWatch. Visualizza i [parametri per le tue istanze di endpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/monitoring-cloudwatch.html#cloudwatch-metrics-jobs), ad esempio `CPUUtilization` o `MemoryUtilization` e controlla la statistica del conteggio di esempio per un periodo di 1 minuto. Il conteggio deve essere uguale al numero di istanze attive. Lo screenshot seguente mostra il grafico dei parametri `CPUUtilization` nella console CloudWatch, dove la **Statistica** è impostata su `Sample count`, il **Periodo** è impostato su `1 minute` e il conteggio risultante è 5.

![\[Console CloudWatch che mostra il grafico del conteggio di istanze attive per un endpoint.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/cloudwatch-sample-count.png)


## D: Quali sono le variabili di ambiente ottimizzabili più comuni per i container SageMaker AI?
<a name="async-troubleshooting-q2"></a>

Le tabelle seguenti descrivono le variabili di ambiente ottimizzabili comuni per i container SageMaker AI in base al tipo di framework.

**TensorFlow**


| Variabile di ambiente | Descrizione | 
| --- | --- | 
|  `SAGEMAKER_TFS_INSTANCE_COUNT`  |  Per i modelli basati su TensorFlow, il binario `tensorflow_model_server` è la parte operativa responsabile del caricamento di un modello in memoria, dell'esecuzione degli input su un grafico del modello e della derivazione degli output. In genere, viene lanciata un’istanza singola di questo file binario per servire i modelli in un endpoint. Questo binario è internamente multithread e genera più thread per rispondere a una richiesta di inferenza. In alcune istanze, se si osserva che la CPU è utilizzata in modo rispettabile (oltre il 30%) ma la memoria è sottoutilizzata (utilizzo inferiore al 10%), potrebbe essere utile aumentare questo parametro. L'aumento del numero di risorse `tensorflow_model_servers` disponibili da servire in genere aumenta il throughput di un endpoint.  | 
|  `SAGEMAKER_TFS_FRACTIONAL_GPU_MEM_MARGIN`  |  Questo parametro regola la frazione della memoria GPU disponibile per inizializzare CUDA/cuDNN e altre librerie GPU. `0.2` significa che il 20% della memoria GPU disponibile è riservata all'inizializzazione di CUDA/cuDNN e altre librerie GPU e l'80% della memoria GPU disponibile è allocata equamente tra i processi TF. La memoria della GPU `allow_growth` è preallocata a meno che l'opzione non sia abilitata.  | 
| `SAGEMAKER_TFS_INTER_OP_PARALLELISM` | Ciò si ricollega alla variabile `inter_op_parallelism_threads` Questa variabile determina il numero di thread utilizzati da operazioni indipendenti non bloccanti. `0` significa che il sistema sceglie un numero appropriato. | 
| `SAGEMAKER_TFS_INTRA_OP_PARALLELISM` | Ciò si ricollega alla variabile `intra_op_parallelism_threads` Ciò determina il numero di thread che possono essere utilizzati per determinate operazioni come la moltiplicazione delle matrici e le riduzioni per gli acceleratori. Un valore di `0` indica che il sistema seleziona un numero appropriato. | 
| `SAGEMAKER_GUNICORN_WORKERS` | Questo regola il numero di processi di lavoro che Gunicorn deve generare per la gestione delle richieste. Questo valore viene utilizzato in combinazione con altri parametri per ricavare un set che massimizzi la velocità di inferenza. Inoltre, `SAGEMAKER_GUNICORN_WORKER_CLASS` regola il tipo di worker generati, in genere `async` o `gevent`. | 
| `SAGEMAKER_GUNICORN_WORKER_CLASS` | Questo regola il numero di processi di lavoro che Gunicorn deve generare per la gestione delle richieste. Questo valore viene utilizzato in combinazione con altri parametri per ricavare un set che massimizzi la velocità di inferenza. Inoltre, `SAGEMAKER_GUNICORN_WORKER_CLASS` regola il tipo di worker generati, in genere `async` o `gevent`. | 
| `OMP_NUM_THREADS` | Python utilizza internamente OpenMP per implementare il multithreading all'interno dei processi. In genere, vengono generati thread equivalenti al numero di core CPU. Tuttavia, se implementato in aggiunta al Simultaneous Multi Threading (SMT), come HypeThreading di Intel, un determinato processo potrebbe superare la sottoscrizione di un determinato core generando un numero di thread doppio rispetto al numero di core CPU effettivi. In alcuni casi, un binario Python potrebbe finire per generare fino a quattro volte più thread dei core del processore disponibili. Pertanto, l'impostazione ideale per questo parametro, se hai registrato un numero eccessivo di core disponibili utilizzando i thread del worker, è `1`, o la metà del numero di core CPU su una CPU con SMT attivato. | 
|  `TF_DISABLE_MKL` `TF_DISABLE_POOL_ALLOCATOR`  | In alcuni casi, la disattivazione di MKL può velocizzare l'inferenza se `TF_DISABLE_MKL` e `TF_DISABLE_POOL_ALLOCATOR` sono impostati su `1`. | 

**PyTorch**


| Variabile di ambiente | Descrizione | 
| --- | --- | 
|  `SAGEMAKER_TS_MAX_BATCH_DELAY`  |  Questo è il tempo di ritardo massimo che TorchServe attende per ricevere il batch.  | 
|  `SAGEMAKER_TS_BATCH_SIZE`  |  Se TorchServe non riceve il numero di richieste specificato in `batch_size` prima dello scadere del timer, invia le richieste ricevute al gestore del modello.  | 
|  `SAGEMAKER_TS_MIN_WORKERS`  |  Il numero minimo di worker che TorchServe può ridurre.  | 
|  `SAGEMAKER_TS_MAX_WORKERS`  |  Il numero massimo di worker che TorchServe può aumentare.  | 
|  `SAGEMAKER_TS_RESPONSE_TIMEOUT`  |  Il ritardo temporale, dopo il quale scade l'inferenza in assenza di una risposta.  | 
|  `SAGEMAKER_TS_MAX_REQUEST_SIZE`  |  La dimensione massima del payload per TorchServe.  | 
|  `SAGEMAKER_TS_MAX_RESPONSE_SIZE`  |  La dimensione della risposta del payload per TorchServe.  | 

**Server multimodello (MMS)**


| Variabile di ambiente | Descrizione | 
| --- | --- | 
|  `job_queue_size`  |  Questo parametro è utile per effettuare il tuning in uno scenario in cui il tipo di payload della richiesta di inferenza è elevato e, a causa della maggiore dimensione del payload, è possibile che si verifichi un maggiore consumo di memoria heap della JVM in cui viene gestita questa coda. Idealmente, potresti voler mantenere bassi i requisiti di memoria heap di JVM e consentire ai worker Python di allocare più memoria per l'effettivo servizio del modello. JVM serve solo a ricevere le richieste HTTP, metterle in coda e inviarle ai worker basati su Python per l'inferenza. Se aumenti il `job_queue_size`, potresti finire per aumentare il consumo di memoria heap della JVM e, infine, sottrarre memoria dall'host che avrebbe potuto essere utilizzata dai worker Python. Pertanto, fai attenzione anche quando regoli questo parametro.  | 
|  `default_workers_per_model`  |  Questo parametro è destinato al servizio del modello di back-end e potrebbe essere utile da ottimizzare poiché questo è il componente fondamentale del servizio complessivo del modello, in base al quale i processi Python generano i thread per ciascun modello. Se questo componente è più lento (o non ottimizzato correttamente), l'ottimizzazione del front-end potrebbe non essere efficace.  | 

## D: Come posso assicurarmi che il mio container supporti l'inferenza asincrona?
<a name="async-troubleshooting-q3"></a>

Puoi utilizzare lo stesso container per l'inferenza asincrona utilizzato per l'inferenza in tempo reale o la trasformazione in batch. Devi confermare che i timeout e i limiti di dimensione del payload sul container siano impostati per gestire payload più grandi e timeout più lunghi.

## D: Quali sono i limiti specifici dell'inferenza asincrona e possono essere modificati?
<a name="async-troubleshooting-q4"></a>

Fai riferimento ai seguenti limiti per l'inferenza asincrona:
+ Limite di dimensione del payload: 1 GB
+ Limite di timeout: una richiesta può richiedere fino a 60 minuti.
+ Messaggio in coda TimetOlive (TTL): 6 ore
+ Numero di messaggi che possono essere inseriti in Amazon SQS: illimitato. Tuttavia, esiste una quota di 120.000 per il numero di messaggi al volo per una coda standard e di 20.000 per una coda FIFO.

## D: Quali parametri è meglio definire per il dimensionamento automatico nell'inferenza asincrona? Posso avere più policy di dimensionamento?
<a name="async-troubleshooting-q5"></a>

In generale, con l’inferenza asincrona, puoi aumentare orizzontalmente in base a invocazioni o istanze. Per quanto riguarda i parametri di invocazione, è una buona idea consultare `ApproximateBacklogSize`, che è un parametro che definisce il numero di elementi nella coda che devono ancora essere elaborati. Puoi utilizzare questo parametro o il parametro `InvocationsPerInstance` per capire a quale TPS potresti essere limitato. A livello di istanza, controlla il tipo di istanza e l'utilizzo della CPU/GPU per stabilire quando aumentare. Se un’istanza singola ha una capacità superiore al 60-70%, questo è spesso un buon segno che si sta saturando l'hardware.

Non è consigliabile adottare più policy di dimensionamento, in quanto possono entrare in conflitto e creare confusione a livello hardware, causando ritardi nell’aumento.

## D: Perché il mio endpoint asincrono chiude un'istanza come `Unhealthy` e le richieste di aggiornamento tramite il dimensionamento automatico non riescono?
<a name="async-troubleshooting-q6"></a>

Verifica se il tuo container è in grado di gestire le richieste di ping e invocazione contemporaneamente. Le richieste di invocazione di SageMaker AI impiegano circa 3 minuti e, in questo periodo, in genere più richieste di ping finiscono per avere esito negativo a causa del timeout che causa il rilevamento del container come `Unhealthy` da parte di SageMaker AI.

## D: `MaxConcurrentInvocationsPerInstance` può funzionare con il mio container modello BYOC con le impostazioni ningx/gunicorn/flask?
<a name="async-troubleshooting-q7"></a>

Sì `MaxConcurrentInvocationsPerInstance` è una funzionalità degli endpoint asincroni. Ciò non dipende dall'implementazione del container personalizzato. `MaxConcurrentInvocationsPerInstance` controlla la frequenza con cui le richieste di invoca vengono inviate al container del cliente. Se questo valore è impostato su `1`, viene inviata solo 1 richiesta alla volta al container, indipendentemente dal numero di worker presenti nel container del cliente.

## D: Come posso eseguire il debug degli errori del server del modello (500) sul mio endpoint asincrono?
<a name="async-troubleshooting-q8"></a>

L'errore indica che il container del cliente ha restituito un errore. SageMaker AI non controlla il comportamento dei container dei clienti. SageMaker AI restituisce semplicemente la risposta da `ModelContainer` e non effettua altri tentativi. Se lo desideri, puoi configurare l’invocazione per riprovare in caso di errore. Ti consigliamo di attivare la registrazione dei container e di controllarli per trovare la causa principale dell'errore 500 relativo al tuo modello. Controlla anche i parametri `CPUUtilization` e `MemoryUtilization` corrispondenti nel punto in cui si è verificato l'errore. Puoi anche configurare [S3FailurePath](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AsyncInferenceOutputConfig.html#sagemaker-Type-AsyncInferenceOutputConfig-S3FailurePath) per la risposta del modello in Amazon SNS come parte delle notifiche di errore asincrone per esaminare gli errori.

## D: Come posso sapere se `MaxConcurrentInvocationsPerInstance=1` ha effetto? Ci sono parametri che posso controllare?
<a name="async-troubleshooting-q9"></a>

Puoi controllare il parametro `InvocationsProcesssed`, che dovrebbe essere in linea con il numero di invocazioni che prevedi vengano elaborate in un minuto in base a una singola concorrenza.

## D: Come posso tenere traccia del successo e degli errori delle mie richieste di invocazione? Quali sono le best practice?
<a name="async-troubleshooting-q10"></a>

La best practice è di abilitare Amazon SNS, un servizio di notifica per applicazioni orientate alla messaggistica, con più abbonati che richiedono e ricevono notifiche «push» di messaggi urgenti tramite una scelta di protocolli di trasporto, tra cui HTTP, Amazon SQS ed e-mail. L’inferenza asincrona pubblica notifiche quando crei un endpoint con `CreateEndpointConfig` e specifichi un argomento Amazon SNS.

Per utilizzare Amazon SNS per controllare i risultati delle previsioni dal tuo endpoint asincrono, devi prima creare un argomento, iscriverti all'argomento, confermare il tuo abbonamento all'argomento e annotare il nome della risorsa Amazon (ARN) di quell'argomento. Per informazioni dettagliate su come creare, abbonarsi e trovare l'ARN Amazon di un argomento su Amazon SNS, consulta [Configurazione di Amazon SNS](https://docs.aws.amazon.com/sns/latest/dg/sns-configuring.html) nella *Guida per lo sviluppatore di Amazon SNS*. Per ulteriori informazioni su come utilizzare Amazon SNS con inferenza asincrona, consulta [Verifica dei risultati di previsione](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-check-predictions.html).

## D: Posso definire una policy di dimensionamento che parta da zero istanze dopo aver ricevuto una nuova richiesta?
<a name="async-troubleshooting-q11"></a>

Sì. L'inferenza asincrona fornisce un meccanismo per ridurre a zero istanze quando non ci sono richieste. Se l'endpoint è stato ridimensionato a zero istanze durante questi periodi, l'endpoint non aumenterà nuovamente fino a quando il numero di richieste in coda non supererà l'obiettivo specificato nella policy di dimensionamento. Ciò può comportare lunghi tempi di attesa per le richieste in coda. In questi casi, se desideri passare da zero istanze per nuove richieste inferiori all'obiettivo di coda specificato, puoi utilizzare una policy di dimensionamento aggiuntiva denominata `HasBacklogWithoutCapacity`. Per ulteriori informazioni su come definire questa policy di dimensionamento, consulta [Scalabilità automatica di un endpoint asincrono](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-autoscale.html#async-inference-autoscale-scale-up).

## D: Ricevo un errore che indica che il tipo di istanza non è supportato per l'inferenza asincrona. Quali sono i tipi di istanza supportati dall’inferenza asincrona?
<a name="async-troubleshooting-q12"></a>

Per un elenco completo delle istanze supportate dall’inferenza asincrona per Regione, consulta i [Prezzi di SageMaker](https://aws.amazon.com/sagemaker/pricing/). Verifica se l'istanza richiesta è disponibile nella tua Regione prima di procedere.

# Trasformazione in batch per l'inferenza con Amazon SageMaker AI
<a name="batch-transform"></a>

Utilizza la trasformazione in batch quando devi eseguire le seguenti operazioni: 
+ Pre-elaborare i set di dati per rimuovere disturbi o distorsioni che possono interferire con l’addestramento o l’inferenza.
+ Ottenere inferenze da set di dati di grandi dimensioni.
+ Eseguire l’inferenza quando non è necessario un endpoint persistente.
+ Associare record di input alle inferenze per agevolare l’interpretazione dei risultati.

Per filtrare i dati di input prima di eseguire le inferenze o per associare record di input alle inferenze relative a tali record, consulta [Associazione dei risultati delle previsioni ai record di input](batch-transform-data-processing.md). Ad esempio, puoi filtrare i dati di input per fornire un contesto per la creazione e l'interpretazione dei report sui dati di output.

**Topics**
+ [Utilizzare la trasformazione in batch per ottenere inferenze da set di dati di grandi dimensioni](#batch-transform-large-datasets)
+ [Velocizzare un processo di trasformazione in batch](#batch-transform-reduce-time)
+ [Utilizzare la trasformazione in batch per testare varianti di produzione](#batch-transform-test-variants)
+ [Notebook di esempio per la trasformazione in batch](#batch-transform-notebooks)
+ [Associazione dei risultati delle previsioni ai record di input](batch-transform-data-processing.md)
+ [Archiviazione in nella trasformazione in batch](batch-transform-storage.md)
+ [Risoluzione dei problemi](batch-transform-errors.md)

## Utilizzare la trasformazione in batch per ottenere inferenze da set di dati di grandi dimensioni
<a name="batch-transform-large-datasets"></a>

La trasformazione in batch gestisce automaticamente l'elaborazione di set di dati di grandi dimensioni entro i limiti dei parametri specificati. Ad esempio, supponiamo di disporre di un file contenente un set di dati, `input1.csv`, archiviato in un bucket S3. Il contenuto del file di input potrebbe essere simile all'esempio seguente:

```
Record1-Attribute1, Record1-Attribute2, Record1-Attribute3, ..., Record1-AttributeM
Record2-Attribute1, Record2-Attribute2, Record2-Attribute3, ..., Record2-AttributeM
Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM
...
RecordN-Attribute1, RecordN-Attribute2, RecordN-Attribute3, ..., RecordN-AttributeM
```

Quando inizia un processo di trasformazione in batch, l' SageMaker intelligenza artificiale avvia le istanze di calcolo e distribuisce tra di esse il carico di lavoro di inferenza o preelaborazione. Il processo di trasformazione in batch partiziona gli oggetti Amazon S3 nell'input per chiave e mappa gli oggetti Amazon S3 alle istanze. In presenza di più file, un'istanza potrebbe elaborare `input1.csv` e un'altra istanza potrebbe elaborare un altro file denominato `input2.csv`. Se è disponibile un file di input ma sono inizializzate più istanze di calcolo, solo un’istanza elabora il file di input. Le altre istanze sono inattive.

È anche possibile suddividere i file di input in mini-batch. Ad esempio, puoi creare un mini-batch da `input1.csv` includendo solo due record.

```
Record3-Attribute1, Record3-Attribute2, Record3-Attribute3, ..., Record3-AttributeM
Record4-Attribute1, Record4-Attribute2, Record4-Attribute3, ..., Record4-AttributeM
```

**Nota**  
SageMaker L'intelligenza artificiale elabora ogni file di input separatamente. Non combina mini-batch provenienti da file di input differenti per soddisfare il limite di [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB               ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB               ).

Per dividere i file di input in mini-batch quando create un processo di trasformazione in batch, impostate il valore del [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             )parametro su. `Line` SageMaker L'IA utilizza l'intero file di input in un'unica richiesta quando:
+ `SplitType` è impostato su `None`;
+ un file di input non può essere suddiviso in mini batch.

Il processo di trasformazione in batch non supporta input in formato CSV che contengono caratteri di nuova riga con embedding. È possibile controllare la dimensione dei mini-batch utilizzando i parametri `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` e `[MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB)`. `MaxPayloadInMB` non deve essere superiore a 100 MB. Se si specifica il parametro `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxConcurrentTransforms)` opzionale, anche il valore di `(MaxConcurrentTransforms * MaxPayloadInMB)` non deve superare i 100 MB.

Se il processo di trasformazione in batch elabora correttamente tutti i record in un file di input, crea un file di output con lo stesso nome e la stessa estensione `.out`. In caso di più file di input, ad esempio `input1.csv` e `input2.csv`, i file di output vengono denominati `input1.csv.out` e `input2.csv.out`. Il processo di trasformazione in batch archivia i file di output nel percorso specificato su Amazon S3, come ad esempio `s3://amzn-s3-demo-bucket/output/`. 

Le previsioni in un file di output sono elencate nello stesso ordine dei record del file di input. Il file di output `input1.csv.out`, in base al file di input mostrato in precedenza, sarà simile al seguente.

```
Inference1-Attribute1, Inference1-Attribute2, Inference1-Attribute3, ..., Inference1-AttributeM
Inference2-Attribute1, Inference2-Attribute2, Inference2-Attribute3, ..., Inference2-AttributeM
Inference3-Attribute1, Inference3-Attribute2, Inference3-Attribute3, ..., Inference3-AttributeM
...
InferenceN-Attribute1, InferenceN-Attribute2, InferenceN-Attribute3, ..., InferenceN-AttributeM
```

Se [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType             ) è impostato su `Line`, puoi impostare il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith             ) su `Line` per concatenare i record di output con un delimitatore di riga. Ciò non modifica il numero di file di output. Il numero di file di output è pari al numero di file di input e l'utilizzo di `AssembleWith` non unisce i file. Se non specifichi il parametro `AssembleWith`, i record di output vengono concatenati in un formato binario per impostazione predefinita.

Quando i dati di input sono di dimensioni molto grandi e vengono trasmessi mediante la codifica HTTP Chunked, per trasmettere i dati all'algoritmo, è necessario impostare [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB) su `0`. Gli algoritmi integrati di Amazon SageMaker AI non supportano questa funzionalità.

Per ulteriori informazioni su come usare l'API per creare un processo di trasformazione in batch, consultare l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html). Per ulteriori informazioni sulla relazione tra gli oggetti di input e di output della trasformazione in batch, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html). Per un esempio di come utilizzare la trasformazione in batch, consulta [(Facoltativo) Formulazione di previsioni con la trasformazione di batch](ex1-model-deployment.md#ex1-batch-transform).

## Velocizzare un processo di trasformazione in batch
<a name="batch-transform-reduce-time"></a>

Se usi l’API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html), puoi ridurre il tempo necessario per completare le operazioni di trasformazione in batch utilizzando valori ottimali per parametri. Questo include parametri come [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB), [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms) oppure [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy). Il valore ideale per `MaxConcurrentTransforms` è pari al numero di processi di calcolo nel processo di trasformazione di batch. 

Se utilizzi la console SageMaker AI, specifica questi valori ottimali dei parametri nella sezione **Configurazione aggiuntiva della pagina di configurazione** del **processo di trasformazione in Batch**. SageMaker L'IA trova automaticamente le impostazioni ottimali dei parametri per gli algoritmi integrati. Per gli algoritmi personalizzati, è necessario fornire questi valori tramite un endpoint [execution-parameters](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-batch-code.html#your-algorithms-batch-code-how-containe-serves-requests).

## Utilizzare la trasformazione in batch per testare varianti di produzione
<a name="batch-transform-test-variants"></a>

Per testare diversi modelli o varie impostazioni di iperparametri, crea un processo di trasformazione separato per ogni nuova variante di modello e utilizza un set di dati di convalida. Per ogni processo di trasformazione, specifica un nome e un percorso univoco in Amazon S3 per il file di output. Per analizzare i risultati, utilizza [Log e parametri della pipeline di inferenza](inference-pipeline-logs-metrics.md).

## Notebook di esempio per la trasformazione in batch
<a name="batch-transform-notebooks"></a>

Per un notebook di esempio che utilizza la trasformazione in batch, consulta [Batch Transform with PCA and DBSCAN Movie Clusters](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_batch_transform/introduction_to_batch_transform/batch_transform_pca_dbscan_movie_clusters.html). Questo notebook utilizza la trasformazione in batch con un modello di analisi dei componenti principali (PCA) per ridurre i dati in una matrice di recensioni degli articoli degli utenti. Mostra quindi l’applicazione di un algoritmo DBSCAN (Density-Based Spatial Clustering of Applications with Noise) per raggruppare i filmati in cluster.

 Per istruzioni sulla creazione e l'accesso alle istanze di notebook Jupyter da utilizzare per eseguire l'esempio in AI, consulta. SageMaker [Istanze SageMaker per notebook Amazon](nbi.md) Dopo aver creato e aperto un'istanza di notebook, scegli la scheda **SageMakerEsempi** per visualizzare un elenco di tutti gli esempi di IA. SageMaker I notebook dell'esempio di modellazione dell'argomento che utilizzano gli algoritmi NTM sono disponibili nella sezione **Funzionalità avanzate**. Per aprire un notebook, seleziona la relativa scheda **Utilizza**, quindi scegli **Crea copia**.

# Associazione dei risultati delle previsioni ai record di input
<a name="batch-transform-data-processing"></a>

Quando si creano previsioni su un set di dati di grandi dimensioni, è possibile escludere gli attributi non necessari per la previsione. Una volta create le previsioni, è possibile associare alcuni attributi esclusi a tali previsioni o ad altri dati di input nel report. Usando la trasformazione in batch per eseguire queste fasi di elaborazione dei dati, spesso è possibile eliminare operazioni aggiuntive di preelaborazione o postelaborazione. Si possono utilizzare file di input solo in formato JSON e CSV. 

**Topics**
+ [Flusso di lavoro per associare le inferenze ai record di input](#batch-transform-data-processing-workflow)
+ [Utilizzare l'elaborazione dati nei processi di trasformazione in batch](#batch-transform-data-processing-steps)
+ [Operatori supportati JSONPath](#data-processing-operators)
+ [Esempi di trasformazione in batch](#batch-transform-data-processing-examples)

## Flusso di lavoro per associare le inferenze ai record di input
<a name="batch-transform-data-processing-workflow"></a>

Il seguente diagramma mostra il flusso di lavoro per associare le inferenze ai record di input.

![\[Flusso di lavoro per associare le inferenze ai record di input.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/batch-transform-data-processing.png)


L'associazione delle inferenze ai dati di input prevede tre fasi:

1. Filtrare i dati di input non necessari per l'inferenza prima di passarli al processo di trasformazione in batch. Utilizzare il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter                             ) per determinare quali attributi utilizzare come input per il modello.

1. Associare i dati di input ai risultati dell'inferenza. Utilizzare il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-JoinSource                         ) per combinare i dati di input con l'inferenza.

1. Filtrare i dati collegati per mantenere gli input necessari a fornire un contesto per l'interpretazione delle previsioni nei report. Utilizzare [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-OutputFilter                             ) per archiviare la porzione specificata del set di dati completo nel file di output.

## Utilizzare l'elaborazione dati nei processi di trasformazione in batch
<a name="batch-transform-data-processing-steps"></a>

Per elaborare i dati durante la creazione di un processo di trasformazione in batch con [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html):

1. Specificare la porzione di input da passare al modello con il parametro `InputFilter` nella struttura dati `DataProcessing`. 

1. Collegare i dati di input grezzi ai dati trasformati con il parametro `JoinSource`.

1. Specificare quale porzione dell'input collegato e dei dati trasformati dal processo di trasformazione in batch includere nel file di output con il parametro `OutputFilter`.

1.  Scegliere come input file in formato JSON o CSV: 
   + Per i file di input in formato JSON o JSON Lines, SageMaker AI aggiunge l'`SageMakerOutput`attributo al file di input o crea un nuovo file di output JSON con gli attributi and. `SageMakerInput` `SageMakerOutput` Per ulteriori informazioni, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataProcessing.html). 
   + Per i file di input in formato CSV, i dati in input collegati sono seguiti dai dati trasformati e l'output è un file CSV.

Se si utilizza un algoritmo con la struttura `DataProcessing`, è necessario che supporti il formato scelto *sia* per i file di input che per quelli di output. Ad esempio, con il campo [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html) dell'API `CreateTransformJob`, è necessario impostare entrambi i parametri [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#SageMaker-Type-Channel-ContentType) e [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-Accept) su uno dei seguenti valori: `text/csv`, `application/json` o `application/jsonlines`. La sintassi per specificare le colonne in un file CSV e quella per specificare gli attributi in un file JSON sono diverse. L'utilizzo della sintassi sbagliata genera un errore. Per ulteriori informazioni, consulta [Esempi di trasformazione in batch](#batch-transform-data-processing-examples). Per ulteriori informazioni sui formati di file di input e output per gli algoritmi integrati, consulta [Algoritmi integrati e modelli preaddestrati in Amazon SageMaker](algos.md).

Anche i delimitatori di record per l'input e l'output devono essere coerenti con il file di input scelto. Il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformInput.html#SageMaker-Type-TransformInput-SplitType) indica come suddividere i record nel set di dati di input. Il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TransformOutput.html#SageMaker-Type-TransformOutput-AssembleWith                     ) indica come riassemblare i record dell'output. Se si impostano i formati in ingresso e in uscita a `text/csv`, è necessario anche impostare i parametri `SplitType` e `AssembleWith` al valore `line`. Se si impostano i formati in ingresso e in uscita a `application/jsonlines`, è possibile impostare i parametri `SplitType` e `AssembleWith` su `line`.

Per i file CSV, non è possibile utilizzare caratteri di nuova riga incorporati. In caso di file JSON, nel file di output il nome dell'attributo `SageMakerOutput` è riservato. Il file di input JSON non può contenere un attributo con questo nome. In caso contrario, i dati del file di input potrebbero essere sovrascritti. 

## Operatori supportati JSONPath
<a name="data-processing-operators"></a>

Per filtrare e unire i dati di input e l'inferenza, utilizzate una JSONPath sottoespressione. SageMaker L'intelligenza artificiale supporta solo un sottoinsieme degli operatori definiti. JSONPath La tabella seguente elenca gli JSONPath operatori supportati. Per i dati CSV, ogni riga viene considerata come un array JSON, quindi è JSONPaths possibile applicare solo dati basati su indici, ad esempio`$[0]`. `$[1:]` I dati CSV dovrebbero anche seguire il [formato RFC](https://tools.ietf.org/html/rfc4180).


| JSONPath Operatore | Description | Esempio | 
| --- | --- | --- | 
| \$1 |  L'elemento radice di una query. Questo operatore è obbligatorio all'inizio di ogni espressione di percorso.  | \$1 | 
| .<name> |  Un elemento figlio in notazione "a punto".  |  `$.id`  | 
| \$1 |  Carattere jolly Utilizzato al posto di un nome di attributo o di un valore numerico.  |  `$.id.*`  | 
| ['<name>' (,'<name>')] |  Un elemento o molteplici elementi figli in notazione "a parentesi graffa".  |  `$['id','SageMakerOutput']`  | 
| [<number> (,<number>)] |  Un indice o una matrice di indici. Sono supportati anche valori di indice negativi. L'indice `-1` fa riferimento all'ultimo elemento in una matrice.  |  `$[1]` , `$[1,3,5]`  | 
| [<start>:<end>] |  Un operatore di sezionamento della matrice. Il metodo array slice () estrae una sezione di un array e restituisce un nuovo array. Se ometti*<start>*, l' SageMaker IA utilizza il primo elemento dell'array. Se ometti*<end>*, l' SageMaker IA utilizza l'ultimo elemento dell'array.  |  `$[2:5]`, `$[:5]`, `$[2:]`  | 

Quando si utilizza la notazione in parentesi per specificare più elementi figlio di un dato del campo, l'ulteriore nidificazione di elementi secondari tra parentesi non è supportata. Ad esempio, `$.field1.['child1','child2']` è supportato mentre non lo è `$.field1.['child1','child2.grandchild']`. 

Per ulteriori informazioni sugli JSONPath operatori, consulta [JsonPath](https://github.com/json-path/JsonPath)on GitHub.

## Esempi di trasformazione in batch
<a name="batch-transform-data-processing-examples"></a>

I seguenti esempi mostrano alcune procedure comuni per collegare i dati di input con i risultati della predizione.

**Topics**
+ [Esempio: generazione solo di inferenze](#batch-transform-data-processing-example-default)
+ [Esempio: inferenze di uscita collegate a dati di input](#batch-transform-data-processing-example-all)
+ [Esempio: genera inferenze collegate ai dati di input ed esclude la colonna ID dall'input (CSV)](#batch-transform-data-processing-example-select-csv)
+ [Esempio: inferenze di output collegate a una colonna ID ed esclusione della colonna ID dall'input (CSV)](#batch-transform-data-processing-example-select-json)

### Esempio: generazione solo di inferenze
<a name="batch-transform-data-processing-example-default"></a>

Per impostazione predefinita, il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-DataProcessing) non collega i risultati dell'inferenza all'input. Genera solo i risultati dell'inferenza come output.

Se desideri specificare in modo esplicito di non unire i risultati con l'input, usa l'SDK [Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) e specifica le seguenti impostazioni in una chiamata al trasformatore.

```
sm_transformer = sagemaker.transformer.Transformer(…)
sm_transformer.transform(…, input_filter="$", join_source= "None", output_filter="$")
```

Per generare inferenze utilizzando l' AWS SDK per Python, aggiungi il codice seguente alla tua richiesta. CreateTransformJob Il codice seguente mostra il comportamento predefinito.

```
{
    "DataProcessing": {
        "InputFilter": "$",
        "JoinSource": "None",
        "OutputFilter": "$"
    }
}
```

### Esempio: inferenze di uscita collegate a dati di input
<a name="batch-transform-data-processing-example-all"></a>

Se utilizzi l'[SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) per combinare i dati di input con le inferenze nel file di output, specifica i `accept` parametri `assemble_with` and durante l'inizializzazione dell'oggetto transformer. Quando utilizzi la chiamata di trasformazione, specifica `Input` per il parametro `join_source` e specifica anche i parametri `split_type` e `content_type`. Il parametro `split_type` deve avere lo stesso valore di `assemble_with` e il parametro `content_type` deve avere lo stesso valore di `accept`. Per ulteriori informazioni sui parametri e sui relativi valori accettati, consulta la pagina [Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer) nell'SDK *Amazon SageMaker AI Python*.

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, join_source="Input", split_type="Line", content_type="text/csv")
```

Se stai usando l' AWS SDK per Python (Boto 3), unisci tutti i dati di input con l'inferenza aggiungendo il codice seguente alla tua richiesta. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html) Devono corrispondere i valori per `Accept` e `ContentType` come pure i valori per `AssembleWith` e `SplitType`.

```
{
    "DataProcessing": {
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

Per i file di input JSON o JSON Lines, i risultati sono contenuti all'interno della chiave `SageMakerOutput` nel file di input JSON. Ad esempio, se il file di input è un file JSON che contiene la coppia chiave-valore `{"key":1}`, il risultato della trasformazione dei dati potrebbe essere `{"label":1}`.

SageMaker AI li memorizza entrambi nel file di input della chiave. `SageMakerInput`

```
{
    "key":1,
    "SageMakerOutput":{"label":1}
}
```

**Nota**  
Il risultato del collegamento per il file JSON deve essere un oggetto composto da una coppia chiave-valore. Se l'input non è un oggetto di coppia chiave-valore, SageMaker AI crea un nuovo file JSON. Nel nuovo file JSON, i dati di input vengono memorizzati nella chiave `SageMakerInput` e i risultati vengono memorizzati come valore di `SageMakerOutput`.

In caso di file CSV, ad esempio, se il record è `[1,2,3]` e l'etichetta risultante è `[1]`, il file di output conterrà `[1,2,3,1]`.

### Esempio: genera inferenze collegate ai dati di input ed esclude la colonna ID dall'input (CSV)
<a name="batch-transform-data-processing-example-select-csv"></a>

Se utilizzi l'[SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable) per unire i dati di input con l'output di inferenza escludendo una colonna ID dall'input del trasformatore, specifica gli stessi parametri dell'esempio precedente e una JSONPath sottoespressione per la nella chiamata al trasformatore. `input_filter` Ad esempio, se i dati di input includono cinque colonne e la prima è la colonna ID, usa la seguente richiesta di trasformazione per selezionare tutte le colonne tranne la colonna ID come caratteristiche. Il trasformatore genera in uscita comunque tutte le colonne di input collegate alle inferenze. Per ulteriori informazioni sui parametri e sui relativi valori accettati, consulta la pagina [Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer) nell'SDK *Amazon SageMaker AI Python*.

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input")
```

Se stai usando l' AWS SDK per Python (Boto 3), aggiungi il codice seguente alla tua richiesta. `[ CreateTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)`

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

Per specificare le colonne in SageMaker AI, usa l'indice degli elementi dell'array. La prima colonna è l'indice 0, la seconda colonna è l'indice 1 e la sesta colonna è l'indice 5.

Per escludere la prima colonna dall'input, imposta `[InputFilter](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-Type-DataProcessing-InputFilter )` su `"$[1:]"`. I due punti (`:`) indicano all' SageMaker IA di includere tutti gli elementi tra due valori, inclusi. Ad esempio, `$[1:4]` specifica dalla seconda alla quinta colonna.

Se si omette il numero dopo i due punti, ad esempio `[5:]`, il sottoinsieme include tutte le colonne dalla sesta fino all'ultima. Se si omette il numero prima dei due punti, ad esempio `[:5]`, il sottoinsieme include tutte le colonne dalla prima colonna (indice 0) alla sesta colonna.

### Esempio: inferenze di output collegate a una colonna ID ed esclusione della colonna ID dall'input (CSV)
<a name="batch-transform-data-processing-example-select-json"></a>

Se utilizzi l'[SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable), puoi specificare l'output per unire solo colonne di input specifiche (come la colonna ID) alle inferenze specificando nella chiamata del trasformatore. `output_filter` `output_filter`Utilizza una JSONPath sottoespressione per specificare quali colonne restituire come output dopo aver unito i dati di input ai risultati dell'inferenza. La richiesta seguente mostra come è possibile fare previsioni escludendo una colonna ID e quindi collegare la colonna ID alle inferenze. Nota che nell'esempio seguente, l'ultima colonna (`-1`) dell'output contiene le inferenze. Se utilizzi file JSON, SageMaker AI memorizza i risultati dell'inferenza nell'attributo. `SageMakerOutput` Per ulteriori informazioni sui parametri e sui relativi valori accettati, consulta la pagina [Transformer](https://sagemaker.readthedocs.io/en/stable/api/inference/transformer.html#sagemaker.transformer.Transformer) nell'SDK *Amazon SageMaker AI Python*.

```
sm_transformer = sagemaker.transformer.Transformer(…, assemble_with="Line", accept="text/csv")
sm_transformer.transform(…, split_type="Line", content_type="text/csv", input_filter="$[1:]", join_source="Input", output_filter="$[0,-1]")
```

Se stai usando l' AWS SDK per Python (Boto 3), unisci solo la colonna ID con le inferenze aggiungendo il seguente codice alla tua richiesta. [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)

```
{
    "DataProcessing": {
        "InputFilter": "$[1:]",
        "JoinSource": "Input",
        "OutputFilter": "$[0,-1]"
    },
    "TransformOutput": {
        "Accept": "text/csv",
        "AssembleWith": "Line"
    },
    "TransformInput": {
        "ContentType": "text/csv",
        "SplitType": "Line"
    }
}
```

**avvertimento**  
Se si utilizza un file di input in formato JSON, il file non può contenere il nome di attributo `SageMakerOutput`. Questo nome di attributo è riservato per le inferenze nel file di output. Se il file di input in formato JSON contiene un attributo con questo nome, i valori nel file di input potrebbero essere sovrascritti con l'inferenza.

# Archiviazione in nella trasformazione in batch
<a name="batch-transform-storage"></a>

Quando esegui un processo di trasformazione in batch, Amazon SageMaker AI collega un volume di storage Amazon Elastic Block Store alle istanze Amazon EC2 che elaborano il tuo processo. Il volume memorizza il modello e la dimensione del volume di archiviazione è fissata pari a 30 GB. È possibile crittografare il modello a riposo nel volume di archiviazione.

**Nota**  
Se disponi di un modello di grandi dimensioni, potresti riscontrare un `InternalServerError`.

Per ulteriori informazioni sull'archiviazione e le funzionalità di Amazon EBS, consulta le pagine seguenti:
+ [Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html) nella Guida per l’utente di Amazon EC2
+ [Volumi Amazon EBS](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-volumes.html) nella Guida per l’utente di Amazon EC2

**Nota**  
Le istanze G4dn sono dotate del proprio spazio di archiviazione SSD locale. Per ulteriori informazioni sulle istanze G4dn, consulta la pagina relativa alle [Istanze G4 di Amazon EC2](https://aws.amazon.com/ec2/instance-types/g4/).

# Risoluzione dei problemi
<a name="batch-transform-errors"></a>

Se riscontri errori in Amazon SageMaker AI Batch Transform, consulta i seguenti suggerimenti per la risoluzione dei problemi.

## errori di timeout massimo
<a name="batch-transform-errors-max-timeout"></a>

Se si verificano errori di timeout massimo durante l'esecuzione di processi di trasformazione in batch, prova quanto segue:
+ iniziate con il record singolo `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)`, un batch di dimensioni predefinite (6 MB) o inferiore specificato nel parametro `[MaxPayloadInMB](https://docs.aws.amazon.com//sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB)` e un set ridotto di dati campione. Regola il parametro di timeout massimo `[InvocationsTimeoutInSeconds](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelClientConfig.html#sagemaker-Type-ModelClientConfig-InvocationsTimeoutInSeconds)` (che ha un massimo di 1 ora) fino a quando non ricevi una risposta di chiamata riuscita.
+ Dopo aver ricevuto una risposta di invocazione riuscita, aumenta `MaxPayloadInMB` (che ha un massimo di 100 MB) e i parametri `InvocationsTimeoutInSeconds` per trovare la dimensione massima del batch in grado di supportare il timeout del modello desiderato. In questa fase è possibile utilizzare il record singolo o il record multiplo `BatchStrategy`.
**Nota**  
Il superamento del limite `MaxPayloadInMB` causa un errore. Questo può accadere con un set di dati di grandi dimensioni qualora non fosse possibile suddividerlo, il parametro `SplitType` fosse impostato su nessuno oppure i singoli record all'interno del set di dati superassero il limite.
+ (Facoltativo) Ottimizza il parametro `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxConcurrentTransforms)`, che specifica il numero massimo di richieste parallele che possono essere inviate a ogni istanza in un'attività di trasformazione in batch. Tuttavia, il valore di `MaxConcurrentTransforms * MaxPayloadInMB` non deve superare i 100 MB.

## Output incompleto
<a name="batch-transform-errors-incomplete"></a>

SageMaker L'intelligenza artificiale utilizza l'[API Amazon S3 Multipart Upload per caricare](https://docs.aws.amazon.com/AmazonS3/latest/dev/uploadobjusingmpu.html) i risultati di un processo di trasformazione in batch su Amazon S3. Se si verifica un errore, i risultati caricati vengono rimossi da Amazon S3. In alcuni casi, come ad esempio un'interruzione nella connessione di rete, può rimanere su Amazon S3 un caricamento in più parti incompleto. Un caricamento incompleto potrebbe verificarsi anche se hai più file di input, ma alcuni file non possono essere elaborati da SageMaker AI Batch Transform. I file di input che non è stato possibile elaborare non avranno file di output corrispondenti in Amazon S3.

Per evitare di incorrere in costi di storage, ti consigliamo di aggiungere la [policy del bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/dev/mpuoverview.html#mpu-abort-incomplete-mpu-lifecycle-config) alle regole del ciclo di vita del bucket S3. Questa policy elimina i caricamenti in più parti incompleti che potrebbero essere archiviati nel bucket S3. Per ulteriori informazioni, consulta [Gestione del ciclo di vita degli oggetti](https://docs.aws.amazon.com/AmazonS3/latest/dev/object-lifecycle-mgmt.html).

## Processo si presenta come `failed`
<a name="batch-transform-errors-failed"></a>

Se un processo di trasformazione in batch non riesce a elaborare un file di input a causa di un problema con il set di dati, SageMaker AI contrassegna il lavoro come`failed`. Se un file di input contiene un record non valido, il processo di trasformazione non crea un file di output per quel file di input perché questo impedisce di mantenere lo stesso ordine nei dati trasformati e nel file di input. Quando il set di dati contiene più file di input, un processo di trasformazione continua a elaborare i file di input anche se non riesce a elaborarne uno. I file elaborati generano comunque risultati utilizzabili.

Se utilizzi algoritmi personalizzati, puoi utilizzare testo segnaposto, ad esempio `ERROR`, quando l'algoritmo trova un record non valido in un file di input. Ad esempio, se l'ultimo record in un set di dati non è valido, l'algoritmo inserisce il testo segnaposto per tale record nel file di output.

# Parallelizzazione dei modelli e inferenza di modelli di grandi dimensioni
<a name="large-model-inference"></a>

 Amazon SageMaker AI include container di deep learning (DLC) specializzati, librerie e strumenti per la parallelizzazione dei modelli e l’inferenza di modelli di grandi dimensioni (LMI). Nelle sezioni seguenti, sono disponibili risorse che spiegano come utilizzare i modelli LMI su SageMaker AI. 

**Topics**
+ [Documentazione del container di inferenza del modello di grandi dimensioni (LMI)](large-model-inference-container-docs.md)
+ [Parametri degli endpoint di SageMaker AI per l’inferenza di modelli di grandi dimensioni](large-model-inference-hosting.md)
+ [Implementazione di modelli non compressi](large-model-inference-uncompressed.md)
+ [Implementa modelli di grandi dimensioni per l'inferenza con TorchServe](large-model-inference-tutorials-torchserve.md)

# Documentazione del container di inferenza del modello di grandi dimensioni (LMI)
<a name="large-model-inference-container-docs"></a>

La [documentazione relativa ai container di inferenza del modello di grandi dimensioni (LMI)](https://docs.djl.ai/master/docs/serving/serving/docs/lmi/index.html) è disponibile nel sito della documentazione di Deep Java Library. 

La documentazione è scritta per sviluppatori, data scientist e ingegneri di machine learning che devono implementare e ottimizzare modelli linguistici di grandi dimensioni (LLMs) su Amazon SageMaker AI. Ti aiuta a utilizzare i contenitori LMI, che sono contenitori Docker specializzati per l'inferenza LLM, forniti da. AWS Offre una panoramica, guide all’implementazione, guide per l’utente alle librerie di inferenza supportate e tutorial avanzati.

La documentazione del container LMI consente di:
+ Comprendere i componenti e l’architettura dei container LMI
+ Scoprire come selezionare il tipo di istanza e il backend appropriati per il tuo caso d’uso
+ Configura e distribuisci sull'intelligenza artificiale utilizzando contenitori LMI LLMs SageMaker 
+ Ottimizzare le prestazioni utilizzando funzionalità come quantizzazione, parallelizzazione tensoriale e batching continuo
+ Esegui il benchmark e ottimizza i tuoi endpoint di SageMaker intelligenza artificiale per un throughput e una latenza ottimali

# Parametri degli endpoint di SageMaker AI per l’inferenza di modelli di grandi dimensioni
<a name="large-model-inference-hosting"></a>

 Puoi personalizzare i seguenti parametri per facilitare l’inferenza di modelli di grandi dimensioni (LMI) a bassa latenza con SageMaker AI: 
+  **Dimensione massima del volume Amazon EBS sull'istanza (`VolumeSizeInGB`)**: se la dimensione del modello è superiore a 30 GB e stai utilizzando un'istanza senza un disco locale, devi aumentare questo parametro in modo che sia leggermente superiore alla dimensione del tuo modello. 
+  **Quota di timeout del controllo dell’integrità (`ContainerStartupHealthCheckTimeoutInSeconds`)**: se il container è configurato correttamente e i log di CloudWatch indicano un timeout per il controllo dell’integrità, devi aumentare questa quota in modo che il container abbia abbastanza tempo per rispondere ai controlli dell’integrità. 
+  **Quota di timeout per il download del modello (`ModelDataDownloadTimeoutInSeconds`)**: se la dimensione del modello è superiore a 40 GB, devi aumentare questa quota per avere tempo sufficiente per scaricare il modello da Amazon S3 sull’istanza. 

Il seguente frammento di codice mostra come configurare in modo programmatico i parametri sopra menzionati. Sostituisci il *testo segnaposto in corsivo* nell’esempio con le tue informazioni. 

```
import boto3

aws_region = "aws-region"
sagemaker_client = boto3.client('sagemaker', region_name=aws_region)

# The name of the endpoint. The name must be unique within an AWS Region in your AWS account.
endpoint_name = "endpoint-name"

# Create an endpoint config name.
endpoint_config_name = "endpoint-config-name"

# The name of the model that you want to host.
model_name = "the-name-of-your-model"

instance_type = "instance-type"

sagemaker_client.create_endpoint_config(
    EndpointConfigName = endpoint_config_name
    ProductionVariants=[
        {
            "VariantName": "variant1", # The name of the production variant.
            "ModelName": model_name,
            "InstanceType": instance_type, # Specify the compute instance type.
            "InitialInstanceCount": 1, # Number of instances to launch initially.
            "VolumeSizeInGB": 256, # Specify the size of the Amazon EBS volume.
            "ModelDataDownloadTimeoutInSeconds": 1800, # Specify the model download timeout in seconds.
            "ContainerStartupHealthCheckTimeoutInSeconds": 1800, # Specify the health checkup timeout in seconds
        },
    ],
)

sagemaker_client.create_endpoint(EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)
```

 Per ulteriori informazioni sulle chiavi per `ProductionVariants`, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). 

Per esempi che dimostrano come ottenere un’inferenza a bassa latenza con modelli di grandi dimensioni, consulta [Generative AI Inference Examples on Amazon SageMaker AI](https://github.com/aws-samples/sagemaker-genai-hosting-examples/tree/main) nel repository GitHub aws-samples. 

# Implementazione di modelli non compressi
<a name="large-model-inference-uncompressed"></a>

 Un’opzione disponibile per l’implementazione di modelli ML consiste nell’archiviare e comprimere gli artefatti del modello in un formato `tar.gz`. Sebbene questo metodo funzioni bene per i modelli di piccole dimensioni, la compressione di un artefatto del modello di grandi dimensioni con centinaia di miliardi di parametri e la successiva decompressione su un endpoint può richiedere molto tempo. Per l'inferenza di modelli di grandi dimensioni, si consiglia di implementare un modello ML non compresso. Questa guida mostra come implementare un modello ML non compresso. 

 Per distribuire modelli ML non compressi, carica tutti gli artefatti del modello su Amazon S3 e organizzali con un prefisso Amazon S3 comune. Un prefisso Amazon S3 è una stringa di caratteri all'inizio del nome chiave di un oggetto Amazon S3, separata dal resto del nome da un delimitatore. Per ulteriori informazioni sul prefisso Amazon S3, consulta [Organizzazione degli oggetti utilizzando i prefissi](https://docs.aws.amazon.com/AmazonS3/latest/userguide/using-prefixes.html). 

 Per l’implementazione con SageMaker AI, è necessario selezionare la barra (/) come delimitatore. È necessario assicurarsi che solo gli artefatti associati al modello ML siano organizzati con il prefisso. Per i modelli ML con un singolo artefatto non compresso, il prefisso sarà identico al nome della chiave. Puoi controllare quali oggetti sono associati al tuo prefisso con AWS CLI: 

```
aws s3 ls --recursive s3://bucket/prefix
```

 Dopo aver caricato gli artefatti del modello su Amazon S3 e averli organizzati con un prefisso comune, puoi specificare la loro posizione come parte del campo [ModelDataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelDataSource.html) quando invochi la richiesta [CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html). SageMaker AI scaricherà automaticamente gli artefatti del modello non compresso su `/opt/ml/model` per l’inferenza. Per ulteriori informazioni sulle regole che SageMaker AI applica al download degli artefatti, consulta [S3ModelDataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3ModelDataSource.html). 

 Il seguente frammento di codice mostra come invocare l’API `CreateModel` durante l’implementazione di un modello non compresso. Sostituisci il *testo utente in corsivo* con le tue informazioni. 

```
model_name = "model-name"
sagemaker_role = "arn:aws:iam::123456789012:role/SageMakerExecutionRole"
container = "123456789012.dkr.ecr.us-west-2.amazonaws.com/inference-image:latest"

create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        "Image": container,
        "ModelDataSource": {
            "S3DataSource": {
                "S3Uri": "s3://amzn-s3-demo-bucket/prefix/to/model/data/", 
                "S3DataType": "S3Prefix",
                "CompressionType": "None",
            },
        },
    },
)
```

 L'esempio sopra riportato presuppone che gli artefatti del modello siano organizzati in base a un prefisso comune. Se invece l'artefatto del modello è un singolo oggetto Amazon S3 non compresso, modifica `"S3Uri"` in modo che punti all'oggetto Amazon S3 e cambia `"S3DataType"` in `"S3Object"`. 

**Nota**  
 Attualmente non è possibile utilizzare `ModelDataSource` con Marketplace AWS, la trasformazione in batch SageMaker AI, gli endpoint di SageMaker Serverless Inference e gli endpoint multi-modello di SageMaker. 

# Implementa modelli di grandi dimensioni per l'inferenza con TorchServe
<a name="large-model-inference-tutorials-torchserve"></a>

Questo tutorial dimostra come distribuire modelli di grandi dimensioni e fornire inferenza in Amazon SageMaker AI con on. TorchServe GPUs Questo esempio distribuisce il modello [OPT-30b](https://huggingface.co/facebook/opt-30b) su un’istanza `ml.g5`. È possibile modificarlo per utilizzarlo con altri modelli e tipi di istanze. Negli esempi, sostituire `italicized placeholder text` con le tue informazioni.

TorchServe è una potente piattaforma aperta per l'inferenza di modelli distribuiti di grandi dimensioni. Supportando librerie popolari come PyTorch Native Pi e HuggingFace Accelerate PPy DeepSpeed, offre un gestore uniforme APIs che rimane coerente tra scenari di inferenza distribuiti di modelli di grandi dimensioni e modelli non distribuiti. Per ulteriori informazioni, consulta la documentazione sull'inferenza [TorchServedi modelli di grandi dimensioni](https://pytorch.org/serve/large_model_inference.html#).

## Contenitori di deep learning con TorchServe
<a name="large-model-inference-tutorials-torchserve-dlcs"></a>

Per implementare un modello di grandi dimensioni con TorchServe un' SageMaker intelligenza artificiale, puoi utilizzare uno dei contenitori di deep learning SageMaker AI (DLCs). Per impostazione predefinita, TorchServe è installato in tutti AWS PyTorch DLCs. Durante il caricamento del modello, TorchServe può installare librerie specializzate su misura per modelli di grandi dimensioni come PiPPy, Deepspeed e Accelerate.

La tabella seguente elenca tutte le [SageMaker IA DLCs con TorchServe](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only).


| Categoria DLC | Framework | Hardware | URL di esempio | 
| --- | --- | --- | --- | 
| [SageMaker Contenitori AI Framework](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) |  PyTorch 2.0.0\$1  | CPU, GPU | 763104351884.dkr.ecr.us-east-1.amazonaws.com/pytorch-inference:2.0.1-gpu-py310-cu118-ubuntu20.04-sagemaker | 
| [SageMaker Contenitori Graviton AI Framework](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-graviton-containers-sm-support-only) |  PyTorch 2.0\$1  | CPU | 763104351884.dkr. ecr.us-east-1.amazonaws.com /:2.0.1-cpu-py310-ubuntu20.04-sagemaker pytorch-inference-graviton | 
| [Container di inferenza StabilityAI](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#stabilityai-inference-containers) |  PyTorch 2.0.0\$1  | GPU | 763104351884.dkr. ecr.us-east-1.amazonaws.com /:2.0.1-sgm0.1.0-gpu-py310-cu118-ubuntu20.04-sagemaker stabilityai-pytorch-inference | 
| [Container Neuron](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#neuron-containers) | PyTorch 1.13.1 | Neuronx | 763104351884.dkr. ecr.us-west-2.amazonaws.com /:1.13.1-neuron-py310-sdk2.12.0-ubuntu20.04 pytorch-inference-neuron | 

## Nozioni di base
<a name="large-model-inference-tutorials-torchserve-getting-started"></a>

Prima di distribuire il modello, completa i prerequisiti. È inoltre possibile configurare i parametri del modello e personalizzare il codice del gestore.

### Prerequisiti
<a name="large-model-inference-tutorials-torchserve-getting-started-prereqs"></a>

Per iniziare, assicurati di rispettare le seguenti condizioni fondamentali:

1. Assicurati di avere accesso a un account. AWS [Configura il tuo ambiente](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) in modo che AWS CLI possano accedere al tuo account tramite un utente AWS IAM o un ruolo IAM. Consigliamo di utilizzare un ruolo IAM. Ai fini del test nel tuo account personale, puoi collegare le seguenti policy di autorizzazione gestita al ruolo IAM:
   + [AmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [AmazonEC2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AWSServiceRoleForAmazonEKSNodegroup](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSServiceRoleForAmazonEKSNodegroup)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [Amazon S3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

   Per ulteriori informazioni sul collegamento di policy IAM a un ruolo, consulta [Adding and removing IAM identity permissions](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) nella *AWS Guida per l'utente IAM*.

1. Configurazione locale delle dipendenze, come indicato negli esempi seguenti:

   1. Installa la versione 2 di: AWS CLI

      ```
      # Install the latest AWS CLI v2 if it is not installed
      !curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" !unzip awscliv2.zip
      #Follow the instructions to install v2 on the terminal
      !cat aws/README.md
      ```

   1. Installa SageMaker AI e il client Boto3:

      ```
      # If already installed, update your client
      #%pip install sagemaker pip --upgrade --quiet
      !pip install -U sagemaker
      !pip install -U boto
      !pip install -U botocore
      !pip install -U boto3
      ```

### Configurazione delle impostazioni e dei parametri del modello
<a name="large-model-inference-tutorials-torchserve-getting-started-config"></a>

TorchServe utilizza [https://pytorch.org/docs/stable/elastic/run.html](https://pytorch.org/docs/stable/elastic/run.html)per configurare l'ambiente distribuito per l'elaborazione parallela dei modelli. TorchServe ha la capacità di supportare più lavoratori per un modello di grandi dimensioni. Per impostazione predefinita, TorchServe utilizza un algoritmo round-robin da assegnare a un lavoratore GPUs su un host. Nel caso di un'inferenza di modelli di grandi dimensioni, il numero GPUs assegnato a ciascun lavoratore viene calcolato automaticamente in base al numero specificato nel file. GPUs `model_config.yaml` La variabile di ambiente`CUDA_VISIBLE_DEVICES`, che specifica i dispositivi IDs GPU visibili in un determinato momento, viene impostata in base a questo numero.

Ad esempio, supponiamo che ce ne siano 8 GPUs su un nodo e che un lavoratore ne abbia bisogno 4 GPUs su un nodo (). `nproc_per_node=4` In questo caso, ne TorchServe GPUs assegna quattro al primo worker (`CUDA_VISIBLE_DEVICES="0,1,2,3"`) e quattro GPUs al secondo worker (`CUDA_VISIBLE_DEVICES="4,5,6,7”`).

Oltre a questo comportamento predefinito, TorchServe offre agli utenti la flessibilità di specificare GPUs un lavoratore. Ad esempio, se impostate la variabile `deviceIds: [2,3,4,5]` nel [file YAML di configurazione del modello](https://github.com/pytorch/serve/blob/5ee02e4f050c9b349025d87405b246e970ee710b/model-archiver/README.md?plain=1#L164) e impostate`nproc_per_node=2`, la TorchServe assegnate al primo lavoratore e `CUDA_VISIBLE_DEVICES=”2,3”` `CUDA_VISIBLE_DEVICES="4,5”` al secondo lavoratore.

Nell'esempio `model_config.yaml` seguente, configuriamo i parametri front-end e back-end per il modello [OPT-30b](https://huggingface.co/facebook/opt-30b). I parametri di front-end configurati sono `parallelType`, `deviceType`, `deviceIds ` e `torchrun`. [Per informazioni più dettagliate sui parametri del front-end che è possibile configurare, consulta la documentazione. PyTorch GitHub ](https://github.com/pytorch/serve/blob/2bf505bae3046b0f7d0900727ec36e611bb5dca3/docs/configuration.md?plain=1#L267) La configurazione del back-end si basa su una mappa YAML che consente la personalizzazione in stile libero. Per i parametri di back-end, definiamo la DeepSpeed configurazione e i parametri aggiuntivi utilizzati dal codice del gestore personalizzato.

```
# TorchServe front-end parameters
minWorkers: 1
maxWorkers: 1
maxBatchDelay: 100
responseTimeout: 1200
parallelType: "tp"
deviceType: "gpu"
# example of user specified GPU deviceIds
deviceIds: [0,1,2,3] # sets CUDA_VISIBLE_DEVICES

torchrun:
    nproc-per-node: 4

# TorchServe back-end parameters
deepspeed:
    config: ds-config.json
    checkpoint: checkpoints.json

handler: # parameters for custom handler code
    model_name: "facebook/opt-30b"
    model_path: "model/models--facebook--opt-30b/snapshots/ceea0a90ac0f6fae7c2c34bcb40477438c152546"
    max_length: 50
    max_new_tokens: 10
    manual_seed: 40
```

### Personalizzazione di gestori
<a name="large-model-inference-tutorials-torchserve-getting-started-handlers"></a>

TorchServe offre [gestori di base](https://github.com/pytorch/serve/tree/master/ts/torch_handler/distributed) e [utilità di gestione per l'inferenza di modelli](https://github.com/pytorch/serve/tree/master/ts/handler_utils) di grandi dimensioni creati con le librerie più diffuse. [L'esempio seguente dimostra come la classe [TransformersSeqClassifierHandler](https://github.com/pytorch/serve/blob/ab69b69a59d6ca6074df7e6d4014f07eb48dedba/examples/large_models/deepspeed/custom_handler.py#L16C7-L16C39)Custom Handler estende e utilizza le utilità Handler. [BaseDeepSpeedHandler](https://github.com/pytorch/serve/blob/ab69b69a59d6ca6074df7e6d4014f07eb48dedba/ts/torch_handler/distributed/base_deepspeed_handler.py#L8)](https://github.com/pytorch/serve/blob/master/ts/handler_utils/distributed/deepspeed.py) Per un esempio completo di codice, consultate il [`custom_handler.py`codice nella documentazione. PyTorch GitHub](https://github.com/pytorch/serve/blob/master/examples/large_models/deepspeed/custom_handler.py)

```
class TransformersSeqClassifierHandler(BaseDeepSpeedHandler, ABC):
    """
    Transformers handler class for sequence, token classification and question answering.
    """

    def __init__(self):
        super(TransformersSeqClassifierHandler, self).__init__()
        self.max_length = None
        self.max_new_tokens = None
        self.tokenizer = None
        self.initialized = False

    def initialize(self, ctx: Context):
        """In this initialize function, the HF large model is loaded and
        partitioned using DeepSpeed.
        Args:
            ctx (context): It is a JSON Object containing information
            pertaining to the model artifacts parameters.
        """
        super().initialize(ctx)
        model_dir = ctx.system_properties.get("model_dir")
        self.max_length = int(ctx.model_yaml_config["handler"]["max_length"])
        self.max_new_tokens = int(ctx.model_yaml_config["handler"]["max_new_tokens"])
        model_name = ctx.model_yaml_config["handler"]["model_name"]
        model_path = ctx.model_yaml_config["handler"]["model_path"]
        seed = int(ctx.model_yaml_config["handler"]["manual_seed"])
        torch.manual_seed(seed)

        logger.info("Model %s loading tokenizer", ctx.model_name)

        self.tokenizer = AutoTokenizer.from_pretrained(model_name)
        self.tokenizer.pad_token = self.tokenizer.eos_token
        config = AutoConfig.from_pretrained(model_name)
        with torch.device("meta"):
            self.model = AutoModelForCausalLM.from_config(
                config, torch_dtype=torch.float16
            )
        self.model = self.model.eval()

        ds_engine = get_ds_engine(self.model, ctx)
        self.model = ds_engine.module
        logger.info("Model %s loaded successfully", ctx.model_name)
        self.initialized = True

    def preprocess(self, requests):
        """
        Basic text preprocessing, based on the user's choice of application mode.
        Args:
            requests (list): A list of dictionaries with a "data" or "body" field, each
                            containing the input text to be processed.
        Returns:
            tuple: A tuple with two tensors: the batch of input ids and the batch of
                attention masks.
        """

    def inference(self, input_batch):
        """
        Predicts the class (or classes) of the received text using the serialized transformers
        checkpoint.
        Args:
            input_batch (tuple): A tuple with two tensors: the batch of input ids and the batch
                                of attention masks, as returned by the preprocess function.
        Returns:
            list: A list of strings with the predicted values for each input text in the batch.
        """
        
    def postprocess(self, inference_output):
        """Post Process Function converts the predicted response into Torchserve readable format.
        Args:
            inference_output (list): It contains the predicted response of the input text.
        Returns:
            (list): Returns a list of the Predictions and Explanations.
        """
```

## Preparazione degli artefatti di un modello
<a name="large-model-inference-tutorials-torchserve-artifacts"></a>

Prima di distribuire il modello sull' SageMaker intelligenza artificiale, è necessario impacchettare gli artefatti del modello. Per i modelli di grandi dimensioni, ti consigliamo di utilizzare PyTorch [torch-model-archiver](https://github.com/pytorch/serve/blob/master/model-archiver/README.md)lo strumento con l'argomento`--archive-format no-archive`, che salta la compressione degli artefatti del modello. L'esempio seguente salva tutti gli artefatti del modello in una nuova cartella denominata `opt/`.

```
torch-model-archiver --model-name opt --version 1.0 --handler custom_handler.py --extra-files ds-config.json -r requirements.txt --config-file opt/model-config.yaml --archive-format no-archive
```

[Una volta creata la `opt/` cartella, scaricate il modello opt-30b nella cartella utilizzando lo strumento Download\$1model. PyTorch ](https://github.com/pytorch/serve/blob/master/examples/large_models/utils/Download_model.py)

```
cd opt
python path_to/Download_model.py --model_path model --model_name facebook/opt-30b --revision main
```

Infine, puoi caricare gli artefatti del modello su un bucket Amazon S3. 

```
aws s3 cp opt {your_s3_bucket}/opt --recursive
```

Ora dovresti avere artefatti del modello archiviati in Amazon S3 pronti per essere distribuiti su un endpoint di intelligenza artificiale. SageMaker 

## Distribuisci il modello utilizzando SageMaker Python SDK
<a name="large-model-inference-tutorials-torchserve-deploy"></a>

Dopo aver preparato gli artefatti del modello, puoi distribuirlo su un endpoint di hosting AI. SageMaker In questa sezione viene spiegato come distribuire un unico modello di grandi dimensioni su un endpoint ed effettuare previsioni di risposta in streaming. Per ulteriori informazioni sullo streaming delle risposte dagli endpoint, consulta [Invoke real-time endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-test-endpoints.html).

Per distribuire il modello, completa le seguenti fasi:

1. Crea una sessione SageMaker AI, come mostrato nell'esempio seguente.

   ```
   import boto3
   import sagemaker
   from sagemaker import Model, image_uris, serializers, deserializers
   
   boto3_session=boto3.session.Session(region_name="us-west-2")
   smr = boto3.client('sagemaker-runtime-demo')
   sm = boto3.client('sagemaker')
   role = sagemaker.get_execution_role()  # execution role for the endpoint
   sess= sagemaker.session.Session(boto3_session, sagemaker_client=sm, sagemaker_runtime_client=smr)  # SageMaker AI session for interacting with different AWS APIs
   region = sess._region_name  # region name of the current SageMaker Studio Classic environment
   account = sess.account_id()  # account_id of the current SageMaker Studio Classic environment
   
   # Configuration:
   bucket_name = sess.default_bucket()
   prefix = "torchserve"
   output_path = f"s3://{bucket_name}/{prefix}"
   print(f'account={account}, region={region}, role={role}, output_path={output_path}')
   ```

1. Crea un modello non compresso in SageMaker AI, come mostrato nell'esempio seguente.

   ```
   from datetime import datetime
   
   instance_type = "ml.g5.24xlarge"
   endpoint_name = sagemaker.utils.name_from_base("ts-opt-30b")
   s3_uri = {your_s3_bucket}/opt
   
   model = Model(
       name="torchserve-opt-30b" + datetime.now().strftime("%Y-%m-%d-%H-%M-%S"),
       # Enable SageMaker uncompressed model artifacts
       model_data={
           "S3DataSource": {
                   "S3Uri": s3_uri,
                   "S3DataType": "S3Prefix",
                   "CompressionType": "None",
           }
       },
       image_uri=container,
       role=role,
       sagemaker_session=sess,
       env={"TS_INSTALL_PY_DEP_PER_MODEL": "true"},
   )
   print(model)
   ```

1. Implementare un modello su un’istanza di Amazon EC2, come illustrato nell’esempio seguente.

   ```
   model.deploy(
       initial_instance_count=1,
       instance_type=instance_type,
       endpoint_name=endpoint_name,
       volume_size=512, # increase the size to store large model
       model_data_download_timeout=3600, # increase the timeout to download large model
       container_startup_health_check_timeout=600, # increase the timeout to load large model
   )
   ```

1. Inizializzare una classe per l'elaborazione di una risposta in streaming, come illustrato nell'esempio seguente.

   ```
   import io
   
   class Parser:
       """
       A helper class for parsing the byte stream input. 
       
       The output of the model will be in the following format:
       ```
       b'{"outputs": [" a"]}\n'
       b'{"outputs": [" challenging"]}\n'
       b'{"outputs": [" problem"]}\n'
       ...
       ```
       
       While usually each PayloadPart event from the event stream will contain a byte array 
       with a full json, this is not guaranteed and some of the json objects may be split across
       PayloadPart events. For example:
       ```
       {'PayloadPart': {'Bytes': b'{"outputs": '}}
       {'PayloadPart': {'Bytes': b'[" problem"]}\n'}}
       ```
       
       This class accounts for this by concatenating bytes written via the 'write' function
       and then exposing a method which will return lines (ending with a '\n' character) within
       the buffer via the 'scan_lines' function. It maintains the position of the last read 
       position to ensure that previous bytes are not exposed again. 
       """
       
       def __init__(self):
           self.buff = io.BytesIO()
           self.read_pos = 0
           
       def write(self, content):
           self.buff.seek(0, io.SEEK_END)
           self.buff.write(content)
           data = self.buff.getvalue()
           
       def scan_lines(self):
           self.buff.seek(self.read_pos)
           for line in self.buff.readlines():
               if line[-1] != b'\n':
                   self.read_pos += len(line)
                   yield line[:-1]
                   
       def reset(self):
           self.read_pos = 0
   ```

1. Testare una previsione di risposta in streaming, come mostrato nell'esempio seguente.

   ```
   import json
   
   body = "Today the weather is really nice and I am planning on".encode('utf-8')
   resp = smr.invoke_endpoint_with_response_stream(EndpointName=endpoint_name, Body=body, ContentType="application/json")
   event_stream = resp['Body']
   parser = Parser()
   for event in event_stream:
       parser.write(event['PayloadPart']['Bytes'])
       for line in parser.scan_lines():
           print(line.decode("utf-8"), end=' ')
   ```

Ora hai distribuito il tuo modello su un endpoint di SageMaker intelligenza artificiale e dovresti essere in grado di richiamarlo per le risposte. Per ulteriori informazioni sugli endpoint SageMaker AI in tempo reale, consulta. [Endpoint per modelli singoli](realtime-single-model.md)

# Guardrail di implementazione per l’aggiornamento dei modelli in produzione
<a name="deployment-guardrails"></a>

I guardrail di implementazione sono un insieme di opzioni di implementazione dei modelli in Amazon SageMaker AI Inference per aggiornare i modelli di machine learning in produzione. Utilizzando le opzioni di implementazione completamente gestite, è possibile controllare il passaggio dal modello corrente in produzione a uno nuovo. Le modalità di spostamento del traffico nelle implementazioni blu/verde, come canary e lineare, offrono un controllo granulare sul processo di spostamento del traffico dal modello attuale a quello nuovo nel corso dell'aggiornamento. Sono inoltre disponibili misure di protezione integrate, come i rollback automatici, che aiutano a individuare tempestivamente i problemi e ad adottare automaticamente azioni correttive prima che abbiano un impatto significativo sulla produzione.

I guardrail di implementazione offrono i seguenti vantaggi:
+ **Sicurezza dell'implementazione durante l'aggiornamento degli ambienti di produzione.** Un aggiornamento regressivo a un ambiente di produzione può causare tempi di inattività non pianificati e un impatto aziendale, come una maggiore latenza del modello e tassi di errore elevati. I guardrail di implementazione aiutano a mitigare tali rischi fornendo le migliori pratiche e barriere di sicurezza operative integrate.
+ **Implementazione completamente gestita.** SageMaker AI si occupa della configurazione e dell’orchestrazione di queste implementazioni e le integra con i meccanismi di aggiornamento degli endpoint. Non è necessario creare e mantenere meccanismi di orchestrazione, monitoraggio o rollback. Puoi sfruttare SageMaker AI per configurare e orchestrare queste implementazioni e concentrarti sull’utilizzo del machine learning per le tue applicazioni.
+ **Visibilità.** Puoi monitorare lo stato di avanzamento della distribuzione tramite l'API [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html) o tramite Eventi Amazon CloudWatch (per gli [endpoint supportati](deployment-guardrails-exclusions.md)). Per ulteriori informazioni sugli eventi in SageMaker AI, consulta la sezione relativa alla modifica dello stato di implementazione degli endpoint in [Eventi che Amazon SageMaker AI invia ad Amazon EventBridge](automating-sagemaker-with-eventbridge.md). Tieni presente che se il tuo endpoint utilizza una delle funzionalità della pagina [Esclusioni](deployment-guardrails-exclusions.md), non puoi utilizzare Eventi CloudWatch.

**Nota**  
I guardrail di implementazione si applicano solo ai tipi di endpoint [Inferenza asincrona](async-inference.md) e [Inferenza in tempo reale](realtime-endpoints.md).

## Come iniziare
<a name="deployment-guardrails-get-started"></a>

Supportiamo due tipi di implementazioni per aggiornare i modelli in produzione: implementazioni blu/verdi e implementazioni continue.
+ [Distribuzioni blu/verdi](deployment-guardrails-blue-green.md): puoi spostare il traffico dal tuo vecchio parco istanze (il parco istanze blu) a un nuovo parco istanze (parco istanze verde) con gli aggiornamenti. Le implementazioni blu/verde offrono [diverse](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-blue-green.html) modalità di spostamento del traffico. Una modalità di spostamento del traffico è una configurazione che specifica in che modo SageMaker AI indirizza il traffico degli endpoint verso un nuovo parco contenente gli aggiornamenti. Le seguenti modalità di spostamento del traffico offrono diversi livelli di controllo sul processo di aggiornamento degli endpoint:
  + [Spostamento del traffico tutto in una sola volta](deployment-guardrails-blue-green-all-at-once.md) sposta tutto il traffico degli endpoint dal parco istanze blu a quello verde. Una volta che il traffico si sposta verso il parco istanze verde, gli allarmi Amazon CloudWatch preimpostati iniziano a monitorare il parco istanze verde per un determinato periodo di tempo (il *periodo di baking*). Se durante il periodo di incorporamento non scatta alcun allarme, SageMaker AI interrompe il parco blu.
  + [Spostamento del traffico canary](deployment-guardrails-blue-green-canary.md) sposta una piccola parte del traffico (un *canary*) verso il parco istanze verde e la monitora per un periodo di baking. Se il canary ha successo sul parco verde, SageMaker AI sposta il resto del traffico dal parco blu al parco verde prima di terminare il parco blu.
  + [Utilizzare lo spostamento del traffico lineare](deployment-guardrails-blue-green-linear.md) offre una personalizzazione ancora maggiore rispetto al numero di fasi di spostamento del traffico e alla percentuale di traffico da spostare per ciascuna fase. Mentre lo spostamento canary consente di spostare il traffico in due fasi, lo spostamento lineare lo estende a *n* fasi distanziate in modo lineare.
+ [Utilizzare implementazioni in sequenza](deployment-guardrails-rolling.md): puoi aggiornare l’endpoint man mano che SageMaker AI alloca in modo incrementale la capacità e sposta il traffico verso un nuovo parco in fasi di una dimensione del batch specificata. Le istanze del nuovo parco vengono aggiornate con la nuova configurazione di implementazione e, se nessun allarme CloudWatch si attiva durante il periodo di incorporamento, SageMaker AI ripulisce le istanze del parco precedente. Questa opzione offre un controllo granulare sul numero di istanze o sulla percentuale di capacità spostata durante ogni fase.

Puoi creare e gestire la distribuzione tramite l'API e i comandi [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) e [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker e AWS Command Line Interface. Consulta le pagine di distribuzione individuali per maggiori dettagli su come configurare la distribuzione. Tieni presente che se l'endpoint utilizza una delle funzionalità elencate nella pagina [Esclusioni](deployment-guardrails-exclusions.md), non puoi utilizzare i guardrail di distribuzione.

Per seguire esempi guidati che mostrano come utilizzare i guardrail di implementazione, guarda i nostri esempi di [notebook Jupyter](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-inference-deployment-guardrails) per le modalità di spostamento del traffico canary e lineare.

# Configurazione e monitoraggio del rollback automatico
<a name="deployment-guardrails-configuration"></a>

Gli CloudWatch allarmi Amazon sono un prerequisito per utilizzare i periodi di cottura nei guardrail di implementazione. È possibile utilizzare la funzionalità di rollback automatico nei guardrail di distribuzione solo se si configurano CloudWatch allarmi in grado di monitorare un endpoint. Se uno qualsiasi degli allarmi scatta durante il periodo di monitoraggio specificato, l' SageMaker IA avvia un rollback completo sul vecchio endpoint per proteggere l'applicazione. Se non hai impostato alcun CloudWatch allarme per monitorare l'endpoint, la funzionalità di rollback automatico non funziona durante la distribuzione.

Per ulteriori informazioni su Amazon CloudWatch, consulta [What is Amazon CloudWatch?](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html) nella *Amazon CloudWatch User Guide*.

**Nota**  
Assicurati che il tuo ruolo di esecuzione IAM sia autorizzato a eseguire l'azione `cloudwatch:DescribeAlarms` sugli allarmi di rollback automatico che hai specificato.

## Esempi di allarme
<a name="deployment-guardrails-configuration-alarm-examples"></a>

Per aiutarti a iniziare, forniamo i seguenti esempi per dimostrare le funzionalità degli CloudWatch allarmi. Oltre a utilizzare o modificare i seguenti esempi, puoi creare allarmi personalizzati e configurarli per monitorare vari parametri sui parchi istanze specificati per un determinato periodo di tempo. Per visualizzare altre metriche e dimensioni dell' SageMaker intelligenza artificiale che puoi aggiungere ai tuoi allarmi, consulta. [Metriche di Amazon SageMaker AI in Amazon CloudWatch](monitoring-cloudwatch.md)

**Topics**
+ [Monitora gli errori di invocazione sui parchi istanze vecchi e nuovi](#deployment-guardrails-configuration-alarm-examples-errors-both)
+ [Monitora la latenza del modello sul nuovo parco istanze](#deployment-guardrails-configuration-alarm-examples-latency-new)

### Monitora gli errori di invocazione sui parchi istanze vecchi e nuovi
<a name="deployment-guardrails-configuration-alarm-examples-errors-both"></a>

Il seguente CloudWatch allarme monitora il tasso di errore medio di un endpoint. È possibile utilizzare questo allarme con qualsiasi tipo di sistema di distribuzione, guardrail, spostamento del traffico, per fornire un monitoraggio generale sia sul vecchio che sul nuovo parco istanze. Se scatta l'allarme, l' SageMaker IA avvia un ripristino della vecchia flotta.

Gli errori di invocazione provenienti sia dal vecchio che dal nuovo parco istanze contribuiscono al tasso di errore medio. Se il tasso di errore medio supera la soglia specificata, scatta l'allarme. Questo esempio particolare monitora gli errori 4xx (errori del client) sia sul vecchi che sul nuovo parco istanze per tutta la durata di una distribuzione. Puoi anche monitorare gli errori 5xx (errori del server) utilizzando il parametro `Invocation5XXErrors`.

**Nota**  
Per questo tipo di allarme, se la vecchia flotta attiva l'allarme durante l'implementazione, l' SageMaker IA interrompe l'implementazione. Pertanto, se l’attuale parco istanze di produzione causa già errori, prendi in considerazione l'utilizzo o la modifica di uno dei seguenti esempi, che monitora solo il nuovo parco istanze per rilevare eventuali errori.

```
#Applied deployment type: all types
{
    "AlarmName": "EndToEndDeploymentHighErrorRateAlarm",
    "AlarmDescription": "Monitors the error rate of 4xx errors",
    "MetricName": "Invocation4XXErrors",
    "Namespace": "AWS/SageMaker",
    "Statistic": "Average",
    "Dimensions": [
        {
            "Name": "EndpointName",
            "Value": <your-endpoint-name>
        },
        {
            "Name": "VariantName",
            "Value": "AllTraffic"
        }
    ],
    "Period": 600,
    "EvaluationPeriods": 2,
    "Threshold": 1,
    "ComparisonOperator": "GreaterThanThreshold",
    "TreatMissingData": "notBreaching"
}
```

Nell'esempio precedente, nota i valori per i campi seguenti:
+ Per `AlarmName` e `AlarmDescription`, inserisci un nome e una descrizione scelti per l’allarme.
+ Per `MetricName`, utilizza il valore `Invocation4XXErrors` per monitorare 4xx errori sull'endpoint
+ Per `Namespace`, utilizza il valore `AWS/SageMaker`. Puoi anche specificare un parametro personalizzato, se applicabile.
+ Per `Statistic`, utilizza `Average`. Ciò significa che l'allarme prende in considerazione il tasso di errore medio nei periodi di valutazione per calcolare se il tasso di errore ha superato la soglia.
+ Per la dimensione `EndpointName`, usa il nome dell'endpoint che stai aggiornando come valore.
+ Per la dimensione `VariantName`, usa il valore `AllTraffic` per specificare tutto il traffico dell'endpoint.
+ Per `Period`, utilizza `600`. Ciò imposta i periodi di valutazione dell'allarme su una durata di 10 minuti.
+ Per `EvaluationPeriods`, utilizza `2`. Questo valore indica all'allarme di considerare i due periodi di valutazione più recenti nel determinare lo stato dell'allarme.

### Monitora la latenza del modello sul nuovo parco istanze
<a name="deployment-guardrails-configuration-alarm-examples-latency-new"></a>

Il seguente esempio di CloudWatch allarme monitora la latenza del modello del nuovo parco veicoli durante l'implementazione. Puoi utilizzare questo allarme per monitorare solo il nuovo parco istanze ed escludere quello vecchio. L'allarme dura per l'intera implementazione. Questo esempio offre un end-to-end monitoraggio completo della nuova flotta e avvia un ripristino della vecchia flotta se la nuova flotta presenta problemi nei tempi di risposta.

CloudWatch pubblica le metriche con la dimensione `EndpointConfigName:{New-Ep-Config}` dopo che la nuova flotta inizia a ricevere traffico e queste metriche rimangono valide anche dopo il completamento dell'implementazione.

Puoi utilizzare il seguente esempio di allarme con qualsiasi tipo di implementazione.

```
#Applied deployment type: all types
{
    "AlarmName": "NewEndpointConfigVersionHighModelLatencyAlarm",
    "AlarmDescription": "Monitors the model latency on new fleet",
    "MetricName": "ModelLatency",
    "Namespace": "AWS/SageMaker",
    "Statistic": "Average",
    "Dimensions": [
        {
            "Name": "EndpointName",
            "Value": <your-endpoint-name>
        },
        {
            "Name": "VariantName",
            "Value": "AllTraffic"
        },
        {
            "Name": "EndpointConfigName",
            "Value": <your-config-name>
    ],
    "Period": 300,
    "EvaluationPeriods": 2,
    "Threshold": 100000, # 100ms
    "ComparisonOperator": "GreaterThanThreshold",
    "TreatMissingData": "notBreaching"
}
```

Nell'esempio precedente, nota i valori per i campi seguenti:
+ Per `MetricName`, utilizza il valore `ModelLatency` per monitorare il tempo di risposta del modello.
+ Per `Namespace`, utilizza il valore `AWS/SageMaker`. Puoi anche specificare un parametro personalizzato, se applicabile.
+ Per la dimensione `EndpointName`, usa il nome dell'endpoint che stai aggiornando come valore.
+ Per la dimensione `VariantName`, usa il valore `AllTraffic` per specificare tutto il traffico dell'endpoint.
+ Per la dimensione `EndpointConfigName`, il valore deve fare riferimento al nome di configurazione dell'endpoint per l'endpoint nuovo o aggiornato.

**Nota**  
Se desideri monitorare il vecchio parco istanze anziché quello nuovo, puoi modificare la dimensione `EndpointConfigName` per specificare il nome della configurazione del vecchio parco istanze.

# Distribuzioni blu/verdi
<a name="deployment-guardrails-blue-green"></a>

Quando aggiorni il tuo endpoint, Amazon SageMaker AI utilizza automaticamente un’implementazione blu/verde per massimizzare la disponibilità degli endpoint. In un’implementazione blu/verde, SageMaker AI fornisce un nuovo parco con gli aggiornamenti (il parco verde). Quindi, SageMaker AI sposta il traffico dal parco precedente (blu) al parco verde. Una volta che il parco verde funziona senza intoppi per un determinato periodo di valutazione (chiamato periodo di incorporamento), SageMaker AI interrompe il parco blu. Con le funzionalità aggiuntive delle implementazioni blu/green, puoi utilizzare le modalità di spostamento del traffico e il monitoraggio automatico del rollback per proteggere l'endpoint da un impatto significativo sulla produzione.

L’elenco seguente descrive le funzionalità principali delle implementazioni blu/verdi in SageMaker AI:
+ **Modalità di spostamento del traffico.** Le modalità di spostamento del traffico per i guardrail di implementazione consentono di controllare il volume del traffico e il numero di fasi di spostamento del traffico tra il parco istanze blu e il parco istanze verde. Questa funzionalità ti dà la possibilità di valutare progressivamente le prestazioni del parco istanze verde senza impegnarti completamente a spostare il traffico al 100%.
+ **Periodo di baking. ** Il periodo di baking è un periodo di tempo prestabilito per monitorare il parco istanze verde prima di passare alla fase di implementazione successiva. Se uno degli allarmi preimpostati scatta durante un periodo di baking, tutto il traffico degli endpoint torna al parco istanze blu. Il periodo di baking ti aiuta ad aumentare la fiducia nell'aggiornamento prima di rendere permanente il cambio di traffico.
+ **Rollback automatici. ** Puoi specificare gli allarmi Amazon CloudWatch che SageMaker AI utilizza per monitorare il parco verde. Se un problema con il codice aggiornato fa scattare uno degli allarmi, SageMaker AI avvia un ripristino automatico del parco blu per mantenerne la disponibilità, riducendo così al minimo i rischi.

## Modalità di spostamento del traffico
<a name="deployment-guardrails-blue-green-traffic-modes"></a>

Le varie modalità di spostamento del traffico nelle implementazioni blu/verde offrono un controllo più granulare sullo spostamento del traffico tra il parco istanze blu e il parco istanze verde. Le modalità di spostamento del traffico disponibili per le implementazioni blu/verde sono tutti in una volta sola, canary e lineare. La seguente tabella mostra un confronto tra le opzioni.

**Importante**  
Per le implementazioni blu/verde che prevedono periodi di spostamento o di interruzione del traffico in più fasi, ti verranno fatturati entrambi i parchi istanze per la durata dell'aggiornamento, indipendentemente dal traffico diretto al parco istanze. Ciò è in contrasto con le implementazioni blu/verdi, che prevedono lo spostamento del traffico tutto in una sola volta e l'assenza di periodi di baking, in cui ti viene fatturata un solo parco istanze nel corso dell'aggiornamento.


| Nome | Di cosa si tratta? | Pro | Contro | Raccomandazione | 
| --- | --- | --- | --- | --- | 
| Tutto contemporaneamente | Sposta tutto il traffico al nuovo parco istanze in un’unica fase. | Riduce al minimo la durata complessiva dell'aggiornamento. | Gli aggiornamenti regressivi influiscono sul 100% del traffico. | Utilizza questa opzione per ridurre al minimo i tempi e i costi di aggiornamento. | 
| Canary | Il traffico viene spostato in due fasi. La prima fase (canary) sposta una piccola parte del traffico, seguita dalla seconda fase, che sposta il resto del traffico. | Limita il raggio d’azione degli aggiornamenti regressivi alo solo parco istanze canary. | Entrambe i parchi istanze sono operativi in parallelo per l'intera implementazione. | Utilizza questa opzione per trovare un equilibrio tra la riduzione al minimo del raggio d'azione degli aggiornamenti regressivi e la riduzione al minimo del tempo di operatività di due parchi istanze. | 
| Linear (Lineare) | Una parte fissa del traffico si sposta in un numero prestabilito di fasi equidistanti. | Riduce al minimo il rischio di aggiornamenti regressivi spostando il traffico su più fasi. | La durata e il costo dell'aggiornamento sono proporzionali al numero di fasi. | Utilizza questa opzione per ridurre al minimo i rischi eseguendo la distribuzione su più fasi. | 

## Inizia
<a name="deployment-guardrails-blue-green-get-started"></a>

Una volta specificata la configurazione di implementazione desiderata, SageMaker AI gestisce il provisioning di nuove istanze, la terminazione delle istanze precedenti e lo spostamento del traffico per tuo conto. Puoi creare e gestire la distribuzione tramite l'API e i comandi [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) e [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker esistenti e AWS Command Line Interface. Tieni presente che se l'endpoint utilizza una delle funzionalità elencate nella pagina [Esclusioni](deployment-guardrails-exclusions.md), non puoi utilizzare i guardrail di distribuzione. Consulta le pagine di distribuzione individuali per maggiori dettagli su come configurare la distribuzione:
+ [Aggiornamento blu/verde con Spostamento del traffico tutto in una volta sola](deployment-guardrails-blue-green-all-at-once.md)
+ [Aggiornamento blu/verde con Spostamento del traffico canary](deployment-guardrails-blue-green-canary.md)
+ [Aggiornamento blu/verde con Spostamento del traffico lineare](deployment-guardrails-blue-green-linear.md)

Per seguire esempi guidati che mostrano come utilizzare i guardrail di implementazione, guarda i nostri esempi di [notebook Jupyter](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker-inference-deployment-guardrails) per le modalità di spostamento del traffico canary e lineare.

# Spostamento del traffico tutto in una sola volta
<a name="deployment-guardrails-blue-green-all-at-once"></a>

Con lo spostamento del traffico tutto in una sola volta, puoi implementare rapidamente un aggiornamento degli endpoint utilizzando le guardrail di sicurezza di un’implementazione blu/verde. È possibile utilizzare questa opzione di spostamento del traffico per ridurre al minimo la durata dell'aggiornamento, sfruttando al contempo le garanzie di disponibilità delle implementazioni blu/verdi. La funzionalità del periodo di baking consente di monitorare le prestazioni e la funzionalità delle nuove istanze prima di chiudere quelle vecchie, assicurando che il nuovo parco istanze sia pienamente operativo.

Il diagramma seguente mostra come il trasferimento del traffico gestisca contemporaneamente i parchi istanze vecchi e nuovi.

![\[Uno spostamento del traffico riuscito dal vecchio parco istanze al nuovo parco istanze.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/deployment-guardrails-blue-green-all-at-once.png)


Quando si utilizza lo spostamento del traffico tutto in una sola volta, SageMaker AI indirizza il 100% del traffico verso il nuovo parco istanze (parco verde). Quando il parco istanze verde inizia a ricevere traffico, inizia il periodo di baking. Il periodo di baking è un periodo di tempo prestabilito in cui gli allarmi Amazon CloudWatch prespecificati monitorano le prestazioni del parco istanze verde. Se durante il periodo di baking non scatta alcun allarme, SageMaker AI termina il parco precedente (parco blu). Se durante il periodo di baking scatta un allarme, viene avviato un rollback automatico e il 100% del traffico torna al parco istanze blu.

## Prerequisiti
<a name="deployment-guardrails-blue-green-all-at-once-prereqs"></a>

Prima di configurare un’implementazione con lo spostamento del traffico tutto in una sola volta, devi creare allarmi Amazon CloudWatch per monitorare i parametri dal tuo endpoint. Se uno qualsiasi degli allarmi scatta durante il periodo di baking, il traffico inizia a rifluire verso il vecchio parco istanze. Per informazioni su come configurare gli allarmi CloudWatch su un endpoint, consulta la pagina dei prerequisiti [Configurazione e monitoraggio del rollback automatico](deployment-guardrails-configuration.md). Per ulteriori informazioni sugli allarmi CloudWatch, consulta [Utilizzo degli allarmi di Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) nella *Guida per l'utente di Amazon CloudWatch*.

## Configura lo spostamento del traffico tutto in una sola volta
<a name="deployment-guardrails-blue-green-all-at-once-configure"></a>

Quando è tutto pronto per l’implementazione e hai configurato gli allarmi CloudWatch per l’endpoint, puoi avviare l’implementazione utilizzando l’API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) di SageMaker AI o il comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) in AWS Command Line Interface.

**Topics**
+ [Come aggiornare un endpoint (API)](#deployment-guardrails-blue-green-all-at-once-configure-api-update)
+ [Come aggiornare un endpoint con una policy di aggiornamento (API) blu/verde esistente](#deployment-guardrails-blue-green-all-at-once-configure-api-existing)
+ [Come aggiornare un endpoint (CLI)](#deployment-guardrails-blue-green-all-at-once-configure-cli-update)

### Come aggiornare un endpoint (API)
<a name="deployment-guardrails-blue-green-all-at-once-configure-api-update"></a>

L'esempio seguente mostra come aggiornare l'endpoint con lo spostamento del traffico tutto in una sola volta utilizzando [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) nell'API Amazon SageMaker.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "ALL_AT_ONCE"
            },
            "TerminationWaitInSeconds": 600,
            "MaximumExecutionTimeoutInSeconds": 1800
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                },
            ]
        }
    }
)
```

Per configurare l’opzione di spostamento del traffico tutto in una sola volta, procedi come segue:
+ Per `EndpointName`, utilizza il nome dell'endpoint esistente che desideri aggiornare.
+ Per `EndpointConfigName`, utilizza il nome della configurazione dell'endpoint che desideri utilizzare.
+ Sotto `DeploymentConfig` e `BlueGreenUpdatePolicy`, in `TrafficRoutingConfiguration`, imposta il parametro `Type` su `ALL_AT_ONCE`. Ciò specifica che l'implementazione utilizza lo spostamento del traffico tutto in una sola volta.
+ Per `TerminationWaitInSeconds`, utilizza `600`. Questo parametro indica a SageMaker AI di attendere il periodo di tempo specificato (in secondi) dopo che il parco verde è completamente attivo prima di terminare le istanze nel parco blu. In questo esempio, SageMaker AI attende 10 minuti dopo l’ultimo periodo di baking prima di terminare il parco blu.
+ Per `MaximumExecutionTimeoutInSeconds`, utilizza `1800`. Questo parametro imposta il tempo massimo di esecuzione dell’implementazione prima che scada. Nell'esempio precedente, l’implementazione ha un limite di 30 minuti per completare l’esecuzione.
+ In `AutoRollbackConfiguration`, all’interno del campo `Alarms`, puoi aggiungere gli allarmi CloudWatch per nome. Crea una voce `AlarmName: <your-cw-alarm>` per ogni allarme che desideri utilizzare.

### Come aggiornare un endpoint con una policy di aggiornamento (API) blu/verde esistente
<a name="deployment-guardrails-blue-green-all-at-once-configure-api-existing"></a>

Quando utilizzi l'API [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) per creare un endpoint, puoi facoltativamente specificare una configurazione di implementazione da riutilizzare per i futuri aggiornamenti degli endpoint. Puoi utilizzare le stesse opzioni `DeploymentConfig` del precedente esempio di API UpdateEndpoint. Non sono state apportate modifiche al comportamento dell'API CreateEndpoint. Specificare la configurazione di implementazione non significa che l’aggiornamento blu/verde sull'endpoint venga eseguito automaticamente.

La possibilità di utilizzare una configurazione di implementazione precedente si verifica quando si utilizza l'API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) per aggiornare l'endpoint. Quando aggiorni l'endpoint, puoi utilizzare l'opzione `RetainDeploymentConfig` per mantenere la configurazione di implementazione specificata durante la creazione dell'endpoint.

Quando chiami l'API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), imposta `RetainDeploymentConfig` su `True` in modo da mantenere le opzioni `DeploymentConfig` della configurazione originale dell'endpoint.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### Come aggiornare un endpoint (CLI)
<a name="deployment-guardrails-blue-green-all-at-once-configure-cli-update"></a>

Se utilizzi il AWS CLI, l'esempio seguente mostra come avviare un’implementazione tutto in una sola volta blu/verde utilizzando il comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html).

```
update-endpoint
--endpoint-name <your-endpoint-name> 
--endpoint-config-name <your-config-name> 
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "ALL_AT_ONCE"},
    "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Per configurare l’opzione di spostamento del traffico tutto in una sola volta, procedi come segue:
+ Per `endpoint-name`, utilizza il nome dell'endpoint che desideri aggiornare.
+ Per `endpoint-config-name`, utilizza il nome della configurazione dell'endpoint che desideri utilizzare.
+ Per `deployment-config`, utilizza un oggetto JSON [BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html).

**Nota**  
Se preferisci salvare il tuo oggetto JSON in un file, consulta [Generazione dello skeleton AWS CLI e dei parametri di input](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html) nella *Guida per l'utente AWS CLI*.

# Spostamento del traffico canary
<a name="deployment-guardrails-blue-green-canary"></a>

Con lo spostamento del traffico Canary, puoi testare una parte del tuo traffico dell’endpoint sul nuovo parco istanze, mentre il vecchio parco istanze gestisce il resto del traffico. Questa fase di test è un guardrail di sicurezza che convalida la funzionalità del nuovo parco istanze prima di spostare tutto il traffico verso il nuovo parco istanze. Continui ad avere i vantaggi di un'implementazione blu/verde e la funzionalità Canary aggiunta ti consente di assicurarti che il tuo nuovo parco istanze (verde) sia in grado di gestire l’inferenza prima di consentirgli di gestire il 100% del traffico.

La parte del tuo parco istanze verde che si attiva per ricevere traffico è denominata canary e puoi scegliere la dimensione di questo canary. Tieni presente che la dimensione del canary non deve superare il 50% della capacità del nuovo parco istanze. Quando il periodo di baking termina e non viene attivato alcun allarme Amazon CloudWatch prestabilito, il resto del traffico passa dal vecchio parco istanze (blu) a quello verde. Lo spostamento del traffico Canary ti offre maggiore sicurezza durante l'implementazione, poiché qualsiasi problema con il modello aggiornato ha un impatto solo sul canary.

Il diagramma seguente mostra come lo spostamento del traffico Canary gestisce la distribuzione del traffico tra i parchi istanze blu e verdi.

![\[Uno spostamento in due fasi del traffico canary riuscito dal vecchio parco istanze al nuovo parco istanze.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/deployment-guardrails-blue-green-canary.png)


Una volta eseguito il provisioning del parco verde, SageMaker AI instrada una parte del traffico in entrata (ad esempio, il 25%) verso il canary. Inizia quindi il periodo di baking, durante il quale gli allarmi CloudWatch monitorano le prestazioni del parco istanze verde. Durante questo periodo, sia il parco istanze blu che quello verde sono parzialmente attivi e ricevono traffico. Se uno qualsiasi degli allarmi si attiva durante il periodo di baking, SageMaker AI avvia un rollback e tutto il traffico ritorna al parco blu. Se nessuno degli allarmi viene attivaro, tutto il traffico si sposta verso il parco istanze verde e c’è un ultimo periodo di baking. Se l’ultimo periodo di baking termina senza che si attivi alcun allarme, il parco verde gestisce tutto il traffico e SageMaker AI termina il parco blu.

## Prerequisiti
<a name="deployment-guardrails-blue-green-canary-prereqs"></a>

Prima di configurare un’implementazione con lo spostamento del traffico canary, devi creare allarmi Amazon CloudWatch per monitorare i parametri dal tuo endpoint. Gli allarmi sono attivi durante il periodo di baking e, se qualche allarme si attiva, tutto il traffico degli endpoint torna al parco istanze blu. Per informazioni su come configurare gli allarmi CloudWatch su un endpoint, consulta la pagina dei prerequisiti [Configurazione e monitoraggio del rollback automatico](deployment-guardrails-configuration.md). Per ulteriori informazioni sugli allarmi CloudWatch, consulta [Utilizzo degli allarmi di Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) nella *Guida per l'utente di Amazon CloudWatch*.

## Configurare lo spostamento del traffico Canary
<a name="deployment-guardrails-blue-green-canary-configure"></a>

Quando è tutto pronto per l’implementazione e hai configurato gli allarmi Amazon CloudWatch per l’endpoint, puoi avviare l’implementazione utilizzando l’API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) di Amazon SageMaker AI o il comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) in AWS CLI.

**Topics**
+ [Come aggiornare un endpoint (API)](#deployment-guardrails-blue-green-canary-configure-api-update)
+ [Come aggiornare un endpoint con una policy di aggiornamento (API) blu/verde esistente](#deployment-guardrails-blue-green-canary-configure-api-existing)
+ [Come aggiornare un endpoint (CLI)](#deployment-guardrails-blue-green-canary-configure-cli-update)

### Come aggiornare un endpoint (API)
<a name="deployment-guardrails-blue-green-canary-configure-api-update"></a>

L’esempio seguente dell’API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) mostra come aggiornare un endpoint con lo spostamento del traffico canary.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "CANARY",
                "CanarySize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 30
                },
                "WaitIntervalInSeconds": 600
            },
            "TerminationWaitInSeconds": 600,
            "MaximumExecutionTimeoutInSeconds": 1800
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                }
            ]
        }
    }
)
```

Per configurare l’opzione di spostamento del traffico canary, procedi come segue:
+ Per `EndpointName`, utilizza il nome dell'endpoint esistente che desideri aggiornare.
+ Per `EndpointConfigName`, utilizza il nome della configurazione dell'endpoint che desideri utilizzare.
+ Sotto `DeploymentConfig` e `BlueGreenUpdatePolicy`, in `TrafficRoutingConfiguration`, imposta il parametro `Type` su `CANARY`. Ciò specifica che l'implementazione utilizza lo spostamento del traffico canary.
+ Nel campo `CanarySize`, puoi modificare la dimensione del canary modificando i parametri `Type` e `Value`. Per `Type`, usa `CAPACITY_PERCENT`, ovvero la percentuale del parco istanze verde che desideri utilizzare come canary, quindi imposta `Value` su `30`. In questo esempio, utilizzi il 30% della capacità del parco istanze verde come canary. Tieni presente che la dimensione del canary non deve superare il 50% della capacità del nuovo parco istanze.
+ Per `WaitIntervalInSeconds`, utilizza `600`. Il parametro indica a SageMaker AI di attendere la quantità di tempo specificata (espressa in secondi) tra ogni spostamento di intervallo. Questo intervallo è la durata del periodo di baking del canary. Nell’esempio precedente, SageMaker AI attende 10 minuti dopo lo spostamento del canary e poi completa il secondo e ultimo spostamento di traffico.
+ Per `TerminationWaitInSeconds`, utilizza `600`. Questo parametro indica a SageMaker AI di attendere il periodo di tempo specificato (in secondi) dopo che il parco verde è completamente attivo prima di terminare le istanze nel parco blu. In questo esempio, SageMaker AI attende 10 minuti dopo l’ultimo periodo di baking prima di terminare il parco blu.
+ Per `MaximumExecutionTimeoutInSeconds`, utilizza `1800`. Questo parametro imposta il tempo massimo di esecuzione dell’implementazione prima che scada. Nell'esempio precedente, l’implementazione ha un limite di 30 minuti per completare l’esecuzione.
+ In `AutoRollbackConfiguration`, all’interno del campo `Alarms`, puoi aggiungere gli allarmi CloudWatch per nome. Crea una voce `AlarmName: <your-cw-alarm>` per ogni allarme che desideri utilizzare.

### Come aggiornare un endpoint con una policy di aggiornamento (API) blu/verde esistente
<a name="deployment-guardrails-blue-green-canary-configure-api-existing"></a>

Quando utilizzi l'API [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) per creare un endpoint, puoi facoltativamente specificare una configurazione di implementazione da riutilizzare per i futuri aggiornamenti degli endpoint. Puoi utilizzare le stesse opzioni `DeploymentConfig` del precedente esempio di API UpdateEndpoint. Non sono state apportate modifiche al comportamento dell'API CreateEndpoint. Specificare la configurazione di implementazione non significa che l’aggiornamento blu/verde sull'endpoint venga eseguito automaticamente.

La possibilità di utilizzare una configurazione di implementazione precedente si verifica quando si utilizza l'API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) per aggiornare l'endpoint. Quando aggiorni l'endpoint, puoi utilizzare l'opzione `RetainDeploymentConfig` per mantenere la configurazione di implementazione specificata durante la creazione dell'endpoint.

Quando chiami l'API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), imposta `RetainDeploymentConfig` su `True` in modo da mantenere le opzioni `DeploymentConfig` della configurazione originale dell'endpoint.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### Come aggiornare un endpoint (CLI)
<a name="deployment-guardrails-blue-green-canary-configure-cli-update"></a>

Se utilizzi il AWS CLI, l'esempio seguente mostra come avviare un’implementazione canary blu/verde utilizzando il comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html).

```
update-endpoint
--endpoint-name <your-endpoint-name>
--endpoint-config-name <your-config-name> 
--deployment-config '"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "CANARY",
    "CanarySize": {"Type": "CAPACITY_PERCENT", "Value": 30}, "WaitIntervalInSeconds": 600},
    "TerminationWaitInSeconds": 600, "MaximumExecutionTimeoutInSeconds": 1800},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Per configurare l’opzione di spostamento del traffico canary, procedi come segue:
+ Per `endpoint-name`, utilizza il nome dell'endpoint che desideri aggiornare.
+ Per `endpoint-config-name`, utilizza il nome della configurazione dell'endpoint che desideri utilizzare.
+ Per `deployment-config`, utilizza un oggetto JSON [BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html).

**Nota**  
Se preferisci salvare il tuo oggetto JSON in un file, consulta [Generazione dello skeleton AWS CLI e dei parametri di input](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html) nella *Guida per l'utente AWS CLI*.

# Utilizzare lo spostamento del traffico lineare
<a name="deployment-guardrails-blue-green-linear"></a>

Lo spostamento del traffico lineare consente di spostare gradualmente il traffico dal vecchio parco istanze (parco istanze blu) al nuovo parco istanze (parco istanze verde). Con lo spostamento del traffico lineare, puoi spostare il traffico in più fasi, riducendo al minimo la possibilità di interruzione dell'endpoint. Questa opzione di implementazione blu/verde ti offre il controllo più granulare sullo spostamento del traffico.

Puoi scegliere il numero di istanze o la percentuale della capacità del parco istanze verde da attivare durante ogni fase. Ogni fase lineare deve essere compresa solo tra il 10 e il 50% della capacità del parco istanze verde. Per ogni fase, è previsto un periodo di baking durante il quale gli allarmi Amazon CloudWatch preimpostati monitorano i parametri del parco istanze verde. Una volta terminato il periodo di baking e non scatta alcun allarme, la parte attiva del tuo parco istanze flotta verde continua a ricevere traffico e inizia una nuova fase. Se gli allarmi scattano durante uno qualsiasi dei periodi di baking, il 100% del traffico finale ritorna al parco istanze blu.

Il diagramma seguente mostra come il traffico lineare sposta il traffico verso i parchi istanze blu e verdi.

![\[Uno spostamento in tre fasi del traffico lineare riuscito dal parco precedente al nuovo parco.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/deployment-guardrails-blue-green-linear.png)


Una volta che SageMaker AI effettua il provisioning del nuovo parco, la prima parte del parco verde si attiva e riceve traffico. SageMaker AI disattiva la parte del parco blu della stessa dimensione e inizia il periodo di incorporamento. Se scatta un allarme, tutto il traffico degli endpoint torna al parco istanze blu. Se il periodo di baking termina, ha inizio la fase successiva. Un'altra parte del parco istanze verde si attiva e riceve traffico, una parte del parco istanze blu si disattiva e inizia un altro periodo di baking. Lo stesso processo si ripete fino a quando il parco istanze blu non viene completamente disattivato e il parco istanze verde è completamente attivo e riceve tutto il traffico. Se in qualsiasi momento si attiva un allarme, SageMaker AI termina il processo di spostamento e il 100% del traffico torna al parco blu.

## Prerequisiti
<a name="deployment-guardrails-blue-green-linear-prereqs"></a>

Prima di configurare un’implementazione con lo spostamento del traffico lineare, devi creare allarmi CloudWatch per monitorare i parametri dal tuo endpoint. Gli allarmi sono attivi durante il periodo di baking e, se qualche allarme si attiva, tutto il traffico degli endpoint torna al parco istanze blu. Per informazioni su come configurare gli allarmi CloudWatch su un endpoint, consulta la pagina dei prerequisiti [Configurazione e monitoraggio del rollback automatico](deployment-guardrails-configuration.md). Per ulteriori informazioni sugli allarmi CloudWatch, consulta [Utilizzo degli allarmi di Amazon CloudWatch](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) nella *Guida per l'utente di Amazon CloudWatch*.

## Configurare lo spostamento del traffico lineare
<a name="deployment-guardrails-blue-green-linear-configure"></a>

Una volta giunto il momento dell’implementazione, dopo aver configurato gli allarmi CloudWatch per il tuo endpoint, puoi utilizzare l’API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) di Amazon SageMaker AI o il comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) nell’AWS CLI per avviare l’implementazione.

**Topics**
+ [Come aggiornare un endpoint (API)](#deployment-guardrails-blue-green-linear-configure-api-update)
+ [Come aggiornare un endpoint con una policy di aggiornamento (API) blu/verde esistente](#deployment-guardrails-blue-green-linear-configure-api-existing)
+ [Come aggiornare un endpoint (CLI)](#deployment-guardrails-blue-green-canary-configure-cli-update)

### Come aggiornare un endpoint (API)
<a name="deployment-guardrails-blue-green-linear-configure-api-update"></a>

L’esempio seguente dell’API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) mostra come aggiornare un endpoint con lo spostamento del traffico lineare.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "BlueGreenUpdatePolicy": {
            "TrafficRoutingConfiguration": {
                "Type": "LINEAR",
                "LinearStepSize": {
                    "Type": "CAPACITY_PERCENT",
                    "Value": 20
                },
                "WaitIntervalInSeconds": 300
            },
            "TerminationWaitInSeconds": 300,
            "MaximumExecutionTimeoutInSeconds": 3600
        },
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                }
            ]
        }
    }
)
```

Per configurare l’opzione di spostamento del traffico lineare, procedi come segue:
+ Per `EndpointName`, utilizza il nome dell'endpoint esistente che desideri aggiornare.
+ Per `EndpointConfigName`, utilizza il nome della configurazione dell'endpoint che desideri utilizzare.
+ Sotto `DeploymentConfig` e `BlueGreenUpdatePolicy`, in `TrafficRoutingConfiguration`, imposta il parametro `Type` su `LINEAR`. Ciò specifica che l'implementazione utilizza lo spostamento del traffico lineare.
+ Nel campo `LinearStepSize`, puoi modificare la dimensione delle fasi modificando i parametri `Type` e `Value`. Per `Type`, usa `CAPACITY_PERCENT`, ovvero la percentuale del parco istanze verde che desideri utilizzare come dimensione fase, quindi imposta `Value` su `20`. In questo esempio, attivi il 20% della capacità del parco istanze verde per ogni fase di spostamento del traffico. Tieni presente che quando personalizzi le dimensioni di fasi lineari, devi utilizzare solo fasi che rappresentano il 10-50% della capacità del parco istanze verde.
+ Per `WaitIntervalInSeconds`, utilizza `300`. Il parametro indica a SageMaker AI di attendere la quantità di tempo specificata (espressa in secondi) tra ogni spostamento di traffico. Questo intervallo è la durata del periodo di cottura tra ogni fase lineare. Nell’esempio precedente, SageMaker AI attende 5 minuti tra uno spostamento di traffico e l’altro.
+ Per `TerminationWaitInSeconds`, utilizza `300`. Questo parametro indica a SageMaker AI di attendere il periodo di tempo specificato (in secondi) dopo che il parco verde è completamente attivo prima di terminare le istanze nel parco blu. In questo esempio, SageMaker AI attende 5 minuti dopo l’ultimo periodo di baking prima di terminare il parco blu.
+ Per `MaximumExecutionTimeoutInSeconds`, utilizza `3600`. Questo parametro imposta il tempo massimo di esecuzione dell’implementazione prima che scada. Nell'esempio precedente, l’implementazione ha un limite di 1 ora per completare l’esecuzione.
+ In `AutoRollbackConfiguration`, all’interno del campo `Alarms`, puoi aggiungere gli allarmi CloudWatch per nome. Crea una voce `AlarmName: <your-cw-alarm>` per ogni allarme che desideri utilizzare.

### Come aggiornare un endpoint con una policy di aggiornamento (API) blu/verde esistente
<a name="deployment-guardrails-blue-green-linear-configure-api-existing"></a>

Quando utilizzi l'API [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) per creare un endpoint, puoi facoltativamente specificare una configurazione di implementazione da riutilizzare per i futuri aggiornamenti degli endpoint. Puoi utilizzare le stesse opzioni `DeploymentConfig` del precedente esempio di API UpdateEndpoint. Non sono state apportate modifiche al comportamento dell'API CreateEndpoint. Specificare la configurazione di implementazione non significa che l’aggiornamento blu/verde sull'endpoint venga eseguito automaticamente.

La possibilità di utilizzare una configurazione di implementazione precedente si verifica quando si utilizza l'API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) per aggiornare l'endpoint. Quando aggiorni l'endpoint, puoi utilizzare l'opzione `RetainDeploymentConfig` per mantenere la configurazione di implementazione specificata durante la creazione dell'endpoint.

Quando chiami l'API [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html), imposta `RetainDeploymentConfig` su `True` in modo da mantenere le opzioni `DeploymentConfig` della configurazione originale dell'endpoint.

```
response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    RetainDeploymentConfig=True
)
```

### Come aggiornare un endpoint (CLI)
<a name="deployment-guardrails-blue-green-canary-configure-cli-update"></a>

Se utilizzi il AWS CLI, l'esempio seguente mostra come avviare un’implementazione lineare blu/verde utilizzando il comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html).

```
update-endpoint
--endpoint-name <your-endpoint-name>
--endpoint-config-name <your-config-name> 
--deployment-config '{"BlueGreenUpdatePolicy": {"TrafficRoutingConfiguration": {"Type": "LINEAR",
    "LinearStepSize": {"Type": "CAPACITY_PERCENT", "Value": 20}, "WaitIntervalInSeconds": 300},
    "TerminationWaitInSeconds": 300, "MaximumExecutionTimeoutInSeconds": 3600},
    "AutoRollbackConfiguration": {"Alarms": [{"AlarmName": "<your-alarm>"}]}'
```

Per configurare l’opzione di spostamento del traffico lineare, procedi come segue:
+ Per `endpoint-name`, utilizza il nome dell'endpoint che desideri aggiornare.
+ Per `endpoint-config-name`, utilizza il nome della configurazione dell'endpoint che desideri utilizzare.
+ Per `deployment-config`, utilizza un oggetto JSON [BlueGreenUpdatePolicy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_BlueGreenUpdatePolicy.html).

**Nota**  
Se preferisci salvare il tuo oggetto JSON in un file, consulta [Generazione dello skeleton AWS CLI e dei parametri di input](https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-skeleton.html) nella *Guida per l'utente AWS CLI*.

# Utilizzare implementazioni in sequenza
<a name="deployment-guardrails-rolling"></a>

Quando aggiorni l'endpoint, puoi specificare un'implementazione progressiva per spostare gradualmente il traffico dal vecchio parco istanze a un nuovo parco istanze. Puoi controllare la dimensione delle fasi di spostamento del traffico e specificare un periodo di valutazione per monitorare le nuove istanze alla ricerca di eventuali problemi prima di eliminare le istanze dal vecchio parco istanze. Con le implementazioni periodiche, le istanze del vecchio parco istanze vengono ripulite dopo ogni trasferimento di traffico verso il nuovo parco istanze, riducendo la quantità di istanze aggiuntive necessarie per aggiornare l'endpoint. Ciò è utile soprattutto per le istanze accelerate che sono molto richieste.

Le distribuzioni in sequenza sostituiscono gradualmente l'implementazione precedente della versione del modello con la nuova versione aggiornando l'endpoint in batch di dimensioni configurabili. Il comportamento di spostamento del traffico delle implementazioni rotanti è simile alla [modalità di spostamento del traffico lineare](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-blue-green-linear.html) nelle blue/green implementazioni, ma le implementazioni rotative offrono il vantaggio di requisiti di capacità ridotti rispetto alle implementazioni. blue/green Con le distribuzioni in sequenza, sono attive meno istanze alla volta e hai un controllo più granulare sul numero di istanze che desideri aggiornare nel nuovo parco istanze. Se disponi di modelli di grandi dimensioni o di un endpoint di grandi dimensioni con molte istanze, dovresti prendere in considerazione l'utilizzo di una blue/green distribuzione ciclica anziché una distribuzione.

L'elenco seguente descrive le caratteristiche principali delle distribuzioni continue in Amazon SageMaker AI:
+ **Periodo di baking. **Il periodo di baking è un periodo di tempo prestabilito per monitorare il nuovo parco istanze prima di passare alla fase di implementazione successiva. Se uno degli allarmi preimpostati scatta durante un periodo di baking, tutto il traffico degli endpoint torna al vecchio parco istanze. Il periodo di baking ti aiuta ad aumentare la fiducia nell'aggiornamento prima di rendere permanente il cambio di traffico.
+ **Dimensioni del batch in sequenza.** Hai un controllo granulare sulla dimensione di ogni batch per lo spostamento del traffico o sul numero di istanze che desideri aggiornare in ogni batch. Questo numero può variare dal 5 al 50% delle dimensioni del parco istanze. Puoi specificare la dimensione del batch come numero di istanze o come percentuale totale del tuo parco istanze.
+ **Rollback automatici. **Puoi specificare gli CloudWatch allarmi Amazon che l' SageMaker intelligenza artificiale utilizza per monitorare la nuova flotta. Se un problema con il codice aggiornato fa scattare uno degli allarmi, l' SageMaker IA avvia un ripristino automatico della vecchia flotta per mantenerne la disponibilità, riducendo così al minimo i rischi.

**Nota**  
Se l'endpoint utilizza una delle funzionalità elencate nella pagina [Esclusioni](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-exclusions.html), non è possibile utilizzare le distribuzioni in sequenza.

## Come funziona
<a name="deployment-guardrails-rolling-how-it-works"></a>

Durante un'implementazione continua, l' SageMaker intelligenza artificiale fornisce l'infrastruttura per spostare il traffico dalla vecchia flotta alla nuova flotta senza dover fornire tutte le nuove istanze contemporaneamente. SageMaker L'intelligenza artificiale utilizza i seguenti passaggi per spostare il traffico:

1. SageMaker L'intelligenza artificiale fornisce il primo lotto di istanze del nuovo parco istanze.

1. Una parte del traffico viene spostata dalle vecchie istanze al primo batch di nuove istanze.

1. Dopo il periodo di cottura, se non viene attivato alcun CloudWatch allarme Amazon, l' SageMaker intelligenza artificiale ripulisce una serie di vecchie istanze.

1. SageMaker L'intelligenza artificiale continua a fornire, spostare e ripulire le istanze in batch fino al completamento dell'implementazione.

Se viene attivato un allarme durante uno dei periodi di baking, il traffico viene ripristinato al vecchio parco istanze in batch della dimensione specificata dall'utente. In alternativa, puoi specificare la distribuzioni in sequenza per riportare il 100% del traffico al vecchio parco istanze se scatta un allarme.

Il diagramma seguente mostra la progressione di una distribuzione in sequenza di successo, come descritto nelle fasi precedenti.

![\[Le fasi dello spostamento riuscito del traffico di un’implementazione in sequenza dal parco precedente al nuovo.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/deployment-guardrails-rolling-diagram.png)


Per creare una distribuzioni in sequenza, è sufficiente specificare la configurazione di distribuzione desiderata. Quindi l' SageMaker intelligenza artificiale si occupa del provisioning di nuove istanze, della chiusura delle vecchie istanze e dello spostamento del traffico per te. Puoi creare e gestire la tua implementazione tramite l'API e i comandi esistenti [UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html). [CreateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html) SageMaker AWS Command Line Interface 

## Prerequisiti
<a name="deployment-guardrails-prereqs"></a>

Prima di configurare una distribuzione continua, devi creare CloudWatch allarmi Amazon per monitorare i parametri dal tuo endpoint. Se uno qualsiasi degli allarmi scatta durante il periodo di baking, il traffico inizia a rifluire verso il vecchia parco istanze. [Per informazioni su come configurare gli CloudWatch allarmi su un endpoint, consulta la pagina dei prerequisiti Auto-Rollback Configuration and Monitoring.](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-configuration.html) Per ulteriori informazioni sugli CloudWatch allarmi, consulta [Using Amazon CloudWatch alarms](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html) nella *Amazon CloudWatch User* Guide.

Inoltre, consulta la pagina [Esclusioni](https://docs.aws.amazon.com/sagemaker/latest/dg/deployment-guardrails-exclusions.html) per assicurarti che l'endpoint soddisfi i requisiti per una distribuzioni in sequenza.

## Determina la dimensione del batch di sequenza
<a name="deployment-guardrails-rolling-batch-size"></a>

Prima di aggiornare l'endpoint, determina la dimensione del batch che desideri utilizzare per spostare in modo incrementale il traffico verso il nuovo parco istanze.

Per le implementazioni in sequenza, puoi specificare una dimensione del batch pari al 5-50% della capacità del tuo parco istanze. Se scegli un batch di grandi dimensioni, la distribuzione viene completata più rapidamente. Tuttavia, tieni presente che l'endpoint richiede una maggiore capacità durante l'aggiornamento, all'incirca il sovraccarico delle dimensioni del batch. Se scegli un batch di dimensioni inferiori, la distribuzione richiede più tempo, ma si utilizza meno capacità durante la distribuzione.

## Configurare una distribuzioni in sequenza
<a name="deployment-guardrails-rolling-configure"></a>

Una volta che sei pronto per la distribuzione e hai configurato gli CloudWatch allarmi per il tuo endpoint, puoi utilizzare l'[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API SageMaker AI o il comando [update-endpoint](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/update-endpoint.html) in per avviare la distribuzione. AWS Command Line Interface 

**Come aggiornare un endpoint**

L'esempio seguente mostra come aggiornare l'endpoint con una distribuzione continua utilizzando il metodo [update\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker/client/update_endpoint.html) del client AI Boto3. SageMaker 

Per configurare una distribuzioni in sequenza, utilizza l'esempio e i campi seguenti:
+ Per `EndpointName`, utilizza il nome dell'endpoint esistente che desideri aggiornare.
+ Per `EndpointConfigName`, utilizza il nome della configurazione dell'endpoint che desideri utilizzare.
+ Nell'`AutoRollbackConfiguration`oggetto, all'interno del `Alarms` campo, puoi aggiungere i tuoi allarmi per nome. CloudWatch Crea una voce `AlarmName: <your-cw-alarm>` per ogni allarme che desideri utilizzare.
+ I n`DeploymentConfig`, per l'oggetto `RollingUpdatePolicy`, specifica i seguenti campi:
  + `MaximumExecutionTimeoutInSeconds`: il limite di tempo per la distribuzione totale. Il superamento di questo limite causa un timeout. Il valore massimo che puoi specificare per questo campo è 28800 secondi o 8 ore.
  + `WaitIntervalInSeconds`— La durata del periodo di cottura, durante il quale l' SageMaker IA monitora gli allarmi per ogni lotto della nuova flotta.
  + `MaximumBatchSize`: specifica il `Type` di batch che desideri utilizzare (conteggio delle istanze o percentuale complessiva del parco istanze) e il `Value` o la dimensione di ogni batch.
  + `RollbackMaximumBatchSize`: utilizza questo oggetto per specificare la strategia di rollback nel caso in cui scatti un allarme. Specifica il `Type` di batch che desideri utilizzare (conteggio delle istanze o percentuale complessiva del parco istanze) e il `Value` o la dimensione di ogni batch. Se non specifichi questi campi o se imposti il valore sul 100% dell'endpoint, l' SageMaker IA utilizza una strategia di blue/green rollback e riporta tutto il traffico alla vecchia flotta quando scatta un allarme.

```
import boto3
client = boto3.client("sagemaker")

response = client.update_endpoint(
    EndpointName="<your-endpoint-name>",
    EndpointConfigName="<your-config-name>",
    DeploymentConfig={
        "AutoRollbackConfiguration": {
            "Alarms": [
                {
                    "AlarmName": "<your-cw-alarm>"
                },
            ]
        },
        "RollingUpdatePolicy": { 
            "MaximumExecutionTimeoutInSeconds": number,
            "WaitIntervalInSeconds": number,
            "MaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
            "RollbackMaximumBatchSize": {
                "Type": "INSTANCE_COUNT" | "CAPACITY_PERCENTAGE" (default),
                "Value": number
            },
        }  
    }
)
```

Dopo aver aggiornato l'endpoint, potresti voler controllare lo stato della distribuzioni in sequenza e verificare lo stato dell'endpoint. Puoi controllare lo stato del tuo endpoint nella console SageMaker AI oppure puoi rivedere lo stato del tuo endpoint utilizzando l'API. [DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)

Nell'oggetto `VariantStatus` restituito dall'API `DescribeEndpoint`, il campo `Status` indica lo stato di implementazione o operativo corrente dell'endpoint. Per ulteriori informazioni sui possibili stati e sul loro significato, consulta. [ProductionVariantStatus](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariantStatus.html)

Se hai tentato di eseguire una distribuzioni in sequenza e lo stato dell'endpoint è `UpdateRollbackFailed`, consulta la sezione seguente per una guida alla risoluzione dei problemi.

## Gestione degli errori
<a name="deployment-guardrails-rolling-failures"></a>

Se le distribuzioni in sequenza falliscono e anche il rollback automatico fallisce, l'endpoint può avere uno stato di `UpdateRollbackFailed`. Questo stato significa che diverse configurazioni degli endpoint vengono distribuite sulle istanze sottostanti all'endpoint e che l'endpoint è in servizio con una combinazione di configurazioni di endpoint vecchie e nuove.

Puoi effettuare un'altra chiamata all'[UpdateEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html)API per riportare l'endpoint in uno stato integro. Specifica la configurazione dell’endpoint e la configurazione di distribuzione desiderate (come distribuzioni in sequenza, blu/verde o nessuna delle due) per aggiornare l'endpoint.

Puoi chiamare l'[DescribeEndpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEndpoint.html)API per verificare nuovamente lo stato dell'endpoint, che viene restituito nell'`VariantStatus`oggetto come campo. `Status` Se l'aggiornamento ha esito positivo, lo `Status` dell'endpoint torna a `InService`.

# Esclusioni
<a name="deployment-guardrails-exclusions"></a>

Quando esegui un’implementazione blu/verde o in sequenza, la nuova configurazione dell'endpoint deve avere lo stesso nome della variante della vecchia configurazione dell'endpoint. Esistono anche altre esclusioni basate sulle funzionalità che al momento rendono il tuo endpoint incompatibile con i guardrail di implementazione. Se il tuo endpoint utilizza una delle seguenti funzionalità, non puoi utilizzare i guardrail di implementazione sull'endpoint e l'endpoint tornerà a utilizzare un’implementazione blu/verde con trasferimento del traffico tutto in una volta sola e nessun periodo di baking finale:
+ Container Marketplace
+ Endpoint che utilizzano istanze Inf1 (basate su inferenza)

Se stai eseguendo un’implementazione continua, ci sono ulteriori esclusioni basate sulle funzionalità:
+ Endpoint di inferenza serverless
+ Endpoint di inferenza multivariante

# Test delle copie shadow
<a name="shadow-tests"></a>

 Con Amazon SageMaker AI puoi valutare eventuali modifiche all’infrastruttura di servizio del modello confrontandone le prestazioni rispetto a quelle dell’infrastruttura attualmente implementata. Questa pratica è nota come shadow testing. Lo shadow testing può aiutarti a individuare potenziali errori di configurazione e problemi di prestazioni prima che abbiano un impatto sugli utenti finali. Con SageMaker AI non è necessario investire nella creazione della propria infrastruttura di shadow testing, così da potersi concentrare solo sullo sviluppo dei modelli. 

 Puoi utilizzare questa funzionalità per convalidare le modifiche a qualsiasi componente della tua variante di produzione, vale a dire il modello, il container o l'istanza, senza alcun impatto sull'utente finale. È utile in casi che includono, ma non si limitano a, ciò che segue: 
+  Stai valutando la possibilità di promuovere in produzione un nuovo modello convalidato offline ma, prima di prendere questa decisione, desideri valutare i parametri delle prestazioni operative, come latenza e tasso di errore. 
+  Stai valutando la possibilità di apportare modifiche al container dell'infrastruttura di servizio, per esempio con l’applicazione di patch alle vulnerabilità o l'aggiornamento a versioni più recenti, e desideri valutare l'impatto di queste modifiche prima di andare in produzione. 
+  Stai valutando la possibilità di modificare la tua istanza ML e desideri valutare le prestazioni della nuova istanza rispetto a richieste di inferenza in tempo reale. 

 La console SageMaker AI offre un’esperienza guidata per gestire il flusso di lavoro dello shadow testing. È possibile configurare gli shadow test per un periodo di tempo predefinito, monitorare lo stato di avanzamento del test tramite una dashboard in tempo reale, eseguire operazioni di pulizia al completamento e intervenire in base ai risultati. Seleziona una variante di produzione su cui desideri eseguire il test; SageMaker AI implementa automaticamente la nuova variante in modalità shadow, instradando una copia delle richieste di inferenza in tempo reale all’interno dello stesso endpoint. Solo le risposte della variante di produzione vengono restituite all'applicazione chiamante. Puoi scegliere di scartare o registrare le risposte della variante shadow per il confronto offline. Per ulteriori informazioni sulle varianti di produzione e sulle varianti shadow, consulta [Convalida dei modelli in produzione](model-validation.md). 

 Consulta [Crea un test delle copie shadow](shadow-tests-create.md) per istruzioni sulla creazione di un test delle copie shadow. 

**Nota**  
 Alcune funzionalità degli endpoint possono rendere il tuo endpoint incompatibile con i test delle versioni shadow. Se l’endpoint utilizza una delle seguenti funzionalità, non è possibile utilizzare i test delle copie shadow sull’endpoint e la richiesta di configurazione dei test delle copie shadow comporterà errori di convalida.   
Inferenza serverless
Inferenza asincrona
Container Marketplace
Endpoint multi-container
Endpoint multi-modello
Endpoint che utilizzano istanze Inf1 (basate su inferenza)

# Crea un test delle copie shadow
<a name="shadow-tests-create"></a>

 Puoi creare un test delle copie shadow per confrontare le prestazioni di una variante shadow con una variante di produzione. Puoi eseguire il test su un endpoint esistente che serve richieste di inferenza oppure creare un nuovo endpoint su cui eseguire il test. 

 Per creare un test delle copie shadow devi specificare quanto segue: 
+  Una *variante di produzione* che riceve e risponde al 100% delle richieste di inferenza in entrata. 
+  Una *variante shadow* che riceve una percentuale delle richieste in entrata, replicata dalla variante di produzione, ma non restituisce alcuna risposta. 

 Per ogni variante, puoi utilizzare l' SageMaker intelligenza artificiale per controllare il modello, il tipo di istanza e il numero di istanze. Puoi configurare la percentuale di richieste in entrata, nota come percentuale di campionamento del traffico, che desideri replicare nella tua variante shadow. SageMaker L'intelligenza artificiale gestisce la replica delle richieste nella variante shadow e puoi modificare la percentuale di campionamento del traffico quando il test è pianificato o in esecuzione. Facoltativamente, puoi anche attivare Acquisizione dei dati per registrare le richieste e le risposte delle tue varianti di produzione e shadow. 

**Nota**  
 SageMaker L'intelligenza artificiale supporta al massimo una variante shadow per endpoint. Per un endpoint con una variante shadow, può esserci al massimo una variante di produzione. 

 È possibile pianificare l'inizio del test in qualsiasi momento e continuare per una durata specificata. La durata predefinita è 7 giorni e la massima è 30 giorni. Una volta completato il test, l'endpoint torna allo stato in cui si trovava prima dell'inizio del test. In questo modo non è necessario pulire manualmente le risorse al termine del test. 

 Puoi monitorare un test in esecuzione tramite una dashboard nella console SageMaker AI. Il pannello di controllo fornisce un confronto affiancato dei parametri di invocazione e dei parametri delle istanze tra le varianti di produzione e quelle shadow, oltre a una visualizzazione tabulare con le statistiche metriche pertinenti. Questo pannello di controllo è disponibile anche per i test completati. Dopo aver esaminato i parametri, puoi scegliere di promuovere la variante shadow come nuova variante di produzione o mantenere la variante di produzione esistente. Una volta promossa, la variante shadow risponde a tutte le richieste in entrata. Per ulteriori informazioni, consulta [Promozione di una variante shadow](shadow-tests-complete.md#shadow-tests-complete-promote). 

 La procedura seguente descrive come creare un test shadow tramite la console SageMaker AI. Esistono variazioni nel flusso di lavoro a seconda che si desideri utilizzare un endpoint esistente o creare un nuovo endpoint per il test delle copie shadow. 

**Topics**
+ [Prerequisiti](#shadow-tests-create-prerequisites)
+ [Inserisci i dettagli del test delle copie shadow](#shadow-tests-create-console-shadow-test-details)
+ [Immetti le impostazioni del test delle copie shadow](#shadow-tests-create-console-shadow-test-settings)

## Prerequisiti
<a name="shadow-tests-create-prerequisites"></a>

 Prima di creare uno shadow test con la console SageMaker AI, è necessario disporre di un modello di SageMaker intelligenza artificiale pronto per l'uso. Per ulteriori informazioni su come creare un modello di SageMaker intelligenza artificiale, consulta[Implementazione di modelli per l’inferenza in tempo reale](realtime-endpoints-deploy-models.md). 

 Puoi iniziare con i test ombra con un endpoint esistente con una variante di produzione e una variante ombra, un endpoint esistente con solo una variante di produzione o solo i modelli di SageMaker intelligenza artificiale che desideri confrontare. I test delle copie shadow supportano la creazione di un endpoint e l'aggiunta di varianti prima dell'inizio del test. 

**Nota**  
 Alcune funzionalità degli endpoint possono rendere il tuo endpoint incompatibile con i test delle versioni shadow. Se l’endpoint utilizza una delle seguenti funzionalità, non è possibile utilizzare i test delle copie shadow sull’endpoint e la richiesta di configurazione dei test delle copie shadow comporterà errori di convalida.   
Inferenza serverless
Inferenza asincrona
Container Marketplace
Endpoint multi-container
Endpoint multi-modello
Endpoint che utilizzano istanze Inf1 (basate su inferenza)

## Inserisci i dettagli del test delle copie shadow
<a name="shadow-tests-create-console-shadow-test-details"></a>

 Per iniziare a creare il tuo test delle copie shadow, compila la pagina **Inserisci i dettagli del test delle copie shadow** effettuando le seguenti operazioni: 

1.  Apri la console [SageMaker AI](https://console.aws.amazon.com/sagemaker/). 

1.  Nel pannello di navigazione a sinistra, seleziona **Inferenza** e poi scegli **Test delle copie shadow**. 

1.  Scegli **Crea un test delle copie shadow**. 

1.  Nel campo **Nome** inserisci un nome per il test. 

1.  (Facoltativo) In **Descrizione**, inserisci una descrizione per il test. 

1.  (Facoltativo) Specifica i **Tag** utilizzando le coppie **Chiave** e **Valore**. 

1.  Scegli **Next (Successivo)**. 

## Immetti le impostazioni del test delle copie shadow
<a name="shadow-tests-create-console-shadow-test-settings"></a>

 Dopo aver compilato la pagina **Immetti i dettagli del test delle copie shadow**, compila la pagina **Inserisci le impostazioni del test delle copie shadow**. Se disponi già di un endpoint SageMaker AI Inference e di una variante di produzione, segui il flusso di lavoro **Usa un endpoint esistente**. Se non disponi ancora di un endpoint, consulta il flusso di lavoro **Crea un nuovo endpoint**. 

------
#### [ Use an existing endpoint ]

 Se desideri utilizzare un endpoint esistente per il test, compila la pagina **Inserisci le impostazioni del test delle copie shadow** effettuando le seguenti operazioni: 

1.  Scegli un ruolo a cui è collegata la policy IAM `AmazonSageMakerFullAccess`. 

1.  Scegli **Usa un endpoint esistente**, quindi scegli uno degli endpoint disponibili. 

1.  (Facoltativo) Per crittografare il volume di archiviazione sull'endpoint, scegli una chiave KMS esistente o scegli **Immetti un ARN della chiave KMS dal menù** a discesa sotto **Chiave di crittografia**. Se scegli la seconda opzione, viene visualizzato un campo per inserire l'ARN chiave KMS. Inserisci l'ARN chiave KMS in quel campo. 

1.  Se hai più varianti di produzione dietro quell'endpoint, rimuovi quelle che non desideri utilizzare per il test. Puoi rimuovere una variante del modello selezionandola e scegliendo **Rimuovi**. 

1.  Se non hai già una variante shadow, aggiungi una variante shadow. Per aggiungere una variante shadow, procedi come segue: 

   1.  Scegli **Add** (Aggiungi). 

   1.  Scegli **Variante Shadow**. 

   1.  Nella finestra di dialogo **Aggiungi modello**, scegli il modello che desideri utilizzare per la variante shadow. 

   1.  Scegli **Save** (Salva). 

1.  (Facoltativo) Nella fase precedente, la variante shadow viene aggiunta con le impostazioni predefinite. Per modificare queste impostazioni, seleziona la variante shadow e scegli **Modifica**. Viene visualizzata la finestra di dialogo **Modifica variante shadow**. Per ulteriori informazioni sulla compilazione di questa finestra di dialogo, consulta [Modifica un test delle copie shadow](shadow-tests-view-monitor-edit-individual.md). 

1.  Nella sezione **Pianificazione**, inserite la durata del test effettuando le seguenti operazioni: 

   1.  Scegli la casella sotto **Durata**. Viene visualizzato un calendario popup. 

   1.  Seleziona le date di inizio e di fine dal calendario oppure inserisci le date di inizio e di fine rispettivamente nei campi **Data di inizio** e **Data di fine**. 

   1.  (Facoltativo) Per i campi **Ora di inizio** e **Ora di fine**, inserisci rispettivamente l'ora di inizio e di fine nel formato 24 ore. 

   1.  Scegli **Applica**. 

    La durata minima è di 1 ora e la durata massima è di 30 giorni. 

1.  (Facoltativo) Attiva **Abilita acquisizione dei dati** per salvare le informazioni di richiesta di inferenza e risposta dall'endpoint a un bucket Amazon S3, quindi inserisci la posizione del bucket Amazon S3. 

1.  Scegli **Crea un test delle copie shadow**. 

------
#### [ Create a new endpoint ]

 Se non disponi di un endpoint esistente o desideri creare un nuovo endpoint per il test, compila la pagina **Inserisci le impostazioni del test delle copie shadow** effettuando le seguenti operazioni: 

1.  Scegli un ruolo a cui è collegata la policy IAM `AmazonSageMakerFullAccess`. 

1.  Scegli **Crea un nuovo endpoint**. 

1.  Per **Name**, inserisci un nome per l'endpoint. 

1.  Aggiungi una variante di produzione e una variante shadow all'endpoint: 
   +  Per aggiungere una variante di produzione, scegli **Aggiungi**, quindi scegli **Variante di produzione**. Nella finestra di dialogo **Aggiungi modello**, scegli il modello che desideri utilizzare per la variante di produzione e scegli **Salva**. 
   +  Per aggiungere una variante shadow, scegli **Aggiungi**, quindi scegli **Variante shadow**. Nella finestra di dialogo **Aggiungi modello**, scegli il modello che desideri utilizzare per la variante shadow e scegli **Salva**. 

1.  (Facoltativo) Nella fase precedente, la variante shadow viene aggiunta con le impostazioni predefinite. Per modificare queste impostazioni, seleziona la variante shadow e scegli **Modifica**. Viene visualizzata la finestra di dialogo **Modifica variante shadow**. Per ulteriori informazioni sulla compilazione di questa finestra di dialogo, consulta [Modifica un test delle copie shadow](shadow-tests-view-monitor-edit-individual.md). 

1.  Nella sezione **Pianificazione**, inserite la durata del test effettuando le seguenti operazioni: 

   1.  Scegli la casella sotto **Durata**. Viene visualizzato un calendario popup. 

   1.  Seleziona le date di inizio e di fine dal calendario oppure inserisci le date di inizio e di fine rispettivamente in **Data di inizio** e **Data di fine**. 

   1.  (Facoltativo) Per **Ora di inizio** e **Ora di fine**, inserisci rispettivamente l'ora di inizio e di fine nel formato 24 ore. 

   1.  Scegli **Applica**. 

    La durata minima è di 1 ora e la durata massima è di 30 giorni. 

1.  (Facoltativo) Attiva **Abilita acquisizione dei dati** per salvare le informazioni di richiesta di inferenza e risposta dall'endpoint a un bucket Amazon S3, quindi inserisci la posizione del bucket Amazon S3. 

1.  Scegli **Crea un test delle copie shadow**. 

------

 Dopo aver completato le procedure precedenti, ora dovresti avere un test programmato per iniziare alla data e all'ora di inizio specificate. Puoi visualizzare lo stato di avanzamento del test da un pannello di controllo. Per ulteriori informazioni sulla visualizzazione del test e sulle azioni che è possibile eseguire, consulta [Come visualizzare, monitorare e modificare i test delle copie shadow](shadow-tests-view-monitor-edit.md). 

# Come visualizzare, monitorare e modificare i test delle copie shadow
<a name="shadow-tests-view-monitor-edit"></a>

 Puoi visualizzare gli stati dei test delle copie shadow, monitorarne l'avanzamento da un pannello di controllo ed eseguire azioni, come avviare o arrestare anticipatamente un test o eliminarlo. Gli argomenti seguenti illustrano come è possibile visualizzare e modificare i test delle copie shadow utilizzando la console SageMaker AI. 

**Topics**
+ [Visualizza i test delle copie shadow](shadow-tests-view-monitor-edit-list.md)
+ [Monitora un test delle copie shadow](shadow-tests-view-monitor-edit-dashboard.md)
+ [Inizia un test delle copie shadow in anticipo](shadow-tests-view-monitor-edit-start.md)
+ [Elimina un test delle copie shadow](shadow-tests-view-monitor-edit-delete.md)
+ [Modifica un test delle copie shadow](shadow-tests-view-monitor-edit-individual.md)

# Visualizza i test delle copie shadow
<a name="shadow-tests-view-monitor-edit-list"></a>

 Puoi visualizzare gli stati di tutti i test delle copie shadow nella pagina **Test delle copie shadow** della console SageMaker AI. 

 Per visualizzare i test nella console, esegui le seguenti operazioni: 

1.  Apri la [console di SageMaker AI](https://console.aws.amazon.com/sagemaker/). 

1.  Nel pannello di navigazione, scegli **Inferenza**. 

1.  Scegli **Test delle copie shadow** per visualizzare la pagina che elenca tutti i tuoi test delle copie shadow. La pagina dovrebbe apparire come nello screenshot seguente, con tutti i test elencati nella sezione **Test delle copie shadow**.   
![\[Elenco di tutti i test delle copie shadow.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/juxtaposer/shadow-test-landing-page.png)

 Puoi vedere lo stato di un test nella console nella pagina **Test delle copie shadow** selezionando il campo **Stato** del test. 

 Di seguito sono riportati i possibili stati per un test: 
+  `Creating` - SageMaker AI sta creando il tuo test. 
+  `Created` - SageMaker AI ha terminato la creazione del test e inizierà all’orario pianificato. 
+  `Updating` — Quando si apportano modifiche al test, il test viene visualizzato come aggiornamento. 
+  `Starting` - SageMaker AI sta iniziando il test. 
+  `Running` — Il test è in corso. 
+  `Stopping` - SageMaker AI sta arrestando il test. 
+  `Completed` — Il test è stato completato. 
+  `Cancelled` — Quando concludi il test in anticipo, questo viene visualizzato come annullato. 

# Monitora un test delle copie shadow
<a name="shadow-tests-view-monitor-edit-dashboard"></a>

 Puoi visualizzare i dettagli di un test delle copie shadow e monitorarlo mentre è in corso o dopo il suo completamento. SageMaker AI presenta una dashboard in tempo reale che confronta metriche operative come la latenza del modello e il tasso di errore aggregato delle varianti di produzione e shadow. 

 Per visualizzare i dettagli di un singolo test nella console, esegui le seguenti operazioni: 

1.  Seleziona il test che desideri monitorare dalla sezione **Test delle copie shadow** della pagina **Test delle copie shadow**. 

1.  Dal menù a discesa **Azioni**, scegli **Visualizza**. Viene visualizzata una pagina di panoramica con i dettagli del test e un pannello di controllo dei parametri. 

La pagina di panoramica contiene le tre sezioni seguenti.

**Riepilogo**  
 Questa sezione riassume l'avanzamento e lo stato del test. Mostra anche le statistiche di riepilogo dei parametri scelti dal menù a discesa **Seleziona parametro** nella sottosezione **Parametri**. Lo screenshot seguente mostra questa sezione.   

![\[Sezione Riepilogo della pagina Panoramica.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/juxtaposer/shadow-test-summary.png)

 Nello screenshot precedente, le schede **Impostazioni** e **Dettagli** mostrano le impostazioni selezionate e i dettagli inseriti durante la creazione del test. 

**Analisi**  
 Questa sezione mostra un pannello di controllo dei parametri con grafici separati per i seguenti parametri:   
+ `Invocations`
+ `InvocationsPerInstance`
+ `ModelLatency`
+ `Invocation4XXErrors`
+ `Invocation5XXErrors`
+ `InvocationModelErrors`
+ `CPUUtilization`
+ `MemoryUtilization`
+ `DiskUtilization`
 Gli ultimi tre parametri monitorano l'utilizzo delle risorse di runtime del container del modello. Il resto sono parametri CloudWatch che puoi utilizzare per analizzare le prestazioni della tua variante. In generale, un minor numero di errori indica un modello più stabile. Una latenza inferiore indica un modello o un'infrastruttura più veloci. Per ulteriori informazioni sui parametri CloudWatch, consultare [SageMaker Metriche di invocazione degli endpoint AI](monitoring-cloudwatch.md#cloudwatch-metrics-endpoint-invocation). Lo screenshot seguente mostra il pannello di controllo dei parametri.   

![\[Pannello di controllo per l'analisi dei parametri.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/juxtaposer/shadow-test-analysis.png)


**Ambiente**  
 Questa sezione mostra le varianti che hai confrontato nel test. Se sei soddisfatto delle prestazioni della variante shadow, in base ai parametri sopra menzionati, puoi promuovere la variante shadow alla produzione scegliendo **Implementa variante shadow**. Per ulteriori dettagli sull’implementazione di una variante shadow, consulta [Promozione di una variante shadow](shadow-tests-complete.md#shadow-tests-complete-promote). Puoi anche modificare la percentuale di campionamento del traffico e continuare i test scegliendo **Modifica traffico**. Per ulteriori dettagli sulla modifica di una variante shadow, consulta [Modifica un test delle copie shadow](shadow-tests-view-monitor-edit-individual.md). Lo screenshot seguente mostra questa sezione.   

![\[Sezione Ambiente della pagina Panoramica.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/juxtaposer/shadow-test-environment.png)


# Inizia un test delle copie shadow in anticipo
<a name="shadow-tests-view-monitor-edit-start"></a>

 Puoi iniziare il test prima dell'ora di inizio pianificata. Se la nuova durata del test supera i 30 giorni, SageMaker AI imposta automaticamente la fine del test su 30 giorni dopo la nuova ora di inizio. Questa operazione avvia immediatamente il test. Se desideri modificare l'ora di inizio o di fine del test, consulta [Modifica un test delle copie shadow](shadow-tests-view-monitor-edit-individual.md). 

 Per iniziare immediatamente il test, prima dell'ora di inizio pianificata, tramite la console, procedi come segue: 

1.  Seleziona il test che desideri avviare immediatamente dalla sezione **Test delle copie shadow** della pagina **Test delle copie shadow**. 

1.  Dal menù a discesa **Azioni**, scegli **Inizia**. Viene visualizzata una finestra di dialogo **Avvia il test delle copie shadow?**. 

1.  Scegli **Inizia ora**. 

# Elimina un test delle copie shadow
<a name="shadow-tests-view-monitor-edit-delete"></a>

 Se non hai più bisogno di un test, puoi eliminarlo. L'eliminazione del test elimina solo i metadati del test e non l'endpoint, le varianti o i dati acquisiti in Amazon S3. Se vuoi che il tuo endpoint smetta di funzionare, devi eliminarlo. Per ulteriori informazioni sull’eliminazione di un endpoint, consulta [Elimina endpoint e risorse](realtime-endpoints-delete-resources.md). 

 Per eliminare un test tramite la console, effettua quanto segue: 

1.  Seleziona il test che desideri eliminare dalla sezione **Test delle copie shadow** della pagina **Test delle copie shadow**. 

1.  Dal menù a discesa **Azioni**, seleziona **Elimina**. Viene visualizzata una finestra di dialogo **Elimina il test delle copie shadow**. 

1.  Nella casella di testo **Per confermare l’eliminazione digita *elimina* nel campo.** inserisci **delete**. 

1.  Scegliere **Delete** (Elimina). 

# Modifica un test delle copie shadow
<a name="shadow-tests-view-monitor-edit-individual"></a>

 È possibile modificare sia i test pianificati che quelli in corso. Prima dell'inizio del test, puoi modificare la descrizione, la configurazione della variante shadow, la data di inizio e la data di fine del test. È inoltre possibile attivare o disattivare l'acquisizione dei dati. 

 Dopo l'inizio del test, puoi solo modificare la descrizione, la percentuale di campionamento del traffico per la variante shadow e la data di fine. 

 Per modificare i dettagli del test tramite la console, effettua quanto segue: 

1.  Seleziona il test che desideri modificare dalla sezione **Test delle copie shadow** della pagina **Test delle copie shadow**. 

1.  Dal menù a discesa **Azioni**, scegli **Modifica**. Viene visualizzata la pagina **Inserisci i dettagli del test delle copie shadow**. 

1.  (Facoltativo) In **Descrizione**, inserisci una descrizione per il test. 

1.  Scegli **Next (Successivo)**. Viene visualizzata la pagina **Inserisci le impostazioni del test delle copie shadow**. 

1.  (Facoltativo) Per modificare la variante shadow, esegui le operazioni indicate di seguito: 

   1.  Seleziona la variante shadow e scegli **Modifica**. Viene visualizzata la finestra di dialogo **Modifica variante shadow**. Se il test è già iniziato, puoi solo modificare la percentuale di campionamento del traffico. 

   1.  (Facoltativo) In **Nome**, inserisci il nuovo nome per sostituire il vecchio nome. 

   1.  (Facoltativo) In **Esempio di traffico**, inserisci la nuova percentuale di campionamento del traffico per sostituire la vecchia percentuale di campionamento del traffico. 

   1.  (Facoltativo) In **Tipo di istanza**, seleziona il nuovo tipo di istanza dal menù a discesa. 

   1.  (Facoltativo) In **Conteggio istanze**, inserisci il nuovo conteggio delle istanze per sostituire il vecchio conteggio delle istanze. 

   1.  Scegli **Applica**. 

    Non è possibile modificare il modello nella variante shadow utilizzando la procedura sopra descritta. Se desideri modificare il modello, rimuovi innanzitutto la variante shadow selezionandola e scegliendo **Rimuovi**. Quindi aggiungi una nuova variante shadow. 

1.  (Facoltativo) Per modificare la durata del test, esegui le seguenti operazioni: 

   1.  Scegli la casella sotto **Durata** nella sezione **Pianificazione**. Viene visualizzato un calendario popup. 

   1.  Se il test deve ancora iniziare, puoi modificare sia la data di inizio che quella di fine. Seleziona le nuove date di inizio e di fine dal calendario oppure inserisci le nuove date di inizio e di fine rispettivamente in **Data di inizio** e **Data di fine**. 

       Se il test è già iniziato, puoi solo modificare la data di fine. Inserisci la nuova data di fine in **Data di fine**. 

   1.  (Facoltativo) Se il test deve ancora iniziare, puoi modificare sia l'ora di inizio che quella di fine. Inserisci i nuovi orari di inizio e di fine rispettivamente in **Ora di inizio** e **Ora di fine** nel formato di 24 ore. 

       Se il test è già iniziato, puoi modificare solo l'ora di fine. Inserisci la nuova ora di fine in **Ora di fine**, nel formato di 24 ore. 

   1.  Scegli **Applica**. 

1.  (Facoltativo) Attiva o disattiva **Abilita acquisizione dei dati**. 

1.  Scegli **Aggiorna il test delle copie shadow**. 

# Completa un test delle copie shadow
<a name="shadow-tests-complete"></a>

 Il test viene completato automaticamente alla fine della durata programmata oppure puoi interrompere anticipatamente un test in corso. Una volta completato il test, lo stato del test nella sezione **Test delle copie shadow** della pagina **Test delle copie shadow** viene visualizzato come **Completo**. Quindi puoi rivedere e analizzare i parametri finali del test. 

 Puoi utilizzare la dashboard dei parametri per decidere se promuovere la variante shadow alla produzione. Per ulteriori informazioni sull'analisi della dashboard dei parametri del test, consulta [Monitora un test delle copie shadow](shadow-tests-view-monitor-edit-dashboard.md). 

 Per istruzioni su come completare il test prima della fine dell'orario di completamento pianificato, consulta [Completa un test delle copie shadow in anticipo](#shadow-tests-complete-early). 

 Per istruzioni su come promuovere la variante shadow alla produzione, consulta [Promozione di una variante shadow](#shadow-tests-complete-promote). 

## Completa un test delle copie shadow in anticipo
<a name="shadow-tests-complete-early"></a>

 Uno dei motivi per cui potresti voler completare uno test delle copie shadow in corso è se hai deciso che i parametri per la tua variante shadow sono soddisfacenti e desideri promuoverla fino alla produzione. Potresti anche decidere di completare il test se una o più varianti non stanno funzionando bene. 

 Per completare il test prima della data di fine prevista, procedi nel seguente modo: 

1.  Seleziona il test che desideri contrassegnare come completato dalla sezione **Test delle copie shadow** della pagina **Test delle copie shadow**. 

1.  Dall'elenco a discesa **Azioni**, sceglie **Completo** e viene visualizzata la finestra di dialogo **Complete test delle copie shadow**. 

1.  Nella finestra di dialogo, procedi in uno dei seguenti modi: 
   + **Sì, implementa variante shadow**
   + **No, rimuovi la variante shadow**

1.  (Facoltativo) Nella casella di testo **Commento**, inserisci il motivo per cui hai completato il test prima dell'ora di fine pianificata. 

1. 

   1.  Se hai deciso di implementare la variante shadow, scegli **Completa e procedi con l’implementazione**. Viene visualizzata la pagina **Implementa variante shadow**. Per istruzioni su come eseguire questa operazione, consulta [Promozione di una variante shadow](#shadow-tests-complete-promote). 

   1.  Se decidi di rimuovere la variante shadow, scegli **Conferma**. 

## Promozione di una variante shadow
<a name="shadow-tests-complete-promote"></a>

 Se hai deciso di voler sostituire la variante di produzione con la variante shadow, puoi aggiornare l'endpoint e promuovere la variante shadow per rispondere alle richieste di inferenza. Ciò rimuove la variante di produzione attuale dalla produzione e la sostituisce con la variante shadow. 

 Se il tuo test delle copie shadow è ancora in corso, devi prima completarlo. Per completare il test delle copie shadow prima della fine prevista, segui le istruzioni riportate in [Completa un test delle copie shadow in anticipo](#shadow-tests-complete-early) prima di continuare con questa sezione. 

 Quando promuovi una variante shadow alla produzione, hai le seguenti opzioni per il conteggio delle istanze della variante shadow. 
+  È possibile conservare il numero e il tipo di istanze della variante di produzione. Se selezioni questa opzione, la variante shadow viene avviata in produzione con il numero di istanze corrente, assicurando che il modello possa continuare a elaborare il traffico delle richieste sulla stessa scala. 
+  Puoi mantenere il numero e il tipo di istanze della variante shadow. Se desideri utilizzare questa opzione, ti consigliamo di eseguire un test delle copie shadow con un campionamento del traffico al 100% per garantire che la variante shadow possa elaborare il traffico delle richieste sulla scala corrente. 
+  Puoi utilizzare valori personalizzati per il numero e il tipo di istanza. Se desideri utilizzare questa opzione, ti consigliamo di eseguire un test delle copie shadow con un campionamento del traffico al 100% per garantire che la variante shadow possa elaborare il traffico delle richieste sulla scala corrente. 

 A meno che non stiate convalidando il tipo o il numero di istanze o entrambe le varianti shadow, consigliamo vivamente di mantenere il numero e il tipo di istanze della variante di produzione quando promuovi la variante shadow. 

 Per promuovere la variante shadow, procedi nel seguente modo: 

1.  Se il test è completato, procedi nel seguente modo: 

   1.  Seleziona il test dalla sezione **Test delle copie shadow** della pagina **Test delle copie shadow**. 

   1.  Dall'elenco a discesa **Azioni**, scegli **Visualizza**. Viene visualizzato il pannello di controllo. 

   1.  Scegli **Implementa variante shadow** nella sezione **Ambiente**. Viene visualizzata la pagina **Implementa variante shadow**. 

    Se il test non è stato completato, consulta la sezione [Completa un test delle copie shadow in anticipo](#shadow-tests-complete-early) per completarlo. 

1.  Nella sezione **Impostazioni varianti**, seleziona una delle opzioni seguenti: 
   + **Mantieni le impostazioni di produzione**
   + **Mantieni le impostazioni shadow**
   + **Impostazioni dell'istanza personalizzate**

    Se hai selezionato **Impostazioni dell’istanza personalizzate**, procedi nel seguente modo: 

   1.  Seleziona il tipo di istanza dall'elenco a discesa **Tipo di istanza**. 

   1.  In **Conteggio istanze**, immetti il numero di istanze da utilizzare per ogni tipo di nodo. 

1.  Nella casella di testo **Inserisci 'implementa' per confermare l’implementazione**, inserisci **deploy**. 

1.  Scegli **Implementa variante shadow**. 

 L’endpoint SageMaker AI Inference ora utilizza la variante shadow come variante di produzione e la variante di produzione è stata rimossa dall’endpoint. 

# Best practice
<a name="shadow-tests-best-practices"></a>

 Quando crei un esperimento di inferenza, considera quanto segue: 
+  **Percentuale di campionamento del traffico**: il campionamento del 100% delle richieste di inferenza consente di verificare che la variante shadow sia in grado di gestire il traffico di produzione quando viene promossa. Puoi iniziare con una percentuale di campionamento del traffico inferiore e collegarti man mano che acquisisci attendibilità nella tua variante, ma la best practice è quella di assicurarsi di aver aumentato il traffico al 100% prima della promozione. 
+  **Tipo di istanza**: a meno che non si utilizzino varianti shadow per valutare tipi o dimensioni di istanza alternativi, si consiglia di utilizzare lo stesso tipo, dimensione e numero di istanze in modo da avere la certezza che la variante shadow sia in grado di gestire il volume di richieste di inferenza dopo averla promossa. 
+  **Dimensionamento automatico**: per garantire che la variante shadow possa rispondere ai picchi nel numero di richieste di inferenza o ai cambiamenti nei modelli delle richieste di inferenza, consigliamo vivamente di configurare la scalabilità automatica sulle varianti shadow. Per informazioni su come configurare il dimensionamento automatico, consulta [Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon](endpoint-auto-scaling.md). Se hai configurato il dimensionamento automatico, puoi anche convalidare le modifiche alle policy di dimensionamento automatico senza influire sugli utenti. 
+  **Monitoraggio dei parametri**: dopo aver avviato un esperimento shadow e aver ricevuto un numero sufficiente di invocazioni, monitora la dashboard dei parametri per assicurarti che parametri come la latenza e il tasso di errore rientrino nei limiti accettabili. In questo modo puoi individuare tempestivamente eventuali errori di configurazione e adottare misure correttive. Per informazioni su come monitorare i parametri di un esperimento di inferenza in corso, consulta. [Come visualizzare, monitorare e modificare i test delle copie shadow](shadow-tests-view-monitor-edit.md) 

# Accedi ai container tramite SSM
<a name="ssm-access"></a>

 Amazon SageMaker AI ti consente di connetterti in modo sicuro ai contenitori Docker su cui sono distribuiti i tuoi modelli per inferenza utilizzando AWS Systems Manager (SSM). Questo ti dà accesso a livello di shell al contenitore in modo da poter eseguire il debug dei processi in esecuzione all'interno del contenitore e registrare comandi e risposte con Amazon CloudWatch. Puoi anche configurare una AWS PrivateLink connessione alle istanze ML che ospitano i contenitori per accedere ai contenitori tramite SSM in modo privato. 

**avvertimento**  
 L’abilitazione dell'accesso tramite SSM può influire sulle prestazioni dell'endpoint. Ti consigliamo di utilizzare questa funzionalità con gli endpoint di sviluppo o test e non con gli endpoint in produzione. Inoltre, l' SageMaker intelligenza artificiale applica automaticamente le patch di sicurezza e sostituisce o chiude le istanze endpoint difettose entro 10 minuti. Tuttavia, per gli endpoint con varianti di produzione abilitate per SSM, l' SageMaker IA ritarda di un giorno l'applicazione delle patch di sicurezza e la sostituzione o la chiusura delle istanze di endpoint difettose, per consentire all'utente di eseguire il debug. 

 Le seguenti sezioni descrivono in dettaglio come utilizzare questa funzionalità. 

## Allowlist
<a name="ssm-access-allowlist"></a>

 Devi contattare il supporto clienti e inserire il tuo account nella allowlist per utilizzare questa funzione. Non puoi creare un endpoint con l'accesso SSM abilitato, se il tuo account non è elencato per questo accesso. 

## Abilitazione dell'accesso tramite SSM
<a name="ssm-access-enable"></a>

 Per abilitare l'accesso SSM per un container esistente su un endpoint, aggiorna l'endpoint con una nuova configurazione dell'endpoint, con il parametro `EnableSSMAccess` impostato su `true` L'esempio seguente fornisce un esempio di configurazione dell'endpoint. 

```
{
    "EndpointConfigName": "endpoint-config-name",
    "ProductionVariants": [
        {
            "InitialInstanceCount": 1,
            "InitialVariantWeight": 1.0,
            "InstanceType": "ml.t2.medium",
            "ModelName": model-name,
            "VariantName": variant-name,
            "EnableSSMAccess": true,
        },
    ]
}
```

 [Per ulteriori informazioni sull'abilitazione dell'accesso SSM, consulta Abilita. SSMAccess](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html#API_EnableSSMAccess) 

## Configurazione IAM
<a name="ssm-access-iam"></a>

### Autorizzazioni IAM per endpoint
<a name="ssm-access-iam-endpoint"></a>

 Se hai abilitato l'accesso SSM per un'istanza endpoint, SageMaker AI avvia e gestisce l'[agente SSM](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html) quando avvia l'istanza dell'endpoint. Per consentire all'agente SSM di comunicare con i servizi SSM, aggiungi la seguente policy al ruolo di esecuzione in cui viene eseguito l'endpoint. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	             
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssmmessages:CreateControlChannel",
                "ssmmessages:CreateDataChannel",
                "ssmmessages:OpenControlChannel",
                "ssmmessages:OpenDataChannel"
            ],
            "Resource": "*"    
        }
    ]
 }
```

------

### Autorizzazioni IAM per l’utente
<a name="ssm-access-iam-user"></a>

 Aggiungi la seguente policy per concedere a un utente IAM le autorizzazioni di sessione SSM per connettersi a un target SSM. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	             
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession",
                "ssm:TerminateSession"
            ],
            "Resource": "*"    
        }
    ]
}
```

------

 Puoi limitare gli endpoint a cui un utente IAM può connettersi, con la seguente policy. Sostituisci *italicized placeholder text* con le informazioni appropriate. 

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	  
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": "arn:aws:sagemaker:us-east-2:111122223333:endpoint/endpoint-name"    
        }
    ]
}
```

------

## Accesso SSM con AWS PrivateLink
<a name="ssm-access-privatelink"></a>

 Se i tuoi endpoint funzionano all'interno di un cloud privato virtuale (VPC) che non è connesso alla rete Internet pubblica, puoi AWS PrivateLink utilizzarli per abilitare SSM. AWS PrivateLink limita tutto il traffico di rete tra le istanze di endpoint, SSM e Amazon EC2 alla rete Amazon. Per ulteriori informazioni su come configurare l'accesso SSM con AWS PrivateLink, consulta [Configurare un endpoint VPC per Gestore di sessioni](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-privatelink.html). 

## Registrazione con Amazon CloudWatch Logs
<a name="ssm-access-logging"></a>

 Per gli endpoint abilitati all'accesso SSM, puoi registrare gli errori dall'agente SSM con Amazon Logs. CloudWatch [Per ulteriori informazioni su come registrare gli errori con CloudWatch Logs, consulta Registrazione dell'attività della sessione.](https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-logging.html) Il log è disponibile nel flusso di log SSM `variant-name/ec2-instance-id/ssm`, nel gruppo di log degli endpoint `/aws/sagemaker/endpoints/endpoint-name`. Per ulteriori informazioni su come visualizzare il registro, vedere [Visualizzare i dati di registro inviati ai CloudWatch ](https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/Working-with-log-groups-and-streams.html#ViewingLogData) registri. 

 Le varianti di produzione alla base dell'endpoint possono avere più container modello. Il log per ogni container del modello viene registrato nel flusso di log. Ogni registro è preceduto da `[sagemaker ssm logs][container-name]`, dove `container-name` è il nome che hai assegnato al container o il nome predefinito, ad esempio, `container_0` e `container_1`. 

## Accesso ai container del modello
<a name="ssm-access-container"></a>

 Per accedere a un container modello sull'istanza di endpoint, è necessario il relativo ID di destinazione. L'ID di destinazione è in uno dei seguenti formati: 
+  `sagemaker-endpoint:endpoint-name_variant-name_ec2-instance-id` per container su endpoint di container singoli 
+  `sagemaker-endpoint:endpoint-name_variant-name_ec2-instance-id_container-name` per container su endpoint di container multipli 

 L'esempio seguente mostra come utilizzare il AWS CLI per accedere a un contenitore modello utilizzando il relativo ID di destinazione. 

```
aws ssm start-session --target sagemaker-endpoint:prod-image-classifier_variant1_i-003a121c1b21a90a9_container_1
```

 Se abiliti la registrazione, come indicato in[Registrazione con Amazon CloudWatch Logs](#ssm-access-logging), puoi trovare la destinazione IDs per tutti i contenitori elencati all'inizio del flusso di log SSM. 

**Nota**  
 Non è possibile connettersi a contenitori di algoritmi 1P o contenitori di modelli ottenuti dall' SageMaker IA MarketPlace con SSM. Tuttavia, puoi connetterti ai contenitori di deep learning (DLCs) forniti da AWS o a qualsiasi contenitore personalizzato di tua proprietà. 
 Se hai abilitato l'isolamento di rete per un container modello che gli impedisce di effettuare chiamate di rete in uscita, non puoi avviare una sessione SSM per quel container. 
 È possibile accedere a un solo container da una sessione SSM. Per accedere a un altro container, anche se si trova dietro lo stesso endpoint, avvia una nuova sessione SSM con l'ID di destinazione di quell'endpoint. 

# Server modello per la distribuzione di modelli con Amazon SageMaker AI
<a name="deploy-model-frameworks"></a>

Puoi utilizzare i server modello più diffusi TorchServe, come DJL Serving e Triton Inference Server, per distribuire i tuoi modelli sull'intelligenza artificiale. SageMaker I seguenti argomenti spiegano come.

**Topics**
+ [Distribuisci modelli con TorchServe](deploy-models-frameworks-torchserve.md)
+ [Implementa modelli con DJL Serving](deploy-models-frameworks-djl-serving.md)
+ [Implementazione di modelli con Triton Inference Server](deploy-models-frameworks-triton.md)

# Distribuisci modelli con TorchServe
<a name="deploy-models-frameworks-torchserve"></a>

TorchServe è il server modello consigliato per PyTorch, preinstallato nel AWS PyTorch Deep Learning Container (DLC). Questo potente strumento offre ai clienti un'esperienza coerente e intuitiva, offrendo prestazioni elevate nell'implementazione di più PyTorch modelli su varie AWS istanze, tra cui CPU, GPU, Neuron e Graviton, indipendentemente dalle dimensioni o dalla distribuzione del modello.

TorchServe supporta un'ampia gamma di funzionalità avanzate, tra cui batching dinamico, microbatching, A/B test dei modelli, streaming, torch XLA, TensorRT, ONNX e IPEX. Inoltre, integra PyTorch perfettamente la soluzione per modelli di grandi dimensioni Pi, che consente una gestione efficiente di modelli di grandi dimensioni. PPy Inoltre, TorchServe estende il supporto alle librerie open source più diffuse come Accelerate DeepSpeed, Fast Transformers e altre, ampliandone ulteriormente le funzionalità. Con TorchServe, AWS gli utenti possono implementare e servire i propri PyTorch modelli in tutta sicurezza, sfruttando la sua versatilità e le prestazioni ottimizzate su varie configurazioni hardware e tipi di modelli. [https://pytorch.org/serve/](https://pytorch.org/serve/)

Nella tabella seguente sono elencate le opzioni AWS PyTorch DLCs supportate da TorchServe.


| Tipo di istanza | SageMaker Link PyTorch DLC AI | 
| --- | --- | 
| CPU e GPU | [SageMaker Contenitori AI PyTorch ](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) | 
| Neuron | [PyTorch Contenitori Neuron](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#neuron-containers) | 
| Graviton | [SageMaker Contenitori AI PyTorch Graviton](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-graviton-containers-sm-support-only) | 

Le seguenti sezioni descrivono la configurazione per creare e testare PyTorch DLCs su Amazon SageMaker AI.

## Nozioni di base
<a name="deploy-models-frameworks-torchserve-prereqs"></a>

Per iniziare, assicurati di rispettare i seguenti prerequisiti:

1. Assicurati di avere accesso a un AWS account. Configura il tuo ambiente in modo che AWS CLI possano accedere al tuo account tramite un utente AWS IAM o un ruolo IAM. Consigliamo di utilizzare un ruolo IAM. Ai fini del test nel tuo account personale, puoi collegare le seguenti policy di autorizzazione gestita al ruolo IAM:
   + [AmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [AmazonEC2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AWS ServiceRoleForAmazonEKSNodegroup](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AWSServiceRoleForAmazonEKSNodegroup)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [Amazon S3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

1. Configurazione locale delle dipendenze, come indicato nell'esempio seguente:

   ```
   from datetime import datetime
       import os
       import json
       import logging
       import time
       
       # External Dependencies:
       import boto3
       from botocore.exceptions import ClientError
       import sagemaker
       
       sess = boto3.Session()
       sm = sess.client("sagemaker")
       region = sess.region_name
       account = boto3.client("sts").get_caller_identity().get("Account")
       
       smsess = sagemaker.Session(boto_session=sess)
       role = sagemaker.get_execution_role()
       
       # Configuration:
       bucket_name = smsess.default_bucket()
       prefix = "torchserve"
       output_path = f"s3://{bucket_name}/{prefix}/models"
       print(f"account={account}, region={region}, role={role}")
   ```

1. Recuperate l'immagine del PyTorch DLC, come mostrato nell'esempio seguente.

   SageMaker Le immagini PyTorch DLC AI sono disponibili in tutte le regioni. AWS Per ulteriori informazioni, consulta l'[elenco di immagini dei container DLC](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only).

   ```
   baseimage = sagemaker.image_uris.retrieve(
           framework="pytorch",
           region="<region>",
           py_version="py310",
           image_scope="inference",
           version="2.0.1",
           instance_type="ml.g4dn.16xlarge",
       )
   ```

1. Creare un'area di lavoro locale

   ```
   mkdir -p workspace/
   ```

## Aggiunta di un pacchetto
<a name="deploy-models-frameworks-torchserve-package"></a>

Le sezioni seguenti descrivono come aggiungere e preinstallare pacchetti all'immagine PyTorch DLC.

**Casi d'uso di BYOC**

I passaggi seguenti descrivono come aggiungere un pacchetto all'immagine del DLC. PyTorch Per ulteriori informazioni sulla personalizzazione del contenitore, consulta [Creazione di immagini personalizzate dei AWS Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/custom_images.md).

1. Supponiamo di voler aggiungere un pacchetto all'immagine PyTorch docker del DLC. Crea un Dockerfile nella directory `docker`, come mostrato nell'esempio seguente:

   ```
   mkdir -p workspace/docker
       cat workspace/docker/Dockerfile
       
       ARG BASE_IMAGE
       
       FROM $BASE_IMAGE
       
       #Install any additional libraries
       RUN pip install transformers==4.28.1
   ```

1. Crea e pubblica l'immagine docker personalizzata utilizzando il seguente script [build\$1and\$1push.sh](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/workspace/docker/build_and_push.sh).

   ```
   # Download script build_and_push.sh to workspace/docker
       ls workspace/docker
       build_and_push.sh  Dockerfile
       
       # Build and publish your docker image
       reponame = "torchserve"
       versiontag = "demo-0.1"
       
       ./build_and_push.sh {reponame} {versiontag} {baseimage} {region} {account}
   ```

**SageMaker Casi d'uso della preinstallazione AI**

L'esempio seguente mostra come preinstallare un pacchetto nel contenitore PyTorch DLC. È necessario creare un file `requirements.txt` localmente nella directory `workspace/code`.

```
mkdir -p workspace/code
    cat workspace/code/requirements.txt
    
    transformers==4.28.1
```

## Crea artefatti TorchServe del modello
<a name="deploy-models-frameworks-torchserve-artifacts"></a>

[Nel seguente esempio, utilizziamo il modello MNIST pre-addestrato.](https://github.com/pytorch/serve/tree/master/examples/image_classifier/mnist) [Creiamo una directory`workspace/mnist`, implementiamo [mnist\$1handler.py](https://github.com/pytorch/serve/blob/master/examples/image_classifier/mnist/mnist_handler.py) seguendo [le istruzioni di servizio TorchServe personalizzate](https://github.com/pytorch/serve/blob/master/docs/custom_service.md#custom-service) e [configuriamo i parametri del modello (come la](https://github.com/pytorch/serve/tree/master/model-archiver#config-file) dimensione del batch e i lavoratori) in model-config.yaml.](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/workspace/lama/model-config.yaml) Quindi, utilizziamo TorchServe lo strumento `torch-model-archiver` per creare gli artefatti del modello e caricarli su Amazon S3.

1. Configura i parametri del modello in `model-config.yaml`.

   ```
   ls -al workspace/mnist-dev
       
       mnist.py
       mnist_handler.py
       mnist_cnn.pt
       model-config.yaml
       
       # config the model
       cat workspace/mnist-dev/model-config.yaml
       minWorkers: 1
       maxWorkers: 1
       batchSize: 4
       maxBatchDelay: 200
       responseTimeout: 300
   ```

1. Costruisci gli artefatti del modello utilizzando. [torch-model-archiver ](https://github.com/pytorch/serve/tree/master/model-archiver#torch-model-archiver-for-torchserve)

   ```
   torch-model-archiver --model-name mnist --version 1.0 --model-file workspace/mnist-dev/mnist.py --serialized-file workspace/mnist-dev/mnist_cnn.pt --handler workspace/mnist-dev/mnist_handler.py --config-file workspace/mnist-dev/model-config.yaml --archive-format tgz
   ```

   Se si desidera preinstallare un pacchetto, è necessario includere la directory `code` nel file `tar.gz`.

   ```
   cd workspace
       torch-model-archiver --model-name mnist --version 1.0 --model-file mnist-dev/mnist.py --serialized-file mnist-dev/mnist_cnn.pt --handler mnist-dev/mnist_handler.py --config-file mnist-dev/model-config.yaml --archive-format no-archive
       
       cd mnist
       mv ../code .
       tar cvzf mnist.tar.gz .
   ```

1. Carica `mnist.tar.gz` Amazon S3.

   ```
   # upload mnist.tar.gz to S3
       output_path = f"s3://{bucket_name}/{prefix}/models"
       aws s3 cp mnist.tar.gz {output_path}/mnist.tar.gz
   ```

## Utilizzo di endpoint a modello singolo con cui eseguire la distribuzione TorchServe
<a name="deploy-models-frameworks-torchserve-single-model"></a>

[L'esempio seguente mostra come creare un [endpoint di inferenza in tempo reale a modello singolo](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html), distribuire il modello sull'endpoint e testarlo utilizzando l'SDK Amazon Python. SageMaker ](https://sagemaker.readthedocs.io/en/stable/)

```
from sagemaker.model import Model
    from sagemaker.predictor import Predictor
    
    # create the single model endpoint and deploy it on SageMaker AI
    model = Model(model_data = f'{output_path}/mnist.tar.gz', 
                  image_uri = baseimage,
                  role = role,
                  predictor_cls = Predictor,
                  name = "mnist",
                  sagemaker_session = smsess)
                  
    endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
    predictor = model.deploy(instance_type='ml.g4dn.xlarge',
                             initial_instance_count=1,
                             endpoint_name = endpoint_name,
                             serializer=JSONSerializer(),
                             deserializer=JSONDeserializer())  
                             
    # test the endpoint
    import random
    import numpy as np
    dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()}
    
    res = predictor.predict(dummy_data)
```

## Utilizzo di endpoint multimodello con cui eseguire la distribuzione TorchServe
<a name="deploy-models-frameworks-torchserve-multi-model"></a>

Gli [endpoint multi-modello](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) costituiscono una soluzione scalabile ed economica per l'hosting di un numero elevato di modelli dietro un unico endpoint. Migliorano l'utilizzo degli endpoint condividendo lo stesso parco di risorse e fornendo container per l'hosting di tutti i tuoi modelli. Riducono inoltre il sovraccarico di implementazione perché l' SageMaker intelligenza artificiale gestisce dinamicamente il caricamento e lo scaricamento dei modelli, oltre a scalare le risorse in base ai modelli di traffico. Gli endpoint multimodello sono particolarmente utili per i modelli di deep learning e di intelligenza artificiale generativa che richiedono una potenza di calcolo accelerata.

Utilizzando endpoint multimodello SageMaker basati TorchServe sull'intelligenza artificiale, puoi velocizzare lo sviluppo utilizzando uno stack di servizi che conosci, sfruttando al contempo la condivisione delle risorse e la gestione semplificata dei modelli fornite dagli endpoint multimodello basati sull'intelligenza artificiale. SageMaker 

[L'esempio seguente mostra come creare un endpoint multimodello, distribuire il modello sull'endpoint e testarlo utilizzando l'SDK Amazon Python. SageMaker ](https://sagemaker.readthedocs.io/en/stable/) Ulteriori informazioni sono disponibili in questo [esempio di notebook](https://github.com/aws/amazon-sagemaker-examples/blob/main/inference/torchserve/mme-gpu/torchserve_multi_model_endpoint.ipynb).

```
from sagemaker.multidatamodel import MultiDataModel
    from sagemaker.model import Model
    from sagemaker.predictor import Predictor
    
    # create the single model endpoint and deploy it on SageMaker AI
    model = Model(model_data = f'{output_path}/mnist.tar.gz', 
                  image_uri = baseimage,
                  role = role,
                  sagemaker_session = smsess)
                  
    endpoint_name = 'torchserve-endpoint-' + time.strftime("%Y-%m-%d-%H-%M-%S", time.gmtime())
    mme = MultiDataModel(
        name = endpoint_name,
        model_data_prefix = output_path,
        model = model,
        sagemaker_session = smsess)
    
    mme.deploy(
        initial_instance_count = 1,
        instance_type = "ml.g4dn.xlarge",
        serializer=sagemaker.serializers.JSONSerializer(),
        deserializer=sagemaker.deserializers.JSONDeserializer())
    
    # list models
    list(mme.list_models())
    
    # create mnist v2 model artifacts
    cp mnist.tar.gz mnistv2.tar.gz
    
    # add mnistv2
    mme.add_model(mnistv2.tar.gz)
    
    # list models
    list(mme.list_models())
    
    predictor = Predictor(endpoint_name=mme.endpoint_name, sagemaker_session=smsess)
                             
    # test the endpoint
    import random
    import numpy as np
    dummy_data = {"inputs": np.random.rand(16, 1, 28, 28).tolist()}
    
    res = predictor.predict(date=dummy_data, target_model="mnist.tar.gz")
```

## Metriche
<a name="deploy-models-frameworks-torchserve-metrics"></a>

TorchServe supporta metriche sia a livello di sistema che a livello di modello. È possibile abilitare i parametri in modalità formato log o in modalità Prometheus tramite la variabile di ambiente `TS_METRICS_MODE`. Puoi utilizzare il file di configurazione delle metriche TorchServe centrali `metrics.yaml` per specificare i tipi di metriche da tracciare, come il conteggio delle richieste, la latenza, l'utilizzo della memoria, l'utilizzo della GPU e altro ancora. Facendo riferimento a questo file, è possibile ottenere informazioni sulle prestazioni e sullo stato dei modelli distribuiti e monitorare efficacemente il comportamento del server in tempo reale. TorchServe Per informazioni più dettagliate, consulta la documentazione sulle [TorchServe metriche](https://github.com/pytorch/serve/blob/master/docs/metrics.md#torchserve-metrics).

Puoi accedere ai log TorchServe delle metriche simili al formato StatSD tramite il filtro Amazon log. CloudWatch Di seguito è riportato un esempio di registro delle metriche: TorchServe 

```
CPUUtilization.Percent:0.0|#Level:Host|#hostname:my_machine_name,timestamp:1682098185
    DiskAvailable.Gigabytes:318.0416717529297|#Level:Host|#hostname:my_machine_name,timestamp:1682098185
```

# Implementa modelli con DJL Serving
<a name="deploy-models-frameworks-djl-serving"></a>

DJL Serving è una soluzione di distribuzione dei modelli universale autonoma ad alte prestazioni. Prende un modello di deep learning, diversi modelli o flussi di lavoro e li rende disponibili tramite un endpoint HTTP.

Puoi utilizzare uno dei DJL Serving [Deep Learning Containers (DLCs)](https://docs.aws.amazon.com/deep-learning-containers/latest/devguide/what-is-dlc.html) per servire i tuoi modelli. AWS Per conoscere i tipi di modelli e i framework supportati, consulta il repository [DJL](https://github.com/deepjavalibrary/djl-serving) Serving. GitHub

DJL Serving offre molte funzionalità che aiutano a implementare i propri modelli con prestazioni elevate:
+ Facilità d'uso: DJL Serving può servire con la maggior parte dei modelli senza alcuna modifica. Tu usi gli artefatti del modello e DJL Serving può ospitarli.
+ Supporto per più dispositivi e acceleratori: DJL Serving supporta l'implementazione di modelli su, e Inferentia. CPUs GPUs AWS 
+ Prestazioni: DJL Serving esegue l'inferenza multithread in un'unica macchina virtuale Java (JVM) per aumentare il throughput.
+ Batching dinamico: DJL Serving supporta il batching dinamico per aumentare il throughput.
+ Dimensionamento automatico: DJL Serving aumenta o riduce automaticamente i worker in base al carico di traffico.
+ Supporto multimotore: DJL Serving può ospitare contemporaneamente modelli utilizzando framework diversi (ad esempio e). PyTorch TensorFlow
+ Modelli di ensemble e flussi di lavoro: DJL Serving supporta l'implementazione di flussi di lavoro complessi composti da più modelli e può eseguire parti del flusso di lavoro su e altre parti su. CPUs GPUs I modelli all'interno di un flusso di lavoro possono sfruttare diversi framework.

Le sezioni seguenti descrivono come configurare un endpoint con DJL Serving on AI. SageMaker 

## Nozioni di base
<a name="deploy-models-frameworks-djl-prereqs"></a>

Per iniziare, assicurati di rispettare i seguenti prerequisiti:

1. Assicurati di avere accesso a un AWS account. Configura il tuo ambiente in modo che AWS CLI possano accedere al tuo account tramite un utente AWS IAM o un ruolo IAM. Consigliamo di utilizzare un ruolo IAM. Ai fini del test nel tuo account personale, puoi collegare le seguenti policy di autorizzazione gestita al ruolo IAM:
   + [AmazonEC2ContainerRegistryFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryFullAccess)
   + [AmazonEC2FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonEC2FullAccess)
   + [AmazonSageMakerFullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonSageMakerFullAccess)
   + [Amazon S3 FullAccess](https://console.aws.amazon.com/iam/home#policies/arn:aws:iam::aws:policy/AmazonS3FullAccess)

1. Assicurati di avere il [docker](https://docs.docker.com/get-docker/) client configurato sul tuo sistema.

1. Accedi ad Amazon Elastic Container Registry e imposta le seguenti variabili di ambiente:

   ```
   export ACCOUNT_ID=<your_account_id>
   export REGION=<your_region>
   aws ecr get-login-password --region $REGION | docker login --username AWS --password-stdin $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com
   ```

1. Estrai l'immagine docker.

   ```
   docker pull 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118
   ```

   Per tutte le immagini container di DJL Serving disponibili, consulta i [container di inferenza per modelli di grandi dimensioni](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) e i [container di inferenza per CPU di DJL Serving](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#djl-cpu-full-inference-containers). Quando scegli un'immagine dalle tabelle dei link precedenti, sostituisci la AWS regione nella colonna URL di esempio con la regione in cui ti trovi. DLCs Sono disponibili nelle regioni elencate nella tabella nella parte superiore della pagina Available [Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

## Personalizza il tuo container
<a name="deploy-models-frameworks-djl-byoc"></a>

Puoi aggiungere pacchetti alle immagini DLC di base per personalizzare il container. Supponiamo di voler aggiungere un pacchetto all'immagine docker `763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118`. È necessario creare un dockerfile con l'immagine desiderata come immagine di base, aggiungere i pacchetti richiesti e inviare l'immagine ad Amazon ECR.

Per creare un pacchetto, completa la seguente procedura:

1. Specifica le istruzioni per eseguire le librerie o i pacchetti desiderati nel dockerfile dell'immagine di base.

   ```
   FROM 763104351884.dkr.ecr.us-west-2.amazonaws.com/djl-inference:0.22.1-deepspeed0.9.2-cu118
                           
   ## add custom packages/libraries
   RUN git clone https://github.com/awslabs/amazon-sagemaker-examples
   ```

1. Crea l'immagine Docker dal tuo dockerfile. Specifica il tuo repository di Amazon ECR, il nome dell'immagine di base e un tag per l'immagine. Se non disponi di un repository di Amazon ECR, consulta [Utilizzare Amazon ECR con AWS CLI](https://docs.aws.amazon.com/AmazonECR/latest/userguide/getting-started-cli.html) nella *Guida per l'utente di Amazon ECR* per istruzioni su come crearne uno.

   ```
   docker build -f Dockerfile -t <registry>/<image_name>:<image_tag>
   ```

1. Invia l'immagine Docker al tuo repository di Amazon ECR.

   ```
   docker push $ACCOUNT_ID.dkr.ecr.$REGION.amazonaws.com/<image_name>:<image_tag>
   ```

Ora dovresti avere un'immagine del container personalizzata da poter utilizzare per la distribuzione dei modelli. Per altri esempi di personalizzazione del contenitore, consulta [Creazione di immagini personalizzate dei AWS Deep Learning Containers](https://github.com/aws/deep-learning-containers/blob/master/custom_images.md).

## Preparazione degli artefatti di un modello
<a name="deploy-models-frameworks-djl-artifacts"></a>

Prima di distribuire il modello sull' SageMaker intelligenza artificiale, è necessario impacchettare gli artefatti del modello in un file. `.tar.gz` DJL Serving accetta i seguenti artefatti nel tuo archivio:
+ Checkpoint del modello: file che memorizzano le ponderazioni del modello.
+ `serving.properties`: un file di configurazione che è possibile aggiungere per ogni modello. Inserisci `serving.properties` nella stessa directory del file del tuo modello.
+ `model.py`: codice del gestore di inferenza. È applicabile solo quando si utilizza la modalità Python. Se non specifichi `model.py`, djl-serving utilizza uno dei gestori predefiniti.

Di seguito è riportato un esempio di struttura `model.tar.gz`:

```
 - model_root_dir # root directory
    - serving.properties            
    - model.py # your custom handler file for Python, if you choose not to use the default handlers provided by DJL Serving
    - model binary files # used for Java mode, or if you don't want to use option.model_id and option.s3_url for Python mode
```

DJL Serving supporta i motori Java alimentati da motori DJL o Python. Non tutti gli artefatti precedenti sono obbligatori. Gli artefatti obbligatori variano in base alla modalità scelta. Ad esempio, in modalità Python, è sufficiente specificare `option.model_id` nel file `serving.properties`. Non è necessario specificare il checkpoint del modello all'interno dei container LMI. In modalità Java, è necessario inserire il checkpoint del modello nel pacchetto. Per maggiori dettagli sul modo per configurare `serving.properties` e utilizzare motori diversi, consulta [Modalità di gestione di DJL Serving](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md).

## Utilizza endpoint a modello singolo per l'implementazione con DJL Serving
<a name="deploy-models-frameworks-djl-single-model"></a>

Dopo aver preparato gli artefatti del modello, puoi distribuirlo su un endpoint di intelligenza artificiale. SageMaker Questa sezione descrive come implementare un modello unico su un endpoint con DJL Serving. Se stai implementando più modelli, salta questa sezione e vai a [Usa endpoint multimodello per implementazioni con DJL Serving](#deploy-models-frameworks-djl-mme).

L'esempio seguente mostra un metodo per creare un oggetto modello utilizzando l'SDK Amazon SageMaker Python. Sarà necessario specificare i seguenti campi:
+ `image_uri`: puoi recuperare una delle immagini di base di DJL Serving come mostrato in questo esempio, oppure puoi specificare un'immagine Docker personalizzata dal tuo repository di Amazon ECR, se hai seguito le istruzioni in [Personalizza il tuo container](#deploy-models-frameworks-djl-byoc).
+ `model_s3_url`: dovrebbe essere un URI Amazon S3 che punta al tuo file `.tar.gz`.
+ `model_name`: specificate un nome per l'oggetto modello.

```
import boto3
 import sagemaker
from sagemaker.model import Model
from sagemaker import image_uris, get_execution_role

aws_region = "aws-region"
sagemaker_session = sagemaker.Session(boto_session=boto3.Session(region_name=aws_region))
role = get_execution_role()

def create_model(model_name, model_s3_url):
    # Get the DJL DeepSpeed image uri
    image_uri = image_uris.retrieve(
        framework="djl-deepspeed",
        region=sagemaker_session.boto_session.region_name,
        version="0.20.0"
    )
    model = Model(
        image_uri=image_uri,
        model_data=model_s3_url,
        role=role,
        name=model_name,
        sagemaker_session=sagemaker_session,
    )
    return model
```

## Usa endpoint multimodello per implementazioni con DJL Serving
<a name="deploy-models-frameworks-djl-mme"></a>

Se desideri distribuire più modelli su un endpoint, l' SageMaker intelligenza artificiale offre endpoint multimodello, che rappresentano una soluzione scalabile ed economica per implementare un gran numero di modelli. DJL Serving supporta anche il caricamento di più modelli contemporaneamente e l'esecuzione di inferenze su ciascuno dei modelli contemporaneamente. I contenitori DJL Serving aderiscono ai contratti di endpoint multimodello SageMaker AI e possono essere utilizzati per implementare endpoint multimodello.

Ogni singolo artefatto del modello deve essere inserito in pacchetti nello stesso modo descritto nella sezione precedente [Preparazione degli artefatti di un modello](#deploy-models-frameworks-djl-artifacts). È possibile impostare configurazioni specifiche del modello nel file `serving.properties` e il codice del gestore di inferenza specifico del modello in `model.py`. Per un endpoint multimodello, i modelli devono essere disposti nel modo seguente:

```
 root_dir
        |-- model_1.tar.gz
        |-- model_2.tar.gz
        |-- model_3.tar.gz
            .
            .
            .
```

L'SDK Amazon SageMaker Python utilizza l'[MultiDataModel](https://sagemaker.readthedocs.io/en/stable/api/inference/multi_data_model.html)oggetto per creare un'istanza di un endpoint multimodello. L'URI Amazon S3 per la directory root deve essere passato come argomento `model_data_prefix` al costruttore `MultiDataModel`.

DJL Serving fornisce anche diversi parametri di configurazione per gestire i requisiti di memoria del modello, come `required_memory_mb` e `reserved_memory_mb`, che possono essere configurati per ciascun modello nel file [serving.properties](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md#servingproperties). Questi parametri sono utili per gestire gli errori per memoria insufficiente in modo più efficiente. [Per tutti i parametri configurabili, consulta la sezione handling in djl-serving. OutofMemory ](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/out_of_memory_management.md)

La funzione di dimensionamento automatico di DJL Serving rende più facile garantire che i modelli siano dimensionati in modo appropriato per il traffico in entrata. Per impostazione predefinita, DJL Serving determina il numero massimo di worker per un modello che può essere supportato in base all'hardware disponibile (ad esempio i core CPU o i dispositivi GPU). È possibile impostare limiti inferiori e superiori per ogni modello per garantire che sia sempre possibile fornire un livello di traffico minimo e che un singolo modello non consumi tutte le risorse disponibili. È possibile impostare le seguenti proprietà nel file [serving.properties](https://github.com/deepjavalibrary/djl-serving/blob/master/serving/docs/modes.md#servingproperties):
+ `gpu.minWorkers`: Numero minimo di lavoratori per. GPUs
+ `gpu.maxWorkers`: Numero massimo di lavoratori per GPUs.
+ `cpu.minWorkers`: Numero minimo di lavoratori per CPUs.
+ `cpu.maxWorkers`: Numero massimo di lavoratori per CPUs.

[Per un end-to-end esempio di come implementare un endpoint multimodello sull' SageMaker intelligenza artificiale utilizzando un contenitore DJL Serving, vedi l'esempio notebook Multi-model-Inference-Demo.ipynb.](https://github.com/deepjavalibrary/djl-demo/blob/master/aws/sagemaker/Multi-Model-Inference-Demo.ipynb)

# Implementazione di modelli con Triton Inference Server
<a name="deploy-models-frameworks-triton"></a>

[Triton Inference Server](https://github.com/triton-inference-server/server) è un software di distribuzione delle inferenze open source che semplifica l'inferenza dell'intelligenza artificiale. Con Triton, puoi implementare qualsiasi modello costruito con più framework di deep learning e machine learning, tra cui TensorRT,, ONNX, OpenVINO, Python TensorFlow PyTorch, RAPIDS FIL e altri.

I contenitori SageMaker AI Triton ti aiutano a implementare Triton Inference Server sulla piattaforma di hosting AI per servire modelli addestrati in produzione. SageMaker Supporta le diverse modalità in cui opera l'IA. SageMaker Per un elenco dei contenitori Triton Inference Server disponibili su SageMaker AI, consulta [NVIDIA Triton Inference Containers (](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#nvidia-triton-inference-containers-sm-support-only)solo supporto SM). 

[Per esempi di end-to-end notebook, consigliamo di dare un'occhiata al repository. amazon-sagemaker-examples ](https://github.com/aws/amazon-sagemaker-examples/tree/main/sagemaker-triton)

## Modalità di hosting
<a name="deploy-models-frameworks-triton-modes"></a>

Le seguenti modalità di hosting SageMaker AI sono supportate dai contenitori Triton:
+ Endpoint per modelli singoli
  + Questa è la modalità operativa predefinita di SageMaker AI. In questa modalità, il container Triton può caricare un modello singolo o un modello di ensemble singolo.
  + Il nome del modello deve essere passato come proprietà dell'ambiente contenitore, che fa parte della chiamata API `CreateModel` SageMaker AI. La variabile di ambiente utilizzata da inserire nel nome del modello è `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Endpoint di modello singoli con ensemble
  + Triton Inference Server supporta l'*ensemble*, che è una pipeline, o un DAG (grafico aciclico diretto) di modelli. Sebbene un insieme sia tecnicamente composto da più modelli, nella modalità endpoint a modello singolo predefinita, l' SageMaker intelligenza artificiale può considerare l'*insieme vero e proprio* (il metamodello che rappresenta la pipeline) come modello principale da caricare e può successivamente caricare i modelli associati.
  + Il nome del modello dell'ensemble vero e proprio deve essere utilizzato per caricare il modello. Deve essere passato come proprietà dell'ambiente contenitore, che fa parte della chiamata API. `CreateModel` SageMaker La variabile di ambiente utilizzata da inserire nel nome del modello è `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME`.
+ Endpoint multimodello
  + In questa modalità, l' SageMaker intelligenza artificiale può servire più modelli su un singolo endpoint. È possibile utilizzare questa modalità specificando la variabile di ambiente `‘MultiModel’: true` come proprietà dell'ambiente contenitore, che fa parte della chiamata `CreateModel` SageMaker API.
  + Per impostazione predefinita, nessun modello viene caricato all'avvio dell'istanza. Per eseguire una richiesta di inferenza su un particolare modello, specificate il `*.tar.gz` file del modello corrispondente come argomento della `TargetModel` proprietà della chiamata `InvokeEndpoint` SageMaker API.
+ Endpoint multimodello con ensemble
  + In questa modalità, l' SageMaker intelligenza artificiale funziona come descritto per gli endpoint multimodello. Tuttavia, il contenitore SageMaker AI Triton può caricare più modelli di ensemble, il che significa che più pipeline di modelli possono essere eseguite sulla stessa istanza. SageMaker L'intelligenza artificiale tratta ogni ensemble come un unico modello e l'insieme vero e proprio di ogni modello può essere richiamato specificando l'archivio corrispondente come. `*.tar.gz` `TargetModel`
  + Per una migliore gestione della memoria durante la memoria dinamica `LOAD` e `UNLOAD`, si consiglia di mantenere un ensemble di piccole dimensioni.

## Tipi di payload di inferenza
<a name="deploy-models-frameworks-triton-payloads"></a>

Triton supporta due metodi per inviare un payload di inferenza sulla rete: `json` e `binary+json` (o json con codifica binaria). Il payload JSON in entrambi i casi include il tipo di dati, la forma e l'effettivo tensore di richiesta di inferenza. Il tensore di richiesta deve essere un tensore binario.

Con il formato `binary+json`, è necessario specificare la lunghezza dei metadati della richiesta nell'intestazione per consentire a Triton di analizzare correttamente il payload binario. Nel contenitore SageMaker AI Triton, questa operazione viene eseguita utilizzando un'intestazione personalizzata:. `Content-Type` `application/vnd.sagemaker-triton.binary+json;json-header-size={}` Questo è diverso dall'utilizzo dell'`Inference-Header-Content-Length`intestazione su un Triton Inference Server autonomo perché le intestazioni personalizzate non sono consentite nell'intelligenza artificiale. SageMaker 

## Utilizzo di config.pbtxt per impostare la configurazione dei modelli
<a name="deploy-models-frameworks-triton-config"></a>

Per Triton Inference Servers on SageMaker AI, ogni modello deve includere un `config.pbtxt` file che specifichi, come minimo, le seguenti configurazioni per il modello:
+ `name`: Sebbene questo sia facoltativo per i modelli che funzionano al di fuori dell' SageMaker IA, ti consigliamo di fornire sempre un nome per i modelli da eseguire in Triton on AI. SageMaker 
+ [`platform` e/o `backend`](https://github.com/triton-inference-server/backend/blob/main/README.md#backends): l'impostazione di un backend è essenziale per specificare il tipo di modello. Alcuni backend hanno un'ulteriore classificazione, come `tensorflow_savedmodel` o ` tensorflow_graphdef`. Tali opzioni possono essere specificate come parte della chiave `platform` oltre alla chiave `backend`. I backend più diffusi sono `tensorrt`, `onnxruntime`, `tensorflow`, `pytorch`, `python`, `dali`, `fil` e `openvino`.
+ `input`: specifica tre attributi per l'input: `name`, `data_type` e `dims` (la forma).
+ `output`: specifica tre attributi per l'output: `name`, `data_type` e `dims` (la forma).
+ `max_batch_size`: imposta la dimensione del batch su un valore maggiore o uguale a 1 che indichi la dimensione massima del batch che Triton dovrebbe utilizzare con il modello.

[Per maggiori dettagli sulla configurazione`config.pbtxt`, consulta il repository di Triton. GitHub ](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md) Triton fornisce diverse configurazioni per modificare il comportamento dei modelli. Alcune delle opzioni di configurazione più comuni e importanti sono:
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#instance-groups](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#instance-groups): i gruppi di istanze contribuiscono a specificare il numero e la posizione di un determinato modello. Hanno gli attributi `count`, `kind` e `gpus` (usati quando `kind` è `KIND_GPU`). L'attributo `count` è equivalente al numero di worker. Per la distribuzione di modelli ordinari, ogni worker dispone di una propria copia del modello. Analogamente, in Triton, `count` specifica il numero di copie del modello per dispositivo. Ad esempio, se il tipo `instance_group` è `KIND_CPU`, la CPU ha un numero di copie del modello pari a `count`.
**Nota**  
In un'istanza GPU, la configurazione `instance_group` si applica a ciascun dispositivo GPU. Ad esempio, il numero `count` di copie del modello viene inserito su ciascun dispositivo GPU a meno che non si specifichi esplicitamente quali dispositivi GPU dovrebbero caricare il modello.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/model_configuration.md#dynamic-batcher) e [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#stateful-models): il batching dinamico viene utilizzato per i modelli stateless e il batching in sequenza viene utilizzato per i modelli stateful (in cui si desidera instradare ogni volta una richiesta alla stessa istanza del modello). I pianificatori di batch abilitano una coda per modello, che aiuta ad aumentare il throughput, a seconda della configurazione di batching.
+ [https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/architecture.md#ensemble-models): un modello ensemble rappresenta una *pipeline* di uno o più modelli e la connessione dei tensori di input e output tra tali modelli. Può essere configurato specificando `platform` come `ensemble`. La configurazione dell'ensemble è solo una rappresentazione della pipeline del modello. Per quanto riguarda l' SageMaker intelligenza artificiale, tutti i modelli di un insieme vengono trattati come dipendenti del modello di insieme e contati come un unico modello per SageMaker le metriche di intelligenza artificiale, ad esempio. `LoadedModelCount`

## Pubblicazione dei parametri Triton predefiniti su Amazon CloudWatch
<a name="deploy-models-frameworks-triton-metrics"></a>

NVIDIA Triton Inference Container espone i parametri sulla porta 8002 (configurabile) per i diversi modelli e GPUs che vengono utilizzati nel Triton Inference Server. [Per tutti i dettagli sulle metriche predefinite disponibili, consulta la pagina relativa alle metriche del Triton Inference Server. GitHub ](https://github.com/triton-inference-server/server/blob/main/docs/user_guide/metrics.md) Questi parametri sono in formato Prometheus e possono essere sottoposti a scraping utilizzando una configurazione dello scraper Prometheus.

A partire dalla versione v23.07 in poi, il contenitore SageMaker AI Triton supporta la pubblicazione di queste metriche su Amazon CloudWatch specificando alcune variabili di ambiente. Per analizzare i parametri di Prometheus, il container SageMaker AI Triton sfrutta l'agente Amazon. CloudWatch 

Le variabili di ambiente obbligatorio che è necessario specificare per raccogliere i parametri sono le seguenti:


| Variabile di ambiente | Description | Valore di esempio | 
| --- | --- | --- | 
|  `SAGEMAKER_TRITON_ALLOW_METRICS`  |  Specifica questa opzione per consentire a Triton di pubblicare i parametri sul suo endpoint Prometheus.  | "true" | 
|  `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH`  |  Specificate questa opzione per avviare i controlli preliminari necessari per pubblicare le metriche su Amazon. CloudWatch  | "true" | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP`  |  Specifica questa opzione per puntare al gruppo di log in cui vengono scritti i parametri.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesTest" | 
|  `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE`  |  Specifica questa opzione per puntare allo spazio dei nomi del parametro in cui desideri visualizzare e tracciare i parametri.  | "/aws/SageMaker AI/Endpoints/TritonMetrics/SageMakerTwoEnsemblesPublicTest" | 
|  `SAGEMAKER_TRITON_METRICS_PORT`  |  Indica 8002 o qualsiasi altra porta. Se l' SageMaker IA non ha bloccato la porta specificata, viene utilizzata. Altrimenti, viene scelta automaticamente un'altra porta non bloccata.  | "8002" | 

Quando pubblichi metriche con Triton on SageMaker AI, tieni presente le seguenti limitazioni:
+ Sebbene sia possibile generare metriche personalizzate tramite il backend C-API e Python (dalla versione 23.05 in poi), al momento non sono supportate per la pubblicazione su Amazon. CloudWatch
+ In modalità SageMaker AI multimodel endpoint (MME), Triton viene eseguito in un ambiente che richiede l'abilitazione del namespace dei modelli perché ogni modello (eccetto i modelli ensemble) viene trattato come se si trovasse nel proprio repository di modelli. Attualmente, ciò crea una limitazione per i Parametri. Quando lo spazio dei nomi dei modelli è abilitato, Triton non distingue i parametri tra due modelli con lo stesso nome appartenenti a ensemble diversi. Come soluzione alternativa, assicurati che ogni modello implementato abbia un nome univoco. Ciò semplifica anche la ricerca delle metriche. CloudWatch

## Variabili di ambiente
<a name="deploy-models-frameworks-triton-variables"></a>

La tabella seguente elenca le variabili di ambiente supportate per Triton on SageMaker AI.


| Variabile di ambiente | Description | Tipo | Valori possibili | 
| --- | --- | --- | --- | 
| `SAGEMAKER_MULTI_MODEL` | Consente a Triton di operare in modalità endpoint multimodello SageMaker AI. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_DEFAULT_MODEL_NAME` | Specificate il modello da caricare nella modalità SageMaker AI modello singolo (predefinita). Per la modalità ensemble, specifica il nome dell'ensemble vero e proprio. | Stringa | *<model\$1name>*come specificato in config.pbtxt | 
| `SAGEMAKER_TRITON_PING_MODE` | `'ready'`è la modalità predefinita nella modalità modello singolo di SageMaker AI ed `'live'` è l'impostazione predefinita nella modalità endpoint multimodello di SageMaker AI. | Stringa | `ready`, `live` | 
| `SAGEMAKER_TRITON_DISABLE_MODEL_NAMESPACING` | Nel contenitore SageMaker AI Triton, questa opzione è impostata per `true` impostazione predefinita. | Booleano | `true`, `false` | 
| `SAGEMAKER_BIND_TO_PORT` | In SageMaker AI, la porta predefinita è 8080. È possibile eseguire la personalizzazione utilizzando una porta diversa in scenari con più container. | Stringa | *<port\$1number>* | 
| `SAGEMAKER_SAFE_PORT_RANGE` | Questo è impostato dalla piattaforma SageMaker AI quando si utilizza la modalità multi-contenitore. | Stringa | *<port\$11>*–*<port\$12>* | 
| `SAGEMAKER_TRITON_ALLOW_GRPC` | Sebbene l' SageMaker IA non supporti attualmente GRPC, se utilizzi Triton davanti a un reverse proxy personalizzato, puoi scegliere di abilitare GRPC. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_GRPC_PORT` | La porta predefinita per GRPC è 8001, ma è possibile modificarla. | Stringa | *<port\$1number>* | 
| `SAGEMAKER_TRITON_THREAD_COUNT` | È possibile impostare il numero di thread predefiniti del gestore di richieste HTTP. | Stringa | *<number>* | 
| `SAGEMAKER_TRITON_LOG_VERBOSE` | `true`per impostazione predefinita su SageMaker AI, ma puoi disattivare selettivamente questa opzione. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_INFO` | `false`per impostazione predefinita su SageMaker AI. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_WARNING` | `false`per impostazione predefinita su SageMaker AI. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_LOG_ERROR` | `false`per impostazione predefinita su SageMaker AI. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_SHM_DEFAULT_BYTE_SIZE` | Specifica la dimensione shm per il backend Python, in byte. Il valore predefinito è 16 MB ma può essere aumentato. | Stringa | *<number>* | 
| `SAGEMAKER_TRITON_SHM_GROWTH_BYTE_SIZE` | Specifica la dimensione di aumento di shm per il backend Python, in byte. Il valore predefinito è 1 MB, ma può essere aumentato per consentire incrementi maggiori. | Stringa | *<number>* | 
| `SAGEMAKER_TRITON_TENSORFLOW_VERSION` | Il valore predefinito è `2`. Triton non supporta più Tensorflow 2 di Triton v23.04. Puoi configurare questa variabile per le versioni precedenti. | Stringa | *<number>* | 
| `SAGEMAKER_TRITON_MODEL_LOAD_GPU_LIMIT` | Limita la percentuale massima di memoria della GPU utilizzata per il caricamento dei modelli, permettendo di utilizzare il resto per le richieste di inferenza. | Stringa | *<number>* | 
| `SAGEMAKER_TRITON_ALLOW_METRICS` | `false`per impostazione predefinita su SageMaker AI. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_METRICS_PORT` | La porta predefinita è 8002. | Stringa | *<number>* | 
| `SAGEMAKER_TRITON_PUBLISH_METRICS_TO_CLOUDWATCH` | `false`per impostazione predefinita su SageMaker AI. Imposta questa variabile `true` per consentire l'invio delle metriche predefinite di Triton ad Amazon. CloudWatch Se questa opzione è abilitata, sei responsabile dei CloudWatch costi quando le metriche vengono pubblicate sul tuo account. | Booleano | `true`, `false` | 
| `SAGEMAKER_TRITON_CLOUDWATCH_LOG_GROUP` | Obbligatorio se hai abilitato la pubblicazione delle metriche su. CloudWatch | Stringa | *<cloudwatch\$1log\$1group\$1name>* | 
| `SAGEMAKER_TRITON_CLOUDWATCH_METRIC_NAMESPACE` | Obbligatorio se hai abilitato la pubblicazione delle metriche su. CloudWatch | Stringa | *<cloudwatch\$1metric\$1namespace>* | 
| `SAGEMAKER_TRITON_ADDITIONAL_ARGS` | Aggiunge eventuali argomenti aggiuntivi all'avvio del server Triton. | Stringa | *<additional\$1args>* | 

# Implementazione di modelli all'edge con Edge Manager SageMaker
<a name="edge"></a>

**avvertimento**  
 SageMaker Edge Manager verrà interrotto il 26 aprile 2024. Per ulteriori informazioni su come continuare a implementare i modelli sui dispositivi edge, vedere [SageMaker Fine del ciclo di vita di Edge Manager](edge-eol.md). 

Amazon SageMaker Edge Manager fornisce la gestione dei modelli per i dispositivi edge in modo da ottimizzare, proteggere, monitorare e mantenere modelli di machine learning su flotte di dispositivi edge come telecamere intelligenti, robot, personal computer e dispositivi mobili.

## Perché usare Edge Manager?
<a name="edge-what-it-is"></a>

Molti casi d'uso di machine learning (ML) richiedono l'esecuzione di modelli ML su un parco di dispositivi edge, il che consente di ottenere previsioni in real-time, preserva la privacy degli utenti finali e riduce il costo della connettività di rete. Con la crescente disponibilità di hardware edge a basso consumo progettati per il machine learning, è ora possibile eseguire più modelli di rete neurale complessi su dispositivi edge. 

Tuttavia, utilizzare modelli di ML su dispositivi edge è difficile, perché i dispositivi, a differenza delle istanze cloud, hanno capacità di elaborazione, memoria e connettività limitate. Una volta distribuito il modello, è necessario monitorarlo continuamente, poiché la sua deviazione può causare un deterioramento della qualità del modello nel tempo. Il monitoraggio dei modelli su tutti i parchi dispositivi è difficile perché è necessario scrivere codice personalizzati per raccogliere campioni di dati dal dispositivo e riconoscere l'asimmetria nelle previsioni. Inoltre, i modelli sono spesso codificati nell'applicazione. Per aggiornare il modello, è necessario ricostruire e aggiornare l'intero firmware dell'applicazione o del dispositivo, il che può interrompere le operazioni.

Con SageMaker Edge Manager, puoi ottimizzare, eseguire, monitorare e aggiornare i modelli di machine learning su flotte di dispositivi periferici.

## Come funziona?
<a name="edge-how-it-works"></a>

Ad alto livello, ci sono cinque componenti principali nel flusso di lavoro di SageMaker Edge Manager: compilazione di modelli con SageMaker Neo, creazione di pacchetti di modelli NEO-compilati, distribuzione di modelli sui dispositivi, esecuzione di modelli sul motore di inferenza SageMaker AI (agente Edge Manager) e manutenzione dei modelli sui dispositivi.

![\[I cinque componenti principali del flusso di lavoro di Edge Manager. SageMaker\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/smith_overview.png)


SageMaker Edge Manager utilizza SageMaker Neo per ottimizzare i modelli per l'hardware di destinazione con un clic, quindi per firmare crittograficamente i modelli prima della distribuzione. Utilizzando SageMaker Edge Manager, puoi campionare i dati di input e output dei modelli dai dispositivi edge e inviarli al cloud per il monitoraggio e l'analisi, e visualizzare una dashboard che traccia e riporta visivamente il funzionamento dei modelli distribuiti all'interno della SageMaker console AI.

SageMaker Edge Manager estende le funzionalità che in precedenza erano disponibili solo nel cloud all'edge, in modo che gli sviluppatori possano migliorare continuamente la qualità dei modelli utilizzando Amazon SageMaker Model Monitor per il rilevamento delle deviazioni, quindi rietichettare i dati con SageMaker AI Ground Truth e riqualificare i modelli nell'intelligenza artificiale. SageMaker 

## Come posso usare SageMaker Edge Manager?
<a name="edge-how-to-use"></a>

Se utilizzi SageMaker Edge Manager per la prima volta, ti consigliamo di fare quanto segue:

1. **Leggi la sezione [Nozioni di base](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manager-getting-started.html)**: questa sezione ti spiega come configurare il tuo primo processo di creazione di pacchetti edge e creare il tuo primo parco.

1. **Esplora gli esempi di notebook Jupyter di Edge Manager: i taccuini** [di esempio sono archiviati nel repository nella cartella sagemaker\$1edge\$1manager. [amazon-sagemaker-examples](https://github.com/aws/amazon-sagemaker-examples) GitHub ](https://github.com/aws/amazon-sagemaker-examples/tree/master/sagemaker_edge_manager)

# Primi passi con Amazon SageMaker AI Edge Manager
<a name="edge-manager-getting-started"></a>

Questa guida dimostra come completare i passaggi necessari per registrare, distribuire e gestire una flotta di dispositivi e come soddisfare i prerequisiti di Amazon SageMaker AI Edge Manager. 

**Topics**
+ [Configurazione](edge-getting-started-step1.md)
+ [Preparazione del modello per l’implementazione](edge-getting-started-step2.md)
+ [Registrazione e autenticazione del parco dispositivi](edge-getting-started-step3.md)
+ [Scarica e configura Edge Manager](edge-getting-started-step4.md)
+ [Eseguire l'agente](edge-getting-started-step5.md)

# Configurazione
<a name="edge-getting-started-step1"></a>

Prima di iniziare a utilizzare SageMaker Edge Manager per gestire i modelli sulle tue flotte di dispositivi, devi creare ruoli IAM per AI e. SageMaker AWS IoT Dovrai anche creare almeno un bucket Amazon S3 in cui archiviare il tuo modello pre-addestrato, l'output del tuo processo di compilazione SageMaker Neo e i dati di input dai tuoi dispositivi edge.

## Registrati per un Account AWS
<a name="sign-up-for-aws"></a>

Se non ne hai uno Account AWS, completa i seguenti passaggi per crearne uno.

**Per iscriverti a un Account AWS**

1. Apri la [https://portal.aws.amazon.com/billing/registrazione.](https://portal.aws.amazon.com/billing/signup)

1. Segui le istruzioni online.

   Nel corso della procedura di registrazione riceverai una telefonata o un messaggio di testo e ti verrà chiesto di inserire un codice di verifica attraverso la tastiera del telefono.

   Quando ti iscrivi a un Account AWS, *Utente root dell'account AWS*viene creato un. L’utente root dispone dell’accesso a tutte le risorse e tutti i Servizi AWS nell’account. Come best practice di sicurezza, assegna l’accesso amministrativo a un utente e utilizza solo l’utente root per eseguire [attività che richiedono l’accesso di un utente root](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_root-user.html#root-user-tasks).

AWS ti invia un'email di conferma dopo il completamento della procedura di registrazione. In qualsiasi momento, puoi visualizzare l'attività corrente del tuo account e gestirlo accedendo a [https://aws.amazon.com/](https://aws.amazon.com/)e scegliendo **Il mio account**.

## Crea un utente con accesso amministrativo
<a name="create-an-admin"></a>

Dopo esserti registrato Account AWS, proteggi Utente root dell'account AWS AWS IAM Identity Center, abilita e crea un utente amministrativo in modo da non utilizzare l'utente root per le attività quotidiane.

**Proteggi i tuoi Utente root dell'account AWS**

1.  Accedi [Console di gestione AWS](https://console.aws.amazon.com/)come proprietario dell'account scegliendo **Utente root** e inserendo il tuo indirizzo Account AWS email. Nella pagina successiva, inserisci la password.

   Per informazioni sull’accesso utilizzando un utente root, consulta la pagina [Accedere come utente root](https://docs.aws.amazon.com/signin/latest/userguide/console-sign-in-tutorials.html#introduction-to-root-user-sign-in-tutorial) nella *Guida per l’utente di Accedi ad AWS *.

1. Abilita l’autenticazione a più fattori (MFA) per l’utente root.

   Per istruzioni, consulta [Abilitare un dispositivo MFA virtuale per l'utente Account AWS root (console)](https://docs.aws.amazon.com/IAM/latest/UserGuide/enable-virt-mfa-for-root.html) nella Guida per l'*utente IAM*.

**Crea un utente con accesso amministrativo**

1. Abilita il Centro identità IAM.

   Per istruzioni, consulta [Abilitazione del AWS IAM Identity Center](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-set-up-for-idc.html) nella *Guida per l’utente di AWS IAM Identity Center *.

1. Nel Centro identità IAM, assegna l’accesso amministrativo a un utente.

   Per un tutorial sull'utilizzo di IAM Identity Center directory come fonte di identità, consulta [Configurare l'accesso utente con l'impostazione predefinita IAM Identity Center directory](https://docs.aws.amazon.com//singlesignon/latest/userguide/quick-start-default-idc.html) nella *Guida per l'AWS IAM Identity Center utente*.

**Accesso come utente amministratore**
+ Per accedere come utente del Centro identità IAM, utilizza l’URL di accesso che è stato inviato al tuo indirizzo e-mail quando hai creato l’utente del Centro identità IAM.

  Per informazioni sull'accesso utilizzando un utente IAM Identity Center, consulta [AWS Accedere al portale di accesso](https://docs.aws.amazon.com/signin/latest/userguide/iam-id-center-sign-in-tutorial.html) nella *Guida per l'Accedi ad AWS utente*.

**Assegnazione dell’accesso ad altri utenti**

1. Nel Centro identità IAM, crea un set di autorizzazioni conforme alla best practice per l’applicazione di autorizzazioni con il privilegio minimo.

   Segui le istruzioni riportate nella pagina [Creazione di un set di autorizzazioni](https://docs.aws.amazon.com//singlesignon/latest/userguide/get-started-create-a-permission-set.html) nella *Guida per l’utente di AWS IAM Identity Center *.

1. Assegna al gruppo prima gli utenti e poi l’accesso con autenticazione unica (Single Sign-On).

   Per istruzioni, consulta [Aggiungere gruppi](https://docs.aws.amazon.com//singlesignon/latest/userguide/addgroups.html) nella *Guida per l’utente di AWS IAM Identity Center *.

## Crea ruoli e storage
<a name="edge-getting-started-step1-create-role"></a>

SageMaker Edge Manager deve accedere all'URI del bucket Amazon S3. Per facilitare questa operazione, crea un ruolo IAM in grado di eseguire l' SageMaker intelligenza artificiale e che disponga dell'autorizzazione per accedere ad Amazon S3. Utilizzando questo ruolo, l' SageMaker intelligenza artificiale può funzionare con il tuo account e accedere al tuo bucket Amazon S3.

Puoi creare un ruolo IAM utilizzando la console IAM, AWS SDK for Python (Boto3) oppure. AWS CLI Di seguito è riportato un esempio di come creare un ruolo IAM, collegare le policy necessarie con la console IAM e creare un bucket Amazon S3.

1. **Crea un ruolo IAM per Amazon SageMaker AI.**

   1. Accedi Console di gestione AWS e apri la console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/).

   1. Nel pannello di navigazione della console IAM, scegliere **Ruoli** e quindi **Crea ruolo**.

   1. Per **Seleziona tipo di entità attendibile**, seleziona **Servizio AWS **.

   1. Scegliere il servizio a cui concedere l'autorizzazione ad assumere il ruolo. In questo caso, scegli **SageMaker AI**. Quindi scegliere **Next: Permissions (Successivo: Autorizzazioni)**.
      + Questo crea automaticamente una policy IAM che garantisce l'accesso a servizi correlati come Amazon S3, Amazon ECR e Logs. CloudWatch 

   1. Scegli **Successivo: Tag**.

   1. (Facoltativo) Aggiungere metadati al ruolo collegando i tag come coppie chiave-valore. Per ulteriori informazioni sull'utilizzo dei tag con IAM, consulta [Tagging delle risorse IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_tags.html).

   1. Scegli **Prossimo: Rivedi**.

   1. Digita un **Nome ruolo**. 

   1. Se possibile, digitare un nome del ruolo o un suffisso del nome del ruolo. I nomi dei ruoli devono essere univoci all'interno del tuo account. AWS Non si distinguono per caso. Ad esempio, non è possibile creare ruoli denominati sia `PRODROLE` che `prodrole`. Poiché altre AWS risorse potrebbero fare riferimento al ruolo, non è possibile modificare il nome del ruolo dopo che è stato creato.

   1. (Facoltativo) In **Role description (Descrizione ruolo)**, immettere una descrizione per il nuovo ruolo.

   1. Rivedere il ruolo e scegliere **Crea ruolo**.

      Nota l' SageMaker AI Role ARN, che usi per creare un lavoro di compilazione con SageMaker Neo e un lavoro di packaging con Edge Manager. Per trovare l'ARN del ruolo tramite la console, effettua le seguenti operazioni:

      1. Vai a: IAMconsole [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

      1. Seleziona **Ruoli**.

      1. Cerca il ruolo appena creato digitando il nome del ruolo nel campo di ricerca.

      1. Seleziona il ruolo.

      1. L'ARN del ruolo si trova nella parte superiore della pagina **Riepilogo**.

1. **Crea un ruolo IAM per AWS IoT.**

   Il ruolo AWS IoT IAM che crei viene utilizzato per autorizzare i tuoi oggetti thing. Utilizzi anche il ruolo IAM ARN per creare e registrare flotte di dispositivi con un oggetto client SageMaker AI.

   Configura un ruolo IAM nel tuo AWS account affinché il provider di credenziali lo assuma per conto dei dispositivi del tuo parco dispositivi. Quindi, allega una policy per autorizzare i tuoi dispositivi a interagire con AWS IoT i servizi.

   Crea un ruolo a livello di programmazione AWS IoT o con la console IAM, in modo simile a quello che hai fatto quando hai creato un ruolo per l'IA. SageMaker 

   1. Accedi Console di gestione AWS e apri la console IAM all'indirizzo. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

   1. Nel pannello di navigazione della console IAM, scegliere **Ruoli** e quindi **Crea ruolo**.

   1. Per **Seleziona tipo di entità attendibile**, seleziona **Servizio AWS **.

   1. Scegliere il servizio a cui concedere l'autorizzazione ad assumere il ruolo. In questo caso, scegli **IoT**. Seleziona **IoT** come **caso d'uso**.

   1. Scegliere **Next: Permissions (Successivo: Autorizzazioni)**.

   1. Scegliere **Next: Tags (Successivo: Tag)**.

   1. (Facoltativo) Aggiungere metadati al ruolo collegando i tag come coppie chiave-valore. Per ulteriori informazioni sull'utilizzo dei tag con IAM, consulta [Tagging delle risorse IAM](https://docs.aws.amazon.com//IAM/latest/UserGuide/id_tags.html).

   1. Scegli **Prossimo: Rivedi**.

   1. Digita un **Nome ruolo**. Il nome del ruolo deve iniziare con `SageMaker AI`.

   1. (Facoltativo) In **Role description (Descrizione ruolo)**, immettere una descrizione per il nuovo ruolo.

   1. Rivedere il ruolo e scegliere **Crea ruolo**.

   1. Una volta creato il ruolo, scegli **Ruoli** nella console IAM. Cerca il ruolo creato digitando il nome del ruolo nel campo **Cerca**.

   1. Scegli il tuo ruolo.

   1. Quindi, scegli **Collega policy**.

   1. Cerca `AmazonSageMakerEdgeDeviceFleetPolicy` nel campo **Cerca**. Seleziona `AmazonSageMakerEdgeDeviceFleetPolicy`.

   1. Scegli **Collega policy**.

   1. Aggiungi la seguente Istruzione della policy alla relazione di attendibilità:

------
#### [ JSON ]

****  

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

------

      Una policy di attendibilità [documento di policy JSON](https://docs.aws.amazon.com//IAM/latest/UserGuide/reference_policies_grammar) in cui si definiscono i principali considerati attendibili per assumere il ruolo. Per ulteriori informazioni sulle policy di attendibilità, consulta [Termini e concetti dei ruoli](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html).

   1. Nota il AWS IoT ruolo ARN. Utilizzi il AWS IoT Role ARN per creare e registrare il parco dispositivi. Per trovare l'ARN del ruolo IAM con la console:

      1. Vai alla console IAM: [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

      1. Scegli **Ruoli**.

      1. Cerca il ruolo creato digitando il nome del ruolo nel campo **Cerca**.

      1. Seleziona il ruolo.

      1. L'ARN del ruolo si trova nella pagina di riepilogo.

1. **Creare un bucket Amazon S3**.

   SageMaker Neo ed Edge Manager accedono al modello precompilato e al modello compilato da un bucket Amazon S3. Edge Manager archivia anche dati di esempio dal tuo parco dispositivi in Amazon S3.

   1. Apri la console Amazon S3 all'indirizzo. [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)

   1. Seleziona **Crea bucket**.

   1. In **Nome bucket**, inserisci un nome del bucket.

   1. In **Regione**, scegli la AWS regione in cui desideri che risieda il bucket.

   1. In **Bucket settings for Block Public Access (Impostazioni bucket per blocco dell'accesso pubblico)**, scegliere le impostazioni che si desidera applicare al bucket.

   1. Seleziona **Crea bucket**.

   Per ulteriori informazioni su bucket Amazon S3, consulta [ Nozioni di base su Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/GetStartedWithS3.html).

# Preparazione del modello per l’implementazione
<a name="edge-getting-started-step2"></a>

In questa sezione creerai oggetti di SageMaker intelligenza artificiale e AWS IoT client, scaricherai un modello di machine learning pre-addestrato, caricherai il tuo modello nel tuo bucket Amazon S3, compilerai il tuo modello per il tuo dispositivo di destinazione SageMaker con Neo e impacchetterai il tuo modello in modo che possa essere distribuito con l'agente Edge Manager.

1. **Importare librerie e creare oggetti client.**

   Questo tutorial lo utilizza AWS SDK per Python (Boto3) per creare client per interagire con SageMaker AI, Amazon S3 e. AWS IoT

   Importa Boto3, specifica la tua Regione e inizializza gli oggetti client necessari come mostrato nell'esempio seguente:

   ```
   import boto3
   import json
   import time
   
   AWS_REGION = 'us-west-2'# Specify your Region
   bucket = 'bucket-name'
   
   sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION)
   iot_client = boto3.client('iot', region_name=AWS_REGION)
   ```

   Definisci le variabili e assegna loro il ruolo ARN che hai creato SageMaker per l'IA AWS IoT e come stringhe:

   ```
   # Replace with the role ARN you created for SageMaker
   sagemaker_role_arn = "arn:aws:iam::<account>:role/*"
   
   # Replace with the role ARN you created for AWS IoT. 
   # Note: The name must start with 'SageMaker'
   iot_role_arn = "arn:aws:iam::<account>:role/SageMaker*"
   ```

1. **Addestrare un modello di machine learning**

   Consulta [Train a Model with Amazon SageMaker](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html) per ulteriori informazioni su come addestrare un modello di machine learning utilizzando l' SageMaker intelligenza artificiale. Facoltativamente, puoi caricare il tuo modello addestrato localmente direttamente in un bucket URI Amazon S3.

   Se non disponi ancora di un modello, puoi utilizzare un modello già addestrato per le fasi successive di questo tutorial. Ad esempio, puoi salvare i modelli MobileNet V2 dal TensorFlow framework. MobileNet V2 è un modello di classificazione delle immagini ottimizzato per le applicazioni mobili. [Per ulteriori informazioni sulla MobileNet V2, consulta il MobileNet GitHub file README.](https://github.com/tensorflow/models/tree/master/research/slim/nets/mobilenet)

   Digita quanto segue nel tuo notebook Jupyter per salvare il modello V2 pre-addestrato: MobileNet 

   ```
   # Save the MobileNet V2 model to local storage
      import tensorflow as tf
      model = tf.keras.applications.MobileNetV2()
      model.save(“mobilenet_v2.h5”)
   ```
**Nota**  
Se non l'hai TensorFlow installato, puoi farlo eseguendo `pip install tensorflow=2.4`
Usa TensorFlow la versione 2.4 o precedente per questo tutorial.

   Il modello verrà salvato nel file `mobilenet_v2.h5`. Prima di impacchettare il modello, dovrai prima compilare il tuo modello usando SageMaker Neo. Controlla se [Framework, dispositivi, sistemi e architetture supportati](neo-supported-devices-edge.md) la tua versione di TensorFlow (o altro framework a tua scelta) è attualmente supportata da SageMaker Neo.

   SageMaker Neo richiede che i modelli vengano archiviati come file TAR compresso. Rimpacchettarlo come file TAR compresso (\$1.tar.gz):

   ```
   # Package MobileNet V2 model into a TAR file 
      import tarfile
      
      tarfile_name='mobilenet-v2.tar.gz'
      
      with tarfile.open(tarfile_name, mode='w:gz') as archive:
          archive.add('mobilenet-v2.h5')
   ```

1. **Caricare i proprio modello su Amazon S3.**

   Una volta ottenuto un modello di machine learning, archiviarlo in un bucket Amazon S3. *L'esempio seguente utilizza un AWS CLI comando per caricare il modello nel bucket Amazon S3 creato in precedenza in una directory chiamata models.* Digita quanto segue nel tuo notebook Jupyter:

   ```
   !aws s3 cp mobilenet-v2.tar.gz s3://{bucket}/models/
   ```

1. **Compila il tuo modello con Neo. SageMaker **

   Compila il tuo modello di machine learning con SageMaker Neo per un dispositivo edge. È necessario conoscere l'URI del bucket Amazon S3 in cui è stato archiviato il modello addestrato, il framework di machine learning utilizzato per addestrare il modello, la forma dell'input del modello e il dispositivo di destinazione.

   Per il modello MobileNet V2, usa quanto segue:

   ```
   framework = 'tensorflow'
   target_device = 'jetson_nano'
   data_shape = '{"data":[1,3,224,224]}'
   ```

   SageMaker Neo richiede una forma di input del modello e un formato del modello specifici basati sul framework di deep learning utilizzato. Per ulteriori informazioni su come salvare il modello, consulta [Quali forme di dati di input si aspetta SageMaker Neo?](neo-compilation-preparing-model.md#neo-job-compilation-expected-inputs). Per ulteriori informazioni sui framework supportati da Neo, consulta [Framework, dispositivi, sistemi e architetture supportati](neo-supported-devices-edge.md).

   Usa l'`CreateCompilationJob`API per creare un lavoro di compilazione con SageMaker Neo. Fornisci un nome al processo di compilazione, l'ARN del ruolo SageMaker AI, l'URI Amazon S3 in cui è archiviato il modello, la forma di input del modello, il nome del framework, l'URI Amazon S3 in cui SageMaker desideri che l'IA memorizzi il modello compilato e il target del dispositivo edge.

   ```
   # Specify the path where your model is stored
   model_directory = 'models'
   s3_model_uri = 's3://{}/{}/{}'.format(bucket, model_directory, tarfile_name)
   
   # Store compiled model in S3 within the 'compiled-models' directory
   compilation_output_dir = 'compiled-models'
   s3_output_location = 's3://{}/{}/'.format(bucket, compilation_output_dir)
   
   # Give your compilation job a name
   compilation_job_name = 'getting-started-demo'
   
   sagemaker_client.create_compilation_job(CompilationJobName=compilation_job_name,
                                           RoleArn=sagemaker_role_arn,
                                           InputConfig={
                                               'S3Uri': s3_model_uri,
                                               'DataInputConfig': data_shape,
                                               'Framework' : framework.upper()},
                                           OutputConfig={
                                               'S3OutputLocation': s3_output_location,
                                               'TargetDevice': target_device},
                                           StoppingCondition={'MaxRuntimeInSeconds': 900})
   ```

1. **Impacchettate il proprio modello compilato.**

   I processi di packaging utilizzano modelli SageMaker NEO compilati e apportano le modifiche necessarie per distribuire il modello con il motore di inferenza, l'agente Edge Manager. Per impacchettare il tuo modello, crea un processo di edge packaging con l'`create_edge_packaging`API o la console AI. SageMaker 

   Devi fornire il nome che hai usato per il tuo processo di compilazione Neo, un nome per il processo di impacchettamento, un ARN del ruolo (vedi sezione [Configurazione](edge-getting-started-step1.md)), un nome per il modello, una versione del modello e l'URI del bucket Amazon S3 per l'output del processo di creazione pacchetti. Si noti che i nomi dei processi di creazione pacchetti di Edge Manager fanno distinzione tra maiuscole e minuscole. Ecco un esempio di come creare un creazione pacchetti utilizzando l'API.

   ```
   edge_packaging_name='edge-packaging-demo'
   model_name="sample-model"
   model_version="1.1"
   ```

   Definisci l'URI Amazon S3 in cui desideri memorizzare il modello in pacchetto.

   ```
   # Output directory where you want to store the output of the packaging job
   packaging_output_dir = 'packaged_models'
   packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)
   ```

   Utilizza `CreateEdgePackagingJob` per impacchettare il tuo modello NEO-compilato. Fornisci un nome per il tuo processo di creazione di pacchetti edge e il nome che hai fornito per il tuo processo di compilazione (in questo esempio, è stato memorizzato nella variabile `compilation_job_name`). Fornisci anche un nome per il tuo modello, una versione per il tuo modello (utilizzata per aiutarti a tenere traccia della versione del modello che stai utilizzando) e l'URI S3 in cui desideri che l' SageMaker IA memorizzi il modello confezionato.

   ```
   sagemaker_client.create_edge_packaging_job(
                       EdgePackagingJobName=edge_packaging_name,
                       CompilationJobName=compilation_job_name,
                       RoleArn=sagemaker_role_arn,
                       ModelName=model_name,
                       ModelVersion=model_version,
                       OutputConfig={
                           "S3OutputLocation": packaging_s3_output
                           }
                       )
   ```

# Registrazione e autenticazione del parco dispositivi
<a name="edge-getting-started-step3"></a>

In questa sezione creerai il tuo AWS IoT oggetto, creerai un parco dispositivi, registrerai il tuo parco dispositivi in modo che possa interagire con il cloud, creerai certificati X.509 per autenticare i tuoi dispositivi AWS IoT Core, assocerai l'alias di ruolo a AWS IoT quello generato al momento della creazione del parco dispositivi, otterrai un endpoint AWS specifico dell'account per il fornitore di credenziali, otterrai un file Amazon Root CA ufficiale e caricherai il file Amazon CA su Amazon S3.

1. **Crea cose. AWS IoT **

   SageMaker Edge Manager sfrutta i AWS IoT Core servizi per facilitare la connessione tra i dispositivi perimetrali e gli endpoint nel AWS cloud. È possibile sfruttare le AWS IoT funzionalità esistenti dopo aver configurato i dispositivi per l'utilizzo con Edge Manager.

   Per connettere il tuo dispositivo a AWS IoT, devi creare AWS IoT *oggetti*, creare e registrare un certificato client con AWS IoT e creare e configurare il ruolo IAM per i tuoi dispositivi.

   Innanzitutto, crea AWS IoT oggetti con il AWS IoT client (`iot_client`) che hai creato in precedenza con Boto3. L'esempio seguente mostra come creare due oggetti .

   ```
   iot_thing_name = 'sample-device'
   iot_thing_type = 'getting-started-demo'
   
   iot_client.create_thing_type(
       thingTypeName=iot_thing_type
   )
   
   # Create an AWS IoT thing objects
   iot_client.create_thing(
       thingName=iot_thing_name,
       thingTypeName=iot_thing_type
   )
   ```

1. **Creare il proprio parco dispositivi.**

   Crea una flotta di dispositivi con l'oggetto client SageMaker AI definito in un passaggio precedente. Puoi anche utilizzare la console SageMaker AI per creare un parco dispositivi.

   ```
   import time
   device_fleet_name="demo-device-fleet" + str(time.time()).split('.')[0]
   device_name="sagemaker-edge-demo-device" + str(time.time()).split('.')[0]
   ```

   Specifica l'ARN del ruolo IoT. Ciò consente di AWS IoT concedere credenziali temporanee ai dispositivi.

   ```
   device_model_directory='device_output'
   s3_device_fleet_output = 's3://{}/{}'.format(bucket, device_model_directory)
   
   sagemaker_client.create_device_fleet(
       DeviceFleetName=device_fleet_name,
       RoleArn=iot_role_arn, # IoT Role ARN specified in previous step
       OutputConfig={
           'S3OutputLocation': s3_device_fleet_output
       }
   )
   ```

   Un alias di AWS IoT ruolo viene creato quando si crea un parco dispositivi. Questo alias di ruolo è associato all' AWS IoT utilizzo dell'`iot_client`oggetto in una fase successiva.

1. **Registrare il proprio parco dispositivi.**

   Per interagire con il cloud, è necessario registrare il dispositivo con SageMaker Edge Manager. In questo esempio, registri un singolo dispositivo con il parco che hai creato. Per registrare il dispositivo, è necessario fornire il nome del dispositivo e il nome dell'oggetto AWS IoT , come illustrato nell'esempio seguente:

   ```
   # Device name should be 36 characters
   device_name = "sagemaker-edge-demo-device" + str(time.time()).split('.')[0]
   
   sagemaker_client.register_devices(
       DeviceFleetName=device_fleet_name,
       Devices=[
           {
               "DeviceName": device_name,
               "IotThingName": iot_thing_name
           }
       ]
   )
   ```

1. **Creare certificati X.509.**

   Dopo aver creato l' AWS IoT oggetto oggetto, è necessario creare un certificato di dispositivo X.509 per l'oggetto oggetto. Questo certificato autentica il proprio dispositivo a AWS IoT Core.

   Utilizzate quanto segue per creare una chiave privata, una chiave pubblica e un file di certificato X.509 utilizzando il AWS IoT client defined () in precedenza. `iot_client`

   ```
   # Creates a 2048-bit RSA key pair and issues an X.509 # certificate 
   # using the issued public key.
   create_cert = iot_client.create_keys_and_certificate(
       setAsActive=True 
   )
   
   # Get certificate from dictionary object and save in its own
   with open('./device.pem.crt', 'w') as f:
       for line in create_cert['certificatePem'].split('\n'):
           f.write(line)
           f.write('\n')
   # Get private key from dictionary object and save in its own 
   with open('./private.pem.key', 'w') as f:
       for line in create_cert['keyPair']['PrivateKey'].split('\n'):
           f.write(line)
           f.write('\n')
   # Get a private key from dictionary object and save in its own 
   with open('./public.pem.key', 'w') as f:
       for line in create_cert['keyPair']['PublicKey'].split('\n'):
           f.write(line)
           f.write('\n')
   ```

1. **Associa l'alias del ruolo a. AWS IoT**

   Quando crei un parco dispositivi con SageMaker AI (`sagemaker_client.create_device_fleet()`), viene generato automaticamente un alias di ruolo. Un alias di AWS IoT ruolo fornisce un meccanismo che consente ai dispositivi connessi di autenticarsi AWS IoT utilizzando certificati X.509 e quindi ottenere AWS credenziali di breve durata da un ruolo IAM associato a un alias di ruolo. AWS IoT L'alias del ruolo ti consente di modificare il ruolo del dispositivo senza doverlo aggiornare. Utilizza `DescribeDeviceFleet` per ottenere il nome alias del ruolo e l'ARN.

   ```
   # Print Amazon Resource Name (ARN) and alias that has access 
   # to AWS Internet of Things (IoT).
   sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name)
   
   # Store iot role alias string in a variable
   # Grabs role ARN
   full_role_alias_name = sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name)['IotRoleAlias']
   start_index = full_role_alias_name.find('SageMaker') # Find beginning of role name  
   role_alias_name = full_role_alias_name[start_index:]
   ```

   Utilizza il `iot_client` per facilitare l'associazione dell'alias di ruolo generato dalla creazione del parco dispositivi con: AWS IoT

   ```
   role_alias = iot_client.describe_role_alias(
                       roleAlias=role_alias_name)
   ```

   Per ulteriori informazioni sull'alias del ruolo IAM, consulta [L'alias del ruolo consente l'accesso a servizi inutilizzati](https://docs.aws.amazon.com/iot/latest/developerguide/audit-chk-role-alias-unused-svcs.html).

   Hai creato e registrato un certificato con Previous AWS IoT per l'autenticazione corretta del tuo dispositivo. Ora devi creare e collegare una policy al certificato per autorizzare la richiesta del token di sicurezza.

   ```
   alias_policy = {
     "Version": "2012-10-17",		 	 	 
     "Statement": {
       "Effect": "Allow",
       "Action": "iot:AssumeRoleWithCertificate",
       "Resource": role_alias['roleAliasDescription']['roleAliasArn']
     }
   }
   
   policy_name = 'aliaspolicy-'+ str(time.time()).split('.')[0]
   aliaspolicy = iot_client.create_policy(policyName=policy_name,
                                          policyDocument=json.dumps(alias_policy))
   
   # Attach policy
   iot_client.attach_policy(policyName=policy_name,
                               target=create_cert['certificateArn'])
   ```

1. **Richiedi l'endpoint AWS specifico dell'account per il fornitore delle credenziali.**

   I dispositivi Edge necessitano di un endpoint per assumere le credenziali. Ottieni l'endpoint AWS specifico dell'account per il fornitore delle credenziali.

   ```
   # Get the unique endpoint specific to your AWS account that is making the call.
   iot_endpoint = iot_client.describe_endpoint(
       endpointType='iot:CredentialProvider'
   )
   
   endpoint="https://{}/role-aliases/{}/credentials".format(iot_endpoint['endpointAddress'],role_alias_name)
   ```

1. **Ottieni il file CA root ufficiale di Amazon e caricalo sul bucket Amazon S3**.

   Usa quanto segue nel tuo Jupyter Notebook oppure AWS CLI (se usi il tuo terminale), rimuovi il simbolo «\$1» funzione magica):

   ```
   !wget https://www.amazontrust.com/repository/AmazonRootCA1.pem
   ```

   Utilizza l'endpoint per effettuare una richiesta HTTPS al fornitore di credenziali per restituire un token di sicurezza. Il comando di esempio seguente utilizza `curl`, ma è possibile utilizzare qualsiasi client HTTP.

   ```
   !curl --cert device.pem.crt --key private.pem.key --cacert AmazonRootCA1.pem $endpoint
   ```

   Se il certificato è verificato, carica le chiavi e il certificato nell'URI del tuo bucket Amazon S3:

   ```
   !aws s3 cp private.pem.key s3://{bucket}/authorization-files/
   !aws s3 cp device.pem.crt s3://{bucket}/authorization-files/
   !aws s3 cp AmazonRootCA1.pem s3://{bucket}/authorization-files/
   ```

   Pulisci la directory di lavoro spostando le chiavi e il certificato in un'altra directory:

   ```
   # Optional - Clean up working directory
   !mkdir authorization-files
   !mv private.pem.key device.pem.crt AmazonRootCA1.pem authorization-files/
   ```

# Scarica e configura Edge Manager
<a name="edge-getting-started-step4"></a>

L'agente Edge Manager è un motore di inferenza per i dispositivi edge. Usa l'agente per fare previsioni con modelli caricati sui tuoi dispositivi edge. L'agente raccoglie anche i parametri dei modelli e acquisisce i dati a intervalli specifici.



In questa sezione configurerai il tuo dispositivo con l'agente. Per fare ciò, prima copia, localmente sul tuo computer, un artefatto di rilascio e il certificato root di firma dal bucket di rilascio. Dopo aver decompresso l'artefatto di rilascio, caricalo su Amazon S3. Quindi, definisci e salva un file di configurazione per l'agente. Viene fornito un modello da copiare e incollare. Infine, copia sul tuo dispositivo gli artefatti della versione, il file di configurazione e le credenziali.

1. **Scarica l'agente SageMaker Edge Manager.**

   L'agente viene rilasciato in formato binario per i sistemi operativi supportati. Questo esempio esegue l'inferenza su un Jetson Nano che utilizza un sistema operativo Linux e ha un'architettura. ARM64 Per ulteriori informazioni sul sistema operativo e sull'architettura utilizzati dai dispositivi supportati, vedere [Dispositivi, architetture di chip e sistemi supportati](neo-supported-devices-edge-devices.md).

   Recupera l'ultima versione dei file binari dal bucket di rilascio di SageMaker Edge Manager dalla regione us-west-2.

   ```
   !aws s3 ls s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/ | sort -r
   ```

   Ciò restituisce gli artefatti della versione ordinati in base alla loro versione.

   ```
                              PRE 1.20210512.96da6cc/
                              PRE 1.20210305.a4bc999/
                              PRE 1.20201218.81f481f/
                              PRE 1.20201207.02d0e97/
   ```

   La versione ha il formato seguente: `<MAJOR_VERSION>.<YYYY-MM-DD>.<SHA-7>`. Consiste di tre componenti:
   + `<MAJOR_VERSION>`: la versione del rilascio La versione del rilascio è attualmente impostata su `1`.
   + `<YYYY-MM-DD>`: Il timestamp del rilascio dell'artefatto.
   + <SHA-7>: L'ID commit del repository da cui viene creato il rilascio.

   Copia localmente o direttamente sul tuo dispositivo il file TAR compresso. L'esempio seguente mostra come copiare l'artefatto del rilascio più recente al momento del rilascio del documento.

   ```
   !aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/1.20201218.81f481f/1.20201218.81f481f.tgz ./
   ```

   Una volta ottenuto l'artefatto, decomprimi il file TAR compresso. Quanto segue decomprime il file TAR e lo memorizza in una directory chiamata: `agent_demo`

   ```
   !mkdir agent_demo
   !tar -xvzf 1.20201218.81f481f.tgz -C ./agent_demo
   ```

   Carica gli artefatti di rilascio dell'agente sul tuo bucket Amazon S3. Il seguente esempio di codice copia il contenuto all'interno di `agent_demo` e lo carica in una directory all'interno del bucket Amazon S3 chiamata: `agent_demo`

   ```
   !aws s3 cp --recursive ./agent_demo s3://{bucket}/agent_demo
   ```

   Sono inoltre necessari i certificati root per la firma dal bucket di rilascio:

   ```
   !aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Certificates/us-west-2/us-west-2.pem ./
   ```

   Carica il certificato root di firma sul tuo bucket Amazon S3:

   ```
   !aws s3 cp us-west-2.pem s3://{bucket}/authorization-files/
   ```

1. **Definire un file di configurazione dell'agente SageMaker Edge Manager.**

   Innanzitutto, definire il file di configurazione dell'agente come segue:

   ```
   sagemaker_edge_config = {
       "sagemaker_edge_core_device_name": "device_name",
       "sagemaker_edge_core_device_fleet_name": "device_fleet_name",
       "sagemaker_edge_core_capture_data_buffer_size": 30,
       "sagemaker_edge_core_capture_data_push_period_seconds": 4,
       "sagemaker_edge_core_folder_prefix": "demo_capture",
       "sagemaker_edge_core_region": "us-west-2",
       "sagemaker_edge_core_root_certs_path": "/agent_demo/certificates",
       "sagemaker_edge_provider_aws_ca_cert_file": "/agent_demo/iot-credentials/AmazonRootCA1.pem",
       "sagemaker_edge_provider_aws_cert_file": "/agent_demo/iot-credentials/device.pem.crt",
       "sagemaker_edge_provider_aws_cert_pk_file": "/agent_demo/iot-credentials/private.pem.key",
       "sagemaker_edge_provider_aws_iot_cred_endpoint": "endpoint",
       "sagemaker_edge_provider_provider": "Aws",
       "sagemaker_edge_provider_s3_bucket_name": bucket,
       "sagemaker_edge_core_capture_data_destination": "Cloud"
   }
   ```

   Sostituisci quanto segue:
   + `"device_name"` con il nome del tuo dispositivo (questa stringa è stata memorizzata in una fase precedente in una variabile denominata `device_name`).
   + `"device_fleet_name`" con il nome del tuo dispositivo (questa stringa è stata memorizzata in una fase precedente in una variabile denominata `device_fleet_name`).
   + `"endpoint"`con l'endpoint AWS specifico dell'account per il provider di credenziali (questa stringa è stata archiviata in un passaggio precedente in una variabile denominata). `endpoint`

   Quindi, salvalo come file JSON:

   ```
   edge_config_file = open("sagemaker_edge_config.json", "w")
   json.dump(sagemaker_edge_config, edge_config_file, indent = 6)
   edge_config_file.close()
   ```

   Carica il file di configurazione nel tuo bucket Amazon S3.

   ```
   !aws s3 cp sagemaker_edge_config.json s3://{bucket}/
   ```

1. **Copia sul tuo dispositivo gli artefatti della versione, il file di configurazione e le credenziali.**

   Le seguenti istruzioni vengono eseguite sul dispositivo edge stesso.
**Nota**  
Devi prima installare Python AWS SDK per Python (Boto3), the e the AWS CLI sul tuo dispositivo edge. 

   Apri un terminale sul dispositivo. Crea una cartella per memorizzare gli artefatti di rilascio, le tue credenziali e il file di configurazione.

   ```
   mkdir agent_demo
   cd agent_demo
   ```

   Copia il contenuto degli artefatti di rilascio archiviati nel bucket Amazon S3 sul dispositivo:

   ```
   # Copy release artifacts 
   aws s3 cp s3://<bucket-name>/agent_demo/ ./ --recursive
   ```

   (Il contenuto dell'artefatto di rilascio è stato archiviato in una fase precedente in una directory chiamata `agent_demo`). Sostituisci `<bucket-name>` e `agent_demo` rispettivamente con il nome del bucket Amazon S3 e il percorso del file degli artefatti di rilascio.

   Vai alla directory `/bin` e rendi eseguibili i file binari:

   ```
   cd bin
   
   chmod +x sagemaker_edge_agent_binary
   chmod +x sagemaker_edge_agent_client_example
   
   cd agent_demo
   ```

   Crea una directory per archiviare AWS IoT le tue credenziali e copia le credenziali dal tuo bucket Amazon S3 al tuo dispositivo edge (usa la stessa su che definisci nella variabile: `bucket`

   ```
   mkdir iot-credentials
   cd iot-credentials
   
   aws s3 cp s3://<bucket-name>/authorization-files/AmazonRootCA1.pem ./
   aws s3 cp s3://<bucket-name>/authorization-files/device.pem.crt ./
   aws s3 cp s3://<bucket-name>/authorization-files/private.pem.key ./
   
   cd ../
   ```

   Crea una directory per archiviare i certificati root di firma del modello:

   ```
   mkdir certificates
   
   cd certificates
   
   aws s3 cp s3://<bucket-name>/authorization-files/us-west-2.pem ./
   
   cd agent_demo
   ```

   Copia il file di configurazione sul tuo dispositivo:

   ```
   #Download config file from S3
   aws s3 cp s3://<bucket-name>/sagemaker_edge_config.json ./
   
   cd agent_demo
   ```

   La directory `agent_demo` sul dispositivo edge dovrebbe essere simile alla seguente:

   ```
   ├──agent_demo
   |    ├── bin
   |        ├── sagemaker_edge_agent_binary
   |        └── sagemaker_edge_agent_client_example
   |    ├── sagemaker_edge_config.json
   |    ├── certificates
   |        └──us-west-2.pem
   |    ├── iot-credentials
   |        ├── AmazonRootCA1.pem
   |        ├── device.pem.crt
   |        └── private.pem.key
   |    ├── docs
   |        ├── api
   |        └── examples
   |    ├── ATTRIBUTIONS.txt
   |    ├── LICENSE.txt  
   |    └── RELEASE_NOTES.md
   ```

# Eseguire l'agente
<a name="edge-getting-started-step5"></a>

In questa sezione eseguirai l'agente come binario utilizzando gRPC e controllerai che sia il dispositivo che il parco funzionino e raccolgano dati di esempio.

1. **Avvia l'agente.**

   L'agente SageMaker Edge Manager può essere eseguito come processo autonomo sotto forma di un file binario eseguibile ELF (Executable and Linkable Format) oppure può essere collegato come oggetto condiviso dinamico (.dll). L'esecuzione come binario eseguibile autonomo è la modalità preferita ed è supportata su Linux.

   Questo esempio utilizza gRPC per eseguire l'agente. gRPC è un framework RPC (Remote Procedure Call) open source ad alte prestazioni che può essere eseguito in qualsiasi ambiente. Per ulteriori informazioni su gRPC, consulta la [Documentazione di gRPC](https://grpc.io/docs/).

   Per utilizzare gRPC, esegui le seguenti fasi: 

   1. Definisci un servizio in un file .proto.

   1. Genera codice server e client utilizzando il compilatore buffer di protocollo.

   1. Uso dell'API gRPC Python (o altri linguaggi supportati da gRPC) per scrivere il server del proprio servizio.

   1. Uso dell'API gRPC Python (o altri linguaggi supportati da gRPC) per scrivere un client del proprio servizio. 

   L'elemento di rilascio scaricato contiene un'applicazione gRPC pronta per l'esecuzione dell'agente. L'esempio si trova nella directory `/bin` dell'artefatto di rilascio. L'eseguibile binario `sagemaker_edge_agent_binary` si trova in questa directory.

   Per eseguire l'agente con questo esempio, fornisci il percorso del file socket (.sock) e del file JSON .config:

   ```
   ./bin/sagemaker_edge_agent_binary -a /tmp/sagemaker_edge_agent_example.sock -c sagemaker_edge_config.json
   ```

1. **Controllare il proprio dispositivo.**

   Verifica che il dispositivo sia collegato e campioni i dati. Effettuando controlli periodici, manualmente o automaticamente, consente di verificare che il dispositivo o il parco funzionino correttamente.

   Fornisci il nome del parco a cui appartiene il dispositivo e l'identificatore univoco del dispositivo. Dal computer locale, esegui il seguente comando:

   ```
   sagemaker_client.describe_device(
       DeviceName=device_name,
       DeviceFleetName=device_fleet_name
   )
   ```

   Per un determinato modello, è possibile visualizzare il nome, la versione del modello, l'ora di campionamento più recente e la data dell'ultima inferenza.

   ```
   { 
     "DeviceName": "sample-device",
     "DeviceFleetName": "demo-device-fleet",
     "IoTThingName": "sample-thing-name-1",
     "RegistrationTime": 1600977370,
     "LatestHeartbeat": 1600977370,
     "Models":[
       {
           "ModelName": "mobilenet_v2.tar.gz", 
           "ModelVersion": "1.1",
           "LatestSampleTime": 1600977370,
           "LatestInference": 1600977370 
       }
     ]
   }
   ```

   Il timestamp fornito da `LastetHeartbeat` indica l'ultimo segnale ricevuto dal dispositivo. `LatestSampleTime` e `LatestInference` descrivono rispettivamente il timestamp dell'ultimo campione di dati e dell'inferenza.

1. **Controllare il proprio parco.**

   Verifica che il tuo parco funzioni con `GetDeviceFleetReport`. Fornisci il nome del parco a cui appartiene il dispositivo.

   ```
   sagemaker_client.get_device_fleet_report(
       DeviceFleetName=device_fleet_name
   )
   ```

   Per un determinato modello, è possibile visualizzare il nome, la versione del modello, l'ora di campionamento più recente e la data dell'ultima inferenza, oltre all'URI del bucket Amazon S3 in cui sono archiviati i campioni di dati.

   ```
   # Sample output
   {
    "DeviceFleetName": "sample-device-fleet",
    "DeviceFleetArn": "arn:aws:sagemaker:us-west-2:9999999999:device-fleet/sample-fleet-name",
    "OutputConfig": {
                 "S3OutputLocation": "s3://fleet-bucket/package_output",
     },
    "AgentVersions":[{"Version": "1.1", "AgentCount": 2}]}
    "DeviceStats": {"Connected": 2, "Registered": 2}, 
    "Models":[{
               "ModelName": "sample-model", 
               "ModelVersion": "1.1",
               "OfflineDeviceCount": 0,
               "ConnectedDeviceCount": 2,
               "ActiveDeviceCount": 2, 
               "SamplingDeviceCount": 100
               }]
   }
   ```

# Configurazione per dispositivi e flotte in Edge Manager SageMaker
<a name="edge-device-fleet"></a>

I parchi sono raccolte di dispositivi raggruppati logicamente che è possibile utilizzare per raccogliere e analizzare i dati. È possibile utilizzare SageMaker Edge Manager per utilizzare modelli di machine learning su una flotta di telecamere intelligenti, altoparlanti intelligenti, robot e altri dispositivi periferici.

Crea una flotta e registra i tuoi dispositivi in modo programmatico con AWS SDK per Python (Boto3) o tramite la SageMaker console AI.

**Topics**
+ [Creazione di un parco istanze](edge-device-fleet-create.md)
+ [Come registrare un dispositivo](edge-device-fleet-register.md)
+ [Verifiche di stato](edge-device-fleet-check-status.md)

# Creazione di un parco istanze
<a name="edge-device-fleet-create"></a>

[Puoi creare una flotta a livello di codice con AWS SDK per Python (Boto3) o tramite la console AI /sagemaker. SageMaker https://console.aws.amazon.com](https://console.aws.amazon.com/sagemaker/)

## Creare un parco (Boto3)
<a name="edge-device-fleet-create-boto3"></a>

Usa l'API `CreateDeviceFleet` per creare un parco. Specificate un nome per la flotta, il vostro AWS IoT Role ARN per il `RoleArn` campo e un URI Amazon S3 in cui desiderate che il dispositivo memorizzi i dati campionati.

Facoltativamente, puoi includere una descrizione della flotta, dei tag e un Key ID. AWS KMS 

```
import boto3

# Create SageMaker client so you can interact and manage SageMaker resources
sagemaker_client = boto3.client("sagemaker", region_name="aws-region")

sagemaker_client.create_device_fleet(
    DeviceFleetName="sample-fleet-name",
    RoleArn="arn:aws:iam::999999999:role/rolename", # IoT Role ARN
    Description="fleet description",
    OutputConfig={
        S3OutputLocation="s3://bucket/",
        KMSKeyId: "1234abcd-12ab-34cd-56ef-1234567890ab",
    },
        Tags=[
        {
            "Key": "string", 
            "Value" : "string"
         }
     ],
)
```

Quando crei un parco dispositivi, viene creato automaticamente un AWS IoT Role Alias. L'alias di AWS IoT ruolo fornisce un meccanismo per consentire ai dispositivi connessi di autenticarsi AWS IoT utilizzando certificati X.509 e quindi ottenere AWS credenziali di breve durata da un ruolo IAM associato all'alias di ruolo. AWS IoT 

Utilizza `DescribeDeviceFleet` per ottenere il nome alias del ruolo e l'ARN.

```
# Print Amazon Resource Name (ARN) and alias that has access 
# to AWS Internet of Things (IoT).
sagemaker_client.describe_device_fleet(DeviceFleetName=device_fleet_name)['IotRoleAlias']
```

Utilizza l'API `DescribeDeviceFleet` per ottenere una descrizione dei parchi che hai creato.

```
sagemaker_client.describe_device_fleet(
    DeviceFleetName="sample-fleet-name"
)
```

Per impostazione predefinita, restituisce il nome della flotta, l'ARN del parco dispositivi, l'URI del bucket Amazon S3, il ruolo IAM, l'alias del ruolo creato AWS IoT in, un timestamp di quando è stata creata la flotta e un timestamp dell'ultima modifica della flotta.

```
{ "DeviceFleetName": "sample-fleet-name",
  "DeviceFleetArn": "arn:aws:sagemaker:us-west-2:9999999999:device-fleet/sample-fleet-name",
  "IAMRole": "arn:aws:iam::999999999:role/rolename",
  "Description": "this is a sample fleet",
  "IoTRoleAlias": "arn:aws:iot:us-west-2:9999999999:rolealias/SagemakerEdge-sample-fleet-name"
  "OutputConfig": {
              "S3OutputLocation": "s3://bucket/folder",
              "KMSKeyId": "1234abcd-12ab-34cd-56ef-1234567890ab"
   },
   "CreationTime": "1600977370",
   "LastModifiedTime": "1600977370"}
```

## Creazione di un parco istanze (console)
<a name="edge-device-fleet-create-console"></a>

Puoi creare un processo di packaging di Edge Manager utilizzando la console Amazon SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker.](https://console.aws.amazon.com/sagemaker/)

1. Nella console SageMaker AI, scegli **Edge Manager**, quindi scegli flotte di dispositivi **Edge**.

1. Scegli **Crea un parco dispositivi**.  
![\[Posizione di Crea un parco dispositivi nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/create-device-button-edited.png)

1. Inserisci un nome per il parco nel campo **Nome del parco dispositivi**. Scegli **Next (Successivo)**.  
![\[Posizione del pulsante Avanti nella sezione Proprietà del parco dispositivi della console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/create-device-fleet-filled.png)

1. Nella pagina **Configurazione di output**, specifica l'URI del bucket Amazon S3 in cui desideri archiviare i dati di esempio del tuo parco dispositivi. Facoltativamente, puoi aggiungere anche una chiave di crittografia selezionando una AWS KMS chiave esistente dall'elenco a discesa o inserendo l'ARN di una chiave. Seleziona **Invia**.  
![\[Esempio di pagina Configurazione output della console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/create-device-fleet-output-filled.png)

1. Scegli il nome del tuo parco dispositivi per essere reindirizzato ai dettagli del parco dispositivi. Questa pagina mostra il nome del parco dispositivi, l'ARN, la descrizione (se ne hai fornita una), la data di creazione del parco dispositivi, l'ultima volta che il parco dispositivi è stato modificato, l'URI del bucket Amazon S3, l'ID chiave AWS KMS (se fornito), l'alias AWS IoT (se fornito) e il ruolo IAM. Se hai aggiunto dei tag, questi vengono visualizzati nella sezione **Tag del parco dispositivi**.

# Come registrare un dispositivo
<a name="edge-device-fleet-register"></a>

**Importante**  
La registrazione del dispositivo è necessaria per utilizzare qualsiasi parte di Edge Manager. SageMaker 

[Puoi creare una flotta a livello di codice con AWS SDK per Python (Boto3) o tramite la console SageMaker AI all'indirizzo https://console.aws.amazon.com /sagemaker.](https://console.aws.amazon.com/sagemaker/)

## Registrare un dispositivo (Boto3)
<a name="edge-device-fleet-register-boto3"></a>

Per registrare il tuo dispositivo, devi prima creare e registrare un oggetto AWS IoT oggetto e configurare un ruolo IAM. SageMaker Edge Manager sfrutta i AWS IoT Core servizi per facilitare la connessione tra i dispositivi edge e il cloud. È possibile sfruttare le AWS IoT funzionalità esistenti dopo aver configurato i dispositivi per l'utilizzo con Edge Manager.

Per connettere il dispositivo a, è AWS IoT necessario AWS IoT creare oggetti, creare e registrare un certificato client con AWS IoT e creare e configurare il ruolo IAM per i dispositivi.

Consulta la [Guida introduttiva](https://docs.aws.amazon.com/sagemaker/latest/dg/edge-manager-getting-started.html) per un esempio approfondito o il tutorial [pratico di Esplora i servizi AWS IoT Core](https://docs.aws.amazon.com/iot/latest/developerguide/iot-gs-first-thing.html).

Usa l'API `RegisterDevices` per registrare il dispositivo. Fornisci il nome del parco di cui desideri che i dispositivi facciano parte, oltre al nome del dispositivo. Facoltativamente, puoi aggiungere una descrizione al dispositivo, ai tag e al nome dell' AWS IoT oggetto associati al dispositivo.

```
sagemaker_client.register_devices(
    DeviceFleetName="sample-fleet-name",
    Devices=[
        {          
            "DeviceName": "sample-device-1",
            "IotThingName": "sample-thing-name-1",
            "Description": "Device #1"
        }
     ],
     Tags=[
        {
            "Key": "string", 
            "Value" : "string"
         }
     ],
)
```

## Registrare un dispositivo (console)
<a name="edge-device-fleet-register-console"></a>

Puoi registrare il tuo dispositivo utilizzando la console SageMaker AI su [https://console.aws.amazon.com/sagemaker.](https://console.aws.amazon.com/sagemaker/)

1. **Nella console SageMaker AI, scegli **Edge Inference**, quindi scegli Dispositivi Edge.**

1. Scegli **Registra dispositivo**.  
![\[Posizione di Registra dispositivi nella sezione Dispositivi Edge della console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/register-device-button.png)

1. Nella sezione **Proprietà del dispositivo**, inserisci il nome del parco a cui appartiene il dispositivo nel campo **Nome del parco dispositivi**. Scegli **Next (Successivo)**.  
![\[Sezione Proprietà del dispositivo nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/register-devices-empty.png)

1. Nella sezione **Origine del dispositivo**, aggiungi i dispositivi uno per uno. Devi includere un **Nome dispositivo** per ogni dispositivo del tuo parco. Facoltativamente, puoi fornire una descrizione (nel campo **Descrizione**) e un nome oggetto Internet of Things (IoT) (nel campo **Nome IoT**). Dopo aver aggiunto tutti i tuoi dispositivi scegli **Invia**.  
![\[Sezione Origine del dispositivo nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/register-devices-device-source.png)

   La pagina **Dispositivi** mostra il nome del dispositivo che hai aggiunto, il parco dispositivi a cui appartiene, la data di registrazione, l'ultimo battito cardiaco e la descrizione e il AWS IoT nome, se ne hai fornito uno.

   Scegli un dispositivo per visualizzare i relativi dettagli, tra cui il nome, il parco, l'ARN, la descrizione, il nome dell'oggetto IoT, la data di registrazione e l'ultimo heartbeat.

# Verifiche di stato
<a name="edge-device-fleet-check-status"></a>

Verifica che il dispositivo o il parco sia collegato e campioni i dati. Effettuando controlli periodici, manualmente o automaticamente, consente di verificare che il dispositivo o il parco funzionino correttamente.

Usa la console Amazon S3 all'indirizzo [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)per scegliere in modo interattivo una flotta per il controllo dello stato. Puoi anche utilizzare l' AWS SDK per Python (Boto3). Di seguito vengono descritti alcuni aspetti diversi APIs da Boto3 che puoi utilizzare per controllare lo stato del tuo dispositivo o del tuo parco veicoli. Utilizza l'API che meglio si adatta al tuo caso d'uso.
+ **Controllare un dispositivo singolo.**

  Per verificare lo stato di un dispositivo singolo, utilizza l'API `DescribeDevice`. Se un modello è stato implementato sul dispositivo, viene fornito un elenco contenente uno o più modelli.

  ```
  sagemaker_client.describe_device(
      DeviceName="sample-device-1",
      DeviceFleetName="sample-fleet-name"
  )
  ```

  Eseguire le restituzioni `DescribeDevice`:

  ```
  { "DeviceName": "sample-device".
    "Description": "this is a sample device",
    "DeviceFleetName": "sample-device-fleet",
    "IoTThingName": "SampleThing",
    "RegistrationTime": 1600977370,
    "LatestHeartbeat": 1600977370,
    "Models":[
          {
           "ModelName": "sample-model", 
           "ModelVersion": "1.1",
           "LatestSampleTime": 1600977370,
           "LatestInference": 1600977370 
          }
     ]
  }
  ```
+ **Controllare un parco di dispositivi.**

  Per controllare lo stato del parco utilizza l'API `GetDeviceFleetReport`. Fornisci il nome del parco dispositivi per ottenere un riepilogo del parco dispositivi.

  ```
  sagemaker_client.get_device_fleet_report(
      DeviceFleetName="sample-fleet-name"
  )
  ```
+ **Controllare un heartbeat.**

  Ogni dispositivo all'interno di un parco genera periodicamente un segnale, o «heartbeat». L’heartbeat può essere utilizzato per verificare che il dispositivo stia comunicando con Edge Manager. Se il timestamp dell'ultimo heartbeat non viene aggiornato, il dispositivo potrebbe non funzionare.

  Controlla l'ultimo heartbeat effettuato da un dispositivo con l'API `DescribeDevice`. Specifica il nome del dispositivo e il parco a cui appartiene il dispositivo edge.

  ```
  sagemaker_client.describe_device(
      DeviceName="sample-device-1",
      DeviceFleetName="sample-fleet-name"
  )
  ```

# Come impacchettare il modello
<a name="edge-packaging-job"></a>

SageMaker I processi di packaging di Edge Manager utilizzano modelli SageMaker compilati da Amazon NEO e apportano le modifiche necessarie per distribuire il modello con il motore di inferenza, l'agente Edge Manager.

**Topics**
+ [Completamento dei prerequisiti](edge-packaging-job-prerequisites.md)
+ [Package a modello (Amazon SageMaker AI Console)](edge-packaging-job-console.md)
+ [Impacchettare un modello (Boto3)](edge-packaging-job-boto3.md)

# Completamento dei prerequisiti
<a name="edge-packaging-job-prerequisites"></a>

Per impacchettare un modello, devi completare le seguenti operazioni:

1. **Compila il tuo modello di machine learning con SageMaker AI Neo.**

   Se non l'hai già fatto, compila il tuo modello con SageMaker Neo. Per ulteriori informazioni su come compilare il modello, consulta [Compila e distribuisci modelli con Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). Se sei un utente di SageMaker Neo per la prima volta, consulta la Guida [introduttiva ai dispositivi Neo Edge](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html).

1. **Ottieni il nome del processi di compilazione.**

   Fornisci il nome del processo di compilazione che hai usato quando hai compilato il tuo modello con SageMaker Neo. Apri la console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/)e scegli **Compilation jobs** per trovare un elenco di compilazioni che sono state inviate al tuo account. AWS I nomi dei processi di compilazione inviati si trovano nella colonna **Nome**.

1. **Ottieni il tuo IAM ARN.**

   È necessario un Amazon Resource Name (ARN) di un ruolo IAM che puoi utilizzare per scaricare e caricare il modello e contattare SageMaker Neo.

   Utilizza uno dei seguenti metodi per ottenere l’ARN del tuo IAM:
   + **A livello di codice con AI SageMaker Python SDK**

     ```
     import sagemaker
     
     # Initialize SageMaker Session object so you can interact with AWS resources
     sess = sagemaker.Session()
     
     # Get the role ARN 
     role = sagemaker.get_execution_role()
     
     print(role)
     >> arn:aws:iam::<your-aws-account-id>:role/<your-role-name>
     ```

     Per ulteriori informazioni sull'utilizzo dell'SDK SageMaker Python, consulta l'API AI [SageMaker Python](https://sagemaker.readthedocs.io/en/stable/index.html) SDK.
   + **Utilizzo della console (IAM AWS Identity and Access Management )**

     Accedi alla console IAM all'indirizzo [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/). Nella sezione **Risorse** IAM, scegli **Ruoli** per visualizzare un elenco di ruoli nel tuo account AWS . Seleziona o crea un ruolo con `AmazonSageMakerFullAccess`, `AWSIoTFullAccess` e `AmazonS3FullAccess`.

     Per ulteriori informazioni su IAM, consulta [Che cos'è IAM?](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)

1. **Avere un URI del bucket S3.**

   È necessario disporre di almeno un bucket URI di Amazon Simple Storage Service (Amazon S3) per archiviare il modello neo-compilato, l'output del processo creazione pacchetti di Edge Manager e i dati di esempio del parco dispositivi.

   Utilizza uno dei seguenti metodi per creare un bucket Amazon S3:
   + **A livello di codice con AI SageMaker Python SDK**

     Puoi utilizzare il bucket Amazon S3 predefinito durante una sessione. Viene creato un bucket predefinito in base al seguente formato: `sagemaker-{region}-{aws-account-id}`. Per creare un bucket predefinito con SageMaker Python SDK, usa quanto segue:

     ```
     import sagemaker
     
     session=sagemaker.create_session()
     
     bucket=session.default_bucket()
     ```
   + **Utilizzo della console Amazon S3**

     Apri la console Amazon S3 all'indirizzo [https://console.aws.amazon.com/s3/](https://console.aws.amazon.com/s3/)e vedi [Come posso creare un bucket S3](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/create-bucket.html)? per istruzioni. step-by-step

# Package a modello (Amazon SageMaker AI Console)
<a name="edge-packaging-job-console"></a>

Puoi creare un processo di packaging di SageMaker Edge Manager utilizzando la console SageMaker AI all'indirizzo [https://console.aws.amazon.com/sagemaker/](https://console.aws.amazon.com/sagemaker/). Prima di continuare, assicurati di aver soddisfatto il [Completamento dei prerequisiti](edge-packaging-job-prerequisites.md).

1. Nella console SageMaker AI, scegli **Edge Inference**, quindi scegli **Crea processi di packaging edge**, come mostrato nell'immagine seguente.  
![\[Posizione di Crea un processo di creazione di pacchetti Edge nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/pre-edge-packaging-button-edited.png)

1. Nella pagina **Proprietà del processo**, inserisci un nome per il tuo processo di creazione pacchetti in **Nome Processi di creazione di pacchetti Edge**. Si noti che i nomi dei processi di creazione pacchetti di Edge Manager fanno distinzione tra maiuscole e minuscole. Assegna un nome al modello e assegnagli una versione: inseriscilo rispettivamente in **Nome del modello** e **Versione del modello**.

1. Poi, seleziona un **ruolo IAM**. Puoi scegliere un ruolo o lasciarti che AWS crei un ruolo per te. Facoltativamente, è possibile specificare un **ARN della chiave di risorsa** **tag dell'attività**.

1. Scegli **Next (Successivo)**.   
![\[Esempio della sezione Proprietà del processo nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/create-edge-packaging-job-filled.png)

1. Specificate il nome del lavoro di compilazione che avete usato durante la compilazione del modello con SageMaker Neo nel campo **Compilation** job name. Scegli **Next (Successivo)**.  
![\[Esempio della sezione Origine del modello nella console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/create-edge-packaging-job-model-source-filled.png)

1. Nella pagina **Configurazione di output**, inserisci l'URI del bucket Amazon S3 in cui desideri archiviare l'output del processo di creazione pacchetti.  
![\[Esempio di pagina Configurazione output della console.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/smith/create-device-fleet-output-filled.png)

   La colonna di **Stato** nella pagina dei **Processi di creazione di pacchetti Edge** dovrebbe essere **IN CORSO**. Una volta completato il processo di creazione pacchetti, lo stato viene aggiornato su **COMPLETATO**.

   La selezione di un processo di creazione pacchetti ti reindirizza alle impostazioni di quel processo. La sezione **Impostazioni processo** mostra il nome del processo, l'ARN, lo stato, l'ora di creazione, l'ora dell'ultima modifica, la durata del processo di creazione pacchetti e l'ARN del ruolo.

   La sezione **Configurazione input** mostra la posizione degli artefatti del modello, la configurazione di input dei dati e il framework di machine learning del modello.

   La sezione **Configurazione di output** mostra la posizione di output del processo di creazione pacchetti, il dispositivo di destinazione per il quale è stato compilato il modello e tutti i tag creati.

1. Scegli il nome del tuo parco dispositivi per essere reindirizzato ai dettagli del parco dispositivi. Questa pagina mostra il nome del parco dispositivi, l'ARN, la descrizione (se ne hai fornita una), la data di creazione del parco dispositivi, l'ultima volta che il parco dispositivi è stato modificato, l'URI del bucket Amazon S3, l'ID chiave AWS KMS (se fornito), l'alias AWS IoT (se fornito) e il ruolo IAM. Se hai aggiunto dei tag, questi vengono visualizzati nella sezione **Tag del parco dispositivi**.

# Impacchettare un modello (Boto3)
<a name="edge-packaging-job-boto3"></a>

È possibile creare un processo di imballaggio di SageMaker Edge Manager con AWS SDK per Python (Boto3). Prima di continuare, assicurati di aver soddisfatto il [Completamento dei prerequisiti](edge-packaging-job-prerequisites.md).

Per richiedere un processo di creazione di pacchetti Edge, usa `CreateEdgePackagingJob`. Devi fornire un nome al tuo processo di edge packaging, il nome del tuo processo di compilazione SageMaker Neo, il tuo ruolo Amazon resource name (ARN), un nome per il tuo modello, una versione per il tuo modello e l'URI del bucket Amazon S3 in cui desideri archiviare l'output del tuo processo di packaging. Tieni presente che i nomi dei processi di packaging di Edge Manager e i nomi dei processi di compilazione SageMaker Neo fanno distinzione tra maiuscole e minuscole.

```
# Import AWS SDK for Python (Boto3)
import boto3

# Create Edge client so you can submit a packaging job
sagemaker_client = boto3.client("sagemaker", region_name='aws-region')

sagemaker_client.create_edge_packaging_job(
    EdgePackagingJobName="edge-packaging-name",
    CompilationJobName="neo-compilation-name",
    RoleArn="arn:aws:iam::99999999999:role/rolename",
    ModelName="sample-model-name",
    ModelVersion="model-version",
    OutputConfig={
        "S3OutputLocation": "s3://your-bucket/",
    }
)
```

È possibile controllare lo stato di un processi di creazione di pacchetti edge utilizzando `DescribeEdgePackagingJob` e fornendo il nome del relativo processo con distinzione tra maiuscole e minuscole:

```
response = sagemaker_client.describe_edge_packaging_job(
                                    EdgePackagingJobName="edge-packaging-name")
```

Ciò restituisce un dizionario che può essere utilizzato per verificare lo stato del processo di creazione pacchetti:

```
# Optional - Poll every 30 sec to check completion status
import time

while True:
    response = sagemaker_client.describe_edge_packaging_job(
                                         EdgePackagingJobName="edge-packaging-name")
    
    if response['EdgePackagingJobStatus'] == 'Completed':
        break
    elif response['EdgePackagingJobStatus'] == 'Failed':
        raise RuntimeError('Packaging job failed')
    print('Packaging model...')
    time.sleep(30)
print('Done!')
```

Per un elenco dei processi di creazione pacchetti, usa `ListEdgePackagingJobs`. È possibile utilizzare questa API per cercare un processo di creazione pacchetti specifico. Fornisci un nome parziale per filtrare i nomi dei processi di creazione pacchetti `NameContains`, un nome parziale affinché `ModelNameContains` filtri i processi in cui il nome del modello contiene il nome fornito. Specifica anche con quale colonna eseguire l'ordinamento con `SortBy` e in quale direzione eseguire l'ordinamento per `SortOrder` (`Ascending` o `Descending`).

```
sagemaker_client.list_edge_packaging_jobs(
    "NameContains": "sample",
    "ModelNameContains": "sample",
    "SortBy": "column-name",
    "SortOrder": "Descending"
)
```

Per interrompere un processo di creazione pacchetti, usa `StopEdgePackagingJob` e fornisci il nome del tuo processo di creazione di pacchetti edge.

```
sagemaker_client.stop_edge_packaging_job(
        EdgePackagingJobName="edge-packaging-name"
)
```

[Per un elenco completo di Edge Manager APIs, consulta la documentazione di Boto3.](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)

# L'agente Edge Manager
<a name="edge-device-fleet-about"></a>

L'agente Edge Manager è un motore di inferenza per i dispositivi edge. Usa l'agente per fare previsioni con modelli caricati sui tuoi dispositivi edge. L'agente raccoglie anche i parametri dei modelli e acquisisce i dati a intervalli specifici. Dati di esempio vengono archiviati nel tuo bucket Amazon S3.

Esistono due metodi per installare e distribuire l'agente Edge Manager sui dispositivi edge:

1. Scarica l'agente come file binario dal bucket di rilascio di Amazon S3. Per ulteriori informazioni, consulta [Scarica e configura manualmente l'agente Edge Manager](edge-device-fleet-manual.md).

1. Utilizza la console AWS IoT Greengrass V2 o il comando per la AWS CLI distribuzione. `aws.greengrass.SageMakerEdgeManager` Per informazioni, consulta [Crea i componenti V2 AWS IoT Greengrass](edge-greengrass-custom-component.md).

# Scarica e configura manualmente l'agente Edge Manager
<a name="edge-device-fleet-manual"></a>

Scarica l'agente Edge Manager in base al sistema operativo, all'architettura e alla Regione AWS . L'agente viene aggiornato periodicamente, quindi hai la possibilità di scegliere il tuo agente in base alle date e alle versioni di rilascio. Una volta che hai l'agente, crea un file di configurazione JSON. Specifica il nome dell'oggetto IoT del dispositivo, il nome del parco, le credenziali del dispositivo e altre coppie chiave-valore. Vedi [Esecuzione dell'agente Edge Manager](#edge-device-fleet-running-agent) per l'intero elenco delle chiavi che devi specificare nel file di configurazione. È possibile eseguire l'agente come file binario eseguibile o collegarsi ad esso come oggetto condiviso dinamico (DSO).

## Come funziona l'agente
<a name="edge-device-fleet-how-agent-works"></a>

L'agente viene eseguito sulla CPU dei tuoi dispositivi. L'agente esegue l'inferenza sul framework e sull'hardware del dispositivo di destinazione specificato durante il processo di compilazione. Ad esempio, se hai compilato il modello per Jetson Nano, l'agente supporta la GPU nel [Deep Learning Runtime](https://github.com/neo-ai/neo-ai-dlr) (DLR) fornito.

L'agente viene rilasciato in formato binario per i sistemi operativi supportati. Verifica che il tuo sistema operativo sia supportato e soddisfi i requisiti minimi del sistema operativo indicati nella tabella seguente:

------
#### [ Linux ]

**Versione:** Ubuntu 18.04

**Formati binari supportati:** x86-64 bit (binario ELF) e ARMv8 64 bit (binario ELF)

------
#### [ Windows ]

**Versione:** Windows 10 versione 1909

**Formati binari supportati:** x86-32 bit (DLL) e x86-64 bit (DLL)

------

## Installazione dell'agente Edge Manager
<a name="edge-device-fleet-installation"></a>

Per utilizzare l'agente Edge Manager, è necessario innanzitutto ottenere gli artefatti di rilascio e un certificato root. Gli artefatti di rilascio sono archiviati in un bucket Amazon S3 presente nella Regione `us-west-2`. Per scaricare gli artefatti, specifica il tuo sistema operativo (`<OS>`) e la `<VERSION>`.

In base al sistema operativo in uso, sostituisci `<OS>` con uno dei seguenti:


| Windows 32-bit | Windows 64-bit | Linux x86-64 | Linux ARMv8 | 
| --- | --- | --- | --- | 
| windows-x86 | windows-x64 | Linux-x64 | linux-armv8 | 

`VERSION` è suddiviso in tre componenti: `<MAJOR_VERSION>.<YYYY-MM-DD>-<SHA-7>` dove:
+ `<MAJOR_VERSION>`: la versione del rilascio La versione del rilascio è attualmente impostata su `1`.
+ `<YYYY-MM-DD>`: Il timestamp del rilascio degli artefatti.
+ `<SHA-7>`: L'ID commit del repository da cui viene creato il rilascio.

È necessario fornire il `<MAJOR_VERSION>` e il timestamp nel formato `YYYY-MM-DD`. Ti suggeriamo di utilizzare il timestamp di rilascio dell'ultimo artefatto.

Esegui quanto segue nella riga di comando per ottenere il timestamp più recente. Sostituisci `<OS>` con il tuo sistema operativo:

```
aws s3 ls s3://sagemaker-edge-release-store-us-west-2-<OS>/Releases/ | sort -r
```

Ad esempio, se disponi di un sistema operativo Windows a 32 bit, esegui:

```
aws s3 ls s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/ | sort -r
```

Viene restituito:

```
2020-12-01 23:33:36 0 

                    PRE 1.20201218.81f481f/
                    PRE 1.20201207.02d0e97/
```

L'output restituito in questo esempio mostra due artefatti di rilascio. Il file artifact della prima release rileva che la versione di rilascio ha una versione di release principale di`1`, un timestamp di `20201218` (in YYYY-MM-DD formato) e un ID di commit `81f481f` SHA-7.

**Nota**  
Il comando precedente presuppone che tu abbia configurato il AWS Command Line Interface. Per ulteriori informazioni su come configurare le impostazioni con cui gli AWS CLI utenti interagiscono AWS, consulta [Configurazione della AWS CLI](https://docs.aws.amazon.com//cli/latest/userguide/cli-chap-configure.html).

In base al sistema operativo in uso, utilizza i seguenti comandi per installare gli artefatti:

------
#### [ Windows 32-bit ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/<VERSION>/<VERSION>.zip .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x86/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Windows 64-bit ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x64/Releases/<VERSION>/<VERSION>.zip .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-windows-x64/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Linux x86-64 ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/<VERSION>/<VERSION>.tgz .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-x64/Releases/<VERSION>/sha256_hex.shasum .
```

------
#### [ Linux ARMv8 ]

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/<VERSION>/<VERSION>.tgz .
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-linux-armv8/Releases/<VERSION>/sha256_hex.shasum .
```

------

È inoltre necessario scaricare un certificato root. Questo certificato convalida gli artefatti del modello firmati da AWS prima di caricarli sui dispositivi periferici.

Sostituisci `<OS>` corrispondente alla tua piattaforma dall'elenco dei sistemi operativi supportati e sostituisci `<REGION>` con la tua Regione AWS .

```
aws s3 cp s3://sagemaker-edge-release-store-us-west-2-<OS>/Certificates/<REGION>/<REGION>.pem .
```

## Esecuzione dell'agente Edge Manager
<a name="edge-device-fleet-running-agent"></a>

Puoi eseguire l'agente SageMaker AI Edge Manager come processo autonomo sotto forma di un file binario eseguibile ELF (Executable and Linkable Format) oppure puoi collegarlo come oggetto condiviso dinamico (.dll). Linux supporta l'esecuzione come binario eseguibile autonomo ed è la modalità preferita. Windows supporta l'esecuzione come oggetto condiviso (.dll).

Su Linux, ti consigliamo di eseguire il file binario tramite un servizio che fa parte del tuo sistema di inizializzazione (`init`). Se desideri eseguire il file binario direttamente, puoi farlo in un terminale come mostrato nell'esempio seguente. Se disponi di un sistema operativo moderno, non sono necessarie altre installazioni prima di eseguire l'agente, poiché tutti i requisiti sono incorporati staticamente nell'eseguibile. Ciò offre la flessibilità necessaria per eseguire l'agente sul terminale, come servizio o all'interno di un container.

Per eseguire l'agente, crea innanzitutto un file di configurazione JSON. Specifica le seguenti coppie chiave-valore:
+ `sagemaker_edge_core_device_name`: il nome del dispositivo. Questo nome del dispositivo deve essere registrato insieme al parco dispositivi nella console SageMaker Edge Manager.
+ `sagemaker_edge_core_device_fleet_name`: il nome del parco dispositivi a cui appartiene il dispositivo.
+ `sagemaker_edge_core_region`: la AWS regione associata al dispositivo, alla flotta e ai bucket Amazon S3. Corrisponde alla Regione in cui è registrato il dispositivo e in cui viene creato il bucket Amazon S3 (dovrebbero corrispondere). I modelli stessi possono essere compilati con SageMaker Neo in una regione diversa, questa configurazione non è correlata alla regione di compilazione del modello.
+ `sagemaker_edge_core_root_certs_path`: Il percorso assoluto della cartella verso i certificati root. Viene utilizzato per convalidare il dispositivo con l'account pertinente AWS .
+ `sagemaker_edge_provider_aws_ca_cert_file`: il percorso assoluto verso il certificato Amazon Root CA (AmazonRootCA1.pem). Viene utilizzato per convalidare il dispositivo con l'account pertinente. AWS `AmazonCA`è un certificato di proprietà di AWS.
+ `sagemaker_edge_provider_aws_cert_file`: Il percorso assoluto per AWS IoT firmare il certificato radice (`*.pem.crt`).
+ `sagemaker_edge_provider_aws_cert_pk_file`: Il percorso assoluto della chiave AWS IoT privata. (`*.pem.key`).
+ `sagemaker_edge_provider_aws_iot_cred_endpoint`: L'endpoint AWS IoT delle credenziali (*identifier*.iot. *region*.amazonaws.com). Questo endpoint viene utilizzato per la convalida delle credenziali. Per ulteriori informazioni vedere [Collegamento dei dispositivi a AWS IoT](https://docs.aws.amazon.com/iot/latest/developerguide/iot-connect-devices.html).
+ `sagemaker_edge_provider_provider`: indica l'implementazione dell'interfaccia del provider utilizzata. L'interfaccia del provider comunica con i servizi di rete finali per i caricamenti, gli heartbeat e la convalida della registrazione. Per impostazione predefinita, il valore è `"Aws"`. Consentiamo implementazioni personalizzate dell'interfaccia del provider. Può essere impostato su `None` per nessun provider o `Custom` per un'implementazione personalizzata con il relativo percorso dell'oggetto condiviso fornito.
+ `sagemaker_edge_provider_provider_path`: fornisce il percorso assoluto all'oggetto condiviso di implementazione del provider. (file .so o .dll). Il file .dll o. so del provider `"Aws"` viene fornito con la versione dell'agente. Questo campo è obbligatorio.
+ `sagemaker_edge_provider_s3_bucket_name`: il nome del bucket Amazon S3 (non l'URI del bucket Amazon S3). Il bucket deve contenere una stringa `sagemaker` all'interno del nome.
+ `sagemaker_edge_log_verbose` (booleano): Facoltativo. Questo imposta il registro di debug. Seleziona `True` o `False`.
+ `sagemaker_edge_telemetry_libsystemd_path`: solo per Linux, `systemd` implementa il parametro contatore degli arresti anomali dell'agente. Imposta il percorso assoluto di libsystemd per attivare il parametro contatore degli arresti anomali. È possibile trovare il percorso libsystemd predefinito eseguendolo `whereis libsystemd` nel terminale del dispositivo.
+ `sagemaker_edge_core_capture_data_destination`: la destinazione del caricamento dei dati di acquisizione. Scegliere `"Cloud"` o `"Disk"`. Il valore predefinito è impostato su `"Disk"`. Impostandolo su `"Disk"` scrivere i tensori di input e output e i dati ausiliari nel file system locale nella posizione preferita. Quando si scrive a `"Cloud"` utilizzare il nome del bucket Amazon S3 fornito nella configurazione `sagemaker_edge_provider_s3_bucket_name`.
+ `sagemaker_edge_core_capture_data_disk_path`: imposta il percorso assoluto nel file system locale, in cui vengono scritti i file di dati di acquisizione quando `"Disk"` è la destinazione. Questo campo non viene utilizzato quando `"Cloud"` è specificato come destinazione.
+ `sagemaker_edge_core_folder_prefix`: il prefisso principale in Amazon S3 in cui vengono archiviati i dati acquisiti quando si specifica `"Cloud"` come destinazione dei dati di acquisizione (`sagemaker_edge_core_capture_data_disk_path)`). I dati acquisiti vengono archiviati in una sottocartella sotto `sagemaker_edge_core_capture_data_disk_path` nel caso in cui `"Disk"` sia impostato come destinazione dei dati.
+ `sagemaker_edge_core_capture_data_buffer_size`(Valore intero): la dimensione circolare del buffer dei dati di acquisizione. Indica il numero massimo di richieste memorizzate nel buffer.
+ `sagemaker_edge_core_capture_data_batch_size` (Valore intero): la dimensione del batch di dati di acquisizione. Indica la dimensione di un batch di richieste gestite dal buffer. Questo valore deve essere minore di `sagemaker_edge_core_capture_data_buffer_size`. Per le dimensioni del batch, si consiglia di utilizzare al massimo la metà della dimensione del buffer.
+ `sagemaker_edge_core_capture_data_push_period_seconds` (Valore intero): il periodo di invio dei dati di acquisizione in secondi. Un batch di richieste nel buffer viene gestito quando nel buffer sono presenti richieste di dimensioni batch o quando questo periodo di tempo è completato (a seconda dell'evento che si verifica per primo). Questa configurazione imposta tale periodo di tempo.
+ `sagemaker_edge_core_capture_data_base64_embed_limit`: il limite per il caricamento dei dati di acquisizione in byte. Un valore intero.

Il file di configurazione dovrebbe essere simile all'esempio seguente (con i valori specifici). Questo esempio utilizza il AWS provider predefinito (`"Aws"`) e non specifica un caricamento periodico.

```
{
    "sagemaker_edge_core_device_name": "device-name",
    "sagemaker_edge_core_device_fleet_name": "fleet-name",
    "sagemaker_edge_core_region": "region",
    "sagemaker_edge_core_root_certs_path": "<Absolute path to root certificates>",
    "sagemaker_edge_provider_provider": "Aws",
    "sagemaker_edge_provider_provider_path" : "/path/to/libprovider_aws.so",
    "sagemaker_edge_provider_aws_ca_cert_file": "<Absolute path to Amazon Root CA certificate>/AmazonRootCA1.pem",
    "sagemaker_edge_provider_aws_cert_file": "<Absolute path to AWS IoT signing root certificate>/device.pem.crt",
    "sagemaker_edge_provider_aws_cert_pk_file": "<Absolute path to AWS IoT private key.>/private.pem.key",
    "sagemaker_edge_provider_aws_iot_cred_endpoint": "https://<AWS IoT Endpoint Address>",
    "sagemaker_edge_core_capture_data_destination": "Cloud",
    "sagemaker_edge_provider_s3_bucket_name": "sagemaker-bucket-name",
    "sagemaker_edge_core_folder_prefix": "Amazon S3 folder prefix",
    "sagemaker_edge_core_capture_data_buffer_size": 30,
    "sagemaker_edge_core_capture_data_batch_size": 10,
    "sagemaker_edge_core_capture_data_push_period_seconds": 4000,
    "sagemaker_edge_core_capture_data_base64_embed_limit": 2,
    "sagemaker_edge_log_verbose": false
}
```

L'elemento di rilascio include un eseguibile binario chiamato `sagemaker_edge_agent_binary` nella directory `/bin`. Per eseguire il file binario, utilizza il flag `-a` per creare un descrittore di file socket (.sock) in una directory di tua scelta e specifica il percorso del file di configurazione JSON dell'agente creato con il flag `-c`.

```
./sagemaker_edge_agent_binary -a <ADDRESS_TO_SOCKET> -c <PATH_TO_CONFIG_FILE>
```

L'esempio seguente mostra il frammento di codice con una directory e un percorso di file specificati:

```
./sagemaker_edge_agent_binary -a /tmp/sagemaker_edge_agent_example.sock -c sagemaker_edge_config.json
```

In questo esempio, un descrittore di file socket denominato `sagemaker_edge_agent_example.sock` viene creato nella directory `/tmp` e punta a un file di configurazione che si trova nella stessa directory del processo dell'agente chiamato `sagemaker_edge_config.json`.

# Implementazione di Model Package e Edge Manager Agent con AWS IoT Greengrass
<a name="edge-greengrass"></a>

SageMaker Edge Manager integra la AWS IoT Greengrass versione 2 per semplificare l'accesso, la manutenzione e la distribuzione dell'agente e del modello Edge Manager sui dispositivi. Senza la AWS IoT Greengrass V2, la configurazione di dispositivi e flotte per l'utilizzo di SageMaker Edge Manager richiede la copia manuale dell'agente Edge Manager da un bucket di release di Amazon S3. Per fare previsioni con modelli caricati sui tuoi dispositivi edge utilizzi l'agente. Con l'integrazione tra AWS IoT Greengrass V2 ed SageMaker Edge Manager, puoi utilizzare i componenti V2. AWS IoT Greengrass I componenti sono moduli software predefiniti che possono connettere i dispositivi edge a AWS servizi o servizi di terze parti tramite. AWS IoT Greengrass

È necessario installare il software AWS IoT Greengrass Core sui dispositivi se si desidera utilizzare la versione AWS IoT Greengrass 2 per distribuire l'agente Edge Manager e il modello. Per ulteriori informazioni sui requisiti dei dispositivi e su come configurare i dispositivi, vedere [Configurazione dei dispositivi AWS IoT Greengrass principali](https://docs.aws.amazon.com/greengrass/v2/developerguide/setting-up.html) nella AWS IoT Greengrass documentazione.

Per distribuire l'agente Edge Manager si utilizzano i seguenti tre componenti:
+ *Un componente pubblico predefinito*: SageMaker AI mantiene il componente pubblico Edge Manager.
+ *Un componente privato generato automaticamente*: il componente privato viene generato automaticamente quando si impacchetta il modello di machine learning con l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html) e si specifica `GreengrassV2Component` per il campo API Edge Manager `PresetDeploymentType`.
+ *Un componente personalizzato*: questa è l'applicazione di inferenza responsabile della preelaborazione e della creazione di inferenze sul dispositivo. Questo componente deve essere creato. Per ulteriori informazioni su come [creare AWS IoT Greengrass componenti personalizzati](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html), AWS IoT Greengrass consulta la documentazione di SageMaker Edge Manager o Crea componenti personalizzati nella documentazione. [Crea un componente personalizzato Hello World](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how)

# Prerequisiti completi per l’implementazione dell’agente Edge Manager
<a name="edge-greengrass-prerequisites"></a>

SageMaker Edge Manager utilizza la AWS IoT Greengrass versione 2 per semplificare l'implementazione dell'agente Edge Manager, dei modelli di machine learning e dell'applicazione di inferenza sui dispositivi con l'uso di componenti. Per semplificare la gestione dei ruoli AWS IAM, Edge Manager consente di riutilizzare l'alias di ruolo esistente AWS IoT . Se non ne hai ancora uno, Edge Manager genera un alias ruolo come parte del processo di creazione pacchetti di Edge Manager. Non è più necessario associare al ruolo un alias di ruolo generato dal processo di packaging di SageMaker Edge Manager. AWS IoT 

Prima di iniziare, è necessario completare i seguenti prerequisiti:

1. Installa il software AWS IoT Greengrass Core. Per informazioni dettagliate, consulta [Installare il software AWS IoT Greengrass Core](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#install-greengrass-v2).

1. Configura AWS IoT Greengrass V2. Per ulteriori informazioni, consulta [Installazione del software AWS IoT Greengrass Core con provisioning manuale delle risorse](https://docs.aws.amazon.com/greengrass/v2/developerguide/manual-installation.html).
**Nota**  
Assicurati che il nome dell' AWS IoT oggetto sia tutto minuscolo e non contenga caratteri tranne (facoltativamente) i trattini (). `‐`
Il ruolo IAM deve iniziare con `SageMaker*`

1. Allega la seguente autorizzazione e la policy in linea al ruolo IAM creato durante la configurazione della V2. AWS IoT Greengrass 
   + Vai alla console IAM. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)
   + Cerca il ruolo creato digitando il nome del ruolo nel campo **Cerca**.
   + Scegli il tuo ruolo.
   + Quindi, scegli **Collega policy**.
   + Cercare **AmazonSageMakerEdgeDeviceFleetPolicy**.
   + Seleziona **AmazonSageMakerFullAccess**(si tratta di un passaggio facoltativo che semplifica il riutilizzo di questo ruolo IAM nella compilazione e nel packaging dei modelli).
   + Aggiungi le autorizzazioni necessarie alla policy di autorizzazione di un ruolo, non collegare agli utenti IAM le policy inline.

------
#### [ JSON ]

****  

     ```
     {
         "Version":"2012-10-17",		 	 	 
         "Statement":[
           {
             "Sid":"GreengrassComponentAccess",
             "Effect":"Allow",
             "Action":[
                 "greengrass:CreateComponentVersion",
                 "greengrass:DescribeComponent"
             ],
             "Resource":"*"
            }
         ]
     }
     ```

------
   + Scegli **Collega policy**.
   + Scegli **Relazione di attendibilità**.
   + Seleziona **Modifica relazione di attendibilità**.
   + Sostituisci il contenuto con il seguente:

------
#### [ JSON ]

****  

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

------

1. Crea un Edge Manager del parco dispositivi. Per informazioni su come creare i parchi, consulta [Configurazione per dispositivi e flotte in Edge Manager SageMaker](edge-device-fleet.md).

1. Registra il dispositivo con lo stesso nome del nome dell' AWS IoT oggetto creato durante la configurazione della AWS IoT Greengrass V2.

1. Crea almeno un AWS IoT Greengrass componente privato personalizzato. Questo componente è l'applicazione che esegue l'inferenza sul dispositivo. Per ulteriori informazioni, consulta [Crea un componente personalizzato Hello World](edge-greengrass-custom-component.md#edge-greengrass-create-custom-component-how)

**Nota**  
L' SageMaker Edge Manager e AWS IoT Greengrass l'integrazione funzionano solo per la AWS IoT Greengrass versione 2.
Il nome dell' AWS IoT oggetto e il nome del dispositivo Edge Manager devono coincidere.
SageMaker Edge Manager non carica AWS IoT i certificati locali e chiama direttamente l'endpoint del provider di AWS IoT credenziali. SageMaker Edge Manager utilizza invece la versione AWS IoT Greengrass v2 TokenExchangeService e recupera una credenziale temporanea da un endpoint TES.

# Crea i componenti V2 AWS IoT Greengrass
<a name="edge-greengrass-custom-component"></a>

AWS IoT Greengrass utilizza *components*, un modulo software che viene distribuito e eseguito su un dispositivo AWS IoT Greengrass principale. Sono necessari (almeno) tre componenti:

1. *Un AWS IoT Greengrass componente pubblico di Edge Manager Agent* che distribuisce l'agente binario di Edge Manager.

1. *Un componente del modello* che viene generato automaticamente quando si impacchetta il modello di machine learning con l' AWS SDK per Python (Boto3) API o con la console AI. SageMaker Per informazioni, consulta [Creare un componente generato automaticamente](#edge-greengrass-autogenerate-component-how).

1. *Un componente privato e personalizzato* per implementare l'applicazione client dell'agente Edge Manager ed eseguire qualsiasi preelaborazione e post-elaborazione dei risultati dell'inferenza. Per ulteriori informazioni su come creare un componente personalizzato, consulta [Creare un componente generato automaticamente](#edge-greengrass-autogenerate-component-how) la sezione [Creare](https://docs.aws.amazon.com/greengrass/v2/developerguide/create-components.html) componenti personalizzati. AWS IoT Greengrass 

## Creare un componente generato automaticamente
<a name="edge-greengrass-autogenerate-component-how"></a>

Genera il componente del modello con l'[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgePackagingJob.html)API e specifica `GreengrassV2Component` il campo API del processo di imballaggio di SageMaker Edge Manager`PresetDeploymentType`. Quando chiami l'`CreateEdgePackagingJob`API, Edge Manager prende il tuo modello compilato con SageMaker AI NEO in Amazon S3 e crea un componente del modello. Il componente del modello viene automaticamente archiviato nel tuo account. Puoi visualizzare qualsiasi componente accedendo alla console. AWS IoT [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/) Seleziona **Greengrass**, quindi seleziona **Dispositivi core**. La pagina contiene un elenco dei dispositivi AWS IoT Greengrass principali associati al tuo account. Se il nome di un componente del modello non è specificato in `PresetDeploymentConfig`, il nome predefinito generato è costituito da `"SagemakerEdgeManager"` e dal nome del processo di creazione pacchetti dell'agente Edge Manager. L'esempio seguente mostra come specificare a Edge Manager di creare un componente AWS IoT Greengrass V2 con l'`CreateEdgePackagingJob`API.

```
import sagemaker
import boto3

# Create a SageMaker client object to make it easier to interact with other AWS services.
sagemaker_client = boto3.client('sagemaker', region=<YOUR_REGION>)

# Replace with your IAM Role ARN
sagemaker_role_arn = "arn:aws:iam::<account>:role/*"

# Replace string with the name of your already created S3 bucket.
bucket = 'amzn-s3-demo-bucket-edge-manager'

# Specify a name for your edge packaging job.
edge_packaging_name = "edge_packag_job_demo" 

# Replace the following string with the name you used for the SageMaker Neo compilation job.
compilation_job_name = "getting-started-demo" 

# The name of the model and the model version.
model_name = "sample-model" 
model_version = "1.1"

# Output directory in S3 where you want to store the packaged model.
packaging_output_dir = 'packaged_models' 
packaging_s3_output = 's3://{}/{}'.format(bucket, packaging_output_dir)

# The name you want your Greengrass component to have.
component_name = "SagemakerEdgeManager" + edge_packaging_name

sagemaker_client.create_edge_packaging_job(
                    EdgePackagingJobName=edge_packaging_name,
                    CompilationJobName=compilation_job_name,
                    RoleArn=sagemaker_role_arn,
                    ModelName=model_name,
                    ModelVersion=model_version,
                    OutputConfig={
                        "S3OutputLocation": packaging_s3_output,
                        "PresetDeploymentType":"GreengrassV2Component",
                        "PresetDeploymentConfig":"{\"ComponentName\":\"sample-component-name\", \"ComponentVersion\":\"1.0.2\"}"
                        }
                    )
```

Puoi anche creare il componente generato automaticamente con la console AI. SageMaker Segui le fasi da 1 a 6 descritte in [Package a modello (Amazon SageMaker AI Console)](edge-packaging-job-console.md).

Inserisci l'URI del bucket Amazon S3 in cui desideri memorizzare l'output del processo di creazione pacchetti e la chiave di crittografia opzionale.

Completa quanto segue per creare il componente del modello:

1. Scegli **Implementazione preimpostata**.

1. Specifica il nome del componente nel campo **Nome del componente**.

1. Facoltativamente, fornisci una descrizione del componente, della versione del componente, del sistema operativo della piattaforma o dell'architettura della piattaforma rispettivamente per la **Descrizione del componente**, la **Versione del componente**, il **Sistema operativo della piattaforma** e l'**Architettura della piattaforma**.

1. Seleziona **Invia**.

## Crea un componente personalizzato Hello World
<a name="edge-greengrass-create-custom-component-how"></a>

Il componente dell'applicazione personalizzato viene utilizzato per eseguire inferenze sul dispositivo edge. Il componente è responsabile del caricamento dei modelli su SageMaker Edge Manager, della chiamata all'agente Edge Manager per l'inferenza e dello scaricamento del modello quando il componente viene spento. Prima di creare il componente, assicurati che l'agente e l'applicazione possano comunicare con Edge Manager. Per fare ciò, configura [gRPC](https://grpc.io/). L'agente Edge Manager utilizza i metodi definiti in Protobuf Buffers e nel server gRPC per stabilire la comunicazione con l'applicazione client sul dispositivo edge e sul cloud.

Per usare gRPC, devi:

1. Creare uno stub gRPC utilizzando il file.proto fornito quando scarichi l'agente Edge Manager dal bucket di rilascio di Amazon S3.

1. Scrivere il codice client con la lingua che preferisci.

Non è necessario definire il servizio in un file .proto. I file di servizio .proto sono inclusi nel file TAR compresso quando scarichi il file binario della versione dell'agente Edge Manager dal bucket di rilascio di Amazon S3.

Installa gRPC e altri strumenti necessari sulla tua macchina host e crea gli stub gRPC `agent_pb2_grpc.py` e `agent_pb2.py` in Python. Assicurati di avere `agent.proto` nella tua directory locale.

```
%%bash
pip install grpcio
pip install grpcio-tools
python3 -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. agent.proto
```

Il codice precedente genera le interfacce client e server gRPC dalla definizione del servizio .proto. In altre parole, crea il modello gRPC in Python. La directory API contiene la specifica Protobuf per comunicare con l'agente.

Successivamente, usa l'API gRPC per scrivere un client e un server per il servizio (2). Lo script di esempio seguente `edge_manager_python_example.py` utilizza Python per caricare, elencare e scaricare un modello `yolov3` sul dispositivo edge.

```
import grpc
from PIL import Image
import agent_pb2
import agent_pb2_grpc
import os


model_path = '<PATH-TO-SagemakerEdgeManager-COMPONENT>' 
                    
agent_socket = 'unix:///tmp/aws.greengrass.SageMakerEdgeManager.sock'

agent_channel = grpc.insecure_channel(agent_socket, options=(('grpc.enable_http_proxy', 0),))

agent_client = agent_pb2_grpc.AgentStub(agent_channel)


def list_models():
    return agent_client.ListModels(agent_pb2.ListModelsRequest())


def list_model_tensors(models):
    return {
        model.name: {
            'inputs': model.input_tensor_metadatas,
            'outputs': model.output_tensor_metadatas
        }
        for model in list_models().models
    }


def load_model(model_name, model_path):
    load_request = agent_pb2.LoadModelRequest()
    load_request.url = model_path
    load_request.name = model_name
    return agent_client.LoadModel(load_request)


def unload_model(name):
    unload_request = agent_pb2.UnLoadModelRequest()
    unload_request.name = name
    return agent_client.UnLoadModel(unload_request)


def predict_image(model_name, image_path):
    image_tensor = agent_pb2.Tensor()
    image_tensor.byte_data = Image.open(image_path).tobytes()
    image_tensor_metadata = list_model_tensors(list_models())[model_name]['inputs'][0]
    image_tensor.tensor_metadata.name = image_tensor_metadata.name
    image_tensor.tensor_metadata.data_type = image_tensor_metadata.data_type
    for shape in image_tensor_metadata.shape:
        image_tensor.tensor_metadata.shape.append(shape)
    predict_request = agent_pb2.PredictRequest()
    predict_request.name = model_name
    predict_request.tensors.append(image_tensor)
    predict_response = agent_client.Predict(predict_request)
    return predict_response

def main():
    try:
        unload_model('your-model')
    except:
        pass
  
    print('LoadModel...', end='')
    try:
        load_model('your-model', model_path)
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('Model already loaded!')
        
    print('ListModels...', end='')
    try:
        print(list_models())
        print('done.')
        
    except Exception as e:
        print()
        print(e)
        print('List model failed!')
       
    print('Unload model...', end='')
    try:
        unload_model('your-model')
        print('done.')
    except Exception as e:
        print()
        print(e)
        print('unload model failed!')

if __name__ == '__main__':
    main()
```

Assicuratevi che `model_path` indichi il nome del AWS IoT Greengrass componente contenente il modello se utilizzate lo stesso esempio di codice client.

Puoi creare il tuo componente Hello World AWS IoT Greengrass V2 dopo aver generato i tuoi stub gRPC e aver pronto il codice Hello World. A tale scopo:
+ Carica il tuo `edge_manager_python_example.py`, `agent_pb2_grpc.py` e `agent_pb2.py` nel tuo bucket Amazon S3 e annota il loro percorso Amazon S3.
+ Crea un componente privato nella console AWS IoT Greengrass V2 e definisci la ricetta per il tuo componente. Specifica l'URI di Amazon S3 per l'applicazione Hello World e lo stub gRPC nella seguente ricetta.

  ```
  ---
  RecipeFormatVersion: 2020-01-25
  ComponentName: com.sagemaker.edgePythonExample
  ComponentVersion: 1.0.0
  ComponentDescription: Sagemaker Edge Manager Python example
  ComponentPublisher: Amazon Web Services, Inc.
  ComponentDependencies:
    aws.greengrass.SageMakerEdgeManager:
      VersionRequirement: '>=1.0.0'
      DependencyType: HARD
  Manifests:
    - Platform:
        os: linux
        architecture: "/amd64|x86/"
      Lifecycle:
        install: |-
          apt-get install python3-pip
          pip3 install grpcio
          pip3 install grpcio-tools
          pip3 install protobuf
          pip3 install Pillow
        run:
          script: |- 
            python3 {artifacts:path}/edge_manager_python_example.py
      Artifacts:
        - URI: <code-s3-path>
        - URI: <pb2-s3-path>
        - URI: <pb2-grpc-s3-path>
  ```

Per informazioni dettagliate sulla creazione di una ricetta Hello World, vedi [Creare il tuo primo componente](https://docs.aws.amazon.com/greengrass/v2/developerguide/getting-started.html#create-first-component) nella AWS IoT Greengrass documentazione.

# Distribuire i componenti nel proprio dispositivo.
<a name="edge-greengrass-deploy-components"></a>

Distribuisci i componenti con la AWS IoT console o con. AWS CLI

## Per distribuire i componenti (console)
<a name="collapsible-section-gg-deploy-console"></a>

Implementa i tuoi AWS IoT Greengrass componenti con la AWS IoT console.

1. Nel menu di [https://console.aws.amazon.com/iot/](https://console.aws.amazon.com/greengrass/)navigazione della AWS IoT Greengrass console, scegli **Implementazioni**.

1. Nella pagina **Componenti**, nella scheda **Componenti pubblici**, scegli `aws.greengrass.SageMakerEdgeManager`.

1. Nella pagina `aws.greengrass.SageMakerEdgeManager`, scegli **(Distribuisci)**.

1. Da `Add to deployment`, scegli una delle seguenti opzioni:

   1. Per unire questo componente a una distribuzione esistente sul dispositivo di destinazione, scegli **Aggiungi alla distribuzione esistente**, quindi seleziona la distribuzione che desideri modificare.

   1. Per creare una nuova distribuzione sul dispositivo di destinazione, scegli **Crea nuova distribuzione**. Se hai un’implementazione esistente sul tuo dispositivo, la scelta di questa fase sostituisce l’implementazione esistente.

1. Nella pagina **Specifica destinazione**, procedi come segue:

   1. In **Informazioni sulla distribuzione**, inserisci o modifica il nome descrittivo della distribuzione.

   1. In **Destinazione della distribuzione**, seleziona una destinazione della distribuzione e scegli **Avanti**. Non è possibile modificare la destinazione della distribuzione se si sta revisionando una distribuzione esistente.

1. Nella pagina **Seleziona componenti**, in **I miei componenti**, scegli:
   + com. *<CUSTOM-COMPONENT-NAME>*
   + `aws.greengrass.SageMakerEdgeManager`
   + SagemakerEdgeManager.*<YOUR-PACKAGING-JOB>*

1. Nella pagina **Configura componenti**, scegli **com.greengrass. SageMakerEdgeManager**ed esegui le seguenti operazioni.

   1. Scegli **Configura componente**.

   1. In **Aggiornamento della configurazione**, in **Configurazione da unire**, inserisci la seguente configurazione.

      ```
      {
          "DeviceFleetName": "device-fleet-name",
          "BucketName": "bucket-name"
      }
      ```

      Sostituisci *`device-fleet-name`* con il nome del parco dispositivi edge che hai creato e sostituisci *`bucket-name`* con il nome del bucket Amazon S3 associato al tuo parco dispositivi.

   1. Seleziona **Conferma** e scegli **Avanti**.

1. Nella pagina **Configura impostazioni avanzate**, mantieni le impostazioni di configurazione predefinite e scegli **Avanti**.

1. Nella pagina **Review (Verifica)**, scegli **Deploy (Distribuisci)**.

## Per distribuire i componenti (AWS CLI)
<a name="collapsible-section-gg-deploy-cli"></a>

1. Crea un ` deployment.json` file per definire la configurazione di distribuzione per i componenti di SageMaker Edge Manager. Questo file dovrebbe essere simile all'esempio seguente.

   ```
   {
     "targetArn":"targetArn",
     "components": {
       "aws.greengrass.SageMakerEdgeManager": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
           "merge": {
             "DeviceFleetName": "device-fleet-name",
             "BucketName": "bucket-name"
           }
         }
       },
       "com.greengrass.SageMakerEdgeManager.ImageClassification": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
       "com.greengrass.SageMakerEdgeManager.ImageClassification.Model": {
         "componentVersion": 1.0.0,
         "configurationUpdate": {
         }
       }, 
     }
   }
   ```
   + Nel campo `targetArn`, sostituisci *`targetArn`* con il nome della risorsa Amazon (ARN) dell'oggetto o del gruppo di oggetti a cui destinare la distribuzione, nel seguente formato:
     + Oggetto: `arn:aws:iot:region:account-id:thing/thingName`
     + Gruppo di oggetti: `arn:aws:iot:region:account-id:thinggroup/thingGroupName`
   + Nel campo `merge` sostituisci *`device-fleet-name`* con il nome del parco dispositivi edge che hai creato e sostituisci *`bucket-name`* con il nome del bucket Amazon S3 associato al tuo parco dispositivi.
   + Sostituisci le versioni dei componenti di ogni componente con l'ultima versione disponibile.

1. Eseguire comando seguente per distribuire i componenti sul dispositivo:

   ```
   aws greengrassv2 create-deployment \
       --cli-input-json file://path/to/deployment.json
   ```

La distribuzione può richiedere alcuni minuti. Nella fase successiva, controlla il registro dei componenti per verificare che l’implementazione sia stata completata correttamente e per visualizzare i risultati dell'inferenza.

Per ulteriori informazioni sulla distribuzione dei componenti su singoli dispositivi o gruppi di dispositivi, consulta [Distribuire AWS IoT Greengrass i componenti](https://docs.aws.amazon.com/greengrass/v2/developerguide/manage-deployments.html) sui dispositivi.

# Implementa il Model Package direttamente con l'API di distribuzione SageMaker Edge Manager
<a name="edge-deployment-plan-api"></a>

SageMaker Edge Manager fornisce un'API di distribuzione che è possibile utilizzare per distribuire modelli su destinazioni di dispositivi senza. AWS IoT GreengrassÈ utile in situazioni in cui si desidera aggiornare i modelli indipendentemente dagli aggiornamenti del firmware o dai meccanismi di distribuzione delle applicazioni. È possibile utilizzare l'API per integrare le implementazioni edge in un CI/CD flusso di lavoro per distribuire automaticamente i modelli dopo aver convalidato la precisione del modello. L'API offre anche comode opzioni di rollback e un'implementazione graduale che consentono di garantire il corretto funzionamento dei modelli in un ambiente particolare prima di un'implementazione più ampia.

Per utilizzare l'API di distribuzione di Edge Manager, per prima cosa, compila e creai il pacchetto del tuo modello. Per informazioni su come compilare e creare il pacchetto del tuo modello, consulta [Preparazione del modello per l’implementazione](edge-getting-started-step2.md). Le seguenti sezioni di questa guida mostrano come creare implementazioni edge utilizzando l' SageMaker API, dopo aver compilato e impacchettato i modelli.

**Topics**
+ [Creare un piano di implementazione edge](#create-edge-deployment-plan)
+ [Avvia l'implementazione edge.](#start-edge-deployment-stage)
+ [Controllare lo stato dell'implementazione](#describe-edge-deployment-status)

## Creare un piano di implementazione edge
<a name="create-edge-deployment-plan"></a>

Con l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgeDeploymentPlan.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgeDeploymentPlan.html) è possibile creare un piano di implementazione edge. Il piano di implementazione può avere più fasi. È possibile configurare ogni fase per implementare la distribuzione su un sottoinsieme di dispositivi edge (in base alla percentuale o al nome del dispositivo). È inoltre possibile configurare la modalità di gestione degli errori di implementazione in ogni fase.

Il seguente frammento di codice mostra come è possibile creare un piano di implementazione edge con 1 fase per distribuire un modello compilato e impacchettato su 2 dispositivi edge specifici:

```
import boto3

client = boto3.client("sagemaker")

client.create_edge_deployment_plan(
    EdgeDeploymentPlanName="edge-deployment-plan-name",
    DeviceFleetName="device-fleet-name",
    ModelConfigs=[
        {
            "EdgePackagingJobName": "edge-packaging-job-name",
            "ModelHandle": "model-handle"
        }
    ],
    Stages=[
        {
            "StageName": "stage-name",
            "DeviceSelectionConfig": {
                "DeviceSubsetType": "SELECTION",
                "DeviceNames": ["device-name-1", "device-name-2"]
            },
            "DeploymentConfig": {
                "FailureHandlingPolicy": "ROLLBACK_ON_FAILURE"
            }
        }
    ]
)
```

Invece di dispositivi specifici, se desideri eseguire l'implementazione al modello su una percentuale di dispositivi del tuo parco dispositivi, imposta il valore `DeviceSubsetType` a `"PERCENTAGE"` e sostituisci `"DeviceNames": ["device-name-1", "device-name-2"]` con `"Percentage": desired-percentage` come illustrato nell'esempio precedente.

Le fasi possono essere aggiunte dopo aver creato il piano di implementazione con l'[CreateEdgeDeploymentStage](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEdgeDeploymentStage.html)API, nel caso in cui si desideri iniziare a implementare nuove fasi dopo aver verificato il successo dell'implementazione del test. [Per ulteriori informazioni sulle fasi di distribuzione, consulta. DeploymentStage](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DeploymentStage.html)

## Avvia l'implementazione edge.
<a name="start-edge-deployment-stage"></a>

Dopo aver creato il piano e le fasi di implementazione, puoi iniziare la distribuzione con l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StartEdgeDeploymentStage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StartEdgeDeploymentStage.html).

```
client.start_edge_deployment_stage(
    EdgeDeploymentPlanName="edge-deployment-plan-name",
    StageName="stage-name"
)
```

## Controllare lo stato dell'implementazione
<a name="describe-edge-deployment-status"></a>

Puoi controllare lo stato dell'implementazione edge con l'[DescribeEdgeDeploymentPlan](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeEdgeDeploymentPlan.html)API.

```
client.describe_edge_deployment_plan(
    EdgeDeploymentPlanName="edge-deployment-plan-name"
)
```

# Gestione del modello
<a name="edge-manage-model"></a>

L'agente Edge Manager può caricare più modelli alla volta e fare inferenze con i modelli caricati sui dispositivi edge. Il numero di modelli che l'agente può caricare è determinato dalla memoria disponibile sul dispositivo. L'agente convalida la firma del modello e carica in memoria tutti gli artefatti prodotti dal processo di creazione di pacchetti edge. Questa fase richiede l'installazione di tutti i certificati richiesti descritti nelle fasi precedenti insieme al resto dell'installazione binaria. Se la firma del modello non può essere convalidata, il relativo caricamento non riesce con il codice restituito e il motivo appropriati.

SageMaker L'agente Edge Manager fornisce un elenco di Model Management APIs che implementano il piano di controllo e il piano dati APIs sui dispositivi edge. Oltre a questa documentazione, consigliamo di esaminare l'implementazione client di esempio che mostra l'uso canonico di quanto descritto di seguito. APIs

Il file `proto` è disponibile come parte degli elementi di rilascio (all'interno del tarball di rilascio). In questo documento, elenchiamo e descriviamo l'uso di APIs list in questo `proto` file.

**Nota**  
Esiste una one-to-one mappatura per questi aspetti APIs nella versione di Windows e un codice di esempio per un'applicazione implementata in C\$1 è condiviso con gli artefatti di rilascio per Windows. Le istruzioni riportate di seguito riguardano l'esecuzione dell'agente come processo autonomo, applicabile agli artefatti di rilascio per Linux.

Estrai l'archivio in base al tuo sistema operativo. Dove `VERSION` è suddiviso in tre componenti: `<MAJOR_VERSION>.<YYYY-MM-DD>-<SHA-7>`. vedere [Installazione dell'agente Edge Manager](edge-device-fleet-manual.md#edge-device-fleet-installation) per informazioni su come ottenere la versione di rilascio (`<MAJOR_VERSION>`), il timestamp dell'elemento di rilascio (`<YYYY-MM-DD>`) e l'ID di commit del repository (`SHA-7`).

------
#### [ Linux ]

L'archivio zip può essere estratto con il comando:

```
tar -xvzf <VERSION>.tgz
```

------
#### [ Windows ]

L'archivio zip può essere estratto con l'interfaccia utente o il comando:

```
unzip <VERSION>.tgz
```

------

La gerarchia degli artefatti di rilascio (dopo l'estrazione dell'archivio `tar/zip`) è mostrata di seguito. Il file `proto` dell'agente è disponibile in `api/`.

```
0.20201205.7ee4b0b
├── bin
│         ├── sagemaker_edge_agent_binary
│         └── sagemaker_edge_agent_client_example
└── docs
├── api
│         └── agent.proto
├── attributions
│         ├── agent.txt
│         └── core.txt
└── examples
└── ipc_example
├── CMakeLists.txt
├── sagemaker_edge_client.cc
├── sagemaker_edge_client_example.cc
├── sagemaker_edge_client.hh
├── sagemaker_edge.proto
├── README.md
├── shm.cc
├── shm.hh
└── street_small.bmp
```

**Topics**
+ [Caricamento dei modelli](#edge-manage-model-loadmodel)
+ [Scaricare il modello](#edge-manage-model-unloadmodel)
+ [Elenca modelli](#edge-manage-model-listmodels)
+ [Descrivi modello](#edge-manage-model-describemodel)
+ [Acquisisci i dati](#edge-manage-model-capturedata)
+ [Ottieni lo stato dell'acquisizione](#edge-manage-model-getcapturedata)
+ [Prevedi](#edge-manage-model-predict)

## Caricamento dei modelli
<a name="edge-manage-model-loadmodel"></a>

L'agente Edge Manager supporta il caricamento di più modelli. Questa API convalida la firma del modello e carica in memoria tutti gli artefatti prodotti dall'operazione `EdgePackagingJob`. Questa fase richiede l'installazione di tutti i certificati richiesti insieme al resto dell'installazione binaria dell'agente. Se la firma del modello non può essere convalidata, questa fase non riesce, indicando un codice restituito appropriato e messaggi di errore nel log.

```
// perform load for a model
// Note:
// 1. currently only local filesystem paths are supported for loading models.
// 2. multiple models can be loaded at the same time, as limited by available device memory
// 3. users are required to unload any loaded model to load another model.
// Status Codes:
// 1. OK - load is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - model doesn't exist at the url
// 5. ALREADY_EXISTS - model with the same name is already loaded
// 6. RESOURCE_EXHAUSTED - memory is not available to load the model
// 7. FAILED_PRECONDITION - model is not compiled for the machine.
//
rpc LoadModel(LoadModelRequest) returns (LoadModelResponse);
```

------
#### [ Input ]

```
//
// request for LoadModel rpc call
//
message LoadModelRequest {
  string url = 1;
  string name = 2;  // Model name needs to match regex "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"
}
```

------
#### [ Output ]

```
//
//
// response for LoadModel rpc call
//
message LoadModelResponse {
  Model model = 1;
}

//
// Model represents the metadata of a model
//  url - url representing the path of the model
//  name - name of model
//  input_tensor_metadatas - TensorMetadata array for the input tensors
//  output_tensor_metadatas - TensorMetadata array for the output tensors
//
// Note:
//  1. input and output tensor metadata could empty for dynamic models.
//
message Model {
  string url = 1;
  string name = 2;
  repeated TensorMetadata input_tensor_metadatas = 3;
  repeated TensorMetadata output_tensor_metadatas = 4;
}
```

------

## Scaricare il modello
<a name="edge-manage-model-unloadmodel"></a>

Scarica un modello caricato in precedenza. Viene identificato tramite l'alias del modello fornito durante `loadModel`. Se l'alias non viene trovato o il modello non viene caricato, restituisce un errore.

```
//
// perform unload for a model
// Status Codes:
// 1. OK - unload is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - model doesn't exist
//
rpc UnLoadModel(UnLoadModelRequest) returns (UnLoadModelResponse);
```

------
#### [ Input ]

```
//
// request for UnLoadModel rpc call
//
message UnLoadModelRequest {
 string name = 1; // Model name needs to match regex "^[a-zA-Z0-9](-*[a-zA-Z0-9])*$"
}
```

------
#### [ Output ]

```
//
// response for UnLoadModel rpc call
//
message UnLoadModelResponse {}
```

------

## Elenca modelli
<a name="edge-manage-model-listmodels"></a>

Elenca tutti i modelli caricati e i relativi alias.

```
//
// lists the loaded models
// Status Codes:
// 1. OK - unload is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
//
rpc ListModels(ListModelsRequest) returns (ListModelsResponse);
```

------
#### [ Input ]

```
//
// request for ListModels rpc call
//
message ListModelsRequest {}
```

------
#### [ Output ]

```
//
// response for ListModels rpc call
//
message ListModelsResponse {
 repeated Model models = 1;
}
```

------

## Descrivi modello
<a name="edge-manage-model-describemodel"></a>

Descrive un modello caricato sull'agente.

```
//
// Status Codes:
// 1. OK - load is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - model doesn't exist at the url
//
rpc DescribeModel(DescribeModelRequest) returns (DescribeModelResponse);
```

------
#### [ Input ]

```
//
// request for DescribeModel rpc call
//
message DescribeModelRequest {
  string name = 1;
}
```

------
#### [ Output ]

```
//
// response for DescribeModel rpc call
//
message DescribeModelResponse {
  Model model = 1;
}
```

------

## Acquisisci i dati
<a name="edge-manage-model-capturedata"></a>

Consente all'applicazione client di acquisire tensori di input e output nel bucket Amazon S3 e, facoltativamente, gli ausiliari. L'applicazione client dovrebbe passare un ID di acquisizione univoco insieme a ogni chiamata a questa API. Questo può essere utilizzato in seguito per eseguire una query sullo stato dell'acquisizione.

```
//
// allows users to capture input and output tensors along with auxiliary data.
// Status Codes:
// 1. OK - data capture successfully initiated
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 5. ALREADY_EXISTS - capture initiated for the given capture_id
// 6. RESOURCE_EXHAUSTED - buffer is full cannot accept any more requests.
// 7. OUT_OF_RANGE - timestamp is in the future.
// 8. INVALID_ARGUMENT - capture_id is not of expected format.
//
rpc CaptureData(CaptureDataRequest) returns (CaptureDataResponse);
```

------
#### [ Input ]

```
enum Encoding {
 CSV = 0;
 JSON = 1;
 NONE = 2;
 BASE64 = 3;
}

//
// AuxilaryData represents a payload of extra data to be capture along with inputs and outputs of inference
// encoding - supports the encoding of the data
// data - represents the data of shared memory, this could be passed in two ways:
// a. send across the raw bytes of the multi-dimensional tensor array
// b. send a SharedMemoryHandle which contains the posix shared memory segment id and
// offset in bytes to location of multi-dimensional tensor array.
//
message AuxilaryData {
 string name = 1;
 Encoding encoding = 2;
 oneof data {
 bytes byte_data = 3;
 SharedMemoryHandle shared_memory_handle = 4;
 }
}

//
// Tensor represents a tensor, encoded as contiguous multi-dimensional array.
// tensor_metadata - represents metadata of the shared memory segment
// data_or_handle - represents the data of shared memory, this could be passed in two ways:
// a. send across the raw bytes of the multi-dimensional tensor array
// b. send a SharedMemoryHandle which contains the posix shared memory segment
// id and offset in bytes to location of multi-dimensional tensor array.
//
message Tensor {
 TensorMetadata tensor_metadata = 1; //optional in the predict request
 oneof data {
 bytes byte_data = 4;
 // will only be used for input tensors
 SharedMemoryHandle shared_memory_handle = 5;
 }
}

//
// request for CaptureData rpc call
//
message CaptureDataRequest {
 string model_name = 1;
 string capture_id = 2; //uuid string
 Timestamp inference_timestamp = 3;
 repeated Tensor input_tensors = 4;
 repeated Tensor output_tensors = 5;
 repeated AuxilaryData inputs = 6;
 repeated AuxilaryData outputs = 7;
}
```

------
#### [ Output ]

```
//
// response for CaptureData rpc call
//
message CaptureDataResponse {}
```

------

## Ottieni lo stato dell'acquisizione
<a name="edge-manage-model-getcapturedata"></a>

A seconda dei modelli caricati, i tensori di input e output possono essere grandi (per molti dispositivi edge). L'acquisizione nel cloud può richiedere molto tempo. Quindi `CaptureData()` viene implementato come operazione asincrona. Un ID di acquisizione è un identificatore univoco fornito dal client durante la chiamata di acquisizione dati, questo ID può essere utilizzato per interrogare lo stato della chiamata asincrona.

```
//
// allows users to query status of capture data operation
// Status Codes:
// 1. OK - data capture successfully initiated
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - given capture id doesn't exist.
//
rpc GetCaptureDataStatus(GetCaptureDataStatusRequest) returns (GetCaptureDataStatusResponse);
```

------
#### [ Input ]

```
//
// request for GetCaptureDataStatus rpc call
//
message GetCaptureDataStatusRequest {
  string capture_id = 1;
}
```

------
#### [ Output ]

```
enum CaptureDataStatus {
  FAILURE = 0;
  SUCCESS = 1;
  IN_PROGRESS = 2;
  NOT_FOUND = 3;
}

//
// response for GetCaptureDataStatus rpc call
//
message GetCaptureDataStatusResponse {
  CaptureDataStatus status = 1;
}
```

------

## Prevedi
<a name="edge-manage-model-predict"></a>

L'API `predict` esegue l'inferenza su un modello caricato in precedenza. Accetta una richiesta sotto forma di tensore che viene inserito direttamente nella rete neurale. L'output è il tensore di uscita (o scalare) del modello. Questa è una chiamata di blocco.

```
//
// perform inference on a model.
//
// Note:
// 1. users can chose to send the tensor data in the protobuf message or
// through a shared memory segment on a per tensor basis, the Predict
// method with handle the decode transparently.
// 2. serializing large tensors into the protobuf message can be quite expensive,
// based on our measurements it is recommended to use shared memory of
// tenors larger than 256KB.
// 3. SMEdge IPC server will not use shared memory for returning output tensors,
// i.e., the output tensor data will always send in byte form encoded
// in the tensors of PredictResponse.
// 4. currently SMEdge IPC server cannot handle concurrent predict calls, all
// these call will be serialized under the hood. this shall be addressed
// in a later release.
// Status Codes:
// 1. OK - prediction is successful
// 2. UNKNOWN - unknown error has occurred
// 3. INTERNAL - an internal error has occurred
// 4. NOT_FOUND - when model not found
// 5. INVALID_ARGUMENT - when tenors types mismatch
//
rpc Predict(PredictRequest) returns (PredictResponse);
```

------
#### [ Input ]

```
// request for Predict rpc call
//
message PredictRequest {
string name = 1;
repeated Tensor tensors = 2;
}

//
// Tensor represents a tensor, encoded as contiguous multi-dimensional array.
//    tensor_metadata - represents metadata of the shared memory segment
//    data_or_handle - represents the data of shared memory, this could be passed in two ways:
//                        a. send across the raw bytes of the multi-dimensional tensor array
//                        b. send a SharedMemoryHandle which contains the posix shared memory segment
//                            id and offset in bytes to location of multi-dimensional tensor array.
//
message Tensor {
  TensorMetadata tensor_metadata = 1; //optional in the predict request
  oneof data {
    bytes byte_data = 4;
    // will only be used for input tensors
    SharedMemoryHandle shared_memory_handle = 5;
  }
}

//
// Tensor represents a tensor, encoded as contiguous multi-dimensional array.
//    tensor_metadata - represents metadata of the shared memory segment
//    data_or_handle - represents the data of shared memory, this could be passed in two ways:
//                        a. send across the raw bytes of the multi-dimensional tensor array
//                        b. send a SharedMemoryHandle which contains the posix shared memory segment
//                            id and offset in bytes to location of multi-dimensional tensor array.
//
message Tensor {
  TensorMetadata tensor_metadata = 1; //optional in the predict request
  oneof data {
    bytes byte_data = 4;
    // will only be used for input tensors
    SharedMemoryHandle shared_memory_handle = 5;
  }
}

//
// TensorMetadata represents the metadata for a tensor
//    name - name of the tensor
//    data_type  - data type of the tensor
//    shape - array of dimensions of the tensor
//
message TensorMetadata {
  string name = 1;
  DataType data_type = 2;
  repeated int32 shape = 3;
}

//
// SharedMemoryHandle represents a posix shared memory segment
//    offset - offset in bytes from the start of the shared memory segment.
//    segment_id - shared memory segment id corresponding to the posix shared memory segment.
//    size - size in bytes of shared memory segment to use from the offset position.
//
message SharedMemoryHandle {
  uint64 size = 1;
  uint64 offset = 2;
  uint64 segment_id = 3;
}
```

------
#### [ Output ]

**Nota**  
`PredictResponse` restituisce solo `Tensors` e non `SharedMemoryHandle`.

```
// response for Predict rpc call
//
message PredictResponse {
   repeated Tensor tensors = 1;
}
```

------

# SageMaker Fine del ciclo di vita di Edge Manager
<a name="edge-eol"></a>

 A partire dal 26 aprile 2024, non potrai più accedere ad Amazon SageMaker Edge Manager tramite la console di AWS gestione, effettuare lavori di edge packaging e gestire flotte di dispositivi edge. 

## FAQs
<a name="edge-eol-faqs"></a>

 Utilizza le seguenti sezioni per ottenere risposte alle domande più frequenti sulla fine del ciclo di vita (EOL) di SageMaker Edge Manager. 

### D: Cosa succede al mio Amazon SageMaker Edge Manager dopo la data EOL?
<a name="edge-eol-faqs-1"></a>

 R: Dopo il 26 aprile 2024, tutti i riferimenti ai processi di creazione di pacchetti edge, ai parchi dispositivi vengono eliminati dal servizio Edge Manager. Non puoi più scoprire o accedere al servizio Edge Manager dalla tua AWS console e le applicazioni che richiamano il servizio Edge Manager APIs non funzionano più. 

### D: Dopo la data di fine vita mi verranno addebitate le risorse di Edge Manager rimaste nel mio account?
<a name="edge-eol-faqs-2"></a>

 R: Le risorse create da Edge Manager, come i pacchetti edge all'interno dei bucket Amazon S3, gli oggetti AWS IoT e i ruoli AWS IAM, continuano a esistere sui rispettivi servizi dopo il 26 aprile 2024. Per evitare di ricevere addebiti dopo che Edge Manager non sarà più supportato, elimina le tue risorse. Per ulteriori informazioni sull'eliminazione delle risorse, consulta [Eliminare le risorse di Edge Manager](#edge-eol-delete-resources). 

### D: Come faccio a eliminare le mie risorse Amazon SageMaker Edge Manager?
<a name="edge-eol-faqs-3"></a>

 R: Le risorse create da Edge Manager, come i pacchetti edge all'interno dei bucket Amazon S3, gli oggetti AWS IoT e i ruoli AWS IAM, continuano a esistere sui rispettivi servizi dopo il 26 aprile 2024. Per evitare di ricevere addebiti dopo che Edge Manager non sarà più supportato, elimina le tue risorse. Per ulteriori informazioni sull'eliminazione delle risorse, consulta [Eliminare le risorse di Edge Manager](#edge-eol-delete-resources). 

### D: Come posso continuare a distribuire modelli sull'edge?
<a name="edge-eol-faqs-4"></a>

 R: Ti consigliamo di provare uno dei seguenti strumenti di machine learning. Per un runtime edge multipiattaforma, usa [ONNX](https://onnxruntime.ai/). ONNX è una soluzione open source popolare e ben gestita che traduce i modelli in istruzioni eseguibili da molti tipi di hardware ed è compatibile con i più recenti framework di ML. ONNX può essere integrato nei flussi di lavoro di SageMaker intelligenza artificiale come fase automatizzata per le implementazioni edge. 

 Per implementazioni periferiche e uso di monitoraggio. AWS IoT Greengrass V2 AWS IoT Greengrass V2 dispone di un meccanismo di imballaggio e implementazione estensibile in grado di adattarsi a modelli e applicazioni all'edge. Puoi utilizzare i canali MQTT integrati per inviare la telemetria del modello per Amazon SageMaker Model Monitor o utilizzare il sistema di autorizzazioni integrato per inviare i dati acquisiti dal modello ad Amazon Simple Storage Service (Amazon S3). Se non lo usi o non puoi utilizzarlo AWS IoT Greengrass V2, ti suggeriamo di utilizzare MQTT e IoT Jobs (libreria C/C\$1\$1) per creare un meccanismo OTA leggero per fornire modelli. 

 Abbiamo preparato un [codice di esempio disponibile in questo GitHub repository](https://github.com/aws-samples/ml-edge-getting-started) per aiutarti a passare a questi strumenti suggeriti. 

## Eliminare le risorse di Edge Manager
<a name="edge-eol-delete-resources"></a>

 Dopo il 26 aprile 2024 le risorse create da Edge Manager continueranno a esistere. Per evitare la fatturazione, elimina queste risorse. 

 Per eliminare AWS IoT Greengrass le risorse, procedi come segue: 

1.  **Nella AWS IoT Core console, scegli i **dispositivi Greengrass** in Gestisci.** 

1.  Scegli **Componenti**. 

1.  In **I miei componenti, i componenti** creati da Edge Manager sono nel formato * SageMaker AIEdge (EdgePackagingJobName).* Seleziona il componente da eliminare. 

1.  Quindi scegli **Elimina versione**. 

 Per eliminare un alias di AWS IoT ruolo, effettuate le seguenti operazioni: 

1.  Nella AWS IoT Core console, scegli **Sicurezza** in **Gestisci**. 

1.  Scegli **Alias di ruolo**. 

1.  Gli alias di ruolo creati da Edge Manager sono nel formato *SageMaker AIEdge- \$1DeviceFleetName\$1*. Selezionare il ruolo da eliminare. 

1.  Scegli **Elimina**. 

 Per eliminare i processi di creazione pacchetti nei bucket Amazon S3, procedi come indicato di seguito: 

1.  Nella console SageMaker AI, scegli **Edge Inference**. 

1.  Scegli **Processi di creazione di pacchetti Edge**. 

1.  Seleziona uno dei processi di creazione di pacchetti edge. Copia l'URI di Amazon S3 in **Artefatti del modello** nella sezione **Configurazione di output**. 

1.  Nella console Amazon S3, vai alla posizione corrispondente e verifica se devi eliminare l'artefatto del modello. Per eliminare l'artefatto del modello, seleziona l'oggetto Amazon S3 e scegli **Elimina**. 

# Ottimizzazione delle prestazioni dei modelli con SageMaker Neo
<a name="neo"></a>

Neo è una funzionalità di Amazon SageMaker AI che consente di effettuare l’addestramento di modelli di machine learning una sola volta e di eseguirli ovunque nel cloud e nell’edge. 

Se utilizzi SageMaker Neo per la prima volta, ti consigliamo di consultare la sezione [Nozioni di base sui dispositivi Edge](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html) per ottenere istruzioni dettagliate su come compilare e implementare su un dispositivo edge. 

## Cos'è SageMaker Neo?
<a name="neo-what-it-is"></a>

In genere, è difficile ottimizzare i modelli di machine learning per inferenza su più piattaforme perché occorre calibrare manualmente i modelli per la configurazione hardware e software specifica di ciascuna piattaforma. Per ottenere prestazioni ottimali per un determinato carico di lavoro, è necessario conoscere, tra gli altri, l'architettura hardware, il set di istruzioni, i modelli di accesso alla memoria e le forme dei dati di input. Per lo sviluppo software tradizionale, strumenti quali compilatori e profiler semplificano il processo. Per il machine learning, la maggior parte degli strumenti sono specifici per il framework o l'hardware. Ciò costringe l'utente a un processo basato su tentativi ed errori manuale che è inaffidabile e non produttivo.

Neo ottimizza automaticamente i modelli Gluon, Keras, MXNet, PyTorch, TensorFlow, Tensorflow-Lite e ONNX per l'inferenza su macchine Android, Linux e Windows basate su processori Ambarella, ARM, Intel, Nvidia, NXP, Qualcomm, Texas Instruments e Xilinx. Neo è testato con modelli di visione artificiale disponibili nei modelli zoo attraverso i framework. SageMaker Neo supporta la compilazione e l'implementazione per due piattaforme principali: istanze cloud (inclusa Inferentia) e dispositivi edge.

Per ulteriori informazioni sui framework supportati e sui tipi di istanze cloud su cui è possibile eseguire la distribuzione, consulta [Tipi di istanze e framework supportati](neo-supported-cloud.md) per le istanze cloud.

Per ulteriori informazioni sui framework supportati, sui dispositivi edge, sui sistemi operativi, sulle architetture di chip e sui modelli di machine learning comuni testati da SageMaker AI Neo per i dispositivi edge, consulta [Framework, dispositivi, sistemi e architetture supportati](neo-supported-devices-edge.md) per i dispositivi edge.

## Come funziona
<a name="neo-how-it-works"></a>

Neo è costituito da un compilatore e un runtime. Innanzitutto, l'API di compilazione Neo legge modelli esportati da vari framework. Converte le funzioni e le operazioni specifiche del framework in una rappresentazione intermedia indipendente dal framework. Inoltre, esegue una serie di ottimizzazioni. Quindi genera codice binario per le operazioni ottimizzate, le scrive in una libreria di oggetti condivisi e salva la definizione del modello e i parametri in file separati. Neo fornisce, inoltre, un runtime per ogni piattaforma di destinazione che carica ed esegue il modello compilato.

![\[Funzionamento di Neo in SageMaker AI.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/neo_how_it_works.png)


Puoi creare un processo di compilazione Neo dalla console SageMaker AI, dall’AWS Command Line Interface (AWS CLI), da un notebook Python o dall’SDK SageMaker AI. Per informazioni su come compilare un modello, consulta [Compilazione di modelli con Neo](neo-job-compilation.md). Con pochi comandi dell'interfaccia a riga di comando, una chiamata API o pochi clic puoi convertire un modello per la piattaforma scelta. Puoi implementare rapidamente il modello in un endpoint SageMaker AI o un dispositivo AWS IoT Greengrass.

Neo può ottimizzare i modelli con parametri in FP32 o quantizzati a INT8 o con larghezza FP a 16 bit.

**Topics**
+ [Cos'è SageMaker Neo?](#neo-what-it-is)
+ [Come funziona](#neo-how-it-works)
+ [Compilazione di modelli con Neo](neo-job-compilation.md)
+ [Istanze cloud](neo-cloud-instances.md)
+ [Dispositivi Edge](neo-edge-devices.md)
+ [Risoluzione degli errori](neo-troubleshooting.md)

# Compilazione di modelli con Neo
<a name="neo-job-compilation"></a>

Questa sezione mostra come creare, descrivere, arrestare ed elencare lavori di compilazione. Le seguenti opzioni sono disponibili in Amazon SageMaker Neo per la gestione dei processi di compilazione per i modelli di apprendimento automatico: la AWS Command Line Interface console Amazon SageMaker AI o l'Amazon SageMaker SDK. 

**Topics**
+ [Preparazione del modello per la compilazione](neo-compilation-preparing-model.md)
+ [Compilazione di un modello (AWS Command Line Interface)](neo-job-compilation-cli.md)
+ [Compila un modello (Amazon SageMaker AI Console)](neo-job-compilation-console.md)
+ [Compila un modello (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Preparazione del modello per la compilazione
<a name="neo-compilation-preparing-model"></a>

SageMaker Neo richiede modelli di apprendimento automatico per soddisfare forme di dati di input specifiche. La forma di input richiesta per la compilazione dipende dal framework di deep learning utilizzato. Una volta che la forma di input del modello è stata formattata correttamente, salva il modello in base ai requisiti seguenti. Una volta salvato il modello, comprimi gli artefatti del modello.

**Topics**
+ [Quali forme di dati di input si aspetta SageMaker Neo?](#neo-job-compilation-expected-inputs)
+ [Modelli di salvataggio per SageMaker Neo](#neo-job-compilation-how-to-save-model)

## Quali forme di dati di input si aspetta SageMaker Neo?
<a name="neo-job-compilation-expected-inputs"></a>

Prima di compilare il modello, assicurati che esso sia formattato correttamente. Neo si aspetta il nome e la forma degli input di dati previsti per il modello addestrato con il formato JSON o elenco. Gli input previsti sono specifici del framework. 

Di seguito sono riportate le forme di input che SageMaker Neo si aspetta:

### Keras
<a name="collapsible-section-1"></a>

Specifica il nome e la forma (formato NCHW) degli input di dati previsti utilizzando un formato dizionario per il modello addestrato. Nota che mentre gli artefatti del modello Keras devono essere caricati nel formato NHWC (channel-last), DataInputConfig devono essere specificati nel formato NCHW (channel-first). I formati di dizionario richiesti sono i seguenti: 
+ Per un input: `{'input_1':[1,3,224,224]}`
+ Per due input: `{'input_1': [1,3,224,224], 'input_2':[1,3,224,224]}`

### MXNet/ONNX
<a name="collapsible-section-2"></a>

Specifica il nome e la forma (formato NCHW) degli input di dati previsti utilizzando un formato dizionario per il modello addestrato. I formati di dizionario richiesti sono i seguenti:
+ Per un input: `{'data':[1,3,1024,1024]}`
+ Per due input: `{'var1': [1,1,28,28], 'var2':[1,1,28,28]}`

### PyTorch
<a name="collapsible-section-3"></a>

Per un PyTorch modello, non è necessario fornire il nome e la forma degli input di dati previsti se si soddisfano entrambe le seguenti condizioni:
+ Avete creato il file di definizione del modello utilizzando la PyTorch versione 2.0 o una versione successiva. Per ulteriori informazioni su come creare il file di definizione, consulta la [PyTorch](#how-to-save-pytorch) sezione in *Salvare modelli per SageMaker Neo*.
+ Stai compilando il tuo modello per un'istanza cloud. Per ulteriori informazioni sui tipi di istanze supportati da SageMaker Neo, consulta[Tipi di istanze e framework supportati](neo-supported-cloud.md).

Se soddisfi queste condizioni, SageMaker Neo ottiene la configurazione di input dal file di definizione del modello (.pt o .pth) con cui crei. PyTorch

In caso contrario, devi completare le attività seguenti:

Specifica il nome e la forma (formato NCHW) degli input di dati previsti utilizzando un formato dizionario per il modello addestrato. In alternativa, puoi specificare la forma solo utilizzando un formato elenco. I formati di dizionario richiesti sono i seguenti:
+ Per un input in formato dizionario: `{'input0':[1,3,224,224]}`
+ Per un input in formato elenco: `[[1,3,224,224]]`
+ Per due input in formato dizionario: `{'input0':[1,3,224,224], 'input1':[1,3,224,224]}`
+ Per due input in formato elenco: `[[1,3,224,224], [1,3,224,224]]`

### TensorFlow
<a name="collapsible-section-4"></a>

Specifica il nome e la forma (formato NHWC) dei dati di input previsti utilizzando un formato dizionario per il modello sottoposto ad addestramento. I formati di dizionario richiesti sono i seguenti:
+ Per un input: `{'input':[1,1024,1024,3]}`
+ Per due input: `{'data1': [1,28,28,1], 'data2':[1,28,28,1]}`

### TFLite
<a name="collapsible-section-5"></a>

Specifica il nome e la forma (formato NHWC) dei dati di input previsti utilizzando un formato dizionario per il modello sottoposto ad addestramento. I formati di dizionario richiesti sono i seguenti:
+ Per un input: `{'input':[1,224,224,3]}`

**Nota**  
SageMaker Neo supporta TensorFlow Lite solo per dispositivi edge. Per un elenco dei target dei dispositivi SageMaker Neo edge supportati, consulta la [Dispositivi](neo-supported-devices-edge-devices.md#neo-supported-edge-devices) pagina SageMaker Neo. Per un elenco degli obiettivi delle istanze cloud SageMaker Neo supportati, consulta la [Tipi di istanze e framework supportati](neo-supported-cloud.md) pagina SageMaker Neo.

### XGBoost
<a name="collapsible-section-6"></a>

Un nome e la forma dei dati di input non sono necessari.

## Modelli di salvataggio per SageMaker Neo
<a name="neo-job-compilation-how-to-save-model"></a>

Gli esempi di codice seguenti mostrano come salvare il modello per renderlo compatibile con Neo. I modelli devono essere impacchettati come file tar compressi (`*.tar.gz`).

### Keras
<a name="how-to-save-tf-keras"></a>

I modelli Keras richiedono un file di definizione del modello (`.h5`).

Esistono due opzioni per salvare il modello Keras in modo da renderlo compatibile con SageMaker Neo:

1. Esportarlo in formato `.h5` con `model.save("<model-name>", save_format="h5")`.

1. Bloccare il file `SavedModel` dopo l'esportazione.

Di seguito è riportato un esempio di come esportare un modello `tf.keras` come grafico congelato (opzione due):

```
import os
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras import backend

tf.keras.backend.set_learning_phase(0)
model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3), pooling='avg')
model.summary()

# Save as a SavedModel
export_dir = 'saved_model/'
model.save(export_dir, save_format='tf')

# Freeze saved model
input_node_names = [inp.name.split(":")[0] for inp in model.inputs]
output_node_names = [output.name.split(":")[0] for output in model.outputs]
print("Input names: ", input_node_names)
with tf.Session() as sess:
    loaded = tf.saved_model.load(sess, export_dir=export_dir, tags=["serve"]) 
    frozen_graph = tf.graph_util.convert_variables_to_constants(sess,
                                                                sess.graph.as_graph_def(),
                                                                output_node_names)
    tf.io.write_graph(graph_or_graph_def=frozen_graph, logdir=".", name="frozen_graph.pb", as_text=False)

import tarfile
tar = tarfile.open("frozen_graph.tar.gz", "w:gz")
tar.add("frozen_graph.pb")
tar.close()
```

**avvertimento**  
Non esportare il modello con la classe `SavedModel` utilizzando `model.save(<path>, save_format='tf')`. Questo formato è adatto per l’addestramento, ma non per l'inferenza.

### MXNet
<a name="how-to-save-mxnet"></a>

MXNet i modelli devono essere salvati come un singolo file di simboli `*-symbol.json` e un singolo parametro`*.params files`.

------
#### [ Gluon Models ]

Definisci la rete neurale utilizzando la classe `HybridSequential`. In tal modo, verrà eseguito il codice nello stile della programmazione simbolica (al contrario della programmazione imperativa).

```
from mxnet import nd, sym
from mxnet.gluon import nn

def get_net():
    net = nn.HybridSequential()  # Here we use the class HybridSequential.
    net.add(nn.Dense(256, activation='relu'),
            nn.Dense(128, activation='relu'),
            nn.Dense(2))
    net.initialize()
    return net

# Define an input to compute a forward calculation. 
x = nd.random.normal(shape=(1, 512))
net = get_net()

# During the forward calculation, the neural network will automatically infer
# the shape of the weight parameters of all the layers based on the shape of
# the input.
net(x)
                        
# hybridize model
net.hybridize()
net(x)

# export model
net.export('<model_name>') # this will create model-symbol.json and model-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")
for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

Per ulteriori informazioni sull'ibridazione dei modelli, consultate la documentazione di [MXNet hybridize](https://mxnet.apache.org/versions/1.7.0/api/python/docs/tutorials/packages/gluon/blocks/hybridize.html).

------
#### [ Gluon Model Zoo (GluonCV) ]

I modelli zoo del modello GluonCV sono preibridati. Quindi, puoi semplicemente esportarli.

```
import numpy as np
import mxnet as mx
import gluoncv as gcv
from gluoncv.utils import export_block
import tarfile

net = gcv.model_zoo.get_model('<model_name>', pretrained=True) # For example, choose <model_name> as resnet18_v1
export_block('<model_name>', net, preprocess=True, layout='HWC')

tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------
#### [ Non Gluon Models ]

Tutti i modelli non Gluon quando vengono salvati su disco utilizzano file `*-symbol` e `*.params`. Sono quindi già nel formato corretto per Neo.

```
# Pass the following 3 parameters: sym, args, aux
mx.model.save_checkpoint('<model_name>',0,sym,args,aux) # this will create <model_name>-symbol.json and <model_name>-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------

### PyTorch
<a name="how-to-save-pytorch"></a>

PyTorch i modelli devono essere salvati come file di definizione (`.pt`o`.pth`) con il tipo di dati di input di. `float32`

Per salvare il modello, utilizza il metodo `torch.jit.trace` seguito dal metodo `torch.save`. Questo processo salva un oggetto in un file su disco e, per impostazione predefinita, utilizza il modulo pickle Python (`pickle_module=pickle`) per salvare gli oggetti e alcuni metadati. Dopodiché, converti il modello salvato in un file tar compresso.

```
import torchvision
import torch

model = torchvision.models.resnet18(pretrained=True)
model.eval()
inp = torch.rand(1, 3, 224, 224)
model_trace = torch.jit.trace(model, inp)

# Save your model. The following code saves it with the .pth file extension
model_trace.save('model.pth')

# Save as a compressed tar file
import tarfile
with tarfile.open('model.tar.gz', 'w:gz') as f:
    f.add('model.pth')
f.close()
```

Se si salva il modello con la PyTorch versione 2.0 o successiva, SageMaker Neo ricava la configurazione di input per il modello (il nome e la forma per l'input) dal file di definizione. In tal caso, non è necessario specificare la configurazione di immissione dei dati in SageMaker AI quando si compila il modello.

Se vuoi impedire a SageMaker Neo di derivare la configurazione di input, puoi impostare il `_store_inputs` parametro su to`torch.jit.trace`. `False` Se si esegue questa operazione, è necessario specificare la configurazione di immissione dei dati in SageMaker AI quando si compila il modello.

Per ulteriori informazioni sul `torch.jit.trace` metodo, consulta [TORCH.JIT.TRACE](https://pytorch.org/docs/stable/generated/torch.jit.trace.html#torch.jit.trace) nella documentazione. PyTorch 

### TensorFlow
<a name="how-to-save-tf"></a>

TensorFlow richiede uno `.pb` o un `.pbtxt` file e una directory di variabili che contenga variabili. Per i modelli bloccati, è richiesto solo un file `.pb` o `.pbtxt`.

Il codice di esempio seguente mostra come utilizzare il comando tar di Linux per comprimere il modello. Esegui quanto segue nel tuo terminale o in un notebook Jupyter (se usi un notebook Jupyter, inserisci il comando magico `!` all'inizio dell'istruzione):

```
# Download SSD_Mobilenet trained model
!wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# unzip the compressed tar file
!tar xvf ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# Compress the tar file and save it in a directory called 'model.tar.gz'
!tar czvf model.tar.gz ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb
```

I flag di comando utilizzati in questo esempio eseguono le seguenti operazioni:
+ `c`: creazione di un archivio
+ `z`: compressione dell'archivio con gzip
+ `v`: visualizzazione dello stato di avanzamento dell'archivio
+ `f`: specificazione del nome del file dell'archivio

### Strumenti di valutazione integrati
<a name="how-to-save-built-in"></a>

Gli strumenti di valutazione integrati sono realizzati mediante container specifici del framework o container specifici dell'algoritmo. Gli oggetti degli strumenti di valutazione sia per l'algoritmo integrato che per gli strumenti di valutazione specifici del framework salvano il modello nel formato corretto quando il modello viene addestrato utilizzando il metodo `.fit` integrato.

Ad esempio, puoi usare `sagemaker.TensorFlow` a per definire uno TensorFlow stimatore:

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(entry_point='mnist.py',
                        role=role,  #param role can be arn of a sagemaker execution role
                        framework_version='1.15.3',
                        py_version='py3',
                        training_steps=1000, 
                        evaluation_steps=100,
                        instance_count=2,
                        instance_type='ml.c4.xlarge')
```

Dopodiché, addestra il modello con il metodo integrato `.fit`:

```
estimator.fit(inputs)
```

Prima di compilare definitivamente il modello con il metodo `compile_model` integrato:

```
# Specify output path of the compiled model
output_path = '/'.join(estimator.output_path.split('/')[:-1])

# Compile model
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5', 
                              input_shape={'data':[1, 784]},  # Batch size 1, 3 channels, 224x224 Images.
                              output_path=output_path,
                              framework='tensorflow', framework_version='1.15.3')
```

Puoi anche usare la `sagemaker.estimator.Estimator` classe per inizializzare un oggetto estimatore per l'addestramento e la compilazione di un algoritmo integrato con il `compile_model` metodo dell'SDK Python SageMaker :

```
import sagemaker
from sagemaker.image_uris import retrieve
sagemaker_session = sagemaker.Session()
aws_region = sagemaker_session.boto_region_name

# Specify built-in algorithm training image
training_image = retrieve(framework='image-classification', 
                          region=aws_region, image_scope='training')

training_image = retrieve(framework='image-classification', region=aws_region, image_scope='training')

# Create estimator object for training
estimator = sagemaker.estimator.Estimator(image_uri=training_image,
                                          role=role,  #param role can be arn of a sagemaker execution role
                                          instance_count=1,
                                          instance_type='ml.p3.8xlarge',
                                          volume_size = 50,
                                          max_run = 360000,
                                          input_mode= 'File',
                                          output_path=s3_training_output_location,
                                          base_job_name='image-classification-training'
                                          )
                                          
# Setup the input data_channels to be used later for training.                                          
train_data = sagemaker.inputs.TrainingInput(s3_training_data_location,
                                            content_type='application/x-recordio',
                                            s3_data_type='S3Prefix')
validation_data = sagemaker.inputs.TrainingInput(s3_validation_data_location,
                                                content_type='application/x-recordio',
                                                s3_data_type='S3Prefix')
data_channels = {'train': train_data, 'validation': validation_data}


# Train model
estimator.fit(inputs=data_channels, logs=True)

# Compile model with Neo                                                                                  
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5',
                                          input_shape={'data':[1, 3, 224, 224], 'softmax_label':[1]},
                                          output_path=s3_compilation_output_location,
                                          framework='mxnet',
                                          framework_version='1.7')
```

Per ulteriori informazioni sulla compilazione di modelli con SageMaker Python SDK, consulta. [Compila un modello (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Compilazione di un modello (AWS Command Line Interface)
<a name="neo-job-compilation-cli"></a>

Questa sezione mostra come gestire i processi di compilazione di Amazon SageMaker Neo per modelli di machine learning utilizzando AWS Command Line Interface (CLI). Puoi creare, descrivere, arrestare ed elencare i processi di compilazione. 

1. Creazione di un processo di compilazione.

   Con il funzionamento dell'[CreateCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html)API, puoi specificare il formato di input dei dati, il bucket S3 in cui archiviare il modello, il bucket S3 in cui scrivere il modello compilato e il dispositivo o la piattaforma hardware di destinazione.

   La tabella seguente mostra come configurare l'API `CreateCompilationJob` in base al fatto che la destinazione sia un dispositivo o una piattaforma.

------
#### [ Device Example ]

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

   Facoltativamente, puoi specificare la versione del framework che hai usato con il [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion)campo se hai usato il PyTorch framework per addestrare il tuo modello e il tuo dispositivo di destinazione è un bersaglio. `ml_* `

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "PYTORCH",
           "FrameworkVersion": "1.6"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5",
           # When compiling for ml_* instances using PyTorch framework, use the "CompilerOptions" field in 
           # OutputConfig to provide the correct data type ("dtype") of the model’s input. Default assumed is "float32"
           "CompilerOptions": "{'dtype': 'long'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

**Note:**  
Se hai salvato il modello utilizzando la PyTorch versione 2.0 o successiva, il `DataInputConfig` campo è facoltativo. SageMaker AI Neo ottiene la configurazione di input dal file di definizione del modello con cui crei PyTorch. Per ulteriori informazioni su come creare il file di definizione, consulta la [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) sezione sotto *Salvare modelli per SageMaker AI Neo*.
Questo campo API è supportato solo per PyTorch.

------
#### [ Platform Example ]

   ```
   {
       "CompilationJobName": "neo-test-compilation-job",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target platform configuration example for a p3.2xlarge instance
           "TargetPlatform": {
               "Os": "LINUX",
               "Arch": "X86_64",
               "Accelerator": "NVIDIA"
           },
           "CompilerOptions": "{'cuda-ver': '10.0', 'trt-ver': '6.0.1', 'gpu-code': 'sm_70'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

------
**Nota**  
Per il funzionamento dell'API `OutputConfig`, le operazioni `TargetDevice` e `TargetPlatform` si escludono a vicenda. Devi scegliere una delle due opzioni.

   Per trovare esempi di stringhe JSON di `DataInputConfig` a seconda dei framework, vedi [Quali forme di dati di input si aspetta Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-errors-preventing).

   Per ulteriori informazioni sull'impostazione delle configurazioni, consulta la sezione [InputConfig[OutputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html), e le operazioni [TargetPlatform](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TargetPlatform.html)API nel riferimento all' SageMaker API.

1. Dopo aver configurato il file JSON, esegui il comando seguente per creare il processo di compilazione:

   ```
   aws sagemaker create-compilation-job \
   --cli-input-json file://job.json \
   --region us-west-2 
   
   # You should get CompilationJobArn
   ```

1. Descrivi il processo di compilazione eseguendo il comando seguente:

   ```
   aws sagemaker describe-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   ```

1. Interrompi il processo di compilazione eseguendo il comando seguente:

   ```
   aws sagemaker stop-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   
   # There is no output for compilation-job operation
   ```

1. Elenca il processo di compilazione eseguendo il comando seguente:

   ```
   aws sagemaker list-compilation-jobs \
   --region us-west-2
   ```

# Compila un modello (Amazon SageMaker AI Console)
<a name="neo-job-compilation-console"></a>

Puoi creare un processo di compilazione Amazon SageMaker Neo nella console Amazon SageMaker AI.

1. Nella console **Amazon SageMaker AI**, scegli **Lavori di compilazione**, quindi scegli **Crea processo di compilazione.**  
![\[Crei un processo di compilazione.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/8-create-compilation-job.png)

1. Nella pagina **Crea un processo di compilazione**, per **Nome del processo**, immetti un nome. Quindi seleziona un **ruolo IAM**.  
![\[Pagina Crea un processo di compilazione.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/9-create-compilation-job-config.png)

1. Se non disponi di un ruolo IAM, scegli **Create a new role (Crea un nuovo ruolo)**.  
![\[Crea una posizione per il ruolo IAM.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/10a-create-iam-role.png)

1. Nella pagina **Create an IAM role (Crea un ruolo IAM)**, scegli **Any S3 bucket (Qualsiasi bucket S3)** e seleziona **Create role (Crea ruolo)**.  
![\[Pagina Crea un ruolo IAM.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/10-create-iam-role.png)

1. 

------
#### [ Non PyTorch Frameworks ]

   Nella sezione **Configurazione di input**, immetti il percorso completo dell’URI del bucket Amazon S3 che contiene gli artefatti del modello nel campo di input **Posizione degli artefatti dei modelli**. Gli artefatti del modello devono essere in un formato di file tarball compresso (`.tar.gz`). 

   Per il campo **Configurazione di input dei dati**, immetti la stringa JSON che specifica la forma dei dati di input.

   Per **Framework di machine learning**, scegli il framework a tua scelta.

![\[Pagina Configurazione di input.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/neo-create-compilation-job-input-config.png)


   Per trovare esempi di stringhe JSON di forme di dati di input che dipendono dai framework, vedi [Quali forme di dati di input si aspetta Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

------
#### [ PyTorch Framework ]

   Istruzioni simili si applicano alla compilazione PyTorch dei modelli. Tuttavia, se ti sei allenato con PyTorch e stai cercando di compilare il modello per `ml_*` (eccetto`ml_inf`) target, puoi facoltativamente specificare la versione che hai usato. PyTorch 

![\[Sezione Configurazione di input di esempio che mostra dove scegliere la Versione del framework.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/compile_console_pytorch.png)


   Per trovare esempi di stringhe JSON di forme di dati di input che dipendono dai framework, vedi [Quali forme di dati di input si aspetta Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

**Note**  
Se hai salvato il modello utilizzando la PyTorch versione 2.0 o successiva, il **campo di configurazione dell'immissione dei dati è facoltativo**. SageMaker Neo ottiene la configurazione di input dal file di definizione del modello con cui crei PyTorch. Per ulteriori informazioni su come creare il file di definizione, consulta la [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) sezione sotto *Salvare modelli per SageMaker AI Neo*.
Durante la compilazione di `ml_*` istanze utilizzando il PyTorch framework, utilizzate il campo **delle opzioni del compilatore** in **Output Configuration** per fornire il tipo di dati corretto (`dtype`) dell'input del modello. Il valore predefinito è impostato su `"float32"`. 

![\[Sezione Configurazione di output di esempio.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/neo_compilation_console_pytorch_compiler_options.png)


**avvertimento**  
 Se specifichi un percorso URI del bucket Amazon S3 che conduce al file `.pth`, riceverai il seguente errore dopo l'avvio della compilazione: `ClientError: InputConfiguration: Unable to untar input model.Please confirm the model is a tar.gz file` 

------

1.  Vai alla sezione **Configurazione di output**. Scegli dove vuoi distribuire il modello. Puoi distribuire il tuo modello su un **dispositivo di destinazione** o su una **piattaforma di destinazione**. I dispositivi di destinazione includono dispositivi cloud ed edge. Le piattaforme di destinazione si riferiscono a sistemi operativi, architetture e acceleratori specifici su cui si desidera che il modello venga eseguito. 

    Per **Posizione di output S3**, immetti il percorso verso il bucket S3 in cui desideri memorizzare il modello. Facoltativamente, puoi aggiungere opzioni del compilatore in formato JSON nella sezione **Opzioni del compilatore.**   
![\[Pagina Configurazione di output.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/neo-console-output-config.png)

1. Verifica lo stato del processo di compilazione quando viene avviato. Questo stato del processo è disponibile nella parte superiore della pagina **Processi di compilazione**, come mostrato nello screenshot seguente. Puoi anche controllarne lo stato nella colonna **Stato**.  
![\[Stato del processo di compilazione.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/12-run-model-compilation.png)

1. Verifica lo stato del processo di compilazione quando è completato. Puoi controllare lo stato nella colonna **Stato**, come mostrato nello screenshot seguente.  
![\[Stato del processo di compilazione.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo/12a-completed-model-compilation.png)

# Compila un modello (Amazon SageMaker AI SDK)
<a name="neo-job-compilation-sagemaker-sdk"></a>

 Puoi utilizzare l'[https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model)API nell'[SDK Amazon SageMaker AI per Python per](https://sagemaker.readthedocs.io/en/stable/) compilare un modello addestrato e ottimizzarlo per hardware di destinazione specifico. L'API deve essere richiamata sull'oggetto dello strumento di valutazione utilizzato durante l'addestramento del modello. 

**Nota**  
È necessario impostare la variabile di `MMS_DEFAULT_RESPONSE_TIMEOUT` ambiente su `500` quando si compila il modello con o. MXNet PyTorch La variabile di ambiente non è necessaria per TensorFlow. 

 Di seguito è riportato un esempio di come è possibile compilare un modello utilizzando l'oggetto `trained_model_estimator`: 

```
# Replace the value of expected_trained_model_input below and
# specify the name & shape of the expected inputs for your trained model
# in json dictionary form
expected_trained_model_input = {'data':[1, 784]}

# Replace the example target_instance_family below to your preferred target_instance_family
compiled_model = trained_model_estimator.compile_model(target_instance_family='ml_c5',
        input_shape=expected_trained_model_input,
        output_path='insert s3 output path',
        env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'})
```

Il codice compila il modello, salva il modello ottimizzato in `output_path` e crea un modello di SageMaker intelligenza artificiale che può essere distribuito su un endpoint. 

# Istanze cloud
<a name="neo-cloud-instances"></a>

Amazon SageMaker Neo fornisce il supporto di compilazione per i più diffusi framework di machine learning come TensorFlow, PyTorch, MXNet e altri. Puoi distribuire il tuo modello compilato su istanze cloud e istanze Inferentia AWS. Per un elenco completo dei più diffusi framework e tipi di istanze supportati, consulta [Tipi di istanze e framework supportati](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-cloud.html). 

Il modello può essere compilato in tre modi: tramite AWS CLI, console SageMaker AI o SageMaker AI SDK per Python. Per ulteriori informazioni, consulta [Utilizzo di Neo per compilare un modello.](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) Una volta compilati, gli artefatti del modello vengono archiviati nell'URI del bucket Amazon S3 specificato durante il processo di compilazione. Puoi implementare il modello compilato su istanze cloud e istanze AWS Inferentia utilizzando SageMaker AI SDK per Python, AWS SDK per Python (Boto3), AWS CLI o la console AWS. 

Se distribuisci il modello utilizzando AWS CLI, la console o Boto3, devi selezionare un'immagine Docker dell'URI Amazon ECR per il container primario. Consulta [Immagini del container di inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) per un elenco degli URI di Amazon ECR.

**Topics**
+ [Tipi di istanze e framework supportati](neo-supported-cloud.md)
+ [Implementare un modello](neo-deployment-hosting-services.md)
+ [Richieste di inferenza con un servizio implementato](neo-requests.md)
+ [Immagini di container di inferenza](neo-deployment-hosting-services-container-images.md)

# Tipi di istanze e framework supportati
<a name="neo-supported-cloud"></a>

Amazon SageMaker Neo supporta i più diffusi framework di deep learning sia per la compilazione che per la distribuzione. Puoi implementare il tuo modello in istanze cloud o tipi di istanze AWS Inferentia.

Di seguito vengono descritti i framework supportati da SageMaker Neo e le istanze cloud di destinazione su cui è possibile compilare e distribuire. Per informazioni su come distribuire il modello compilato su un'istanza cloud o Inferentia, consulta [Distribuire un modello con istanze cloud](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services.html).

## Istanze cloud
<a name="neo-supported-cloud-instances"></a>

SageMaker Neo supporta i seguenti framework di deep learning per istanze cloud CPU e GPU: 


| Framework | Versione di Framework | Versioni del modello | Modelli | Formati di modelli (pacchettizzati in \$1.tar.gz) | Kit di strumenti | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8.0 | Supporta 1.8.0 o versioni precedenti | Classificazione delle immagini, Rilevamento di oggetti, Segmentazione semantica, Stima della posa, Riconoscimento delle attività | Un file di simboli (.json) e un file di parametri (.params) | GluonCV versione 0.8.0 | 
| ONNX | 1.7.0 | Supporta 1.7.0 o versioni precedenti | Classificazione immagine, SVM | Un file di modello (.onnx) |  | 
| Keras | 2.2.4 | Supporta 2.2.4 o versioni precedenti | Classificazione delle immagini  | Un file di definizione del modello (.h5) |  | 
| PyTorch | 1.4, 1.5, 1.6, 1.7, 1.8, 1,12, 1,13 o 2.0 | Supports 1.4, 1.5, 1.6, 1.7, 1.8, 1.12, 1.13 e 2.0 |  Classificazione delle immagini  Le versioni 1.13 e 2.0 supportano Object Detection, Vision Transformer e HuggingFace  | Un file di definizione del modello (.pt o .pth) con input dtype float32 |  | 
| TensorFlow | 1.15.3 o 2.9 | Supporta 1.15.3 e 2.9 | Classificazione delle immagini  | Per i modelli salvati, un file .pb o .pbtxt e una directory delle variabili che contiene variabili Per i modelli bloccati, un file .pb o.pbtxt |  | 
| XGBoost | 1.3.3 | Supporta 1.3.3 o versioni precedenti | Alberi decisionali | Un file di modello XGBoost (.model) in cui il numero di nodi in un albero è inferiore a 2^31 |  | 

**Nota**  
“Versione del modello” è la versione del framework utilizzata per addestrare ed esportare il modello. 

## Tipi di istanza
<a name="neo-supported-cloud-instances-types"></a>

 Puoi implementare il tuo modello compilato SageMaker AI in una delle istanze cloud elencate di seguito: 


| Istanza | Tipo di calcolo | 
| --- | --- | 
| `ml_c4` | Standard | 
| `ml_c5` | Standard | 
| `ml_m4` | Standard | 
| `ml_m5` | Standard | 
| `ml_p2` | Elaborazione accelerata | 
| `ml_p3` | Elaborazione accelerata | 
| `ml_g4dn` | Elaborazione accelerata | 

 Per informazioni sulla vCPU, sulla memoria e sul prezzo all’ora disponibili per ogni tipo di istanza, consulta i [Prezzi di Amazon SageMaker](https://aws.amazon.com/sagemaker/pricing/). 

**Nota**  
Quando compili istanze `ml_*` utilizzando il framework PyTorch, usa il campo **Opzioni del compilatore** in **Configurazione di output** per fornire il tipo di dati corretto (`dtype`) dell'input del modello.  
Il valore predefinito è impostato su `"float32"`.

## AWS Inferentia
<a name="neo-supported-inferentia"></a>

 SageMaker Neo supporta i seguenti framework di deep learning per Inf1: 


| Framework | Versione di Framework | Versioni del modello | Modelli | Formati di modelli (pacchettizzati in \$1.tar.gz) | Kit di strumenti | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.5 o 1.8  | Supporta 1.8, 1.5 e versioni precedenti | Classificazione delle immagini, Rilevamento di oggetti, Segmentazione semantica, Stima della posa, Riconoscimento delle attività | Un file di simboli (.json) e un file di parametri (.params) | GluonCV versione 0.8.0 | 
| PyTorch | 1.7, 1.8 o 1.9 | Supporta 1.9 e versioni precedenti | Classificazione delle immagini  | Un file di definizione del modello (.pt o .pth) con input dtype float32 |  | 
| TensorFlow | 1.15 o 2.5 | Supporta 2.5, 1.15 e versioni precedenti | Classificazione delle immagini  | Per i modelli salvati, un file .pb o .pbtxt e una directory delle variabili che contiene variabili Per i modelli bloccati, un file .pb o.pbtxt |  | 

**Nota**  
“Versione del modello” è la versione del framework utilizzata per addestrare ed esportare il modello.

Puoi distribuire il tuo modello compilato da SageMaker NEO su istanze Amazon EC2 Inf1 basate su AWS Inferenza. AWS Inferentia è il primo chip in silicio personalizzato di Amazon progettato per accelerare il deep learning. Attualmente, puoi utilizzare l'istanza `ml_inf1` per distribuire i tuoi modelli compilati.

### AWS Inferentia2 e AWS Trainium
<a name="neo-supported-inferentia-trainium"></a>

Attualmente, è possibile distribuire il modello compilato da SageMaker NEO su istanze Amazon EC2 Inf2 basate su AWS Inferentia2 (nella Regione Stati Uniti orientali (Ohio)) e su istanze Trn1 Amazon EC2 basate su AWS Trainium (nella Regione Stati Uniti orientali (Virginia settentrionale)). Per ulteriori informazioni sui modelli supportati su queste istanze, consulta le [Linee guida per l'adattamento dell'architettura dei modelli](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/arch/model-architecture-fit.html) nella documentazione di AWS Neuron e gli esempi nel [Repository Github di Neuron](https://github.com/aws-neuron/aws-neuron-sagemaker-samples).

# Implementare un modello
<a name="neo-deployment-hosting-services"></a>

Per distribuire un modello SageMaker compilato da Amazon NEO su un endpoint HTTPS, devi configurare e creare l'endpoint per il modello utilizzando i servizi di hosting Amazon AI. SageMaker Attualmente, gli sviluppatori possono utilizzare Amazon SageMaker APIs per distribuire moduli su istanze ml.c5, ml.c4, ml.m5, ml.m4, ml.p3, ml.p2 e ml.inf1. 

Per le istanze [Inferentia](https://aws.amazon.com/machine-learning/inferentia/) e [Trainium](https://aws.amazon.com/machine-learning/trainium/), i modelli devono essere compilati in modo specifico per tali istanze. Il funzionamento di modelli compilati per altri tipi di istanze non è garantito con le istanze Inferentia o Trainium.

Quando si distribuisce un modello compilato, è necessario utilizzare per la destinazione la stessa istanza utilizzata per la compilazione. Questo crea un endpoint AI che SageMaker puoi usare per eseguire inferenze. [Puoi distribuire un modello NEO-compilato utilizzando uno dei seguenti strumenti: [Amazon SageMaker AI SDK per Python, SDK for Python](https://sagemaker.readthedocs.io/en/stable/)[(Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) e la console AI. [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/reference/)SageMaker ](https://console.aws.amazon.com/sagemaker)

**Nota**  
Per distribuire un modello utilizzando la console o Boto3 AWS CLI, consulta [Neo Inference Container Images per selezionare l'URI dell'immagine di inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) per il contenitore principale. 

**Topics**
+ [Prerequisiti](neo-deployment-hosting-services-prerequisites.md)
+ [Distribuisci un modello compilato utilizzando SDK SageMaker](neo-deployment-hosting-services-sdk.md)
+ [Distribuzione di un modello compilato utilizzando Boto3](neo-deployment-hosting-services-boto3.md)
+ [Implementa un modello compilato utilizzando il AWS CLI](neo-deployment-hosting-services-cli.md)
+ [Distribuzione di un modello compilato utilizzando la console](neo-deployment-hosting-services-console.md)

# Prerequisiti
<a name="neo-deployment-hosting-services-prerequisites"></a>

**Nota**  
Segui le istruzioni in questa sezione se hai compilato il modello utilizzando AWS SDK per Python (Boto3) o la console AI. AWS CLI SageMaker 

Per creare un modello SageMaker NEO-compilato, è necessario quanto segue:

1. Un'immagine Docker, un URI Amazon ECR. Puoi selezionarne uno che soddisfi le tue esigenze da [questo elenco](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html). 

1. Un file di script del punto di ingresso:

   1. **Per PyTorch e MXNet modelli:**

      *Se hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale*, lo script di addestramento deve implementare le funzioni descritte di seguito. Lo script di addestramento funge da script del punto di ingresso durante l'inferenza. Nell'esempio dettagliato in [MNIST Training, Compilation and Deployment with MXNet Module e SageMaker Neo](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_neo_compilation_jobs/mxnet_mnist/mxnet_mnist_neo.html), lo script di addestramento (`mnist.py`) implementa le funzioni richieste.

      *Se non hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale*, devi fornire un file entry point script (`inference.py`) che possa essere utilizzato al momento dell'inferenza. [In base al framework, MXNet oppure, la posizione dello script di inferenza deve essere conforme PyTorch alla Model Directory Structure for di SageMaker Python SDK o alla [Model Directory Structure for MxNet](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#model-directory-structure). PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#model-directory-structure) 

      Quando si utilizzano immagini di Neo Inference Optimized Container con **PyTorch**e **MXNet**su tipi di istanze CPU e GPU, lo script di inferenza deve implementare le seguenti funzioni: 
      + `model_fn`: carica il modello. (Facoltativo)
      + `input_fn`: converte il payload della richiesta in entrata in una matrice numpy.
      + `predict_fn`: esegue la previsione.
      + `output_fn`: converte l'output della previsione nel payload di risposta.
      + In alternativa, puoi definire `transform_fn` per combinare `input_fn`, `predict_fn` e `output_fn`.

      I seguenti sono esempi di `inference.py` script all'interno di una directory denominata `code` (`code/inference.py`) for **PyTorch and MXNet (Gluon and Module**). Gli esempi caricano prima il modello e quindi lo utilizzano su dati di immagine su una GPU: 

------
#### [ MXNet Module ]

      ```
      import numpy as np
      import json
      import mxnet as mx
      import neomx  # noqa: F401
      from collections import namedtuple
      
      Batch = namedtuple('Batch', ['data'])
      
      # Change the context to mx.cpu() if deploying to a CPU endpoint
      ctx = mx.gpu()
      
      def model_fn(model_dir):
          # The compiled model artifacts are saved with the prefix 'compiled'
          sym, arg_params, aux_params = mx.model.load_checkpoint('compiled', 0)
          mod = mx.mod.Module(symbol=sym, context=ctx, label_names=None)
          exe = mod.bind(for_training=False,
                         data_shapes=[('data', (1,3,224,224))],
                         label_shapes=mod._label_shapes)
          mod.set_params(arg_params, aux_params, allow_missing=True)
          
          # Run warm-up inference on empty data during model load (required for GPU)
          data = mx.nd.empty((1,3,224,224), ctx=ctx)
          mod.forward(Batch([data]))
          return mod
      
      
      def transform_fn(mod, image, input_content_type, output_content_type):
          # pre-processing
          decoded = mx.image.imdecode(image)
          resized = mx.image.resize_short(decoded, 224)
          cropped, crop_info = mx.image.center_crop(resized, (224, 224))
          normalized = mx.image.color_normalize(cropped.astype(np.float32) / 255,
                                        mean=mx.nd.array([0.485, 0.456, 0.406]),
                                        std=mx.nd.array([0.229, 0.224, 0.225]))
          transposed = normalized.transpose((2, 0, 1))
          batchified = transposed.expand_dims(axis=0)
          casted = batchified.astype(dtype='float32')
          processed_input = casted.as_in_context(ctx)
      
          # prediction/inference
          mod.forward(Batch([processed_input]))
      
          # post-processing
          prob = mod.get_outputs()[0].asnumpy().tolist()
          prob_json = json.dumps(prob)
          return prob_json, output_content_type
      ```

------
#### [ MXNet Gluon ]

      ```
      import numpy as np
      import json
      import mxnet as mx
      import neomx  # noqa: F401
      
      # Change the context to mx.cpu() if deploying to a CPU endpoint
      ctx = mx.gpu()
      
      def model_fn(model_dir):
          # The compiled model artifacts are saved with the prefix 'compiled'
          block = mx.gluon.nn.SymbolBlock.imports('compiled-symbol.json',['data'],'compiled-0000.params', ctx=ctx)
          
          # Hybridize the model & pass required options for Neo: static_alloc=True & static_shape=True
          block.hybridize(static_alloc=True, static_shape=True)
          
          # Run warm-up inference on empty data during model load (required for GPU)
          data = mx.nd.empty((1,3,224,224), ctx=ctx)
          warm_up = block(data)
          return block
      
      
      def input_fn(image, input_content_type):
          # pre-processing
          decoded = mx.image.imdecode(image)
          resized = mx.image.resize_short(decoded, 224)
          cropped, crop_info = mx.image.center_crop(resized, (224, 224))
          normalized = mx.image.color_normalize(cropped.astype(np.float32) / 255,
                                        mean=mx.nd.array([0.485, 0.456, 0.406]),
                                        std=mx.nd.array([0.229, 0.224, 0.225]))
          transposed = normalized.transpose((2, 0, 1))
          batchified = transposed.expand_dims(axis=0)
          casted = batchified.astype(dtype='float32')
          processed_input = casted.as_in_context(ctx)
          return processed_input
      
      
      def predict_fn(processed_input_data, block):
          # prediction/inference
          prediction = block(processed_input_data)
          return prediction
      
      def output_fn(prediction, output_content_type):
          # post-processing
          prob = prediction.asnumpy().tolist()
          prob_json = json.dumps(prob)
          return prob_json, output_content_type
      ```

------
#### [ PyTorch 1.4 and Older ]

      ```
      import os
      import torch
      import torch.nn.parallel
      import torch.optim
      import torch.utils.data
      import torch.utils.data.distributed
      import torchvision.transforms as transforms
      from PIL import Image
      import io
      import json
      import pickle
      
      
      def model_fn(model_dir):
          """Load the model and return it.
          Providing this function is optional.
          There is a default model_fn available which will load the model
          compiled using SageMaker Neo. You can override it here.
      
          Keyword arguments:
          model_dir -- the directory path where the model artifacts are present
          """
      
          # The compiled model is saved as "compiled.pt"
          model_path = os.path.join(model_dir, 'compiled.pt')
          with torch.neo.config(model_dir=model_dir, neo_runtime=True):
              model = torch.jit.load(model_path)
              device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
              model = model.to(device)
      
          # We recommend that you run warm-up inference during model load
          sample_input_path = os.path.join(model_dir, 'sample_input.pkl')
          with open(sample_input_path, 'rb') as input_file:
              model_input = pickle.load(input_file)
          if torch.is_tensor(model_input):
              model_input = model_input.to(device)
              model(model_input)
          elif isinstance(model_input, tuple):
              model_input = (inp.to(device) for inp in model_input if torch.is_tensor(inp))
              model(*model_input)
          else:
              print("Only supports a torch tensor or a tuple of torch tensors")
              return model
      
      
      def transform_fn(model, request_body, request_content_type,
                       response_content_type):
          """Run prediction and return the output.
          The function
          1. Pre-processes the input request
          2. Runs prediction
          3. Post-processes the prediction output.
          """
          # preprocess
          decoded = Image.open(io.BytesIO(request_body))
          preprocess = transforms.Compose([
              transforms.Resize(256),
              transforms.CenterCrop(224),
              transforms.ToTensor(),
              transforms.Normalize(
                  mean=[
                      0.485, 0.456, 0.406], std=[
                      0.229, 0.224, 0.225]),
          ])
          normalized = preprocess(decoded)
          batchified = normalized.unsqueeze(0)
          # predict
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          batchified = batchified.to(device)
          output = model.forward(batchified)
      
          return json.dumps(output.cpu().numpy().tolist()), response_content_type
      ```

------
#### [ PyTorch 1.5 and Newer ]

      ```
      import os
      import torch
      import torch.nn.parallel
      import torch.optim
      import torch.utils.data
      import torch.utils.data.distributed
      import torchvision.transforms as transforms
      from PIL import Image
      import io
      import json
      import pickle
      
      
      def model_fn(model_dir):
          """Load the model and return it.
          Providing this function is optional.
          There is a default_model_fn available, which will load the model
          compiled using SageMaker Neo. You can override the default here.
          The model_fn only needs to be defined if your model needs extra
          steps to load, and can otherwise be left undefined.
      
          Keyword arguments:
          model_dir -- the directory path where the model artifacts are present
          """
      
          # The compiled model is saved as "model.pt"
          model_path = os.path.join(model_dir, 'model.pt')
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          model = torch.jit.load(model_path, map_location=device)
          model = model.to(device)
      
          return model
      
      
      def transform_fn(model, request_body, request_content_type,
                          response_content_type):
          """Run prediction and return the output.
          The function
          1. Pre-processes the input request
          2. Runs prediction
          3. Post-processes the prediction output.
          """
          # preprocess
          decoded = Image.open(io.BytesIO(request_body))
          preprocess = transforms.Compose([
                                      transforms.Resize(256),
                                      transforms.CenterCrop(224),
                                      transforms.ToTensor(),
                                      transforms.Normalize(
                                          mean=[
                                              0.485, 0.456, 0.406], std=[
                                              0.229, 0.224, 0.225]),
                                          ])
          normalized = preprocess(decoded)
          batchified = normalized.unsqueeze(0)
          
          # predict
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          batchified = batchified.to(device)
          output = model.forward(batchified)
          return json.dumps(output.cpu().numpy().tolist()), response_content_type
      ```

------

   1.  **Per istanze inf1 o immagini di container onnx, xgboost, keras** 

      Per tutte le altre immagini di container ottimizzate per Neo Inference, o tipi di istanze inferentia, lo script del punto di ingresso deve implementare le seguenti funzioni per Neo Deep Learning Runtime: 
      + `neo_preprocess`: converte il payload della richiesta in entrata in una matrice numpy.
      + `neo_postprocess`: converte l'output di previsione di Neo Deep Learning Runtime nel corpo della risposta.
**Nota**  
Le due funzioni precedenti non utilizzano nessuna delle funzionalità di MXNet, PyTorch o. TensorFlow

      Per esempi su come usare queste funzioni, vedi [Notebook di esempio di compilazione del modello Neo](https://docs.aws.amazon.com//sagemaker/latest/dg/neo.html#neo-sample-notebooks). 

   1. **Per i modelli TensorFlow **

      Se il modello richiede una logica di pre e post elaborazione personalizzata prima che i dati vengano inviati al modello, devi specificare un file di script `inference.py` del punto di ingresso che possa essere utilizzato al momento dell'inferenza. Lo script deve implementare una coppia di funzioni `input_handler` e `output_handler` o una singola funzione di gestore. 
**Nota**  
Nota che se la funzione di gestore è implementata `input_handler` e `output_handler` vengono ignorati. 

      Di seguito è riportato un esempio di codice di script `inference.py` che è possibile combinare con il modello di compilazione per eseguire la pre e post elaborazione personalizzata su un modello di classificazione delle immagini. Il client SageMaker AI invia il file di immagine come tipo di `application/x-image` contenuto alla `input_handler` funzione, dove viene convertito in JSON. Il file di immagine convertito viene quindi inviato al [Tensorflow Model Server (TFX)](https://www.tensorflow.org/tfx/serving/api_rest) mediante l'API REST. 

      ```
      import json
      import numpy as np
      import json
      import io
      from PIL import Image
      
      def input_handler(data, context):
          """ Pre-process request input before it is sent to TensorFlow Serving REST API
          
          Args:
          data (obj): the request data, in format of dict or string
          context (Context): an object containing request and configuration details
          
          Returns:
          (dict): a JSON-serializable dict that contains request body and headers
          """
          f = data.read()
          f = io.BytesIO(f)
          image = Image.open(f).convert('RGB')
          batch_size = 1
          image = np.asarray(image.resize((512, 512)))
          image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
          body = json.dumps({"signature_name": "serving_default", "instances": image.tolist()})
          return body
      
      def output_handler(data, context):
          """Post-process TensorFlow Serving output before it is returned to the client.
          
          Args:
          data (obj): the TensorFlow serving response
          context (Context): an object containing request and configuration details
          
          Returns:
          (bytes, string): data to return to client, response content type
          """
          if data.status_code != 200:
              raise ValueError(data.content.decode('utf-8'))
      
          response_content_type = context.accept_header
          prediction = data.content
          return prediction, response_content_type
      ```

      Se non è disponibile una pre o post-elaborazione personalizzata, il client SageMaker AI converte l'immagine del file in JSON in modo simile prima di inviarla all'endpoint AI. SageMaker 

      Per ulteriori informazioni, consulta [Deploying to TensorFlow Serving Endpoints nell'SDK Python SageMaker ](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#providing-python-scripts-for-pre-pos-processing). 

1. L'URI del bucket Amazon S3 che contiene gli artefatti del modello compilato. 

# Distribuisci un modello compilato utilizzando SDK SageMaker
<a name="neo-deployment-hosting-services-sdk"></a>

Devi soddisfare la sezione dei [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) se il modello è stato compilato utilizzando AWS SDK per Python (Boto3) o la console Amazon SageMaker AI. AWS CLI Segui uno dei seguenti casi d'uso per distribuire un modello compilato con SageMaker Neo in base a come hai compilato il tuo modello.

**Topics**
+ [Se hai compilato il modello utilizzando l'SDK SageMaker](#neo-deployment-hosting-services-sdk-deploy-sm-sdk)
+ [Se hai compilato il modello utilizzando o MXNet PyTorch](#neo-deployment-hosting-services-sdk-deploy-sm-boto3)
+ [Se hai compilato il tuo modello utilizzando Boto3, SageMaker console o la CLI per TensorFlow](#neo-deployment-hosting-services-sdk-deploy-sm-boto3-tensorflow)

## Se hai compilato il modello utilizzando l'SDK SageMaker
<a name="neo-deployment-hosting-services-sdk-deploy-sm-sdk"></a>

L'handle di oggetto [sagemaker.Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html?highlight=sagemaker.Model) per il modello compilato fornisce la funzione [deploy()](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html?highlight=sagemaker.Model#sagemaker.model.Model.deploy), che consente di creare un endpoint per servire richieste di inferenza. La funzione consente di impostare il numero e il tipo di istanze che vengono utilizzate per l'endpoint. È necessario scegliere un'istanza per la quale è stato compilato il modello. Ad esempio, nel job compilato nella sezione [Compile a Model (Amazon SageMaker SDK)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation-sagemaker-sdk.html), questo è. `ml_c5` 

```
predictor = compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.c5.4xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

## Se hai compilato il modello utilizzando o MXNet PyTorch
<a name="neo-deployment-hosting-services-sdk-deploy-sm-boto3"></a>

Crea il modello di SageMaker intelligenza artificiale e implementalo utilizzando l'API deploy () nell'ambito del modello specifico del framework. APIs Perché è [MXNetModel MXNet](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/sagemaker.mxnet.html?highlight=MXNetModel#mxnet-model) e for, lo è. PyTorch [ PyTorchModel](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html?highlight=PyTorchModel#sagemaker.pytorch.model.PyTorchModel) Quando si crea e si distribuisce un modello di SageMaker intelligenza artificiale, è necessario impostare la variabile di `MMS_DEFAULT_RESPONSE_TIMEOUT` ambiente su `500` e specificare il `entry_point` parametro come script di inferenza (`inference.py`) e il `source_dir` parametro come posizione della directory (`code`) dello script di inferenza. Per preparare lo script di inferenza (`inference.py`), segui la fase Prerequisiti. 

L'esempio seguente mostra come utilizzare queste funzioni per implementare un modello compilato utilizzando SageMaker AI SDK per Python: 

------
#### [ MXNet ]

```
from sagemaker.mxnet import MXNetModel

# Create SageMaker model and deploy an endpoint
sm_mxnet_compiled_model = MXNetModel(
    model_data='insert S3 path of compiled MXNet model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.8.0',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for MXNet',
    env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'},
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_mxnet_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------
#### [ PyTorch 1.4 and Older ]

```
from sagemaker.pytorch import PyTorchModel

# Create SageMaker model and deploy an endpoint
sm_pytorch_compiled_model = PyTorchModel(
    model_data='insert S3 path of compiled PyTorch model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.4.0',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for PyTorch',
    env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'},
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------
#### [ PyTorch 1.5 and Newer ]

```
from sagemaker.pytorch import PyTorchModel

# Create SageMaker model and deploy an endpoint
sm_pytorch_compiled_model = PyTorchModel(
    model_data='insert S3 path of compiled PyTorch model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.5',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for PyTorch',
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------

**Nota**  
Le policy `AmazonSageMakerFullAccess` e `AmazonS3ReadOnlyAccess`devono essere collegate al ruolo IAM di `AmazonSageMaker-ExecutionRole`. 

## Se hai compilato il tuo modello utilizzando Boto3, SageMaker console o la CLI per TensorFlow
<a name="neo-deployment-hosting-services-sdk-deploy-sm-boto3-tensorflow"></a>

Costruisci un oggetto `TensorFlowModel`, quindi richiama deploy: 

```
role='AmazonSageMaker-ExecutionRole'
model_path='S3 path for model file'
framework_image='inference container arn'
tf_model = TensorFlowModel(model_data=model_path,
                framework_version='1.15.3',
                role=role, 
                image_uri=framework_image)
instance_type='ml.c5.xlarge'
predictor = tf_model.deploy(instance_type=instance_type,
                    initial_instance_count=1)
```

Per ulteriori informazioni, consulta [Distribuzione diretta da artefatti del modello](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#deploying-directly-from-model-artifacts). 

Da [questo elenco](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) puoi selezionare un'immagine Docker (URI Amazon ECR) che soddisfi le tue esigenze. 

[Per ulteriori informazioni su come costruire un `TensorFlowModel` oggetto, consulta l'SDK. SageMaker ](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-serving-model) 

**Nota**  
La tua prima richiesta di inferenza potrebbe avere una latenza elevata se distribuisci il modello su una GPU. Questo perché alla prima richiesta di inferenza viene creato un kernel di calcolo ottimizzato. Ti consigliamo di creare un file di riscaldamento delle richieste di inferenza e di archiviarlo insieme al file di modello prima di inviarlo a un TFX. Questo processo è noto come “riscaldamento” del modello. 

Il seguente frammento di codice mostra come produrre il file di riscaldamento per l'esempio di classificazione delle immagini nella sezione dei [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites): 

```
import tensorflow as tf
from tensorflow_serving.apis import classification_pb2
from tensorflow_serving.apis import inference_pb2
from tensorflow_serving.apis import model_pb2
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_log_pb2
from tensorflow_serving.apis import regression_pb2
import numpy as np

with tf.python_io.TFRecordWriter("tf_serving_warmup_requests") as writer:       
    img = np.random.uniform(0, 1, size=[224, 224, 3]).astype(np.float32)
    img = np.expand_dims(img, axis=0)
    test_data = np.repeat(img, 1, axis=0)
    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'compiled_models'
    request.model_spec.signature_name = 'serving_default'
    request.inputs['Placeholder:0'].CopyFrom(tf.compat.v1.make_tensor_proto(test_data, shape=test_data.shape, dtype=tf.float32))
    log = prediction_log_pb2.PredictionLog(
    predict_log=prediction_log_pb2.PredictLog(request=request))
    writer.write(log.SerializeToString())
```

Per ulteriori informazioni su come «riscaldare» il modello, consulta la pagina [TensorFlow TFX](https://www.tensorflow.org/tfx/serving/saved_model_warmup).

# Distribuzione di un modello compilato utilizzando Boto3
<a name="neo-deployment-hosting-services-boto3"></a>

Devi soddisfare la sezione dei [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) se il modello è stato compilato utilizzando AWS SDK per Python (Boto3) o la console Amazon SageMaker AI. AWS CLI Segui i passaggi seguenti per creare e distribuire un modello SageMaker NEO-compilato utilizzando [Amazon Web Services SDK for Python (Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)). 

**Topics**
+ [Implementazione del modello](#neo-deployment-hosting-services-boto3-steps)

## Implementazione del modello
<a name="neo-deployment-hosting-services-boto3-steps"></a>

Dopo aver soddisfatto i [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), usa, e. `create_model` `create_enpoint_config` `create_endpoint` APIs 

L'esempio seguente mostra come usarli per APIs implementare un modello compilato con Neo: 

```
import boto3
client = boto3.client('sagemaker')

# create sagemaker model
create_model_api_response = client.create_model(
                                    ModelName='my-sagemaker-model',
                                    PrimaryContainer={
                                        'Image': <insert the ECR Image URI>,
                                        'ModelDataUrl': 's3://path/to/model/artifact/model.tar.gz',
                                        'Environment': {}
                                    },
                                    ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
                            )

print ("create_model API response", create_model_api_response)

# create sagemaker endpoint config
create_endpoint_config_api_response = client.create_endpoint_config(
                                            EndpointConfigName='sagemaker-neomxnet-endpoint-configuration',
                                            ProductionVariants=[
                                                {
                                                    'VariantName': <provide your variant name>,
                                                    'ModelName': 'my-sagemaker-model',
                                                    'InitialInstanceCount': 1,
                                                    'InstanceType': <provide your instance type here>
                                                },
                                            ]
                                       )

print ("create_endpoint_config API response", create_endpoint_config_api_response)

# create sagemaker endpoint
create_endpoint_api_response = client.create_endpoint(
                                    EndpointName='provide your endpoint name',
                                    EndpointConfigName=<insert your endpoint config name>,
                                )

print ("create_endpoint API response", create_endpoint_api_response)
```

**Nota**  
Le policy `AmazonSageMakerFullAccess` e `AmazonS3ReadOnlyAccess`devono essere collegate al ruolo IAM di `AmazonSageMaker-ExecutionRole`. 

Per la sintassi completa di`create_model`, e `create_endpoint_config` `create_endpoint` APIs, si veda [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model), e [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config), rispettivamente. 

Se non hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale, specifica le seguenti variabili di ambiente: 

------
#### [ MXNet and PyTorch ]

```
"Environment": {
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
    "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
    "SAGEMAKER_REGION": "insert your region",
    "MMS_DEFAULT_RESPONSE_TIMEOUT": "500"
}
```

------
#### [ TensorFlow ]

```
"Environment": {
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
    "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
    "SAGEMAKER_REGION": "insert your region"
}
```

------

 Se hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale, specifica la variabile di ambiente `SAGEMAKER_SUBMIT_DIRECTORY` come URI completo del bucket Amazon S3 che contiene lo script di addestramento. 

# Implementa un modello compilato utilizzando il AWS CLI
<a name="neo-deployment-hosting-services-cli"></a>

Devi soddisfare la sezione dei [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) se il modello è stato compilato utilizzando AWS SDK per Python (Boto3) o la console Amazon SageMaker AI. AWS CLI Segui i passaggi seguenti per creare e distribuire un modello SageMaker compilato con NEO utilizzando. [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/) 

**Topics**
+ [Implementazione del modello](#neo-deploy-cli)

## Implementazione del modello
<a name="neo-deploy-cli"></a>

Dopo aver soddisfatto i [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), utilizzate i `create-model` comandi, and. `create-enpoint-config` `create-endpoint` AWS CLI Nella procedura seguente viene illustrato come utilizzare questi comandi per distribuire un modello compilato con Neo: 



### Creazione di un modello
<a name="neo-deployment-hosting-services-cli-create-model"></a>

Da [Neo Inference Container Images](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html), seleziona l'URI dell'immagine di inferenza e quindi utilizza l'`create-model`API per creare un SageMaker modello AI. Sono previste due fasi: 

1. Creare un file `create_model.json`. All'interno del file, specifica il nome del modello, l'URI dell'immagine, il percorso del `model.tar.gz` file nel bucket Amazon S3 e il ruolo di esecuzione dell' SageMaker IA: 

   ```
   {
       "ModelName": "insert model name",
       "PrimaryContainer": {
           "Image": "insert the ECR Image URI",
           "ModelDataUrl": "insert S3 archive URL",
           "Environment": {"See details below"}
       },
       "ExecutionRoleArn": "ARN for AmazonSageMaker-ExecutionRole"
   }
   ```

   Se hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale, specifica la seguente variabile di ambiente: 

   ```
   "Environment": {
       "SAGEMAKER_SUBMIT_DIRECTORY" : "[Full S3 path for *.tar.gz file containing the training script]"
   }
   ```

   Se non hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale, specifica le seguenti variabili di ambiente: 

------
#### [ MXNet and PyTorch ]

   ```
   "Environment": {
       "SAGEMAKER_PROGRAM": "inference.py",
       "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
       "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
       "SAGEMAKER_REGION": "insert your region",
       "MMS_DEFAULT_RESPONSE_TIMEOUT": "500"
   }
   ```

------
#### [ TensorFlow ]

   ```
   "Environment": {
       "SAGEMAKER_PROGRAM": "inference.py",
       "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
       "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
       "SAGEMAKER_REGION": "insert your region"
   }
   ```

------
**Nota**  
Le policy `AmazonSageMakerFullAccess` e `AmazonS3ReadOnlyAccess`devono essere collegate al ruolo IAM di `AmazonSageMaker-ExecutionRole`. 

1. Esegui il comando seguente:

   ```
   aws sagemaker create-model --cli-input-json file://create_model.json
   ```

   Per la sintassi completa dell'API `create-model`, vedi [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html). 

### Creazione di una configurazione endpoint
<a name="neo-deployment-hosting-services-cli-create-endpoint-config"></a>

Dopo aver creato un modello di SageMaker intelligenza artificiale, crea la configurazione dell'endpoint utilizzando l'`create-endpoint-config`API. A tale scopo, crea un file JSON con le specifiche di configurazione endpoint. Ad esempio, puoi utilizzare il seguente modello di codice e salvarlo come `create_config.json`: 

```
{
    "EndpointConfigName": "<provide your endpoint config name>",
    "ProductionVariants": [
        {
            "VariantName": "<provide your variant name>",
            "ModelName": "my-sagemaker-model",
            "InitialInstanceCount": 1,
            "InstanceType": "<provide your instance type here>",
            "InitialVariantWeight": 1.0
        }
    ]
}
```

Ora esegui il seguente AWS CLI comando per creare la configurazione dell'endpoint: 

```
aws sagemaker create-endpoint-config --cli-input-json file://create_config.json
```

Per la sintassi completa dell'API `create-endpoint-config`, vedi [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html). 

### Creazione di un endpoint
<a name="neo-deployment-hosting-services-cli-create-endpoint"></a>

Dopo aver creato la configurazione endpoint, crea un endpoint utilizzando l'API `create-endpoint`: 

```
aws sagemaker create-endpoint --endpoint-name '<provide your endpoint name>' --endpoint-config-name '<insert your endpoint config name>'
```

Per la sintassi completa dell'API `create-endpoint`, vedi [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html). 

# Distribuzione di un modello compilato utilizzando la console
<a name="neo-deployment-hosting-services-console"></a>

Devi soddisfare la sezione dei [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) se il modello è stato compilato utilizzando AWS SDK per Python (Boto3) AWS CLI, la o la console Amazon SageMaker AI. [Segui i passaggi seguenti per creare e distribuire un modello compilato da SageMaker AI NEO utilizzando la console AI SageMaker /AI. https://console.aws.amazon.com SageMaker ](https://console.aws.amazon.com/sagemaker/)

**Topics**
+ [Implementazione del modello](#deploy-the-model-console-steps)

## Implementazione del modello
<a name="deploy-the-model-console-steps"></a>

 Dopo aver soddisfatto i [prerequisiti](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), utilizza le seguenti fasi per distribuire un modello compilato con Neo: 

1. Scegli **Modelli**, quindi seleziona **Crea modelli** dal gruppo **Inferenza**. Nella pagina **Crea modello**, completa i campi **Nome modello**,** Ruolo IAM** e, se necessario, **VPC** (facoltativo).  
![\[Creazione del modello Neo per inferenza\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/create-pipeline-model.png)

1. Per aggiungere informazioni sul container utilizzato per distribuire il modello, scegli **Aggiungi container**, quindi seleziona **Successivo**. Completa i campi **Opzioni di input del container**, **Posizione dell'immagine del codice di inferenza** e **Posizione degli artefatti dei modelli** e, opzionalmente, **Nome host container** e **Variabili di ambiente**.  
![\[Creazione del modello Neo per inferenza\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo-deploy-console-container-definition.png)

1. Per distribuire modelli compilati da Neo, scegli le seguenti opzioni:
   + **Opzioni di input del container**: scegli **Fornisci gli artefatti di modello e l'immagine di inferenza**.
   + **Posizione dell'immagine del codice di inferenza**: scegli l'URI dell'immagine di inferenza da [Neo Inference Container Images](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html), a seconda della AWS Regione e del tipo di applicazione. 
   + **Posizione degli artefatti dei modello**: immetti l’URI del bucket Amazon S3 dell'artefatto del modello compilato generato dall'API di compilazione Neo.
   + **Variabili di ambiente**:
     + Lascia vuoto questo campo per. **SageMaker XGBoost**
     + Se hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale, specifica la variabile di ambiente `SAGEMAKER_SUBMIT_DIRECTORY` come URI del bucket Amazon S3 che contiene lo script di addestramento. 
     + Se non hai addestrato il tuo modello utilizzando l' SageMaker intelligenza artificiale, specifica le seguenti variabili di ambiente:     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/neo-deployment-hosting-services-console.html)

1. Verifica che le informazioni per i container siano accurate e quindi scegli **Create model (Crea modello)**. Nella pagina di destinazione **Crea modello**, scegli **Crea endpoint**.   
![\[Creazione della pagina di destinazione modello\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo-deploy-console-create-model-land-page.png)

1. Nel diagramma **Crea e configura l'endpoint**, specifica il **Nome endpoint**. Per **Collega configurazione endpoint**, scegli **Crea una nuova configurazione dell'endpoint**.  
![\[Interfaccia utente console Neo - Crea e configura endpoint.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo-deploy-console-config-endpoint.png)

1. Nella pagina **Nuova configurazione endpoint**, specifica il **Nome configurazione endpoint**.   
![\[Interfaccia utente console Neo - Nuova configurazione endpoint.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo-deploy-console-new-endpoint-config.png)

1. Scegli **Modifica** accanto al nome del modello e specifica il **Tipo di istanza** corretto nella pagina **Modifica variante di produzione**. È fondamentale che il valore per **Tipo di istanza** corrisponda a quello specificato nel processo di compilazione.  
![\[Interfaccia utente console Neo - Nuova configurazione endpoint.\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/neo-deploy-console-edit-production-variant.png)

1. Scegli **Save** (Salva).

1. Nella pagina **Nuova configurazione endpoint**, scegli **Crea configurazione endpoint**, quindi scegli **Crea endpoint**. 

# Richieste di inferenza con un servizio implementato
<a name="neo-requests"></a>

Se hai seguito le istruzioni[Implementare un modello](neo-deployment-hosting-services.md), dovresti avere un endpoint SageMaker AI configurato e funzionante. Indipendentemente da come hai distribuito il tuo modello NEO compilato, ci sono tre modi per inviare richieste di inferenza: 

**Topics**
+ [Richiedi inferenze da un servizio distribuito (Amazon SageMaker SDK)](neo-requests-sdk.md)
+ [Richiesta di inferenze da un servizio distribuito (Boto3)](neo-requests-boto3.md)
+ [Richiesta di inferenze da un servizio distribuito (CLI AWS )](neo-requests-cli.md)

# Richiedi inferenze da un servizio distribuito (Amazon SageMaker SDK)
<a name="neo-requests-sdk"></a>

Utilizza i seguenti esempi di codice per richiedere inferenze dal servizio distribuito in base al framework utilizzato per addestrare il modello. Gli esempi di codice per i diversi framework sono simili. La differenza principale è che TensorFlow richiede `application/json` come tipo di contenuto. 

 

## PyTorch e MXNet
<a name="neo-requests-sdk-py-mxnet"></a>

 Se utilizzi la versione **PyTorch 1.4 o successiva o** la versione **MXNet 1.7.0 o successiva e disponi** di un endpoint Amazon SageMaker AI`InService`, puoi effettuare richieste di inferenza utilizzando il `predictor` pacchetto dell'SDK AI SageMaker per Python. 

**Nota**  
L'API varia in base alla versione SageMaker AI SDK per Python:  
Per la versione 1.x, utilizza l'API [https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor](https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor) e [https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor.predict](https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor.predict).
Per la versione 2.x, utilizza l'API [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor) e [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict).

Il seguente esempio di codice mostra come utilizzarli APIs per inviare un'immagine per l'inferenza: 

------
#### [ SageMaker Python SDK v1.x ]

```
from sagemaker.predictor import RealTimePredictor

endpoint = 'insert name of your endpoint here'

# Read image into memory
payload = None
with open("image.jpg", 'rb') as f:
    payload = f.read()

predictor = RealTimePredictor(endpoint=endpoint, content_type='application/x-image')
inference_response = predictor.predict(data=payload)
print (inference_response)
```

------
#### [ SageMaker Python SDK v2.x ]

```
from sagemaker.predictor import Predictor

endpoint = 'insert name of your endpoint here'

# Read image into memory
payload = None
with open("image.jpg", 'rb') as f:
    payload = f.read()
    
predictor = Predictor(endpoint)
inference_response = predictor.predict(data=payload)
print (inference_response)
```

------

## TensorFlow
<a name="neo-requests-sdk-py-tf"></a>

Il seguente esempio di codice mostra come utilizzare l'API SageMaker Python SDK per inviare un'immagine per l'inferenza: 

```
from sagemaker.predictor import Predictor
from PIL import Image
import numpy as np
import json

endpoint = 'insert the name of your endpoint here'

# Read image into memory
image = Image.open(input_file)
batch_size = 1
image = np.asarray(image.resize((224, 224)))
image = image / 128 - 1
image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
body = json.dumps({"instances": image.tolist()})
    
predictor = Predictor(endpoint)
inference_response = predictor.predict(data=body)
print(inference_response)
```

# Richiesta di inferenze da un servizio distribuito (Boto3)
<a name="neo-requests-boto3"></a>

 Puoi inviare richieste di inferenza utilizzando il client e l' SageMaker API AI SDK for Python (Boto3) una volta che hai un [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint)endpoint AI. SageMaker `InService` L'esempio di codice seguente mostra come inviare un'immagine per l'inferenza: 

------
#### [ PyTorch and MXNet ]

```
import boto3

import json
 
endpoint = 'insert name of your endpoint here'
 
runtime = boto3.Session().client('sagemaker-runtime')
 
# Read image into memory
with open(image, 'rb') as f:
    payload = f.read()
# Send image via InvokeEndpoint API
response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='application/x-image', Body=payload)

# Unpack response
result = json.loads(response['Body'].read().decode())
```

------
#### [ TensorFlow ]

Per TensorFlow inviare un input con per il tipo di contenuto. `application/json` 

```
from PIL import Image
import numpy as np
import json
import boto3

client = boto3.client('sagemaker-runtime') 
input_file = 'path/to/image'
image = Image.open(input_file)
batch_size = 1
image = np.asarray(image.resize((224, 224)))
image = image / 128 - 1
image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
body = json.dumps({"instances": image.tolist()})
ioc_predictor_endpoint_name = 'insert name of your endpoint here'
content_type = 'application/json'   
ioc_response = client.invoke_endpoint(
    EndpointName=ioc_predictor_endpoint_name,
    Body=body,
    ContentType=content_type
 )
```

------
#### [ XGBoost ]

 Per una XGBoost candidatura, devi invece inviare un testo CSV: 

```
import boto3
import json
 
endpoint = 'insert your endpoint name here'
 
runtime = boto3.Session().client('sagemaker-runtime')
 
csv_text = '1,-1.0,1.0,1.5,2.6'
# Send CSV text via InvokeEndpoint API
response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='text/csv', Body=csv_text)
# Unpack response
result = json.loads(response['Body'].read().decode())
```

------

 Nota che BYOM consente un tipo di contenuto personalizzato. Per ulteriori informazioni, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html). 

# Richiesta di inferenze da un servizio distribuito (CLI AWS )
<a name="neo-requests-cli"></a>

Le richieste di inferenza possono essere effettuate con [https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html)una volta che si dispone di un endpoint `InService` Amazon SageMaker AI. Puoi effettuare richieste di inferenza con AWS Command Line Interface (AWS CLI). L'esempio seguente mostra come inviare un'immagine per l'inferenza: 

```
aws sagemaker-runtime invoke-endpoint --endpoint-name 'insert name of your endpoint here' --body fileb://image.jpg --content-type=application/x-image output_file.txt
```

Se l'inferenza ha avuto successo, viene effettuata una `output_file.txt` con informazioni sulle richieste di inferenza. 

 Per TensorFlow inviare un input con `application/json` come tipo di contenuto. 

```
aws sagemaker-runtime invoke-endpoint --endpoint-name 'insert name of your endpoint here' --body fileb://input.json --content-type=application/json output_file.txt
```

# Immagini di container di inferenza
<a name="neo-deployment-hosting-services-container-images"></a>

SageMaker Neo ora fornisce informazioni URI sull'immagine di inferenza per `ml_*` gli obiettivi. Per ulteriori informazioni, consulta [DescribeCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCompilationJob.html#sagemaker-DescribeCompilationJob-response-InferenceImage).

In base al caso d'uso, sostituisci la porzione evidenziata nel modello URI dell'immagine di inferenza fornito di seguito con i valori appropriati. 

## Amazon SageMaker AI XGBoost
<a name="inference-container-collapse-xgboost"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/xgboost-neo:latest
```

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base a *aws\$1region* quello che hai usato.

## Keras
<a name="inference-container-collapse-keras"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-keras:fx_version-instance_type-py3
```

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base a *aws\$1region* quello che hai usato.

Sostituisci *fx\$1version* con `2.2.4`.

Sostituisci *instance\$1type* con uno `cpu` o`gpu`.

## MXNet
<a name="inference-container-collapse-mxnet"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-mxnet:fx_version-instance_type-py3
```

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base al codice *aws\$1region* che hai usato. 

Sostituisci *fx\$1version* con `1.8.0`. 

Sostituisci *instance\$1type* con uno `cpu` o`gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-mxnet:fx_version-instance_type-py3
```

Sostituire *aws\$1region* con uno `us-east-1` dei due`us-west-2`. 

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base al codice *aws\$1region* che hai usato. 

Sostituisci *fx\$1version* con `1.5.1`. 

Sostituisci *`instance_type`* con `inf`.

------

## ONNX
<a name="inference-container-collapse-onnx"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-onnx:fx_version-instance_type-py3
```

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base a *aws\$1region* quello che hai usato.

Sostituisci *fx\$1version* con `1.5.0`.

Sostituisci *instance\$1type* con uno `cpu` o`gpu`.

## PyTorch
<a name="inference-container-collapse-pytorch"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-pytorch:fx_version-instance_type-py3
```

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base al codice *aws\$1region* che hai usato. 

Sostituisci *fx\$1version* con `1.4` `1.5``1.6`,`1.7`,,`1.8`,`1.12`,`1.13`, o`2.0`.

Sostituire *instance\$1type* con `cpu` o`gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-pytorch:fx_version-instance_type-py3
```

Sostituire *aws\$1region* con uno `us-east-1` dei due`us-west-2`. 

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base al codice *aws\$1region* che hai usato. 

Sostituisci *fx\$1version* con `1.5.1`. 

Sostituisci *`instance_type`* con `inf`.

------
#### [ Inferentia2 and Trainium1 ]

```
763104351884.dkr.ecr.aws_region.amazonaws.com/pytorch-inference-neuronx:1.13.1-neuronx-py38-sdk2.10.0-ubuntu20.04
```

Sostituisci *aws\$1region* con `us-east-2` per Inferentia2 e `us-east-1` per Trainium1.

------

## TensorFlow
<a name="inference-container-collapse-tf"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-tensorflow:fx_version-instance_type-py3
```

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base al codice che hai usato. *aws\$1region* 

Sostituisci *fx\$1version* con `1.15.3` o `2.9`. 

Sostituisci *instance\$1type* con uno `cpu` o`gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-tensorflow:fx_version-instance_type-py3
```

Sostituisci *aws\$1account\$1id* dalla tabella alla fine di questa pagina in base al codice *aws\$1region* che hai usato. Tieni presente che in tipo di istanza `inf` sono supportati solo `us-east-1` e `us-west-2`.

Sostituisci *fx\$1version* con `1.15.0`

Sostituisci *instance\$1type* con `inf`.

------
#### [ Inferentia2 and Trainium1 ]

```
763104351884.dkr.ecr.aws_region.amazonaws.com/tensorflow-inference-neuronx:2.10.1-neuronx-py38-sdk2.10.0-ubuntu20.04
```

Sostituisci *aws\$1region* con `us-east-2` per Inferentia2 e `us-east-1` per Trainium1.

------

La tabella seguente è mappata con. *aws\$1account\$1id* *aws\$1region* Usa questa tabella per trovare l'URI dell'immagine di inferenza corretto necessario per la tua applicazione. 


| aws\$1account\$1id | aws\$1region | 
| --- | --- | 
| 785573368785 | us-east-1 | 
| 007439368137 | us-east-2 | 
| 710691900526 | us-west-1 | 
| 301217895009 | us-west-2 | 
| 802834080501 | eu-west-1 | 
| 205493899709 | eu-west-2 | 
| 254080097072 | eu-west-3 | 
| 601324751636 | eu-north-1 | 
| 966458181534 | eu-south-1 | 
| 746233611703 | eu-central-1 | 
| 110948597952 | ap-east-1 | 
| 763008648453 | ap-south-1 | 
| 941853720454 | ap-northeast-1 | 
| 151534178276 | ap-northeast-2 | 
| 925152966179 | ap-northeast-3 | 
| 324986816169 | ap-southeast-1 | 
| 355873309152 | ap-southeast-2 | 
| 474822919863 | cn-northwest-1 | 
| 472730292857 | cn-north-1 | 
| 756306329178 | sa-east-1 | 
| 464438896020 | ca-central-1 | 
| 836785723513 | me-south-1 | 
| 774647643957 | af-south-1 | 
| 275950707576 | il-central-1 | 

# Dispositivi Edge
<a name="neo-edge-devices"></a>

Amazon SageMaker Neo fornisce supporto di compilazione per i framework di machine learning più diffusi. Puoi implementare dispositivi edge compilati in NEO come Raspberry Pi 3, Sitara di Texas Instruments, Jetson TX1 e altri. Per un elenco completo dei framework e dei dispositivi edge supportati, consulta [Framework, dispositivi, sistemi e architetture supportati](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

Devi configurare il dispositivo edge in modo che possa utilizzare i servizi AWS. Un modo di fare ciò è installare DLR e Boto3 sul tuo dispositivo. Per farlo, devi impostare le credenziali di autenticazione. Per ulteriori informazioni, consulta [Configurazione di Boto3 AWS](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). Una volta compilato il modello e configurato il dispositivo edge, puoi scaricare il modello da Amazon S3 sul tuo dispositivo edge. Da lì, puoi usare [Deep Learning Runtime (DLR)](https://neo-ai-dlr.readthedocs.io/en/latest/index.html) per leggere il modello compilato e fare inferenze. 

Per gli utenti alle prime armi, consigliamo di consultare la guida [Nozioni di base](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html). Questa guida illustra come configurare le credenziali, compilare un modello, distribuire il modello su un Raspberry Pi 3 e fare inferenze sulle immagini. 

**Topics**
+ [Framework, dispositivi, sistemi e architetture supportati](neo-supported-devices-edge.md)
+ [Modelli di distribuzione](neo-deployment-edge.md)
+ [Configurazione di Neo su dispositivi Edge](neo-getting-started-edge.md)

# Framework, dispositivi, sistemi e architetture supportati
<a name="neo-supported-devices-edge"></a>

Amazon SageMaker Neo supporta framework di machine learning, dispositivi edge, sistemi operativi e architetture di chip comuni. Scopri se Neo supporta il tuo framework, dispositivo edge, sistema operativo e architettura di chip selezionando uno degli argomenti seguenti.

Puoi trovare un elenco di modelli che sono stati testati dal team di Amazon SageMaker Neo nella sezione [Modelli testati](neo-supported-edge-tested-models.md).

**Nota**  
I dispositivi Ambarella richiedono l'inclusione di file aggiuntivi nel file TAR compresso prima di essere inviato per la compilazione. Per ulteriori informazioni, consulta [Risolvi gli errori di Ambarella](neo-troubleshooting-target-devices-ambarella.md).
TIM-VX (libtim-vx.so) è richiesto per i.MX 8M Plus. Per informazioni su come creare TIM-VX, consulta il [Repository GitHub TIM-VX](https://github.com/VeriSilicon/TIM-VX).

**Topics**
+ [Framework supportati](neo-supported-devices-edge-frameworks.md)
+ [Dispositivi, architetture di chip e sistemi supportati](neo-supported-devices-edge-devices.md)
+ [Modelli testati](neo-supported-edge-tested-models.md)

# Framework supportati
<a name="neo-supported-devices-edge-frameworks"></a>

Amazon SageMaker Neo supporta i seguenti framework. 


| Framework | Versione di Framework | Versioni del modello | Modelli | Formati di modelli (pacchettizzati in \$1.tar.gz) | Kit di strumenti | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8 | Supporta 1.8 o versioni precedenti | Classificazione delle immagini, Rilevamento di oggetti, Segmentazione semantica, Stima della posa, Riconoscimento delle attività | Un file di simboli (.json) e un file di parametri (.params) | GluonCV versione 0.8.0 | 
| ONNX | 1,7 | Supporta 1.7 o versioni precedenti | Classificazione immagine, SVM | Un file di modello (.onnx) |  | 
| Keras | 2.2 | Supporta 2.2 o versioni precedenti | Classificazione delle immagini  | Un file di definizione del modello (.h5) |  | 
| PyTorch | 1.7, 1.8 | Supporta 1.7, 1.8 o versioni precedenti | Classificazione delle immagini, Rilevamento di oggetti | Un file di definizione del modello (.pth) |  | 
| TensorFlow | 1.15, 2.4, 2.5 (solo per le istanze ml.inf1.\$1) | Supporta 1.15, 2.4, 2.5 (solo per istanze ml.inf1.\$1) o versioni precedenti | Classificazione delle immagini, Rilevamento di oggetti | \$1Per i modelli salvati, un file .pb o uno .pbtxt e una directory delle variabili che contiene le variabili \$1Per i modelli congelati, solo un file .pb o .pbtxt |  | 
| TensorFlow-Lite | 1.15 | Supporta 1.15 o versioni precedenti | Classificazione delle immagini, Rilevamento di oggetti | Un file flatbuffer di definizione del modello (.tflite) |  | 
| XGBoost | 1.3 | Supporta 1.3 o versioni precedenti | Alberi decisionali | Un file di modello XGBoost (.model) in cui il numero di nodi in un albero è inferiore a 2^31 |  | 
| DARKNET |  |  | Classificazione delle immagini, Rilevamento degli oggetti (il modello Yolo non è supportato) | Un file di configurazione (.cfg) e un file di pesi (.weights) |  | 

# Dispositivi, architetture di chip e sistemi supportati
<a name="neo-supported-devices-edge-devices"></a>

Amazon SageMaker Neo supporta i seguenti dispositivi, architetture di chip e sistemi operativi.

## Dispositivi
<a name="neo-supported-edge-devices"></a>

Puoi selezionare un dispositivo utilizzando l’elenco a discesa nella console di Amazon[ SageMaker AI](https://console.aws.amazon.com/sagemaker) o specificando l’oggetto `TargetDevice` nella configurazione di output dell’API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html).

Puoi scegliere uno dei seguenti dispositivi edge: 


| Un elenco dispositivi | System on a Chip (SoC) | Sistema operativo | Architettura | Accelerator | Opzioni del compilatore di esempio | 
| --- | --- | --- | --- | --- | --- | 
| aisage | Nessuno | Linux | ARM64 | Mali | Nessuno | 
| amba\$1cv2 | CV2 | Arch Linux | ARM64 | cvflow | Nessuno | 
| amba\$1cv22 | CV22 | Arch Linux | ARM64 | cvflow | Nessuno | 
| amba\$1cv25 | CV25 | Arch Linux | ARM64 | cvflow | Nessuno | 
| coreml | Nessuno | iOS, macOS | Nessuno | Nessuno | \$1"class\$1labels": "imagenet\$1labels\$11000.txt"\$1 | 
| imx8qm | NXP imx8 | Linux | ARM64 | Nessuno | Nessuno | 
| imx8mplus | i.MX 8M Plus | Linux | ARM64 | NPU | Nessuno | 
| jacinto\$1tda4vm | TDA4VM | Linux | ARM | TDA4VM | Nessuno | 
| jetson\$1nano | Nessuno | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '5.0.6', 'cuda-ver': '10.0'\$1Per `TensorFlow2`, `{'JETPACK_VERSION': '4.6', 'gpu_code': 'sm_72'}` | 
| jetson\$1tx1 | Nessuno | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1tx2 | Nessuno | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$162', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1xavier | Nessuno | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$172', 'trt-ver': '5.1.6', 'cuda-ver': '10.0'\$1 | 
| qcs605 | Nessuno | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| qcs603 | Nessuno | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| rasp3b | ARM A56 | Linux | ARM\$1EABIHF | Nessuno | \$1'mattr': ['\$1neon']\$1 | 
| rasp4b | ARM A72 | Nessuno | Nessuno | Nessuno | Nessuno | 
| rk3288 | Nessuno | Linux | ARM\$1EABIHF | Mali | Nessuno | 
| rk3399 | Nessuno | Linux | ARM64 | Mali | Nessuno | 
| sbe\$1c | Nessuno | Linux | x86\$164 | Nessuno | \$1'mcpu': 'core-avx2'\$1 | 
| sitara\$1am57x | AM57X | Linux | ARM64 | EVE e/o C66x DSP | Nessuno | 
| x86\$1win32 | Nessuno | Windows 10 | X86\$132 | Nessuno | Nessuno | 
| x86\$1win64 | Nessuno | Windows 10 | X86\$132 | Nessuno | Nessuno | 

Per ulteriori informazioni sulle opzioni del compilatore chiave-valore JSON per ogni dispositivo di destinazione, consulta il campo `CompilerOptions` nel tipo di dati [`OutputConfig` API](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html).

## Sistemi e architetture di chip
<a name="neo-supported-edge-granular"></a>

Le seguenti tabelle di ricerca forniscono informazioni sui sistemi operativi e sulle architetture disponibili per i lavori di compilazione di modelli Neo. 

------
#### [ Linux ]


| Accelerator | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Nessun acceleratore (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | 
| Nvidia GPU | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | 
| ARM Mail | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | 

------
#### [ Android ]


| Accelerator | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Nessun acceleratore (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | 
| Nvidia GPU | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | 
| ARM Mail | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | 

------
#### [ Windows ]


| Accelerator | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Nessun acceleratore (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/success_icon.svg) Sì | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | ![\[alt text not found\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/images/negative_icon.svg) No | 

------

# Modelli testati
<a name="neo-supported-edge-tested-models"></a>

Le seguenti sezioni comprimibili forniscono informazioni sui modelli di machine learning testati dal team di Amazon SageMaker Neo. Espandi la sezione comprimibile in base al tuo framework per verificare se un modello è stato testato.

**Nota**  
Questo non è un elenco completo di modelli che possono essere compilati con Neo.

Consulta [Framework supportati](neo-supported-devices-edge-frameworks.md) e [SageMaker AI Neo Supported Operators](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/) per scoprire se puoi compilare il tuo modello con SageMaker Neo.

## DarkNet
<a name="collapsible-section-01"></a>


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Alexnet |  |  |  |  |  |  |  |  |  | 
| ResNet50 | X | X |  | X | X | X |  | X | X | 
| YOLOv2 |  |  |  | X | X | X |  | X | X | 
| YOLOv2\$1tiny | X | X |  | X | X | X |  | X | X | 
| YOLOv3\$1416 |  |  |  | X | X | X |  | X | X | 
| YOLOv3\$1tiny | X | X |  | X | X | X |  | X | X | 

## MXNet
<a name="collapsible-section-02"></a>


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| Alexnet |  |  | X |  |  |  |  |  |  | 
| Densenet121 |  |  | X |  |  |  |  |  |  | 
| DenseNet201 | X | X | X | X | X | X |  | X | X | 
| GoogLeNet | X | X |  | X | X | X |  | X | X | 
| InceptionV3 |  |  |  | X | X | X |  | X | X | 
| MobileNet0.75 | X | X |  | X | X | X |  |  | X | 
| MobileNet1.0 | X | X | X | X | X | X |  |  | X | 
| MobileNetV2\$10.5 | X | X |  | X | X | X |  |  | X | 
| MobileNetV2\$11.0 | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Large | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Small | X | X | X | X | X | X | X | X | X | 
| ResNeSt50 |  |  |  | X | X |  |  | X | X | 
| ResNet18\$1v1 | X | X | X | X | X | X |  |  | X | 
| ResNet18\$1v2 | X | X |  | X | X | X |  |  | X | 
| ResNet50\$1v1 | X | X | X | X | X | X |  | X | X | 
| ResNet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| ResNext101\$132x4d |  |  |  |  |  |  |  |  |  | 
| Resnext 50\$132x4d | X |  | X | X | X |  |  | X | X | 
| SENet\$1154 |  |  |  | X | X | X |  | X | X | 
| SE\$1ResNext50\$132x4d | X | X |  | X | X | X |  | X | X | 
| SqueezeNet1.0 | X | X | X | X | X | X |  |  | X | 
| SqueezeNet1.1 | X | X | X | X | X | X |  | X | X | 
| VGG11 | X | X | X | X | X |  |  | X | X | 
| Xception | X | X | X | X | X | X |  | X | X | 
| darknet53 | X | X |  | X | X | X |  | X | X | 
| resnet18\$1v1b\$10.89 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.11 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.86 | X | X | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1coco | X |  | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1voc | X |  | X | X | X | X |  | X | X | 
| ssd\$1resnet50\$1v1 | X |  | X | X | X |  |  | X | X | 
| yolo3\$1darknet53\$1coco | X |  |  | X | X |  |  | X | X | 
| yolo3\$1mobilenet1.0\$1coco | X | X |  | X | X | X |  | X | X | 
| deeplab\$1resnet50 |  |  | X |  |  |  |  |  |  | 

## Keras
<a name="collapsible-section-03"></a>


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet121 | X | X | X | X | X | X |  | X | X | 
| densenet201 | X | X | X | X | X | X |  |  | X | 
| inception\$1v3 | X | X |  | X | X | X |  | X | X | 
| mobilenet\$1v1 | X | X | X | X | X | X |  | X | X | 
| mobilenet\$1v2 | X | X | X | X | X | X |  | X | X | 
| resnet152\$1v1 |  |  |  | X | X |  |  |  | X | 
| resnet152\$1v2 |  |  |  | X | X |  |  |  | X | 
| resnet50\$1v1 | X | X | X | X | X |  |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| vgg16 |  |  | X | X | X |  |  | X | X | 

## ONNX
<a name="collapsible-section-04"></a>


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| alexnet |  |  | X |  |  |  |  |  |  | 
| mobilenetv2-1.0 | X | X | X | X | X | X |  | X | X | 
| resnet18v1 | X |  |  | X | X |  |  |  | X | 
| resnet18v2 | X |  |  | X | X |  |  |  | X | 
| resnet50v1 | X |  | X | X | X |  |  | X | X | 
| resnet50v2 | X |  | X | X | X |  |  | X | X | 
| resnet152v1 |  |  |  | X | X | X |  |  | X | 
| resnet152v2 |  |  |  | X | X | X |  |  | X | 
| squeezenet1.1 | X |  | X | X | X | X |  | X | X | 
| vgg19 |  |  | X |  |  |  |  |  | X | 

## PyTorch (FP32)
<a name="collapsible-section-05"></a>


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet121 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 |  | X |  |  | X | X | X |  | X | X | 
| resnet152 |  |  |  |  | X | X | X |  |  | X | 
| resnet18 | X | X |  |  | X | X | X |  |  | X | 
| resnet50 | X | X | X | X | X | X |  |  | X | X | 
| squeezenet1.0 | X | X |  |  | X | X | X |  |  | X | 
| squeezenet1.1 | X | X | X | X | X | X | X |  | X | X | 
| yolov4 |  |  |  |  | X | X |  |  |  |  | 
| yolov5 |  |  |  | X | X | X |  |  |  |  | 
| fasterrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 
| maskrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 

## TensorFlow
<a name="collapsible-section-06"></a>

------
#### [ TensorFlow ]


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet201 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet100\$1v1 | X | X | X |  | X | X | X |  |  | X | 
| mobilenet100\$1v2.0 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet130\$1v2 | X | X |  |  | X | X | X |  |  | X | 
| mobilenet140\$1v2 | X | X | X |  | X | X | X |  | X | X | 
| resnet50\$1v1.5 | X | X |  |  | X | X | X |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X | X |  | X | X | 
| squeezenet | X | X | X | X | X | X | X |  | X | X | 
| mask\$1rcnn\$1inception\$1resnet\$1v2 |  |  |  |  | X |  |  |  |  |  | 
| ssd\$1mobilenet\$1v2 |  |  |  |  | X | X |  |  |  |  | 
| faster\$1rcnn\$1resnet50\$1lowproposals |  |  |  |  | X |  |  |  |  |  | 
| rfcn\$1resnet101 |  |  |  |  | X |  |  |  |  |  | 

------
#### [ TensorFlow.Keras ]


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| DenseNet121  | X | X |  | X | X | X |  | X | X | 
| DenseNet201 | X | X |  | X | X | X |  |  | X | 
| InceptionV3 | X | X |  | X | X | X |  | X | X | 
| MobileNet | X | X |  | X | X | X |  | X | X | 
| MobileNetv2 | X | X |  | X | X | X |  | X | X | 
| NASNetLarge |  |  |  | X | X |  |  | X | X | 
| NASNetMobile | X | X |  | X | X | X |  | X | X | 
| ResNet101 |  |  |  | X | X | X |  |  | X | 
| ResNet101V2 |  |  |  | X | X | X |  |  | X | 
| ResNet152 |  |  |  | X | X |  |  |  | X | 
| ResNet152v2 |  |  |  | X | X |  |  |  | X | 
| ResNet50 | X | X |  | X | X |  |  | X | X | 
| ResNet50V2 | X | X |  | X | X | X |  | X | X | 
| VGG16 |  |  |  | X | X |  |  | X | X | 
| Xception | X | X |  | X | X | X |  | X | X | 

------

## TensorFlow-Lite
<a name="collapsible-section-07"></a>

------
#### [ TensorFlow-Lite (FP32) ]


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 
| inception\$1resnet\$1v2\$12018\$104\$127 |  |  |  | X | X | X |  |  | X |  | 
| inception\$1v3\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| inception\$1v4\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| mnasnet\$10.5\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.0\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.3\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1192 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  | X | X | X |  |  | X | X | 
| resnet\$1v2\$1101 |  |  |  | X | X | X |  |  | X |  | 
| squeezenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 

------
#### [ TensorFlow-Lite (INT8) ]


| Modelli | ARM V8 | ARM Mail | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| inception\$1v1 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v2 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v3 | X |  |  |  |  | X | X |  | X | X | 
| inception\$1v4\$1299 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| deeplab-v3\$1513 |  |  |  |  |  |  | X |  |  |  | 

------

# Modelli di distribuzione
<a name="neo-deployment-edge"></a>

Puoi distribuire il modulo di elaborazione su dispositivi edge con risorse limitate: scaricando il modello compilato da Amazon S3 sul tuo dispositivo e utilizzando [DLR](https://github.com/neo-ai/neo-ai-dlr) oppure puoi utilizzare [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html).

Prima di andare avanti, assicurati che il tuo dispositivo edge sia supportato da SageMaker Neo. Consulta [Supported Frameworks, Devices, Systems, and Architectures](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html) per scoprire quali dispositivi edge sono supportati. Assicurati di aver specificato il dispositivo edge di destinazione quando hai inviato il processo di compilazione, consulta [Use Neo to Compile a Model](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html).

## Implementazione di un modello compilato (DLR)
<a name="neo-deployment-dlr"></a>

[DLR](https://github.com/neo-ai/neo-ai-dlr) è un runtime compatto e comune per modelli di deep learning e modelli di alberi decisionali. DLR utilizza il runtime [TVM](https://github.com/neo-ai/tvm), il runtime [Treelite](https://treelite.readthedocs.io/en/latest/install.html), NVIDIA TensorRT™ e può includere altri runtime specifici dell'hardware. DLR fornisce Python/C\$1\$1 unificato APIs per caricare ed eseguire modelli compilati su vari dispositivi.

Puoi installare l'ultima versione del pacchetto DLR utilizzando il seguente comando pip:

```
pip install dlr
```

Per l'installazione di DLR su destinazioni GPU o dispositivi edge non x86, consulta [Rilasci](https://github.com/neo-ai/neo-ai-dlr/releases) per binari predefiniti o [Installazione di DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) per creare DLR dall’origine. Ad esempio, per installare DLR per Raspberry Pi 3, puoi usare: 

```
pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
```

## Implementazione di un modello (AWS IoT Greengrass)
<a name="neo-deployment-greengrass"></a>

[AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) estende le funzionalità cloud ai dispositivi locali. Consente ai dispositivi di raccogliere e analizzare i dati più vicini all'origine delle informazioni, reagire autonomamente a eventi locali e comunicare in modo sicuro tra di loro sulle reti locali. Con AWS IoT Greengrass, puoi eseguire inferenze di machine learning all'edge su dati generati localmente utilizzando modelli addestrati sul cloud. Attualmente, puoi implementare modelli su tutti i dispositivi AWS IoT Greengrass basati su processori delle serie ARM Cortex-A, Intel Atom e Nvidia Jetson. Per ulteriori informazioni sulla distribuzione di un'applicazione di inferenza Lambda per eseguire inferenze di machine learning con AWS IoT Greengrass, [vedi Come configurare l'inferenza ottimizzata per l'apprendimento automatico](https://docs.aws.amazon.com/greengrass/latest/developerguide/ml-dlc-console.html) utilizzando la console di gestione. AWS 

# Configurazione di Neo su dispositivi Edge
<a name="neo-getting-started-edge"></a>

Questa guida per iniziare a usare Amazon SageMaker Neo mostra come compilare un modello, configurare il dispositivo e fare inferenze sul dispositivo. La maggior parte degli esempi di codice utilizza Boto3. Forniamo comandi, AWS CLI laddove applicabile, oltre a istruzioni su come soddisfare i prerequisiti per Neo. 

**Nota**  
Puoi eseguire i seguenti frammenti di codice sul tuo computer locale, all'interno di un SageMaker notebook, in Amazon SageMaker Studio o (a seconda del dispositivo periferico) sul tuo dispositivo edge. La configurazione è simile; tuttavia, ci sono due eccezioni principali se esegui questa guida all'interno di un'istanza di SageMaker notebook o SageMaker di una sessione di Studio:   
Non è necessario installare Boto3.
Non è necessario aggiungere la policy IAM `‘AmazonSageMakerFullAccess’`

 Questa guida presuppone che tu stia eseguendo le seguenti istruzioni sul tuo dispositivo edge. 

# Prerequisiti
<a name="neo-getting-started-edge-step0"></a>

SageMaker Neo è una funzionalità che consente di addestrare i modelli di machine learning una volta e di eseguirli ovunque nel cloud e all'edge. Per poter compilare e ottimizzare i tuoi modelli con Neo, devi configurare alcuni prerequisiti. È necessario installare le librerie Python necessarie, configurare le AWS credenziali, creare un ruolo IAM con le autorizzazioni richieste e configurare un bucket S3 per l'archiviazione degli artefatti del modello. È inoltre necessario disporre di un modello di machine learning addestrato. La seguente procedura ti guiderà nelle varie fasi della configurazione:

1. **Installa Boto3**

   Se stai eseguendo questi comandi sul tuo dispositivo edge, devi installare il AWS SDK per Python (Boto3). All'interno di un ambiente Python (preferibilmente un ambiente virtuale), esegui quanto segue localmente sul terminale del tuo dispositivo edge o all'interno di un'istanza del notebook Jupyter: 

------
#### [ Terminal ]

   ```
   pip install boto3
   ```

------
#### [ Jupyter Notebook ]

   ```
   !pip install boto3
   ```

------

1.  **Configura le credenziali AWS ** 

   Devi configurare le credenziali di Amazon Web Services sul dispositivo per eseguire SDK for Python (Boto3). Per impostazione predefinita, AWS le credenziali devono essere archiviate nel file `~/.aws/credentials` sul dispositivo edge. All'interno del file delle credenziali, dovresti vedere due variabili di ambiente: `aws_access_key_id` e `aws_secret_access_key`. 

   Nel tuo terminale, esegui: 

   ```
   $ more ~/.aws/credentials
   
   [default]
   aws_access_key_id = YOUR_ACCESS_KEY
   aws_secret_access_key = YOUR_SECRET_KEY
   ```

   La [Guida di riferimento AWS generale](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) contiene istruzioni su come ottenere le informazioni necessarie `aws_access_key_id` e `aws_secret_access_key`. Per ulteriori informazioni su come configurare le credenziali sul dispositivo, consulta la documentazione di [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). 

1.  **Configura un ruolo IAM e collega le policy.** 

   Neo deve accedere all'URI del bucket S3. Crea un ruolo IAM in grado di eseguire l' SageMaker intelligenza artificiale e che disponga dell'autorizzazione per accedere all'URI S3. Puoi creare un ruolo IAM utilizzando SDK for Python (Boto3), la console o AWS CLI. Nel seguente esempio viene illustrato come creare un ruolo IAM utilizzando SDK per Python (Boto3): 

   ```
   import boto3
   
   AWS_REGION = 'aws-region'
   
   # Create an IAM client to interact with IAM
   iam_client = boto3.client('iam', region_name=AWS_REGION)
   role_name = 'role-name'
   ```

   Per ulteriori informazioni su come creare un ruolo IAM con la console o tramite l' AWS API AWS CLI, consulta [Creazione di un utente IAM nel tuo AWS account](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api).

    Crea un dizionario che descriva la policy IAM che stai collegando. Questa policy è utilizzata per creare un nuovo ruolo IAM. 

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

   Crea un nuovo ruolo IAM utilizzando la policy che hai definito sopra:

   ```
   import json 
   
   new_role = iam_client.create_role(
       AssumeRolePolicyDocument=json.dumps(policy),
       Path='/',
       RoleName=role_name
   )
   ```

   Devi sapere qual è il tuo nome della risorsa Amazon (ARN) quando crei un lavoro di compilazione in una fase successiva, quindi memorizzalo anche in una variabile. 

   ```
   role_arn = new_role['Role']['Arn']
   ```

    Ora che hai creato un nuovo ruolo, allega le autorizzazioni necessarie per interagire con Amazon SageMaker AI e Amazon S3: 

   ```
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonSageMakerFullAccess'
   )
   
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess'
   );
   ```

1. **Crea un bucket Amazon S3 per archiviare gli artefatti del modello**

   SageMaker Neo accederà agli artefatti del tuo modello da Amazon S3

------
#### [ Boto3 ]

   ```
   # Create an S3 client
   s3_client = boto3.client('s3', region_name=AWS_REGION)
   
   # Name buckets
   bucket='name-of-your-bucket'
   
   # Check if bucket exists
   if boto3.resource('s3').Bucket(bucket) not in boto3.resource('s3').buckets.all():
       s3_client.create_bucket(
           Bucket=bucket,
           CreateBucketConfiguration={
               'LocationConstraint': AWS_REGION
           }
       )
   else:
       print(f'Bucket {bucket} already exists. No action needed.')
   ```

------
#### [ CLI ]

   ```
   aws s3 mb s3://'name-of-your-bucket' --region specify-your-region 
   
   # Check your bucket exists
   aws s3 ls s3://'name-of-your-bucket'/
   ```

------

1. **Addestra un modello di machine learning**

   Consulta [Train a Model with Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html) per ulteriori informazioni su come addestrare un modello di machine learning utilizzando Amazon SageMaker AI. Facoltativamente, puoi caricare il tuo modello addestrato localmente direttamente in un bucket URI Amazon S3. 
**Nota**  
 Assicurati che il modello sia formattato correttamente a seconda del framework che hai utilizzato. Vedi [Quali forme di dati di input si aspetta SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) 

   Se non hai ancora un modello, usa il `curl` comando per ottenere una copia locale del `coco_ssd_mobilenet` modello dal sito web TensorFlow del sito web. Il modello che hai appena copiato è un modello di rilevamento di oggetti addestrato dal [set di dati COCO](https://cocodataset.org/#home). Digita quanto segue nel tuo notebook Jupyter:

   ```
   model_zip_filename = './coco_ssd_mobilenet_v1_1.0.zip'
   !curl http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip \
       --output {model_zip_filename}
   ```

   Nota che questo particolare esempio è stato impacchettato in un file .zip. Decomprimi questo file e comprimilo nuovamente come tarfile compresso (`.tar.gz`) prima di utilizzarlo nelle fasi successive. Digita quanto segue nel tuo notebook Jupyter: 

   ```
   # Extract model from zip file
   !unzip -u {model_zip_filename}
   
   model_filename = 'detect.tflite'
   model_name = model_filename.split('.')[0]
   
   # Compress model into .tar.gz so SageMaker Neo can use it
   model_tar = model_name + '.tar.gz'
   !tar -czf {model_tar} {model_filename}
   ```

1. **Carica il modello addestrato in un bucket S3**

   Dopo aver addestrato la modalità di machine learning, archiviala in un bucket S3. 

------
#### [ Boto3 ]

   ```
   # Upload model        
   s3_client.upload_file(Filename=model_filename, Bucket=bucket, Key=model_filename)
   ```

------
#### [ CLI ]

   Sostituisci `your-model-filename` e `amzn-s3-demo-bucket` con il nome del bucket Amazon S3. 

   ```
   aws s3 cp your-model-filename s3://amzn-s3-demo-bucket
   ```

------

# Compila il modello
<a name="neo-getting-started-edge-step1"></a>

Una volta soddisfatti i [prerequisiti](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), puoi compilare il tuo modello con Amazon SageMaker AI Neo. [Puoi compilare il tuo modello utilizzando AWS CLI, la console o l'[Amazon Web Services SDK for Python (Boto3), vedi Use Neo](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) to Compile a Model.](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) In questo esempio, compilerai il tuo modello con Boto3.

Per compilare un modello, Neo richiede le seguenti informazioni: SageMaker 

1.  **L'URI del bucket Amazon S3 in cui è stato archiviato il modello addestrato.** 

   Se hai seguito i prerequisiti, il nome del bucket viene memorizzato in una variabile denominata `bucket`. Il seguente frammento di codice mostra come elencare tutti i bucket utilizzando: AWS CLI

   ```
   aws s3 ls
   ```

   Esempio: 

   ```
   $ aws s3 ls
   2020-11-02 17:08:50 bucket
   ```

1.  **L'URI del bucket Amazon S3 in cui desideri salvare il modello compilato.** 

   Il frammento di codice riportato di seguito concatena l'URI del bucket Amazon S3 con il nome di una directory di output denominata `output`: 

   ```
   s3_output_location = f's3://{bucket}/output'
   ```

1.  **Il framework di machine learning che hai usato per addestrare il tuo modello.** 

   Definisci il framework che hai usato per addestrare il tuo modello.

   ```
   framework = 'framework-name'
   ```

   Ad esempio, se si desidera compilare un modello che è stato addestrato a utilizzare TensorFlow, è possibile utilizzare `tflite` o. `tensorflow` `tflite`Utilizzalo se desideri utilizzare una versione più leggera TensorFlow che utilizza meno memoria di archiviazione. 

   ```
   framework = 'tflite'
   ```

   Per un elenco completo dei framework supportati da NEO, consulta [Framework, dispositivi, sistemi e architetture supportati](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **La forma dell'input del modello.** 

    Neo richiede il nome e la forma del tensore di input. Il nome e la forma sono passati come coppie chiave-valore. `value` è un elenco delle dimensioni intere di un tensore di input e `key` è il nome esatto di un tensore di input nel modello. 

   ```
   data_shape = '{"name": [tensor-shape]}'
   ```

   Esempio:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**Nota**  
Assicurati che il modello sia formattato correttamente a seconda del framework che hai utilizzato. Vedi [Quali forme di dati di input si aspetta SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) La chiave in questo dizionario deve essere modificata con il nome del nuovo tensore di input.

1.  **Il nome del dispositivo di destinazione per cui compilare o i dettagli generali della piattaforma hardware** 

   ```
   target_device = 'target-device-name'
   ```

   Ad esempio, se desideri eseguire l’implementazione su un Raspberry Pi 3, usa: 

   ```
   target_device = 'rasp3b'
   ```

   Puoi trovare l'elenco completo dei dispositivi edge in [Framework, dispositivi, sistemi e architetture supportati](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Ora che hai completato i passaggi precedenti, puoi inviare un lavoro di compilazione a Neo. 

```
# Create a SageMaker client so you can submit a compilation job
sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION)

# Give your compilation job a name
compilation_job_name = 'getting-started-demo'
print(f'Compilation job for {compilation_job_name} started')

response = sagemaker_client.create_compilation_job(
    CompilationJobName=compilation_job_name,
    RoleArn=role_arn,
    InputConfig={
        'S3Uri': s3_input_location,
        'DataInputConfig': data_shape,
        'Framework': framework.upper()
    },
    OutputConfig={
        'S3OutputLocation': s3_output_location,
        'TargetDevice': target_device 
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 900
    }
)

# Optional - Poll every 30 sec to check completion status
import time

while True:
    response = sagemaker_client.describe_compilation_job(CompilationJobName=compilation_job_name)
    if response['CompilationJobStatus'] == 'COMPLETED':
        break
    elif response['CompilationJobStatus'] == 'FAILED':
        raise RuntimeError('Compilation failed')
    print('Compiling ...')
    time.sleep(30)
print('Done!')
```

Se desideri ulteriori informazioni per il debug, includi la seguente dichiarazione di stampa:

```
print(response)
```

Se il processo di compilazione ha esito positivo, il modello compilato viene archiviato nel bucket di output Amazon S3 specificato in precedenza (`s3_output_location`). Scarica il modello compilato localmente: 

```
object_path = f'output/{model}-{target_device}.tar.gz'
neo_compiled_model = f'compiled-{model}.tar.gz'
s3_client.download_file(bucket, object_path, neo_compiled_model)
```

# Configurare il dispositivo
<a name="neo-getting-started-edge-step2"></a>

Dovrai installare i pacchetti sul tuo dispositivo edge in modo che il dispositivo possa fare inferenze. Dovrai anche installare il core [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) o [Deep Learning Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr). In questo esempio, installerai i pacchetti necessari per creare inferenze per l'algoritmo di rilevamento degli oggetti `coco_ssd_mobilenet` e utilizzerai DLR.

1. **Installa pacchetti aggiuntivi**

   Oltre a Boto3, devi installare alcune librerie sul tuo dispositivo edge. Le librerie da installare sono diverse a seconda del caso d'uso. 

   Ad esempio, per l'algoritmo di rilevamento degli `coco_ssd_mobilenet` oggetti che hai scaricato in precedenza, devi installare [NumPy](https://numpy.org/)per la manipolazione dei dati e le statistiche, [PIL](https://pillow.readthedocs.io/en/stable/) per caricare le immagini e [Matplotlib](https://matplotlib.org/) per generare grafici. È inoltre necessaria una copia di TensorFlow se si desidera valutare l'impatto della compilazione con Neo rispetto a quella di base. 

   ```
   !pip3 install numpy pillow tensorflow matplotlib 
   ```

1. **Installa il motore di inferenza sul tuo dispositivo**

   Per eseguire il modello NEO compilato, installa [Deep Learning Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr) sul tuo dispositivo. DLR è un runtime compatto e comune per modelli di deep learning e modelli di alberi decisionali. Su destinazioni CPU x86\$164 che eseguono Linux, è possibile installare l'ultima versione del pacchetto DLR utilizzando il seguente comando `pip`:

   ```
   !pip install dlr
   ```

   Per l'installazione di DLR su destinazioni GPU o dispositivi edge non x86, consulta [Rilasci](https://github.com/neo-ai/neo-ai-dlr/releases) per binari predefiniti o [Installazione di DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) per creare DLR dall’origine. Ad esempio, per installare DLR per Raspberry Pi 3, puoi usare: 

   ```
   !pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
   ```

# Creazione di inferenze sul proprio dispositivo
<a name="neo-getting-started-edge-step3"></a>

In questo esempio, utilizzerai Boto3 per scaricare l'output del tuo processo di compilazione sul tuo dispositivo edge. Importerai quindi DLR, scaricherai un'immagine di esempio dal set di dati, ridimensionerai l'immagine in modo che corrisponda all'input originale del modello e quindi farai una previsione.

1. **Scarica il modello compilato da Amazon S3 sul tuo dispositivo ed estrailo dal file tar compresso.** 

   ```
   # Download compiled model locally to edge device
   object_path = f'output/{model_name}-{target_device}.tar.gz'
   neo_compiled_model = f'compiled-{model_name}.tar.gz'
   s3_client.download_file(bucket_name, object_path, neo_compiled_model)
   
   # Extract model from .tar.gz so DLR can use it
   !mkdir ./dlr_model # make a directory to store your model (optional)
   !tar -xzvf ./compiled-detect.tar.gz --directory ./dlr_model
   ```

1. **Importa DLR e un oggetto `DLRModel` inizializzato.**

   ```
   import dlr
   
   device = 'cpu'
   model = dlr.DLRModel('./dlr_model', device)
   ```

1. **Scarica un'immagine per inferenza e formattala in base a come è stato addestrato il modello**.

   Per l’esempio `coco_ssd_mobilenet`, puoi scaricare un'immagine dal [set di dati COCO](https://cocodataset.org/#home) e quindi riforma l’immagine in `300x300`: 

   ```
   from PIL import Image
   
   # Download an image for model to make a prediction
   input_image_filename = './input_image.jpg'
   !curl https://farm9.staticflickr.com/8325/8077197378_79efb4805e_z.jpg --output {input_image_filename}
   
   # Format image so model can make predictions
   resized_image = image.resize((300, 300))
   
   # Model is quantized, so convert the image to uint8
   x = np.array(resized_image).astype('uint8')
   ```

1. **Utilizza DLR per creare inferenze**.

   Infine, puoi usare DLR per fare una previsione sull'immagine che hai appena scaricato: 

   ```
   out = model.run(x)
   ```

[Per altri esempi di utilizzo di DLR per fare inferenze da un modello compilato in NEO su un dispositivo edge, consulta il repository Github. neo-ai-dlr ](https://github.com/neo-ai/neo-ai-dlr) 

# Risoluzione degli errori
<a name="neo-troubleshooting"></a>

Questa sezione contiene informazioni su come comprendere e impedire errori comuni, i messaggi di errore da essi generati e le linee guida su come risolvere questi errori. Prima di andare avanti, poniti le seguenti domande:

 **Hai riscontrato un errore prima di implementare il tuo modello?** In caso affermativo, consulta [Risolvi errori di compilazione Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html). 

 **Hai riscontrato un errore dopo aver compilato il modello?** In caso affermativo, consulta [Risolvi errori di inferenza Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-inference.html). 

**Hai riscontrato un errore nel tentativo di compilare il tuo modello per i dispositivi Ambarella?** In caso affermativo, consulta. [Risolvi gli errori di Ambarella](neo-troubleshooting-target-devices-ambarella.md)

## Tipi di classificazione degli errori
<a name="neo-error-messages"></a>

In questo elenco sono classificati gli *errori utente* che puoi ricevere da Neo. Questi includono gli errori di accesso e di autorizzazione e gli errori di caricamento per ciascuno dei framework supportati. Tutti gli altri errori sono *errori di sistema*.

### Errore di autorizzazione del client
<a name="neo-error-client-permission"></a>

 Neo trasmette direttamente questi errori dal servizio dipendente. 
+ *Accesso negato quando si chiama* sts: AssumeRole
+ *Qualsiasi errore 400* durante la chiamata a S3 per scaricare o caricare un modello client.
+ Errore *PassRole*

### Errore di caricamento
<a name="collapsible-section-2"></a>

Supponendo che il compilatore Neo carichi correttamente .tar.gz da Amazon S3, verifica se il tarball contiene i file necessari per la compilazione. I criteri di verifica sono specifici del framework: 
+ **TensorFlow**: Si aspetta solo il file protobuf (\$1.pb o \$1.pbtxt). Per modelli salvati, si aspetta una cartella di variabili. 
+ **Pytorch**: si aspetta solo file pytorch (\$1.pth).
+ **MXNET**: si aspetta solo un file di simboli (\$1.json) e un file dei parametri (\$1.params).
+ **XGBoost**: Aspettatevi solo un file di modello (\$1.model). XGBoost La dimensione del modello di input è limitata.

### Errori di compilazione
<a name="neo-error-compilation"></a>

Supponendo che il compilatore Neo carichi correttamente file .tar.gz da Amazon S3 e che il tarball contenga i file necessari per la compilazione. Il criterio di verifica è: 
+ **OperatorNotImplemented**: Non è stato implementato un operatore.
+ **OperatorAttributeNotImplemented**: l'attributo nell'operatore specificato non è stato implementato. 
+ **OperatorAttributeRequired**: Un attributo è obbligatorio per un grafico di simboli interno, ma non è elencato nel grafico del modello di input dell'utente. 
+ **OperatorAttributeValueNotValid**: il valore dell'attributo nell'operatore specifico non è valido. 

**Topics**
+ [Tipi di classificazione degli errori](#neo-error-messages)
+ [Risolvi errori di compilazione Neo](neo-troubleshooting-compilation.md)
+ [Risolvi errori di inferenza Neo](neo-troubleshooting-inference.md)
+ [Risolvi gli errori di Ambarella](neo-troubleshooting-target-devices-ambarella.md)

# Risolvi errori di compilazione Neo
<a name="neo-troubleshooting-compilation"></a>

Questa sezione contiene informazioni su come comprendere e impedire errori di compilazione comuni, i messaggi di errore da essi generati e le linee guida su come risolvere questi errori. 

**Topics**
+ [Come usare questa pagina](#neo-troubleshooting-compilation-how-to-use)
+ [Errori correlati al framework](#neo-troubleshooting-compilation-framework-related-errors)
+ [Errori correlati all'infrastruttura](#neo-troubleshooting-compilation-infrastructure-errors)
+ [Controlla il log di compilazione.](#neo-troubleshooting-compilation-logs)

## Come usare questa pagina
<a name="neo-troubleshooting-compilation-how-to-use"></a>

Tenta di risolvere l'errore esaminando queste sezioni nell'ordine seguente:

1. Verifica che l'input del tuo processo di compilazione soddisfi i requisiti di input. Per informazioni, consultare [Quali forme di dati di input si aspetta SageMaker Neo?](neo-compilation-preparing-model.md#neo-job-compilation-expected-inputs).

1.  Controlla gli [errori più comuni specifici del framework](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-framework-related-errors). 

1.  Verifica se il tuo errore è un [errore di infrastruttura](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-infrastructure-errors). 

1. Controlla il [log di compilazione](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-logs).

## Errori correlati al framework
<a name="neo-troubleshooting-compilation-framework-related-errors"></a>

### Keras
<a name="neo-troubleshooting-compilation-framework-related-errors-keras"></a>


| Errore | Soluzione | 
| --- | --- | 
|   `InputConfiguration: No h5 file provided in <model path>`   |   Verifica che il file h5 si trovi nell'URI Amazon S3 specificato.  *O* Verifica che il [file h5 sia formattato correttamente](https://www.tensorflow.org/guide/keras/save_and_serialize#keras_h5_format).   | 
|   `InputConfiguration: Multiple h5 files provided, <model path>, when only one is allowed`   |  Verifica di fornire un solo file `h5`.  | 
|   `ClientError: InputConfiguration: Unable to load provided Keras model. Error: 'sample_weight_mode'`   |  Verifica che la versione di Keras specificata sia supportata. Consulta framework supportati per [istanze cloud](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-cloud.html) e [dispositivi edge](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).   | 
|   `ClientError: InputConfiguration: Input input has wrong shape in Input Shape dictionary. Input shapes should be provided in NCHW format. `   |   Verifica che l'input del modello segua il formato NCHW. Vedi [Quali forme di dati di input si aspetta SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs)   | 

### MXNet
<a name="neo-troubleshooting-compilation-framework-related-errors-mxnet"></a>


| Errore | Soluzione | 
| --- | --- | 
|   `ClientError: InputConfiguration: Only one parameter file is allowed for MXNet model. Please make sure the framework you select is correct.`   |   SageMaker Neo selezionerà il primo file di parametri fornito per la compilazione.   | 

### TensorFlow
<a name="neo-troubleshooting-compilation-framework-related-errors-tensorflow"></a>


| Errore | Soluzione | 
| --- | --- | 
|   `InputConfiguration: Exactly one .pb file is allowed for TensorFlow models.`   |  Assicurati di fornire solo un file .pb o .pbtxt.  | 
|  `InputConfiguration: Exactly one .pb or .pbtxt file is allowed for TensorFlow models.`  |  Assicurati di fornire solo un file .pb o .pbtxt.  | 
|   ` ClientError: InputConfiguration: TVM cannot convert <model zoo> model. Please make sure the framework you selected is correct. The following operators are not implemented: {<operator name>} `   |   Verifica che l'operatore che hai scelto sia supportato. Vedi [Framework e operatori supportati da SageMaker Neo](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/).   | 

### PyTorch
<a name="neo-troubleshooting-compilation-framework-related-errors-pytorch"></a>


| Errore | Soluzione | 
| --- | --- | 
|   `InputConfiguration: We are unable to extract DataInputConfig from the model due to input_config_derivation_error. Please override by providing a DataInputConfig during compilation job creation.`  |  Esegui una delle operazioni seguenti: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/neo-troubleshooting-compilation.html)  | 

## Errori correlati all'infrastruttura
<a name="neo-troubleshooting-compilation-infrastructure-errors"></a>


| Errore | Soluzione | 
| --- | --- | 
|   `ClientError: InputConfiguration: S3 object does not exist. Bucket: <bucket>, Key: <bucket key>`   |  Controlla l'URI Amazon S3 fornito.  | 
|   ` ClientError: InputConfiguration: Bucket <bucket name> is in region <region name> which is different from AWS Sagemaker service region <service region> `   |   Crea un bucket Amazon S3 nella stessa Regione del servizio.   | 
|   ` ClientError: InputConfiguration: Unable to untar input model. Please confirm the model is a tar.gz file `   |   Verifica che il tuo modello in Amazon S3 sia compresso in un file `tar.gz`.   | 

## Controlla il log di compilazione.
<a name="neo-troubleshooting-compilation-logs"></a>

1. Accedi ad Amazon CloudWatch all'indirizzo [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Seleziona la Regione in cui hai creato il processo di compilazione dall'elenco a discesa **Regione** in alto a destra.

1. Nel pannello di navigazione di Amazon CloudWatch, scegli **Logs.** Seleziona **Gruppi di log**.

1. Cerca il gruppo di log denominato `/aws/sagemaker/CompilationJobs`. Seleziona il gruppo di log .

1. Cerca il logstream che prende il nome dal nome del processo di compilazione. Seleziona il flusso di log.

# Risolvi errori di inferenza Neo
<a name="neo-troubleshooting-inference"></a>

Questa sezione contiene informazioni su come prevenire e risolvere alcuni degli errori più comuni che potresti riscontrare durante la distribuzione e l' and/or invocazione dell'endpoint. **Questa sezione si applica alla **PyTorch versione 1.4.0 o successiva e MXNet alla versione 1.7.0 o successiva**.** 
+ Assicurati che la prima inferenza (inferenza di warm-up) su un dato di input valido venga eseguita in `model_fn()`, se hai definito un `model_fn` nello script di inferenza, altrimenti potrebbe essere visualizzato il seguente messaggio di errore sul terminale quando viene chiamato [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict). 

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (0) from <users-sagemaker-endpoint> with message "Your invocation timed out while waiting for a response from container model. Review the latency metrics for each container in Amazon CloudWatch, resolve the issue, and try again."                
  ```
+ Assicurati che siano impostate le variabili di ambiente nella tabella seguente. Se non sono impostate, potrebbe apparire il seguente messaggio di errore: 

  **Sul terminale:**

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (503) from <users-sagemaker-endpoint> with message "{ "code": 503, "type": "InternalServerException", "message": "Prediction failed" } ".
  ```

  **In: CloudWatch**

  ```
  W-9001-model-stdout com.amazonaws.ml.mms.wlm.WorkerLifeCycle - AttributeError: 'NoneType' object has no attribute 'transform'
  ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/neo-troubleshooting-inference.html)
+ Assicurati che la variabile di `MMS_DEFAULT_RESPONSE_TIMEOUT` ambiente sia impostata su 500 o un valore superiore durante la creazione del modello Amazon SageMaker AI; in caso contrario, sul terminale potrebbe essere visualizzato il seguente messaggio di errore: 

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (0) from <users-sagemaker-endpoint> with message "Your invocation timed out while waiting for a response from container model. Review the latency metrics for each container in Amazon CloudWatch, resolve the issue, and try again."
  ```

# Risolvi gli errori di Ambarella
<a name="neo-troubleshooting-target-devices-ambarella"></a>

SageMaker Neo richiede che i modelli siano impacchettati in un file TAR compresso (). `*.tar.gz` I dispositivi Ambarella richiedono l'inclusione di file aggiuntivi nel file TAR compresso prima di essere inviato per la compilazione. Includi i seguenti file nel tuo file TAR compresso se vuoi compilare un modello per obiettivi Ambarella con Neo: SageMaker 
+ Un modello addestrato che utilizza un framework supportato da Neo SageMaker 
+ Un file di configurazione JSON
+ Immagini di calibrazione

Ad esempio, il contenuto del file TAR compresso dovrebbe essere simile all'esempio seguente:

```
├──amba_config.json
├──calib_data
|    ├── data1
|    ├── data2
|    ├── .
|    ├── .
|    ├── .
|    └── data500
└──mobilenet_v1_1.0_0224_frozen.pb
```

La directory è configurata come segue:
+ `amba_config.json` : file di configurazione
+ `calib_data`: cartella contenente immagini di calibrazione
+ `mobilenet_v1_1.0_0224_frozen.pb`: TensorFlow modello salvato come grafico congelato

Per informazioni sui framework supportati da SageMaker Neo, vedi. [Framework supportati](neo-supported-devices-edge-frameworks.md)

## Impostazione del file di configurazione
<a name="neo-troubleshooting-target-devices-ambarella-config"></a>

Il file di configurazione fornisce le informazioni richieste dalla toolchain Ambarella per compilare il modello. Il file di configurazione deve essere salvato come file JSON e il nome del file deve terminare con `*config.json`. Nel grafico seguente viene mostrato il contenuto del file di configurazione.


| Chiave | Description | Esempio | 
| --- | --- | --- | 
| inputs | Dizionario che mappa i livelli di input agli attributi. | <pre>{inputs:{"data":{...},"data1":{...}}}</pre> | 
| "data" | Nome del livello di input. Nota: "data" è un esempio del nome che puoi usare per etichettare il livello di input. | "data" | 
| shape | Descrive la forma dell'input per il modello. Questo segue le stesse convenzioni utilizzate da Neo. SageMaker  | "shape": "1,3,224,224" | 
| filepath | Percorso relativo alla directory contenente le immagini di calibrazione. Possono essere file binari o di immagine come JPG o PNG. | "filepath": "calib\$1data/" | 
| colorformat | Formato di colore previsto dal modello. Questo verrà utilizzato durante la conversione delle immagini in file binari. Valori supportati: [RGB, BGR]. Il valore predefinito è RGB. | "colorformat":"RGB" | 
| mean | Valore medio da sottrarre dall'input. Può essere un valore singolo o un elenco di valori. Quando la media viene fornita come elenco, il numero di voci deve corrispondere alla dimensione del canale dell'input. | "mean":128.0 | 
| scale | Valore di scala da utilizzare per normalizzare l'input. Può essere un valore singolo o un elenco di valori. Quando la scala viene fornita come elenco, il numero di voci deve corrispondere alla dimensione del canale dell'input. | "scale": 255.0 | 

Di seguito viene illustrato un esempio di file di configurazione: 

```
{
    "inputs": {
        "data": {
                "shape": "1, 3, 224, 224",
                "filepath": "calib_data/",
                "colorformat": "RGB",
                "mean":[128,128,128],
                "scale":[128.0,128.0,128.0]
        }
    }
}
```

## Immagini di calibrazione
<a name="neo-troubleshooting-target-devices-ambarella-calibration-images"></a>

Quantizza il modello addestrato fornendo immagini di calibrazione. La quantizzazione del modello migliora le prestazioni del CVFlow motore su un Ambarella System on a Chip (SoC). La toolchain Ambarella utilizza le immagini di calibrazione per determinare come quantizzare ogni livello del modello per ottenere prestazioni e precisione ottimali. Ogni livello è quantizzato indipendentemente dai nostri formati. INT8 INT16 Il modello finale presenta una combinazione di INT8 e INT16 livelli dopo la quantizzazione.

**Quante immagini dovresti usare?**

Consigliamo di includere tra 100 e 200 immagini rappresentative dei tipi di scene che il modello dovrebbe gestire. Il tempo di compilazione del modello aumenta linearmente in base al numero di immagini di calibrazione nel file di input.

**Quali sono i formati di immagine consigliati?**

Le immagini di calibrazione possono essere in formato binario non elaborato o in formati di immagine come JPG e PNG.

La cartella di calibrazione può contenere una combinazione di immagini e file binari. Se la cartella di calibrazione contiene sia immagini che file binari, la toolchain converte prima le immagini in file binari. Una volta completata la conversione, utilizza i file binari appena generati insieme ai file binari originariamente presenti nella cartella.

**Posso prima convertire le immagini in formato binario?**

Sì. Puoi convertire le immagini in formato binario con pacchetti open source come [OpenCV](https://opencv.org/) o [PIL](https://python-pillow.org/). Ritaglia e ridimensiona le immagini in modo che soddisfino il livello di input del modello addestrato.



## Media e scala
<a name="neo-troubleshooting-target-devices-ambarella-mean-scale"></a>

Puoi specificare le opzioni di pre-elaborazione della media e della scala nella toolchain Amberalla. Queste operazioni sono integrate nella rete e vengono applicate durante l'inferenza su ciascun input. Non fornire dati elaborati se specifichi la media o la scala. Più specificamente, non fornire dati da cui hai sottratto la media o a cui hai applicato la scala.

## Controlla il log di compilazione.
<a name="neo-troubleshooting-target-devices-ambarella-compilation"></a>

Per informazioni sul controllo del log di compilazione per i dispositivi Ambarella, consulta [Controlla il log di compilazione.](neo-troubleshooting-compilation.md#neo-troubleshooting-compilation-logs).

# Sessioni stateful con modelli di Amazon SageMaker AI
<a name="stateful-sessions"></a>

Quando invii richieste a un endpoint di inferenza di Amazon SageMaker AI, puoi scegliere di instradare le richieste a una *sessione stateful*. Durante una sessione stateful, puoi inviare più richieste di inferenza alla stessa istanza di ML e l’istanza semplifica la sessione.

Normalmente, quando invochi un endpoint di inferenza, Amazon SageMaker AI instrada la tua richiesta a qualsiasi istanza ML tra quelle ospitate dall’endpoint. Questo comportamento di instradamento aiuta a ridurre al minimo la latenza distribuendo uniformemente il traffico di inferenza. Tuttavia, un risultato del comportamento di instradamento è che non è possibile prevedere quale istanza soddisferà la richiesta. 

Questa imprevedibilità è una limitazione se intendi inviare la richiesta a un *modello stateful*. Un modello stateful ha un container che memorizza nella cache i dati contestuali che riceve dalle richieste di inferenza. Poiché i dati vengono memorizzati nella cache, è possibile interagire con il container inviando più richieste e, con ciascuna richiesta, non è necessario includere l’intero contesto dell’interazione. Invece, il modello attinge ai dati contestuali memorizzati nella cache per guidare la previsione. 

I modelli stateful sono ideali quando i dati di contesto per l’interazione sono molto grandi, ad esempio quando includono quanto segue:
+ File di testo di grandi dimensioni
+ Lunghe cronologie di chat 
+ Dati multimediali (immagini, video e audio) per modelli multimodali

In questi casi, se passi il contesto completo a ogni prompt, la latenza di rete delle richieste rallenta e la reattività dell’applicazione diminuisce. 

Prima che l’endpoint di inferenza possa supportare una sessione stateful, deve ospitare un modello stateful. L’implementazione del modello stateful è di tua proprietà. Amazon SageMaker AI consente di instradare le richieste a una sessione stateful, ma non fornisce modelli stateful da distribuire e utilizzare. 

Per un esempio di container di modello e notebook che illustra come vengono implementate le interazioni stateful, consulta [Implementazione di esempio](#stateful-sessions-example-notebook).

Per informazioni sull’implementazione di modelli stateful con TorchServe, consulta [Stateful Inference](https://github.com/pytorch/serve/tree/master/examples/stateful/sequence_continuous_batching) nel repository GitHub di TorchServe. 

## Funzionamento delle sessioni stateful
<a name="stateful-sessions-running"></a>

Durante una sessione stateful, l’applicazione interagisce con il container del modello nei seguenti modi. 

**Per avviare una sessione stateful**

1. Per avviare una sessione con un modello stateful ospitato da Amazon SageMaker AI, il client invia una richiesta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) con l’API SageMaker. Per il parametro di richiesta `SessionID`, il client indica a SageMaker AI di avviare una nuova sessione specificando il valore `NEW_SESSION`. Nel payload della richiesta, il client indica anche al container di avviare una nuova sessione. La sintassi di questa dichiarazione varia in base all’implementazione del container. Dipende dal modo in cui il codice del container gestisce il payload della richiesta.

   L’esempio seguente avvia una nuova sessione utilizzando l’SDK per Python (Boto3):

   ```
   import boto3
   import sagemaker
   import json
   
   payload = {
   "requestType":"NEW_SESSION"
   }
   payload = json.dumps(payload)
   
   smr = boto3.client(
       'sagemaker-runtime',
       region_name="region_name",
       endpoint_url="endoint_url")
   
   create_session_response = smr.invoke_endpoint(
       EndpointName="endpoint_name",
       Body=payload,
       ContentType="application/json",
       SessionId="NEW_SESSION")
   ```

1. Il container del modello gestisce la richiesta del cliente avviando una nuova sessione. Per la sessione, memorizza nella cache i dati che il client invia nel payload della richiesta. Inoltre, crea un ID di sessione e imposta un timestamp TTL (Time To Live). Questo timestamp indica quando scade la sessione. Il container deve fornire l’ID di sessione e il timestamp ad Amazon SageMaker AI impostando la seguente intestazione HTTP nella risposta:

   ```
   X-Amzn-SageMaker-Session-Id: session_id; Expires=yyyy-mm-ddThh:mm:ssZ
   ```

1. Nella risposta alla richiesta `InvokeEndpoint`, Amazon SageMaker AI fornisce l’ID di sessione e il timestamp TTL per il parametro di risposta `NewSessionID`.

   L’esempio seguente estrae l’ID di sessione dalla risposta `invoke_endpoint`:

   ```
   session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
   ```

**Per continuare una sessione stateful**
+ Per utilizzare la stessa sessione per una successiva richiesta di inferenza, il client invia un’altra richiesta `InvokeEndpoint`. Per il parametro di richiesta `SessionID`, specifica l’ID di sessione. Con questo ID, SageMaker AI instrada la richiesta alla stessa istanza ML in cui è stata avviata la sessione. Poiché il container ha già memorizzato nella cache il payload della richiesta originale, il client non deve passare gli stessi dati di contesto presenti nella richiesta originale.

  L’esempio seguente continua una sessione passando l’ID di sessione con il parametro di richiesta `SessionId`:

  ```
  smr.invoke_endpoint(
      EndpointName="endpoint_name",
      Body=payload,
      ContentType="application/json",
      SessionId=session_id)
  ```

**Per chiudere una sessione stateful**

1. Per chiudere una sessione, il cliente invia una richiesta `InvokeEndpoint` finale. Per il parametro di richiesta `SessionID`, il client fornisce l’ID di sessione. Nel payload nel corpo della richiesta, il client dichiara che il container deve chiudere la sessione. La sintassi di questa dichiarazione varia in base all’implementazione del container.

   L’esempio seguente chiude una sessione:

   ```
   payload = {
       "requestType":"CLOSE"
   }
   payload = json.dumps(payload)
   
   closeSessionResponse = smr.invoke_endpoint(
       EndpointName="endpoint_name",
       Body=payload,
       ContentType="application/json",
       SessionId=session_id)
   ```

1. Quando chiude la sessione, il container restituisce l’ID di sessione a SageMaker AI impostando la seguente intestazione HTTP nella risposta:

   ```
   X-Amzn-SageMaker-Closed-Session-Id: session_id
   ```

1. Nella risposta alla richiesta `InvokeEndpoint` del client, SageMaker AI fornisce l’ID di sessione per il parametro di risposta `ClosedSessionId`.

   L’esempio seguente estrae l’ID di sessione chiusa dalla risposta `invoke_endpoint`:

   ```
   closed_session_id = closeSessionResponse['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-closed-session-id'].split(';')[0]
   ```

## Implementazione di esempio
<a name="stateful-sessions-example-notebook"></a>

Il seguente esempio di notebook mostra come implementare il container per un modello stateful. Illustra inoltre come un’applicazione client avvia, continua e chiude una sessione stateful.

[Inferenza stateful LLaVA con SageMaker AI](https://github.com/aws-samples/sagemaker-genai-hosting-examples/blob/main/LLava/torchserve/workspace/llava_stateful_deploy_infer.ipynb)

Il notebook utilizza il modello [LLaVA: Large Language and Vision Assistant](https://github.com/haotian-liu/LLaVA/tree/main), che accetta immagini e prompt testuali. Il notebook carica un’immagine sul modello, quindi pone domande sull’immagine senza doverla inviare nuovamente per ogni richiesta. Il container del modello utilizza il framework TorchServe. Memorizza i dati dell’immagine nella memoria della GPU.

# Best practice
<a name="best-practices"></a>

I seguenti argomenti forniscono indicazioni sulle migliori pratiche per la distribuzione di modelli di machine learning in Amazon SageMaker AI.

**Topics**
+ [Le migliori pratiche per l'implementazione di modelli su SageMaker AI Hosting Services](deployment-best-practices.md)
+ [Monitoraggio delle best practice sulla sicurezza](monitor-sec-best-practices.md)
+ [Inferenza in tempo reale a bassa latenza con AWS PrivateLink](realtime-endpoints-privatelink.md)
+ [Migra il carico di lavoro di inferenza da x86 a Graviton AWS](realtime-endpoints-graviton.md)
+ [Risolvi i problemi relativi alle implementazioni dei modelli Amazon SageMaker AI](deploy-model-troubleshoot.md)
+ [Best practice per l'ottimizzazione dei costi di inferenza](inference-cost-optimization.md)
+ [Best practice per ridurre al minimo le interruzioni durante gli aggiornamenti dei driver della GPU](inference-gpu-drivers.md)
+ [Le migliori pratiche per la sicurezza e l'integrità degli endpoint con Amazon SageMaker AI](best-practice-endpoint-security.md)
+ [Aggiornamento dei container di inferenza per renderli conformi a NVIDIA Container Toolkit](container-nvidia-compliance.md)

# Le migliori pratiche per l'implementazione di modelli su SageMaker AI Hosting Services
<a name="deployment-best-practices"></a>

Quando ospitate modelli che utilizzano servizi di hosting SageMaker AI, tenete presente quanto segue:
+ In genere, un'applicazione client invia richieste all'endpoint HTTPS SageMaker AI per ottenere inferenze da un modello distribuito. Puoi anche inviare richieste a questo endpoint dal tuo notebook Jupyter durante il testing.
+ È possibile implementare un modello addestrato con l' SageMaker intelligenza artificiale sul proprio obiettivo di implementazione. A tale scopo, devi conoscere il formato specifico dell’algoritmo degli artefatti del modello generati dall’addestramento dei modelli. Per ulteriori informazioni sui formati di output, consulta la sezione corrispondente all'algoritmo che stai utilizzando in [Formati di dati comuni per l'addestramento](cdf-training.md). 
+ Puoi implementare più varianti di un modello sullo stesso endpoint SageMaker AI HTTPS. Ciò è utile per testare le variazioni di un modello nella produzione. Ad esempio, supponiamo che tu abbia distribuito un modello in produzione. Vuoi testare una variante del modello indirizzando una piccola quantità di traffico, ad esempio il 5%, al nuovo modello. Per eseguire questa operazione, crea una configurazione di endpoint che descrive entrambe le varianti del modello. Specifichi `ProductionVariant` nella tua richiesta a `CreateEndPointConfig`. Per ulteriori informazioni, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ProductionVariant.html). 
+ È possibile configurare un `ProductionVariant` per utilizzare Application Auto Scaling. Per ulteriori informazioni sulla configurazione delle scalabilità automatica, consulta [Ridimensionamento automatico dei modelli di SageMaker intelligenza artificiale di Amazon](endpoint-auto-scaling.md).
+ Puoi modificare un endpoint senza dover mettere fuori servizio modelli che sono già distribuiti nella produzione. Ad esempio, puoi aggiungere nuove varianti di modello, aggiornare la configurazione dell'istanza di calcolo ML, oppure modificare la distribuzione di traffico tra le varianti di modello. Per modificare un endpoint, devi fornire una nuova configurazione dell'endpoint. SageMaker L'intelligenza artificiale implementa le modifiche senza tempi di inattività. Per ulteriori informazioni, consulta [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpoint.html) e [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_UpdateEndpointWeightsAndCapacities.html). 
+ La modifica, l'eliminazione degli artefatti del modello la modifica del codice di inferenza dopo la distribuzione di un modello produce risultati imprevedibili. Se devi modificare o eliminare gli artefatti del modello o modificare il codice di inferenza, modifica l'endpoint fornendo una nuova configurazione di endpoint. Quando offri la nuova configurazione di endpoint, puoi modificare o eliminare gli artefatti del modello corrispondenti alla configurazione di endpoint precedente.
+ Per ottenere le inferenze sugli interi set di dati, è consigliabile utilizzare la trasformazione in batch in alternativa ai servizi di hosting. Per informazioni, consultare, [Trasformazione in batch per l'inferenza con Amazon SageMaker AI](batch-transform.md) 

## Distribuire più istanze nelle le zone di disponibilità
<a name="deployment-best-practices-availability-zones"></a>

**Crea endpoint robusti durante l'hosting del tuo modello.** SageMaker Gli endpoint AI possono aiutare a proteggere l'applicazione dalle interruzioni della [zona di disponibilità](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html) e dai guasti delle istanze. Se si verifica un'interruzione o un'istanza si guasta, l' SageMaker IA tenta automaticamente di distribuire le istanze tra le zone di disponibilità. Per questo motivo, consigliamo vivamente di implementare più istanze per ciascun endpoint di produzione. 

Se stai utilizzando [Amazon Virtual Private Cloud (VPC)](https://docs.aws.amazon.com/vpc/latest/userguide/what-is-amazon-vpc.html), configura il VPC con almeno due [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_VpcConfig.html#SageMaker-Type-VpcConfig-Subnets                     .html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_VpcConfig.html#SageMaker-Type-VpcConfig-Subnets                     .html), ognuna in una zona di disponibilità differente. Se si verifica un'interruzione o un'istanza si guasta, Amazon SageMaker AI tenta automaticamente di distribuire le istanze tra le zone di disponibilità. 

In generale, per ottenere prestazioni più affidabili, utilizza più [tipi di istanza](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) di dimensioni ridotte in diverse zone di disponibilità per l'hosting dei tuoi endpoint.

**Implementa componenti di inferenza per un’elevata disponibilità.** Oltre ai suggerimenti sopra riportati per i numeri di istanza, per ottenere una disponibilità del 99,95%, assicurati che i componenti di inferenza siano configurati per avere più di due copie. Inoltre, nella tua policy di dimensionamento automatico gestito, imposta su due il numero minimo di istanze.

# Monitoraggio delle best practice sulla sicurezza
<a name="monitor-sec-best-practices"></a>

Monitora l'utilizzo dell' SageMaker IA in relazione alle migliori pratiche di sicurezza utilizzando [AWS Security Hub CSPM](https://docs.aws.amazon.com/securityhub/latest/userguide/what-is-securityhub.html). Security Hub CSPM utilizza i controlli di sicurezza per valutare le configurazioni delle risorse e gli standard di sicurezza per aiutarti a rispettare vari framework di conformità. Per ulteriori informazioni sull'utilizzo di Security Hub CSPM per valutare le risorse SageMaker AI, consulta i [controlli di Amazon SageMaker AI](https://docs.aws.amazon.com/securityhub/latest/userguide/sagemaker-controls.html) nella Guida per l'utente *CSPM AWS di Security Hub*.

# Inferenza in tempo reale a bassa latenza con AWS PrivateLink
<a name="realtime-endpoints-privatelink"></a>

 Amazon SageMaker AI offre una bassa latenza per le inferenze in tempo reale, mantenendo al contempo disponibilità e resilienza elevate utilizzando la distribuzione Multi-AZ. La latenza dell'applicazione è costituita da due componenti principali: la latenza dell'infrastruttura o sovraccarico e la latenza dell'inferenza del modello. La riduzione della latenza di sovraccarico apre nuove possibilità, come l'implementazione di modelli più complessi, precisi e accurati o la suddivisione di applicazioni monolitiche in moduli di microservizi scalabili e gestibili. Puoi ridurre la latenza per le inferenze in tempo reale con l'intelligenza artificiale utilizzando una distribuzione. SageMaker AWS PrivateLink Con AWS PrivateLink, puoi accedere privatamente a tutte le operazioni SageMaker API dal tuo Virtual Private Cloud (VPC) in modo scalabile utilizzando gli endpoint VPC dell'interfaccia. Un endpoint VPC di interfaccia è un'interfaccia di rete elastica nella sottorete con indirizzi IP privati che funge da punto di ingresso per tutte le chiamate API. SageMaker 

Per impostazione predefinita, un endpoint SageMaker AI con 2 o più istanze viene distribuito in almeno 2 zone di AWS disponibilità (AZs) e le istanze in qualsiasi AZ possono elaborare le chiamate. Ciò comporta uno o più "salti" di AZ che contribuiscono alla latenza di sovraccarico. Un'implementazione AWS PrivateLink con l'opzione `privateDNSEnabled` impostata su `true` attenua questo problema grazie al raggiungimento di due obiettivi:
+ Mantiene tutto il traffico di inferenza all'interno del tuo VPC.
+ Mantiene il traffico di chiamata nella stessa AZ del client che lo ha originato quando utilizza Runtime. SageMaker In questo modo si evitano i «salti» tra AZs una riduzione della latenza di sovraccarico e l'altra.

Le seguenti sezioni di questa guida mostrano come ridurre la latenza delle inferenze in tempo reale con la distribuzione di AWS PrivateLink .

**Topics**
+ [Implementa AWS PrivateLink](#deploy-privatelink)
+ [Implementa un endpoint SageMaker AI in un VPC](#deploy-sagemaker-inference-endpoint)
+ [Invoca l'endpoint AI SageMaker](#invoke-sagemaker-inference-endpoint)

## Implementa AWS PrivateLink
<a name="deploy-privatelink"></a>

Per la distribuzione AWS PrivateLink, crea innanzitutto un endpoint di interfaccia per il VPC da cui ti connetti agli endpoint AI. SageMaker Segui i passaggi in [Accedere a un AWS servizio utilizzando un endpoint VPC di interfaccia per creare l'endpoint](https://docs.aws.amazon.com/vpc/latest/privatelink/create-interface-endpoint.html) dell'interfaccia. Durante la creazione dell'endpoint, seleziona le seguenti impostazioni nell'interfaccia della console:
+ Seleziona la casella di controllo **Abilita nome DNS** in **Impostazioni aggiuntive**
+ Seleziona i gruppi di sicurezza appropriati e le sottoreti da utilizzare con gli endpoint AI. SageMaker 

Assicurati inoltre che il VPC abbia i nomi host DNS attivati. Per ulteriori informazioni su come modificare gli attributi DNS per il VPC, consulta la sezione [Visualizzazione e aggiornamento degli attributi DNS per il VPC](https://docs.aws.amazon.com/vpc/latest/userguide/vpc-dns.html#vpc-dns-updating).

## Implementa un endpoint SageMaker AI in un VPC
<a name="deploy-sagemaker-inference-endpoint"></a>

Per ottenere una bassa latenza di overhead, crea un endpoint SageMaker AI utilizzando le stesse sottoreti che hai specificato durante la distribuzione. AWS PrivateLink Queste sottoreti devono corrispondere a quelle AZs dell'applicazione client, come mostrato nel seguente frammento di codice.

```
model_name = '<the-name-of-your-model>'

vpc = 'vpc-0123456789abcdef0'
subnet_a = 'subnet-0123456789abcdef0'
subnet_b = 'subnet-0123456789abcdef1'
security_group = 'sg-0123456789abcdef0'

create_model_response = sagemaker_client.create_model(
    ModelName = model_name,
    ExecutionRoleArn = sagemaker_role,
    PrimaryContainer = {
        'Image': container,
        'ModelDataUrl': model_url
    },
    VpcConfig = {
        'SecurityGroupIds': [security_group],
        'Subnets': [subnet_a, subnet_b],
    },
)
```

Il frammento di codice sopra menzionato presuppone che tu abbia seguito le fasi descritte in [Prima di iniziare](realtime-endpoints-deploy-models.md#deploy-prereqs).

## Invoca l'endpoint AI SageMaker
<a name="invoke-sagemaker-inference-endpoint"></a>

Infine, specifica il client SageMaker Runtime e richiama l'endpoint SageMaker AI come mostrato nel seguente frammento di codice.

```
endpoint_name = '<endpoint-name>'
  
runtime_client = boto3.client('sagemaker-runtime')
response = runtime_client.invoke_endpoint(EndpointName=endpoint_name, 
                                          ContentType='text/csv', 
                                          Body=payload)
```

Per ulteriori informazioni sulla configurazione degli endpoint, consulta [Implementazione di modelli per l’inferenza in tempo reale](realtime-endpoints-deploy-models.md).

# Migra il carico di lavoro di inferenza da x86 a Graviton AWS
<a name="realtime-endpoints-graviton"></a>

 [AWS Graviton](https://aws.amazon.com/ec2/graviton/) è una serie di processori basati su ARM progettati da. AWS Sono più efficienti dal punto di vista energetico rispetto ai processori basati su x86 e offrono un ottimo rapporto prezzo/prestazioni. Amazon SageMaker AI offre istanze basate su Graviton in modo da poter sfruttare questi processori avanzati per le tue esigenze di inferenza. 

 Puoi migrare i carichi di lavoro di inferenza esistenti da istanze basate su x86 a istanze basate su Graviton, utilizzando immagini di container compatibili con ARM o immagini di container multi-architettura. Questa guida presuppone che tu stia utilizzando [immagini di container deep learning AWS](https://github.com/aws/deep-learning-containers/blob/master/available_images.md) o immagini di container compatibili con ARM. Per ulteriori informazioni sulla creazione di immagini personalizzate, consulta [Creazione dell'immagine](https://github.com/aws/deep-learning-containers#building-your-image). 

 Ad alto livello, la migrazione del carico di lavoro di inferenza da istanze basate su x86 a istanze basate su Graviton è un processo in quattro fasi: 

1. Invia le immagini dei container ad Amazon Elastic Container Registry (Amazon ECR), AWS un registro di container gestito.

1. Crea un modello di SageMaker intelligenza artificiale.

1. Crea una configurazione endpoint

1. Crea un endpoint.

 Le seguenti sezioni di questa guida forniscono maggiori dettagli sulle fasi precedenti. Sostituisci *user placeholder text* gli esempi di codice con le tue informazioni. 

**Topics**
+ [Invia immagini di container ad Amazon ECR](#realtime-endpoints-graviton-ecr)
+ [Crea un modello di SageMaker intelligenza artificiale](#realtime-endpoints-graviton-model)
+ [Crea una configurazione dell’endpoint](#realtime-endpoints-graviton-epc)
+ [Crea un endpoint](#realtime-endpoints-graviton-ep)

## Invia immagini di container ad Amazon ECR
<a name="realtime-endpoints-graviton-ecr"></a>

 Puoi inviare le immagini dei contenitori ad Amazon ECR con. AWS CLI Se usi un'immagine compatibile con ARM, verifica che supporti l'architettura ARM: 

```
docker inspect deep-learning-container-uri
```

 La risposta `"Architecture": "arm64"` indica che l'immagine supporta l'architettura ARM. Puoi inviarlo ad Amazon ECR con il comando `docker push`. Per ulteriori informazioni, consulta [Invio di un'immagine Docker](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html). 

 Le immagini di container multi-architettura sono fondamentalmente un insieme di immagini di container che supportano diverse architetture o sistemi operativi, a cui puoi fare riferimento con un nome manifest comune. Se utilizzi immagini di container multi-architettura, oltre a inviare le immagini ad Amazon ECR, dovrai anche inviare un elenco di manifesti ad Amazon ECR. Un elenco di manifesti consente l'inclusione annidata di altri manifesti di immagini, in cui ogni immagine inclusa è specificata dall'architettura, dal sistema operativo e da altri attributi della piattaforma. L'esempio seguente crea un elenco di manifesti e lo invia ad Amazon ECR. 

1. Crea un elenco dei manifesti

   ```
   docker manifest create aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository \
     aws-account-id.dkr.ecr.aws-account-id.amazonaws.com/my-repository:amd64 \
   	aws-account-id.dkr.ecr.aws-account-id.amazonaws.com/my-repository:arm64 \
   ```

1.  Annota l'elenco dei manifesti, in modo che identifichi correttamente quale immagine è destinata a quale architettura. 

   ```
   docker manifest annotate --arch arm64 aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository \
     aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository:arm64
   ```

1. Invia il manifesto.

   ```
   docker manifest push aws-account-id.dkr.ecr.aws-region.amazonaws.com/my-repository
   ```

 Per ulteriori informazioni sulla creazione e l'invio di elenchi di manifesti su Amazon ECR, consulta [Presentazione di immagini container multi-architettura per Amazon ECR](https://aws.amazon.com/blogs/containers/introducing-multi-architecture-container-images-for-amazon-ecr/) e [Inviare un'immagine multi-architettura](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-multi-architecture-image.html). 

## Crea un modello di SageMaker intelligenza artificiale
<a name="realtime-endpoints-graviton-model"></a>

 Crea un modello di SageMaker intelligenza artificiale chiamando l'[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)API. 

```
import boto3
from sagemaker import get_execution_role


aws_region = "aws-region"
sagemaker_client = boto3.client("sagemaker", region_name=aws_region)

role = get_execution_role()

sagemaker_client.create_model(
    ModelName = "model-name",
    PrimaryContainer = {
        "Image": "deep-learning-container-uri",
        "ModelDataUrl": "model-s3-location",
        "Environment": {
            "SAGEMAKER_PROGRAM": "inference.py",
            "SAGEMAKER_SUBMIT_DIRECTORY": "inference-script-s3-location",
            "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
            "SAGEMAKER_REGION": aws_region,
        }
    },
    ExecutionRoleArn = role
)
```

## Crea una configurazione dell’endpoint
<a name="realtime-endpoints-graviton-epc"></a>

 Crea una configurazione endpoint chiamando l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html). Per un elenco di istanze basate su Graviton, seleziona [Istanze ottimizzate per il calcolo](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/compute-optimized-instances.html). 

```
sagemaker_client.create_endpoint_config(
    EndpointConfigName = "endpoint-config-name",
    ProductionVariants = [
        {
            "VariantName": "variant-name",
            "ModelName": "model-name",
            "InitialInstanceCount": 1,
            "InstanceType": "ml.c7g.xlarge", # Graviton-based instance
       }
    ]
)
```

## Crea un endpoint
<a name="realtime-endpoints-graviton-ep"></a>

 Crea un endpoint chiamando l'API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html). 

```
sagemaker_client.create_endpoint(
    EndpointName = "endpoint-name",
    EndpointConfigName = "endpoint-config-name"
)
```

# Risolvi i problemi relativi alle implementazioni dei modelli Amazon SageMaker AI
<a name="deploy-model-troubleshoot"></a>

Se riscontri un problema durante la distribuzione di modelli di machine learning in Amazon SageMaker AI, consulta le seguenti linee guida.

**Topics**
+ [Errori di rilevamento nel conteggio delle CPU attive](#deploy-model-troubleshoot-jvms)
+ [Problemi con la distribuzione di un file model.tar.gz](#deploy-model-troubleshoot-tarballs)
+ [Il container primario non ha superato i controllo dell'integrità del ping](#deploy-model-troubleshoot-ping)

## Errori di rilevamento nel conteggio delle CPU attive
<a name="deploy-model-troubleshoot-jvms"></a>

Se distribuisci un modello di SageMaker intelligenza artificiale con una Java Virtual Machine (JVM) Linux, potresti riscontrare errori di rilevamento che impediscono l'utilizzo delle risorse della CPU disponibili. Questo problema riguarda alcuni JVMs che supportano Java 8 e Java 9 e la maggior parte che supporta Java 10 e Java 11. Questi JVMs implementano un meccanismo che rileva e gestisce il numero di CPU e la memoria massima disponibile quando si esegue un modello in un contenitore Docker e, più in generale, all'interno di `taskset` comandi o gruppi di controllo Linux (cgroup). SageMaker Le implementazioni di intelligenza artificiale sfruttano alcune delle impostazioni utilizzate da JVM per la gestione di queste risorse. Attualmente, ciò fa sì che il contenitore rilevi erroneamente il numero di unità disponibili. CPUs 

SageMaker L'intelligenza artificiale non limita l'accesso CPUs a un'istanza. Tuttavia, la JVM potrebbe rilevare il numero di CPU `1` quando ne CPUs sono disponibili altre per il contenitore. Di conseguenza, la JVM modifica tutte le impostazioni interne come se l'esecuzione dovesse basarsi sulla sola disponibilità di `1` core CPU. Queste impostazioni influenzano il processo di garbage collection, i blocchi, i thread del compilatore e altri processi interni della JVM che impattano negativamente sulla concorrenza, sul throughput e sulla latenza del container.

Per un esempio di rilevamento errato, in un contenitore configurato per l' SageMaker intelligenza artificiale distribuito con una JVM basata su Java8\$1191 e che ne ha quattro disponibili CPUs sull'istanza, esegui il comando seguente per avviare la JVM:

```
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version
```

Questo comando genera l'output seguente:

```
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: determined by OSContainer: 1
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
```

Molte delle JVMs persone interessate da questo problema hanno la possibilità di disabilitare questo comportamento e ristabilire l'accesso completo a tutti i componenti dell'istanza. CPUs Disabilita il comportamento indesiderato e stabilisci l'accesso completo a tutte le istanze CPUs includendo il `-XX:-UseContainerSupport` parametro all'avvio delle applicazioni Java. Ad esempio, esegui il comando `java` per avviare la JVM come segue:

```
java -XX:-UseContainerSupport -XX:+UnlockDiagnosticVMOptions -XX:+PrintActiveCpus -version
```

Questo comando genera l'output seguente:

```
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: sched_getaffinity processor count: 4
active_processor_count: sched_getaffinity processor count: 4
openjdk version "1.8.0_191"
OpenJDK Runtime Environment (build 1.8.0_191-8u191-b12-2ubuntu0.16.04.1-b12)
OpenJDK 64-Bit Server VM (build 25.191-b12, mixed mode)
```

Controlla se la JVM utilizzata nel container supporta il parametro `-XX:-UseContainerSupport`. In caso affermativo, passa sempre il parametro quando avvii la JVM. Ciò fornisce l'accesso a tutte le istanze CPUs presenti. 

Potresti riscontrare questo problema anche quando utilizzi indirettamente una JVM in contenitori AI. SageMaker Ad esempio, quando si utilizza una JVM per supportare SparkML Scala. Il parametro `-XX:-UseContainerSupport` influenza anche l'output restituito dall'API Java `Runtime.getRuntime().availableProcessors()```. 

## Problemi con la distribuzione di un file model.tar.gz
<a name="deploy-model-troubleshoot-tarballs"></a>

Quando si distribuisce un modello utilizzando un file `model.tar.gz`, l'archivio del modello non deve includere alcun collegamento simbolico. I collegamenti simbolici impediscono la creazione del modello. Inoltre, si consiglia di non includere file non necessari nel tarball.

## Il container primario non ha superato i controllo dell'integrità del ping
<a name="deploy-model-troubleshoot-ping"></a>

 Se il container primario non esegue i controlli di integrità del ping con il seguente messaggio di errore, indica che c'è un problema con il container o lo script: 

```
The primary container for production variant beta did not pass the ping health check. Please check CloudWatch Logs logs for this endpoint.
```

 Per risolvere questo problema, dovresti controllare i log dei CloudWatch log dell'endpoint in questione per vedere se ci sono errori o problemi che impediscono al contenitore di rispondere a o. `/ping` `/invocations` I log possono fornire un messaggio di errore che potrebbe indicare il problema. Dopo aver identificato l'errore e il motivo dell'errore, è necessario risolverlo. 

 È inoltre consigliabile testare la distribuzione del modello a livello locale prima di creare un endpoint. 
+  Utilizza la modalità locale nell' SageMaker SDK per imitare l'ambiente ospitato distribuendo il modello su un endpoint locale. Per ulteriori informazioni, consulta [Modalità locale](https://sagemaker.readthedocs.io/en/stable/overview.html#local-mode). 
+  Usa i comandi vanilla docker per testare la risposta del container a /ping e /invocations. Per ulteriori informazioni, consulta [local\$1test](https://github.com/aws/amazon-sagemaker-examples/tree/main/advanced_functionality/scikit_bring_your_own/container/local_test). 

# Best practice per l'ottimizzazione dei costi di inferenza
<a name="inference-cost-optimization"></a>

Il seguente contenuto fornisce tecniche e considerazioni per ottimizzare il costo degli endpoint. È possibile utilizzare questi suggerimenti per ottimizzare i costi sia per gli endpoint nuovi che per quelli esistenti.

## Best practice
<a name="inference-cost-optimization-list"></a>

Per ottimizzare i costi di SageMaker AI Inference, segui queste best practice.

### Scegli l'opzione di inferenza migliore per il processo.
<a name="collapsible-1"></a>

SageMaker L'intelligenza artificiale offre 4 diverse opzioni di inferenza per fornire la migliore opzione di inferenza per il lavoro. Potresti essere in grado di risparmiare sui costi scegliendo l'opzione di inferenza più adatta al tuo carico di lavoro.
+ Utilizza l'[inferenza in tempo reale](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints.html) per carichi di lavoro a bassa latenza con modelli di traffico prevedibili che devono avere caratteristiche di latenza coerenti e essere sempre disponibili. Si paga per l'utilizzo dell'istanza.
+ Utilizza l'[inferenza serverless](https://docs.aws.amazon.com/sagemaker/latest/dg/serverless-endpoints.html) per carichi di lavoro sincroni con un modello di traffico intenso e in grado di accettare variazioni nella latenza p99. L'inferenza serverless si dimensiona automaticamente per soddisfare il traffico del carico di lavoro, in modo da non pagare per le risorse inattive. Si paga solo per la durata della richiesta di inferenza. È possibile utilizzare lo stesso modello e gli stessi container con inferenza real-time e serverless, in modo da poter passare da una modalità all'altra se le esigenze cambiano.
+ Utilizza l'[inferenza asincrona](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference.html) per carichi di lavoro asincroni che elaborano fino a 1 GB di dati (come corpus di testo, immagini, video e audio) non sensibili alla latenza e ai costi. Con l'inferenza asincrona, puoi controllare i costi specificando un numero fisso di istanze per la velocità di elaborazione ottimale anziché effettuare il provisioning per il picco. Puoi anche ridurle a zero per risparmiare costi aggiuntivi.
+ Utilizza l'[inferenza in batch](https://docs.aws.amazon.com/sagemaker/latest/dg/batch-transform.html) per i carichi di lavoro per i quali è necessaria l'inferenza per un ampio set di dati per i processi che avvengono offline (ovvero, non è necessario un endpoint persistente). Si paga l'istanza per la durata del processo di inferenza batch.

### Partecipa a un SageMaker AI Savings Plan.
<a name="collapsible-2"></a>
+ Se disponi di un livello di utilizzo coerente per tutti i servizi di SageMaker intelligenza artificiale, puoi optare per un SageMaker AI Savings Plan per ridurre i costi fino al 64%.
+ [Amazon SageMaker AI Savings Plans](https://aws.amazon.com/savingsplans/ml-pricing/) offre un modello di prezzo flessibile per Amazon SageMaker AI, in cambio dell'impegno a garantire una quantità di utilizzo costante (misurata in \$1/ora) per un periodo di uno o tre anni. Questi piani si applicano automaticamente agli utilizzi idonei delle istanze SageMaker AI ML, tra cui SageMaker Studio Classic Notebook, SageMaker On-Demand Notebook, SageMaker Processing, SageMaker Data Wrangler, SageMaker Training, SageMaker Real-Time Inference e SageMaker Batch Transform, indipendentemente dalla famiglia, dalle dimensioni o dalla regione dell'istanza. Ad esempio, è possibile modificare in qualsiasi momento l'utilizzo da un'istanza CPU ml.c5.xlarge in esecuzione negli Stati Uniti orientali (Ohio) a un'istanza ML.INF1 negli Stati Uniti occidentali (Oregon) per i carichi di lavoro di inferenza e continuare automaticamente a pagare il prezzo Savings Plans.

### Ottimizzate il modello per farlo funzionare meglio.
<a name="collapsible-3"></a>
+ I modelli non ottimizzati possono portare a tempi di esecuzione più lunghi e utilizzare più risorse. Per migliorare le prestazioni, si può scegliere di utilizzare istanze più numerose o più grandi, ma questo comporta costi maggiori.
+ Ottimizzando i vostri modelli per renderli più performanti, potreste essere in grado di ridurre i costi utilizzando meno istanze o istanze più piccole, mantenendo le stesse o migliori caratteristiche di performance. Puoi usare [SageMaker Neo](https://aws.amazon.com/sagemaker/neo/) con SageMaker AI Inference per ottimizzare automaticamente i modelli. Per ulteriori dettagli ed esempi, vedere [Ottimizzazione delle prestazioni dei modelli con SageMaker Neo](neo.md).

### Utilizza il tipo e la dimensione di istanza più ottimali per l'inferenza in tempo reale.
<a name="collapsible-4"></a>
+ SageMaker Inference ha oltre 70 tipi e dimensioni di istanze che possono essere utilizzati per implementare modelli di machine learning, inclusi i chipset AWS Inferentia e Graviton ottimizzati per il machine learning. La scelta dell'istanza giusta per il tuo modello ti aiuta ad avere l'istanza più performante al costo più basso per i modelli.
+ Utilizzando il [Suggeritore di inferenza](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-recommender.html), è possibile confrontare rapidamente diverse istanze per comprendere le prestazioni del modello e i costi. Con questi risultati, puoi scegliere l'istanza da implementare con il miglior ritorno sull'investimento.

### Migliora l'efficienza e i costi combinando più endpoint in un unico endpoint per l'inferenza in tempo reale.
<a name="collapsible-5"></a>
+ I costi possono aumentare rapidamente quando si implementano più endpoint, soprattutto se gli endpoint non utilizzano appieno le istanze sottostanti. Per capire se l'istanza è sottoutilizzata, controlla i parametri di utilizzo (CPU, GPU, ecc.) in Amazon per le tue istanze. CloudWatch Se disponi di più di uno di questi endpoint, puoi combinare i modelli o i container su questi più endpoint in un unico endpoint.
+ Utilizzando [endpoint multi-modello](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) (MME) o [endpoint multi-container](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html) (MCE), puoi implementare più modelli o container ML in un unico endpoint per condividere l'istanza tra più modelli o container e migliorare il ritorno sull'investimento. Per ulteriori informazioni, consulta l'articolo [Risparmia sui costi di inferenza utilizzando gli endpoint multimodello di Amazon SageMaker AI](https://aws.amazon.com/blogs/machine-learning/save-on-inference-costs-by-using-amazon-sagemaker-multi-model-endpoints/) o [Implementa più contenitori di servizio su una singola istanza utilizzando gli endpoint multi-container Amazon SageMaker AI sul](https://aws.amazon.com/blogs/machine-learning/deploy-multiple-serving-containers-on-a-single-instance-using-amazon-sagemaker-multi-container-endpoints/) blog Machine Learning. AWS 

### Configura il dimensionamento automatico in base ai requisiti del carico di lavoro dell'inferenza asincrona e in real-time.
<a name="collapsible-6"></a>
+ Senza il dimensionamento automatico, è necessario prevedere il traffico di picco o la non disponibilità del modello di rischio. A meno che il traffico verso il modello non sia costante per tutto il giorno, ci sarà un eccesso di capacità inutilizzata. Ciò comporta un basso utilizzo e uno spreco di risorse.
+ [L'autoscaling](https://docs.aws.amazon.com/sagemaker/latest/dg/endpoint-auto-scaling.html) è una out-of-the-box funzionalità che monitora i carichi di lavoro e regola dinamicamente la capacità per mantenere prestazioni stabili e prevedibili al minor costo possibile. Quando il carico di lavoro aumenta, Auto Scaling offre più istanze online. Quando il carico di lavoro diminuisce, il dimensionamento automatico rimuove le istanze non necessarie, aiutandoti a ridurre i costi di elaborazione. Per ulteriori informazioni, consulta [Configurazione degli endpoint di inferenza con scalabilità automatica in Amazon AI SageMaker sul](https://aws.amazon.com/blogs/machine-learning/configuring-autoscaling-inference-endpoints-in-amazon-sagemaker/) blog Machine Learning. AWS 

# Best practice per ridurre al minimo le interruzioni durante gli aggiornamenti dei driver della GPU
<a name="inference-gpu-drivers"></a>

SageMaker AI Model Deployment aggiorna nel tempo i driver GPU sulle istanze ML per le opzioni di inferenza in tempo reale, Batch e Asynchronous Inference per fornire ai clienti l'accesso ai miglioramenti dei fornitori di driver. Di seguito puoi vedere la versione della GPU supportata per ciascuna opzione di Inferenza. Diverse versioni dei driver possono modificare il modo in cui il modello interagisce con. GPUs Di seguito sono riportate alcune strategie per aiutarti a capire come funziona l'applicazione con le diverse versioni dei driver. 

## Versioni correnti e famiglie di istanze supportate
<a name="inference-gpu-drivers-versions"></a>

Amazon SageMaker AI Inference supporta i seguenti driver e famiglie di istanze:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/inference-gpu-drivers.html)

## Risolvi i problemi del container del modello con funzionalità GPU
<a name="inference-gpu-drivers-troubleshoot"></a>

Se riscontri un problema durante l'esecuzione del carico di lavoro della GPU, consulta le seguenti indicazioni:

### Errore di rilevamento della scheda GPU o errore di inizializzazione NVIDIA
<a name="collapsible-section-0"></a>

Esegui il comando `nvidia-smi` (NVIDIA System Management Interface) dall'interno del container Docker. Se l'interfaccia di gestione del sistema NVIDIA rileva un errore di rilevamento della GPU o un errore di inizializzazione NVIDIA, restituirà il seguente messaggio di errore:

```
Failed to initialize NVML: Driver/library version mismatch
```

In base al vostro caso d'uso, seguite le seguenti best practice per risolvere l'errore:
+ Segui le raccomandazioni sulle best practice descritte nel menu a discesa [Se porti i tuoi container di modello (BYO)](#collapsible-byoc).
+ Segui le raccomandazioni sulle best practice descritte nel menu a discesa [Se utilizzi un livello di compatibilità CUDA](#collapsible-cuda-compat).

Per ulteriori informazioni, consulta la [pagina Interfaccia di gestione del sistema NVIDIA](https://developer.nvidia.com/nvidia-system-management-interface) sul sito Web di NVIDIA.

### `CannotStartContainerError`
<a name="collapsible-section-cannot-start-container"></a>

 Se l'istanza GPU utilizza versioni di driver NVIDIA non compatibili con la versione CUDA nel container Docker, la distribuzione di un endpoint avrà esito negativo e verrà visualizzato il seguente messaggio di errore: 

```
 Failure reason CannotStartContainerError. Please ensure the model container for variant <variant_name> starts correctly when invoked with 'docker run <image> serve'
```

In base al vostro caso d'uso, seguite le seguenti best practice per risolvere l'errore:
+ Segui le raccomandazioni sulle best practice descritte nel menu a discesa [Il driver da cui dipende il mio container è superiore alla versione presente sulle istanze della GPU di ML](#collapsible-driver-dependency-higher).
+ Segui le raccomandazioni sulle best practice descritte nel menu a discesa [Se utilizzi un livello di compatibilità CUDA](#collapsible-cuda-compat).

## Best practice per lavorare con versioni non corrispondenti dei driver
<a name="inference-gpu-drivers-cuda-toolkit-updates"></a>

Di seguito vengono fornite informazioni su come aggiornare il driver della GPU:

### Il driver da cui dipende il mio container è inferiore alla versione presente sull'istanza della GPU di ML
<a name="collapsible-driver-dependency-lower"></a>

Nessuna operazione richiesta. NVIDIA offre la compatibilità con le versioni precedenti.

### Il driver da cui dipende il mio container è superiore alla versione presente sulle istanze della GPU di ML
<a name="collapsible-driver-dependency-higher"></a>

Se si tratta di una differenza di versione minore, nessuna operazione richiesta. NVIDIA offre la compatibilità con le versioni minori.

Se si tratta di una differenza di versione importante, sarà necessario installare il pacchetto di compatibilità CUDA. Fai riferimento al [pacchetto di compatibilità CUDA](https://docs.nvidia.com/deploy/cuda-compatibility/index.html) nella documentazione NVIDIA.

**Importante**  
Il pacchetto di compatibilità CUDA non è compatibilità con le versioni precedenti, quindi deve essere disabilitato se la versione del driver sull'istanza è superiore alla versione del pacchetto di compatibilità CUDA

### Se porti i tuoi container di modello (BYO)
<a name="collapsible-byoc"></a>

Assicurati che nell'immagine non siano inclusi pacchetti di driver NVIDIA, il che potrebbe causare conflitti con la versione del driver NVIDIA sull'host.

### Se utilizzi un livello di compatibilità CUDA
<a name="collapsible-cuda-compat"></a>

Per verificare se la versione del driver Nvidia della piattaforma supporta la versione del pacchetto di compatibilità CUDA installata nel container del modello, consulta la [Documentazione CUDA](https://docs.nvidia.com/deploy/cuda-compatibility/index.html#use-the-right-compat-package). Se la versione del driver Nvidia della piattaforma non supporta la versione del pacchetto di compatibilità CUDA, puoi disabilitare o rimuovere il pacchetto di compatibilità CUDA dall'immagine del container del modello. Se la versione delle libs di compatibilità CUDA è supportata dall'ultima versione del driver Nvidia, ti suggeriamo di abilitare il pacchetto di compatibilità CUDA in base alla versione del driver Nvidia rilevata per la compatibilità futura, aggiungendo lo snippet di codice sottostante nello script di shell di avvio del container (nello script `ENTRYPOINT`).

Lo script dimostra come cambiare dinamicamente l'uso del pacchetto di compatibilità CUDA in base alla versione del driver Nvidia rilevata sull'host distribuito per il container del modello. Quando viene SageMaker rilasciata una versione più recente del driver Nvidia, il CUDA Compatibility Package installato può essere disattivato automaticamente se l'applicazione CUDA è supportata nativamente sul nuovo driver.

```
#!/bin/bash

verlt() {
    [ "$1" = "$2" ] && return 1 || [ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
}

if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then
    CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 | cut -d'.' -f 3-)
    echo "CUDA compat package should be installed for NVIDIA driver smaller than ${CUDA_COMPAT_MAX_DRIVER_VERSION}"
    NVIDIA_DRIVER_VERSION=$(sed -n 's/^NVRM.*Kernel Module *\([0-9.]*\).*$/\1/p' /proc/driver/nvidia/version 2>/dev/null || true)
    echo "Current installed NVIDIA driver version is ${NVIDIA_DRIVER_VERSION}"
    if verlt $NVIDIA_DRIVER_VERSION $CUDA_COMPAT_MAX_DRIVER_VERSION; then
        echo "Adding CUDA compat to LD_LIBRARY_PATH"
        export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH
        echo $LD_LIBRARY_PATH
    else
        echo "Skipping CUDA compat setup as newer NVIDIA driver is installed"
    fi
else
    echo "Skipping CUDA compat setup as package not found"
fi
```

# Le migliori pratiche per la sicurezza e l'integrità degli endpoint con Amazon SageMaker AI
<a name="best-practice-endpoint-security"></a>

Per risolvere i problemi di sicurezza più recenti, Amazon SageMaker AI applica automaticamente le patch agli endpoint con il software più recente e sicuro. Tuttavia, se modifichi erroneamente le dipendenze degli endpoint, Amazon SageMaker AI non può applicare automaticamente patch agli endpoint o sostituire le istanze non integre. Per garantire che i tuoi endpoint rimangano idonei agli aggiornamenti automatici, applica le seguenti best practice.

## Non eliminare le risorse mentre gli endpoint le utilizzano
<a name="dont-delete-resources-in-use"></a>

Evita di eliminare le seguenti risorse se disponi di endpoint esistenti che le utilizzano:
+ La definizione del modello che crei con l'[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html)azione nell' SageMaker API Amazon.
+ Tutti gli artefatti del modello specificati per il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-ModelDataUrl](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-ModelDataUrl)
+ Il ruolo e le autorizzazioni IAM specificati per il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-ExecutionRoleArn](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-ExecutionRoleArn).
**Promemoria**  
Nella definizione del modello utilizzata dal tuo endpoint, assicurati che il ruolo IAM che hai specificato disponga delle autorizzazioni corrette. Per ulteriori informazioni sulle autorizzazioni richieste per gli endpoint Amazon SageMaker AI, consulta. [CreateModel API: autorizzazioni per i ruoli di esecuzione](sagemaker-roles.md#sagemaker-roles-createmodel-perms)
+ Le immagini di inferenza specificate per il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-Image](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ContainerDefinition.html#sagemaker-Type-ContainerDefinition-Image), se utilizzi il tuo codice di inferenza.
**Promemoria**  
Se utilizzi la funzionalità di registro privato, assicurati che Amazon SageMaker AI possa accedere al registro privato finché utilizzi l'endpoint.
+ Le sottoreti VPC e i gruppi di sicurezza Amazon specificati per il parametro [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-VpcConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-VpcConfig).
+ La configurazione degli endpoint che crei con l'[CreateEndpointConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpointConfig.html)azione nell' SageMaker API Amazon.
+ Qualsiasi chiave KMS o bucket Amazon S3 specificato nella configurazione dell'endpoint.
**Promemoria**  
Assicurati di non disabilitare queste chiavi KMS.

## Per aggiornare gli endpoint segui queste procedure
<a name="procedures-to-update-endpoint"></a>

Quando aggiorni gli endpoint Amazon SageMaker AI, utilizza una delle seguenti procedure che si applicano alle tue esigenze.

**Per aggiornare le impostazioni di definizione del modello**

1. Crea una nuova definizione del modello con le impostazioni aggiornate utilizzando l' CreateModel azione nell' SageMaker API Amazon.

1. Crea una nuova configurazione dell'endpoint che utilizza la nuova definizione del modello. A tale scopo, utilizza l' CreateEndpointConfig azione nell' SageMaker API Amazon.

1. Aggiorna il tuo endpoint con la nuova configurazione dell'endpoint in modo che le impostazioni di definizione del modello aggiornate abbiano effetto.

1. (Facoltativo) Elimina la vecchia configurazione dell'endpoint se non la usi con altri endpoint. Puoi anche eliminare le risorse specificate nella definizione del modello se non le utilizzi con altri endpoint. Queste risorse includono artefatti del modello in Amazon S3 e immagini di inferenza.

**Come aggiornare la configurazione dell'endpoint**

1. Crea una nuova configurazione dell'endpoint con le impostazioni aggiornate.

1. Aggiorna il tuo endpoint con la nuova configurazione in modo che gli aggiornamenti abbiano effetto.

1. (Facoltativo) Elimina la vecchia configurazione dell'endpoint se non la usi con altri endpoint. Puoi anche eliminare le risorse specificate nella definizione del modello se non le utilizzi con altri endpoint. Queste risorse includono artefatti del modello in Amazon S3 e immagini di inferenza.

Ogni volta che si crea una nuova definizione del modello o una configurazione di endpoint, si consiglia di utilizzare un nome univoco. Se desideri aggiornare queste risorse e mantenerne i nomi originali, utilizza le seguenti procedure.

**Per aggiornare le impostazioni del modello e mantenere il nome originale del modello**

1. Eliminare la definizione del modello esistente. A questo punto, qualsiasi endpoint che utilizza il modello è danneggiato, ma puoi risolvere il problema nelle fasi seguenti.

1. Crea nuovamente la definizione del modello con le impostazioni aggiornate e utilizza lo stesso nome del modello.

1. Crea una nuova configurazione dell'endpoint che utilizza la definizione aggiornata del modello.

1. Aggiorna il tuo endpoint con la configurazione aggiornata in modo che gli aggiornamenti abbiano effetto.

**Per aggiornare la configurazione dell'endpoint e mantenere il nome di configurazione originale**

1. Elimina la configurazione dell'endpoint esistente.

1. Crea una nuova configurazione dell'endpoint con le impostazioni aggiornate e utilizza il nome originale.

1. Aggiorna il tuo endpoint con la nuova configurazione in modo che gli aggiornamenti abbiano effetto.

# Aggiornamento dei container di inferenza per renderli conformi a NVIDIA Container Toolkit
<a name="container-nvidia-compliance"></a>

A partire dalle versioni 1.17.4 e successive, NVIDIA Container Toolkit non monta più automaticamente le librerie di compatibilità CUDA. Questo cambiamento di comportamento potrebbe influire sui carichi di lavoro di inferenza SageMaker AI. Gli endpoint di SageMaker intelligenza artificiale e i processi di trasformazione in batch potrebbero utilizzare contenitori incompatibili con le versioni più recenti di NVIDIA Container Toolkit. Per garantire che i carichi di lavoro soddisfino i requisiti più recenti, potrebbe essere necessario aggiornare gli endpoint o configurare i processi di trasformazione in batch.

## Aggiornamento SageMaker degli endpoint AI per motivi di conformità
<a name="endpoint-compliance"></a>

Ti consigliamo di aggiornare gli endpoint SageMaker AI esistenti o di crearne di nuovi che supportino il comportamento predefinito più recente.

Per garantire che il tuo endpoint sia compatibile con le versioni più recenti di NVIDIA Container Toolkit, segui queste fasi:

1. Aggiorna la modalità di configurazione delle librerie di compatibilità CUDA se utilizzi il tuo container.

1. Specifica un’inferenza Amazon Machine Image (AMI) che supporti il comportamento più recente di NVIDIA Container Toolkit. Si specifica un AMI quando si aggiorna un endpoint esistente o se ne crea uno nuovo.

### Aggiornamento della configurazione di compatibilità CUDA se utilizzi il tuo container
<a name="cuda-compatibility"></a>

Le librerie di compatibilità CUDA consentono la compatibilità con le versioni successive. Questa compatibilità si applica a tutte le versioni del toolkit CUDA più recenti del driver NVIDIA fornito dall'istanza AI. SageMaker 

È necessario abilitare le librerie di compatibilità CUDA solo quando il driver NVIDIA utilizzato dall'istanza SageMaker AI ha una versione precedente al toolkit CUDA nel contenitore del modello. Se il container del modello non richiede la compatibilità CUDA, puoi ignorare questa fase. Ad esempio, puoi saltare questo passaggio se non intendi utilizzare un toolkit CUDA più recente di quelli forniti dalle istanze AI. SageMaker 

Grazie alle modifiche introdotte nella versione 1.17.4 di NVIDIA Container Toolkit, è possibile abilitare esplicitamente le librerie di compatibilità CUDA, se necessario, aggiungendole al container `LD_LIBRARY_PATH`.

Ti consigliamo di abilitare la compatibilità CUDA in base alla versione del driver NVIDIA rilevata. Per abilitarla, aggiungi il frammento di codice riportato di seguito allo script della shell di avvio del container. Aggiungi questo codice allo script `ENTRYPOINT`.

Il seguente script dimostra come cambiare dinamicamente l’utilizzo del pacchetto di compatibilità CUDA in base alla versione del driver NVIDIA rilevata nell’host implementato per il container del modello.

```
#!/bin/bash

verlt() {
    [ "$1" = "$2" ] && return 1 || [ "$1" = "$(echo -e "$1\n$2" | sort -V | head -n1)" ]
}

if [ -f /usr/local/cuda/compat/libcuda.so.1 ]; then
    CUDA_COMPAT_MAX_DRIVER_VERSION=$(readlink /usr/local/cuda/compat/libcuda.so.1 | cut -d'.' -f 3-)
    echo "CUDA compat package should be installed for NVIDIA driver smaller than ${CUDA_COMPAT_MAX_DRIVER_VERSION}"
    NVIDIA_DRIVER_VERSION=$(sed -n 's/^NVRM.*Kernel Module *\([0-9.]*\).*$/\1/p' /proc/driver/nvidia/version 2>/dev/null || true)
    echo "Current installed NVIDIA driver version is ${NVIDIA_DRIVER_VERSION}"
    if verlt $NVIDIA_DRIVER_VERSION $CUDA_COMPAT_MAX_DRIVER_VERSION; then
        echo "Adding CUDA compat to LD_LIBRARY_PATH"
        export LD_LIBRARY_PATH=/usr/local/cuda/compat:$LD_LIBRARY_PATH
        echo $LD_LIBRARY_PATH
    else
        echo "Skipping CUDA compat setup as newer NVIDIA driver is installed"
    fi
else
    echo "Skipping CUDA compat setup as package not found"
fi
```

### Specifica di un’AMI di inferenza conforme a NVIDIA Container Toolkit
<a name="specify-inference-ami"></a>

Nel `InferenceAmiVersion` parametro del tipo di `ProductionVariant` dati, puoi selezionare l'AMI per un endpoint SageMaker AI. Ciascuna delle immagini supportate AMIs è un'immagine preconfigurata. Ogni immagine è configurata AWS con un set di versioni di software e driver.

Per impostazione predefinita, l' SageMaker IA AMIs segue il comportamento precedente. Montano automaticamente le librerie di compatibilità CUDA nel container. Per fare in modo che un endpoint utilizzi il nuovo comportamento, è necessario specificare una versione dell’AMI di inferenza configurata per il nuovo comportamento.

Le seguenti versioni dell’AMI di inferenza attualmente seguono il nuovo comportamento. Non montano automaticamente le librerie di compatibilità CUDA.

al2- -2-1 ami-sagemaker-inference-gpu  
+ Driver NVIDIA versione: 535.54.03
+ Versione CUDA: 12.2

al2- -3-1 ami-sagemaker-inference-gpu  
+ Driver NVIDIA versione: 550.144.01
+ Versione CUDA: 12.4

### Aggiornamento di un endpoint esistente
<a name="update-existing-endpoint"></a>

Utilizza il seguente esempio per aggiornare un endpoint esistente. L’esempio utilizza una versione dell’AMI di inferenza che disabilita il montaggio automatico delle librerie di compatibilità CUDA.

```
ENDPOINT_NAME="<endpoint name>"
INFERENCE_AMI_VERSION="al2-ami-sagemaker-inference-gpu-3-1"

# Obtaining current endpoint configuration
CURRENT_ENDPOINT_CFG_NAME=$(aws sagemaker describe-endpoint --endpoint-name "$ENDPOINT_NAME" --query "EndpointConfigName" --output text)
NEW_ENDPOINT_CFG_NAME="${CURRENT_ENDPOINT_CFG_NAME}new"

# Copying Endpoint Configuration with AMI version specified
aws sagemaker describe-endpoint-config \
    --endpoint-config-name ${CURRENT_ENDPOINT_CFG_NAME} \
    --output json | \
jq "del(.EndpointConfigArn, .CreationTime) | . + {
    EndpointConfigName: \"${NEW_ENDPOINT_CFG_NAME}\",
    ProductionVariants: (.ProductionVariants | map(.InferenceAmiVersion = \"${INFERENCE_AMI_VERSION}\"))
}" > /tmp/new_endpoint_config.json

# Make sure all fields in the new endpoint config look as expected
cat /tmp/new_endpoint_config.json

# Creating new endpoint config
aws sagemaker create-endpoint-config \
   --cli-input-json file:///tmp/new_endpoint_config.json
    
# Updating the endpoint
aws sagemaker update-endpoint \
    --endpoint-name "$ENDPOINT_NAME" \
    --endpoint-config-name "$NEW_ENDPOINT_CFG_NAME" \
    --retain-all-variant-properties
```

### Creazione di un nuovo endpoint
<a name="create-new-endpoint"></a>

Utilizza il seguente esempio per creare un nuovo endpoint. L’esempio utilizza una versione dell’AMI di inferenza che disabilita il montaggio automatico delle librerie di compatibilità CUDA.

```
INFERENCE_AMI_VERSION="al2-ami-sagemaker-inference-gpu-3-1"

aws sagemakercreate-endpoint-config \
 --endpoint-config-name "<endpoint_config>" \
 --production-variants '[{ \
    ....
    "InferenceAmiVersion":  "${INFERENCE_AMI_VERSION}", \
    ...
    "}]'

aws sagemaker create-endpoint \
--endpoint-name "<endpoint_name>" \
--endpoint-config-name "<endpoint_config>"
```

## Esecuzione di processi di trasformazione in batch conformi
<a name="batch-compliance"></a>

*Trasformazione in batch* è l’opzione di inferenza più adatta per le richieste di elaborazione offline di grandi quantità di dati. Per creare processi di trasformazione in batch, utilizza l’operazione API `CreateTransformJob`. Per ulteriori informazioni, consulta [Trasformazione in batch per l'inferenza con Amazon SageMaker AI](batch-transform.md).

Il comportamento modificato di NVIDIA Container Toolkit influisce sui processi di trasformazione in batch. Per eseguire una trasformazione in batch conforme ai requisiti di NVIDIA Container Toolkit, procedi come segue:

1. Se desideri eseguire la trasformazione in batch con un modello per il quale hai utilizzato il tuo container, innanzitutto aggiorna il container per la compatibilità CUDA. Per aggiornarlo, segui la procedura riportata in [Aggiornamento della configurazione di compatibilità CUDA se utilizzi il tuo container](#cuda-compatibility).

1. Utilizza l’azione API `CreateTransformJob` per creare il processo di trasformazione in batch. Nella richiesta, imposta la variabile di ambiente `SAGEMAKER_CUDA_COMPAT_DISABLED` su `true`. Questo parametro indica al container di non montare automaticamente le librerie di compatibilità CUDA.

   Ad esempio, quando si crea un processo di trasformazione in batch utilizzando il AWS CLI, si imposta la variabile di ambiente con il parametro: `--environment`

   ```
   aws sagemaker create-transform-job \
       --environment '{"SAGEMAKER_CUDA_COMPAT_DISABLED": "true"}'\
       . . .
   ```

# Funzionalità supportate
<a name="model-deploy-feature-matrix"></a>

 Amazon SageMaker AI offre le seguenti quattro opzioni per implementare modelli per l'inferenza. 
+  Inferenza in tempo reale per carichi di lavoro di inferenza con requisiti in tempo reale, interattivi e a bassa latenza. 
+  Trasformazione in batch per inferenze offline con set di dati di grandi dimensioni. 
+  Inferenza asincrona per l' near-real-timeinferenza con input di grandi dimensioni che richiedono tempi di preelaborazione più lunghi. 
+  Inferenza senza server per carichi di lavoro di inferenza che presentano periodi di inattività tra picchi di traffico. 

 La tabella seguente riassume le funzionalità principali della piattaforma supportate da ciascuna opzione di inferenza. Non mostra le funzionalità che possono essere fornite da framework, container Docker personalizzati o tramite il concatenamento di diversi servizi AWS . 


| Funzionalità | [Inferenza in tempo reale](realtime-endpoints.md) | [Trasformazione in batch](batch-transform.md) | [Inferenza asincrona](async-inference.md) | [Inferenza serverless](serverless-endpoints.md) | [Container Docker](docker-containers.md) | 
| --- | --- | --- | --- | --- | --- | 
| [Supporto per il dimensionamento automatico](endpoint-auto-scaling.md) | ✓ | N/D | ✓ | ✓ | N/D | 
| Supporto per GPU | ✓ 1 | ✓ 1 | ✓ 1 |  | [1P](common-info-all-im-models.md), precostruito, BYOC | 
| Modello singolo | ✓ | ✓ | ✓ | ✓ | N/D | 
| [Endpoint multi-modello](multi-model-endpoints.md) | ✓ |  |  |  | K-nn, Linear Learner, RCF, Apache XGBoost, scikit-learn 2 TensorFlow MXNet PyTorch | 
| [Endpoint multi-container](multi-container-endpoints.md) | ✓ |  |  |  | 1P, precostruito, Extend precostruito, BYOC | 
| [Pipeline di inferenza seriale](inference-pipelines.md) | ✓ | ✓ |  |  | 1P, precostruito, Extend precostruito, BYOC | 
| [Suggeritore di inferenza](inference-recommender.md) | ✓ |  |  |  | 1P, precostruito, Extend precostruito, BYOC | 
| Supporto per Collegamento privato | ✓ | ✓ | ✓ |  | N/D | 
| [Supporto capture/Model per il monitoraggio dei dati](model-monitor.md) | ✓ | ✓ |  |  | N/D | 
| [DLCs supportato](https://github.com/aws/deep-learning-containers/blob/master/available_images.md) | 1P, precostruito, Extend precostruito, BYOC | [1P](common-info-all-im-models.md), precostruito, Extend precostruito, BYOC | 1P, precostruito, Extend precostruito, BYOC | 1P, precostruito, Extend precostruito, BYOC | N/D | 
| Protocolli supportati | HTTP(S) | HTTP(S) | HTTP(S) | HTTP(S) | N/D | 
| Dimensione payload | < 6 MB | ≤ 100 MB | ≤ 1 GB | ≤ 4 MB |  | 
| Codifica HTTP a blocchi | Dipende dal framework, 1P non supportato | N/D | Dipende dal framework, 1P non supportato | Dipende dal framework, 1P non supportato | N/D | 
| Timeout della richiesta | < 60 secondi | Giorni | < 1 ora | < 60 secondi | N/D | 
| [Barriere di distribuzione: implementazioni blue/green ](deployment-guardrails.md) | ✓ | N/D | ✓ |  | N/D | 
| [Guardrail per l'implementazione: implementazioni in sequenza](deployment-guardrails.md) | ✓ | N/D | ✓ |  | N/D | 
| [Shadow testing](shadow-tests.md) | ✓ |  |  |  | N/D | 
| Scalabilità a zero |  | N/D | ✓ | ✓ | N/D | 
| Supporto per pacchetti modello Market Place | ✓ | ✓ | ✓ |  | N/D | 
| Supporto cloud privato virtuale | ✓ | ✓ | ✓ |  | N/D | 
| Supporto di più varianti di produzione | ✓ |  |  |  | N/D | 
| Isolamento della rete | ✓ |  | ✓ |  | N/D | 
| [Supporto al servizio parallelo del modello](model-parallel-intro.md) | ✓ 3 | ✓ | ✓ 3 |  | ✓ 3 | 
| Crittografia dei volumi | ✓ | ✓ | ✓ | ✓ | N/D | 
| Cliente AWS KMS | ✓ | ✓ | ✓ | ✓ | N/D | 
| Istanze d supportate | ✓ | ✓ | ✓ |  | N/D | 
| [supporto inf1](neo-supported-cloud.md) | ✓ |  |  |  | ✓ | 

 Con l' SageMaker intelligenza artificiale, puoi implementare uno o più modelli dietro un singolo endpoint di inferenza per l'inferenza in tempo reale. La tabella seguente riassume le funzionalità principali supportate dalle varie opzioni di hosting fornite con inferenza in tempo reale. 


| Funzionalità | [Endpoint per modelli singoli](realtime-single-model.md) | [Endpoint multi-modello](multi-model-endpoints.md) | [Pipeline di inferenza seriale](inference-pipelines.md) | [Endpoint multi-container](multi-container-endpoints.md) | 
| --- | --- | --- | --- | --- | 
| [Supporto per il dimensionamento automatico](endpoint-auto-scaling.md) | ✓ | ✓ | ✓ | ✓ | 
| Supporto per GPU | ✓ 1 | ✓ | ✓ |  | 
| Modello singolo | ✓ | ✓ | ✓ | ✓ | 
| [Endpoint multi-modello](multi-model-endpoints.md) |  | ✓ | ✓ | N/D | 
| [Endpoint multi-container](multi-container-endpoints.md) | ✓ |  |  | N/D | 
| [Pipeline di inferenza seriale](inference-pipelines.md) | ✓ | ✓ | N/D |  | 
| [Suggeritore di inferenza](inference-recommender.md) | ✓ |  |  |  | 
| Supporto per Collegamento privato | ✓ | ✓ | ✓ | ✓ | 
| [Supporto per il monitoraggio dei dati capture/Model ](model-monitor.md) | ✓ | N/D | N/D | N/D | 
| DLCs supportato | 1P, precostruito, Extend precostruito, BYOC | k-nn, Linear Learner XGBoost, RCF, MXNet Apache TensorFlow, scikit-learn 2 PyTorch | 1P, precostruito, Extend precostruito, BYOC | 1P, precostruito, Extend precostruito, BYOC | 
| Protocolli supportati | HTTP(S) | HTTP(S) | HTTP(S) | HTTP(S) | 
| Dimensione payload | < 6 MB | < 6 MB | < 6 MB | < 6 MB | 
| Richiedi un timeout | < 60 secondi | < 60 secondi | < 60 secondi | < 60 secondi | 
| [Barriere di distribuzione: implementazioni blue/green ](deployment-guardrails.md) | ✓ | ✓ | ✓ | ✓ | 
| [Guardrail per l'implementazione: implementazioni in sequenza](deployment-guardrails.md) | ✓ | ✓ | ✓ | ✓ | 
| [Shadow testing](shadow-tests.md) | ✓ |  |  |  | 
| Supporto per pacchetti modello Market Place | ✓ |  |  |  | 
| Supporto cloud privato virtuale | ✓ | ✓ | ✓ | ✓ | 
| Supporto di più varianti di produzione | ✓ |  | ✓ | ✓ | 
| Isolamento della rete | ✓ | ✓ | ✓ | ✓ | 
| [Supporto al servizio parallelo del modello](model-parallel-intro.md) | ✓ 3 |  | ✓ 3 |  | 
| Crittografia dei volumi | ✓ | ✓ | ✓ | ✓ | 
| Cliente AWS KMS | ✓ | ✓ | ✓ | ✓ | 
| Istanze d supportate | ✓ | ✓ | ✓ | ✓ | 
| [supporto inf1](neo-supported-cloud.md) | ✓ |  |  |  | 

 1 La disponibilità dei tipi di istanze Amazon EC2 dipende dalla AWS regione. Per la disponibilità di istanze specifiche AWS, consulta i [prezzi di Amazon SageMaker AI](https://aws.amazon.com/sagemaker/pricing/). 

 2 Per utilizzare qualsiasi altro framework o algoritmo, utilizza il toolkit SageMaker AI Inference per creare un contenitore che supporti endpoint multimodello. 

 3 Con l' SageMaker intelligenza artificiale, puoi implementare modelli di grandi dimensioni (fino a 500 GB) per l'inferenza. È possibile configurare il controllo dello stato del container e le quote di timeout per il download, fino a 60 minuti. Ciò ti consentirà di avere più tempo per scaricare e caricare il modello e le risorse associate. Per ulteriori informazioni, consulta [Parametri degli endpoint di SageMaker AI per l’inferenza di modelli di grandi dimensioni](large-model-inference-hosting.md). Puoi utilizzare contenitori di [inferenza per modelli di grandi dimensioni](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#large-model-inference-containers) compatibili con l' SageMaker intelligenza artificiale. Puoi anche utilizzare librerie di parallelizzazione dei modelli di terze parti, come Triton with and. FasterTransformer DeepSpeed Devi assicurarti che siano compatibili con l'intelligenza artificiale. SageMaker 

# Risorse
<a name="inference-resources"></a>

Utilizza le seguenti risorse per la risoluzione dei problemi e per reperire riferimenti, risposte alle domande frequenti e ulteriori informazioni su Amazon SageMaker AI.

**Topics**
+ [Blog, notebook di esempio e risorse aggiuntive](deploy-model-blogs.md)
+ [Risoluzione dei problemi e riferimento](deploy-model-reference.md)
+ [Hosting di modelli FAQs](hosting-faqs.md)

# Blog, notebook di esempio e risorse aggiuntive
<a name="deploy-model-blogs"></a>

Le seguenti sezioni contengono esempi e risorse aggiuntive per approfondire la conoscenza di Amazon SageMaker AI.

## Blog e casi di studio
<a name="deploy-model-blogs-table"></a>

Consulta la tabella seguente per gli elenchi di blog e casi di studio relativi alle varie funzionalità di SageMaker AI Inference. Puoi utilizzare i blog per creare soluzioni più adatte al tuo caso d'uso.


| Funzionalità | Risorse | 
| --- | --- | 
|  Inferenza in tempo reale  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Dimensionamento automatico  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Inferenza serverless  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Inferenza asincrona  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Batch Transform  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Endpoint multi-modello  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Pipeline di inferenza seriale  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Endpoint multi-container  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Esecuzione di insiemi di modelli  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Suggeritore di inferenza  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Serie di blog di hosting di modelli avanzati  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 

## Notebook di esempio
<a name="deploy-model-blogs-nbs"></a>

Nella tabella seguente sono riportati alcuni esempi di notebook che possono aiutarti a scoprire di più su SageMaker AI Inference.


| Funzionalità | Notebook di esempio | 
| --- | --- | 
|  Suggeritore di inferenza  |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/sagemaker/latest/dg/deploy-model-blogs.html)  | 
|  Ottimizzazione dei modelli linguistici di grandi dimensioni (LLM) per SageMaker AI  |  [Workshop sui LLM di IA generativa](https://github.com/aws/amazon-sagemaker-examples/tree/main/inference/generativeai/llm-workshop)  | 

## Risorse aggiuntive
<a name="deploy-model-blogs-extras"></a>

Per informazioni più dettagliate su ciascuna opzione di SageMaker AI Inference, guarda il seguente video.

[![AWS Videos](http://img.youtube.com/vi/https://www.youtube.com/embed/4FqHt5bmS2o/0.jpg)](http://www.youtube.com/watch?v=https://www.youtube.com/embed/4FqHt5bmS2o)


# Risoluzione dei problemi e riferimento
<a name="deploy-model-reference"></a>

Per approfondire la conoscenza delle best practice per l’utilizzo di SageMaker AI Inference e per la risoluzione dei problemi relativi alle implementazioni dei modelli, consulta le seguenti risorse e la documentazione di riferimento:
+ Per la risoluzione dei problemi relativi alle distribuzioni dei modelli, consulta [Risolvi i problemi relativi alle implementazioni dei modelli Amazon SageMaker AI](deploy-model-troubleshoot.md).
+ Per le best practice di distribuzione del modello, consulta [Best practice](https://docs.aws.amazon.com/sagemaker/latest/dg/best-practices.html).
+ Per informazioni di riferimento sulle dimensioni dei volumi di storage su istanze di hosting di diverse dimensioni, consulta [Volumi di archiviazione delle istanze](host-instance-storage.md).
+ Per informazioni di riferimento sui limiti e le quote di SageMaker AI, consulta [Endpoint e quote di Amazon SageMaker AI](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html).
+ Per le domande frequenti su SageMaker AI, consulta [Hosting di modelli FAQs](hosting-faqs.md).

# Hosting di modelli FAQs
<a name="hosting-faqs"></a>

Consulta le seguenti domande frequenti per le risposte alle domande più frequenti sull' SageMaker AI Inference Hosting.

## Hosting generale
<a name="hosting-faqs-general"></a>

Le seguenti domande frequenti rispondono a domande generali comuni su SageMaker AI Inference.

### D: Quali opzioni di implementazione offre Amazon SageMaker AI?
<a name="hosting-faqs-general-1"></a>

R: Dopo aver creato e addestrato i modelli, Amazon SageMaker AI offre quattro opzioni per distribuirli in modo da poter iniziare a fare previsioni. L’inferenza in tempo reale è adatta per i carichi di lavoro con requisiti di latenza di millisecondi, dimensioni payload fino a 25 MB e tempi di elaborazione fino a 60 secondi per le risposte normali e 8 minuti per le risposte in streaming. La trasformazione batch è ideale per le previsioni offline su grandi batch di dati disponibili in anticipo. L’inferenza asincrona è progettata per i carichi di lavoro che non hanno requisiti di latenza inferiori al secondo, dimensioni di payload fino a 1 GB e tempi di elaborazione fino a 60 minuti. Con l’inferenza serverless puoi implementare rapidamente modelli di machine learning per l'inferenza senza dover configurare o gestire l'infrastruttura sottostante e paghi solo per la capacità di calcolo utilizzata per elaborare le richieste di inferenza, ideale per carichi di lavoro intermittenti.

### D: Come faccio a scegliere un'opzione di implementazione del modello nell' SageMaker intelligenza artificiale?
<a name="hosting-faqs-general-2"></a>

Se desideri elaborare le richieste in batch, potresti scegliere Trasformazione batch. Altrimenti, se desideri ricevere inferenze per ogni richiesta al tuo modello, potresti scegliere Inferenza asincrona, Inferenza serverless o Inferenza in tempo reale. Puoi scegliere Inferenza asincrona se hai tempi di elaborazione lunghi o carichi utili di grandi dimensioni e desideri mettere in coda le richieste. Puoi scegliere Inferenza serverless se il tuo carico di lavoro ha un traffico imprevedibile o intermittente. Puoi scegliere Inferenza in tempo reale se hai un traffico prolungato e hai bisogno di una latenza inferiore e costante per le tue richieste.

### D: Ho sentito che SageMaker AI Inference è costoso. Qual è il modo migliore per ottimizzare i costi quando eseguo l’hosting dei modelli?
<a name="hosting-faqs-general-3"></a>

R: Per ottimizzare i costi con SageMaker AI Inference, dovresti scegliere l'opzione di hosting giusta per il tuo caso d'uso. Puoi anche utilizzare funzionalità di inferenza come [Amazon SageMaker AI Savings Plans](https://aws.amazon.com/savingsplans/ml-pricing/), l'ottimizzazione dei modelli con [SageMaker Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html), [Multi-Model Endpoints e [Multi-Container Endpoints](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html)](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html) o la scalabilità automatica. Per suggerimenti su come ottimizzare i costi di inferenza, consulta [Best practice per l'ottimizzazione dei costi di inferenza](inference-cost-optimization.md).

### D: Perché dovrei usare Amazon SageMaker Inference Recommender?
<a name="hosting-faqs-general-4"></a>

R: Dovresti usare Amazon SageMaker Inference Recommender se hai bisogno di consigli per la corretta configurazione degli endpoint per migliorare le prestazioni e ridurre i costi. In precedenza, i data scientist che volevano distribuire i propri modelli dovevano eseguire benchmark manuali per selezionare la giusta configurazione endpoint. Innanzitutto, dovevano selezionare il tipo di istanza di machine learning giusto tra gli oltre 70 tipi di istanze disponibili in base ai requisiti della risorsa dei modelli e ai payload di esempio e quindi ottimizzare il modello per tenere conto dei diversi hardware. Successivamente, hanno dovuto condurre test di carico approfonditi per verificare che i requisiti di latenza e velocità di trasmissione effettiva fossero soddisfatti e che i costi fossero bassi. Suggeritore di inferenza elimina questa complessità aiutandoti a fare quanto segue: 
+ Inizia in pochi minuti con una raccomandazione di istanza.
+ Esegui test di carico su diversi tipi di istanze per ottenere consigli sulla configurazione endpoint nel giro di poche ore. 
+ Ottimizza automaticamente i parametri del container e del server modello ed esegui ottimizzazioni del modello per un determinato tipo di istanza.

### D: Cos'è un server modello?
<a name="hosting-faqs-general-5"></a>

R: Gli endpoint SageMaker AI sono endpoint HTTP REST che utilizzano un server Web containerizzato, che include un server modello. Questi container sono responsabili del caricamento e della gestione delle richieste per un modello di machine learning. Implementano un server Web che risponde a `/invocations` e `/ping` sulla porta 8080.

I server modello più comuni includono TensorFlow Serving TorchServe e Multi Model Server. SageMaker I container del framework AI hanno questi server modello integrati.

### D: Cos'è Bring Your Own Container with Amazon SageMaker AI?
<a name="hosting-faqs-general-6"></a>

R: Tutto in SageMaker AI Inference è containerizzato. SageMaker L'intelligenza artificiale fornisce contenitori gestiti per framework popolari come, e. TensorFlow SKlearn HuggingFace Per un elenco completo e aggiornato di tali immagini, consulta [Immagini disponibili](https://github.com/aws/deep-learning-containers/blob/master/available_images.md).

 A volte esistono framework personalizzati per i quali potrebbe essere necessario creare un container. Questo approccio è noto come *Bring Your Own Container*, o *BYOC*. Con l’approccio BYOC, fornisci l’immagine Docker per configurare il tuo framework o la tua libreria, Quindi, invii l'immagine ad Amazon Elastic Container Registry (Amazon ECR) in modo da poterla utilizzare con l'intelligenza artificiale. SageMaker 

In alternativa, invece di creare un'immagine da zero, puoi estendere un container. Puoi prendere una delle immagini di base fornite dall' SageMaker intelligenza artificiale e aggiungere le tue dipendenze nel tuo Dockerfile.

### D: Devo addestrare i miei modelli sull' SageMaker intelligenza artificiale per ospitarli su SageMaker endpoint AI?
<a name="hosting-faqs-general-7"></a>

R: L' SageMaker intelligenza artificiale offre la capacità di utilizzare il tuo modello di framework addestrato che hai addestrato al di fuori dell' SageMaker IA e di implementarlo su una qualsiasi delle opzioni di hosting SageMaker AI.

SageMaker L'intelligenza artificiale richiede di impacchettare il modello in un `model.tar.gz` file e di disporre di una struttura di directory specifica. Ciascun framework ha la propria struttura di modello (per esempi di strutture, vedere la domanda seguente). Per ulteriori informazioni, consulta la documentazione di SageMaker Python SDK per [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#deploying-directly-from-model-artifacts), [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#bring-your-own-model)e. [MXNet](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#deploy-endpoints-from-model-data)

Sebbene sia possibile scegliere tra immagini di framework predefinite come TensorFlow PyTorch, e MXNet ospitare il modello addestrato, è anche possibile creare un contenitore personalizzato per ospitare i modelli addestrati su SageMaker endpoint di intelligenza artificiale. Per una procedura dettagliata, vedi l'esempio di notebook Jupyter [Creazione di un container di algoritmo personalizzato](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/scikit_bring_your_own/scikit_bring_your_own.ipynb).

### D: Come devo strutturare il mio modello se voglio implementarlo sull' SageMaker intelligenza artificiale ma non addestrarlo sull'intelligenza artificiale? SageMaker
<a name="hosting-faqs-general-8"></a>

*R: L' SageMaker intelligenza artificiale richiede che gli artefatti del modello siano compressi in un `.tar.gz` file o in un archivio tar.* SageMaker L'IA estrae automaticamente questo `.tar.gz` file nella directory del `/opt/ml/model/` contenitore. Il tarball non deve contenere collegamenti simbolici o symlink non necessari. Se stai utilizzando uno dei contenitori del framework, ad esempio, o TensorFlow PyTorch MXNet, il contenitore si aspetta che la struttura TAR sia la seguente: 

**TensorFlow**

```
model.tar.gz/
             |--[model_version_number]/
                                       |--variables
                                       |--saved_model.pb
            code/
                |--inference.py
                |--requirements.txt
```

**PyTorch**

```
model.tar.gz/
             |- model.pth
             |- code/
                     |- inference.py
                     |- requirements.txt  # only for versions 1.3.1 and higher
```

**MXNet**

```
model.tar.gz/
            |- model-symbol.json
            |- model-shapes.json
            |- model-0000.params
            |- code/
                    |- inference.py
                    |- requirements.txt # only for versions 1.6.0 and higher
```

### D: Quando richiamo un endpoint SageMaker AI, posso fornire un `ContentType` tipo e MIME. `Accept` Quale viene utilizzato per identificare il tipo di dati inviati e ricevuti?
<a name="hosting-faqs-general-10"></a>

R: `ContentType` è il tipo MIME dei dati di input nel corpo della richiesta (il tipo MIME dei dati che stai inviando all'endpoint). Il server del modello utilizza il `ContentType` per determinare se è in grado di gestire il tipo fornito o meno.

`Accept` è il tipo MIME della risposta di inferenza (il tipo MIME dei dati restituiti dall'endpoint). Il server del modello utilizza il tipo `Accept` per determinare se è in grado di gestire e restituire il tipo fornito o meno.

I tipi MIME più comuni includono `text/csv`, `application/json` e `application/jsonlines`.

### D: Quali sono i formati di dati supportati per SageMaker AI Inference?
<a name="hosting-faqs-general-12"></a>

R: SageMaker L'IA trasmette qualsiasi richiesta al contenitore del modello senza modifiche. Il container deve contenere la logica per deserializzare la richiesta. Per informazioni sui formati definiti per gli algoritmi integrati, consulta [ Common Data Formats for Inference](https://docs.aws.amazon.com/sagemaker/latest/dg/cdf-inference.html). Se stai creando il tuo contenitore o utilizzando un contenitore SageMaker AI Framework, puoi includere la logica per accettare un formato di richiesta a tua scelta.

Allo stesso modo, anche l' SageMaker IA restituisce la risposta senza modifiche e quindi il client deve deserializzare la risposta. Nel caso degli algoritmi integrati, essi restituiscono risposte in formati specifici. Se stai creando il tuo contenitore o utilizzando un contenitore SageMaker AI Framework, puoi includere la logica per restituire una risposta nel formato che scegli.

### D: Come posso richiamare il mio endpoint con dati binari come video o immagini?
<a name="hosting-faqs-general-11"></a>

Usa la chiamata all'API [Richiama endpoint](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html) per creare inferenze sul tuo endpoint.

Quando passi l'input come payload all'API `InvokeEndpoint`, devi specificare il tipo corretto di dati di input previsto dal tuo modello. Quando trasmetti un payload nella chiamata API `InvokeEndpoint`, i byte della richiesta vengono inoltrati direttamente al container del modello. Ad esempio, per un'immagine, puoi utilizzare `application/jpeg` per `ContentType` e assicurarti che il tuo modello possa eseguire inferenze su questo tipo di dati. Questo vale per JSON, CSV, video o qualsiasi altro tipo di input con cui potresti avere a che fare.

Un altro fattore da considerare sono i limiti delle dimensioni payload. I limiti di payload sono 25 MB per gli endpoint in tempo reale e 4 MB per gli endpoint serverless. È possibile dividere il video in più fotogrammi e richiamare l'endpoint con ogni fotogramma singolarmente. In alternativa, se il tuo caso d'uso lo consente, puoi inviare l'intero video nel payload utilizzando un endpoint asincrono, che supporta payload fino a 1 GB.

Per un esempio che mostra come eseguire l'inferenza della visione artificiale su video di grandi dimensioni con l'inferenza asincrona, consulta questo [post del blog.](https://aws.amazon.com/blogs/machine-learning/run-computer-vision-inference-on-large-videos-with-amazon-sagemaker-asynchronous-endpoints/)

## Inferenza in tempo reale
<a name="hosting-faqs-real-time"></a>

Le seguenti domande frequenti rispondono a domande comuni su SageMaker AI Real-Time Inference.

### D: Come posso creare un endpoint SageMaker AI?
<a name="hosting-faqs-real-time-1"></a>

R: Puoi creare un endpoint SageMaker AI tramite strumenti AWS supportati come SageMaker Python SDK, e. AWS SDKs Console di gestione AWS AWS CloudFormation AWS Cloud Development Kit (AWS CDK)

Esistono tre entità chiave nella creazione di endpoint: un modello SageMaker AI, una configurazione di endpoint AI e un endpoint SageMaker AI. SageMaker Il modello di SageMaker intelligenza artificiale punta verso i dati e l'immagine del modello che stai utilizzando. La configurazione dell'endpoint definisce le varianti di produzione, che possono includere il tipo di istanza e il conteggio istanze. Puoi quindi utilizzare la chiamata API [create\$1endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint) o la chiamata [.deploy ()](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html) per l' SageMaker intelligenza artificiale per creare un endpoint utilizzando i metadati del modello e della configurazione dell'endpoint.

### D: Devo usare SageMaker Python SDK per gli endpoint? create/invoke
<a name="hosting-faqs-real-time-2"></a>

R: No, puoi usare i vari AWS SDKs (vedi [Invoke/](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html#API_runtime_InvokeEndpoint_SeeAlso) [Create for available](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateEndpoint.html#API_CreateEndpoint_SeeAlso) SDKs) o persino chiamare direttamente il web corrispondente. APIs

### D: Qual è la differenza tra gli endpoint multi-modello (MME) e il server multi-modello (MMS)?
<a name="hosting-faqs-real-time-3"></a>

R: Un endpoint multimodello è un'opzione di inferenza in tempo reale fornita dall'IA. SageMaker Con gli endpoint multi-modello, puoi ospitare migliaia di modelli dietro un unico endpoint. Il [server multi-modello](https://github.com/awslabs/multi-model-server) è un framework open source per servire modelli di machine learning. Fornisce le funzionalità di front-end HTTP e gestione del modello richieste dagli endpoint multi-modello per ospitare più modelli all'interno di un singolo container, caricare modelli e scaricare modelli dal container in modo dinamico ed eseguire l'inferenza su un modello caricato specifico.

### D: Quali sono le diverse architetture di implementazione dei modelli supportate da Inferenza in tempo reale?
<a name="hosting-faqs-real-time-4"></a>

R: SageMaker AI Real-Time Inference supporta varie architetture di implementazione di modelli come endpoint multimodel, endpoint multi-container e pipeline di inferenza seriale. 

[Endpoint multi-modello (MME)](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-model-endpoints.html): MME consente ai clienti di distribuire migliaia di modelli iperpersonalizzati in modo conveniente. Tutti i modelli sono distribuiti su un parco istanze di risorse condivise. MME funziona al meglio quando i modelli hanno dimensioni e latenza simili e appartengono allo stesso framework ML. Questi endpoint sono ideali quando non è necessario richiamare sempre lo stesso modello. Puoi caricare dinamicamente i rispettivi modelli sull'endpoint AI per soddisfare la tua richiesta. SageMaker 

[Multi-Container Endpoints (MCE)](https://docs.aws.amazon.com/sagemaker/latest/dg/multi-container-endpoints.html): MCE consente ai clienti di implementare 15 contenitori diversi con diversi framework e funzionalità ML senza partenze a freddo, utilizzando un solo endpoint. SageMaker È possibile richiamare direttamente questi container. MCE è la soluzione ideale quando si desidera conservare tutti i modelli in memoria.

[Pipeline di inferenza seriali (SIP)](https://docs.aws.amazon.com/sagemaker/latest/dg/inference-pipelines.html): è possibile utilizzare SIP per concatenare 2‐15 container su un singolo endpoint. SIP è adatto soprattutto per combinare la preelaborazione e l'inferenza dei modelli in un unico endpoint e per operazioni a bassa latenza.

## Inferenza serverless
<a name="hosting-faqs-serverless"></a>

Le seguenti domande frequenti rispondono a domande comuni su Amazon SageMaker Serverless Inference.

### D: Cos'è Amazon SageMaker Serverless Inference?
<a name="hosting-faqs-serverless-1"></a>

R: [Implementa modelli con Amazon SageMaker Serverless Inference](serverless-endpoints.md) è un'opzione di servizio di modelli serverless creata appositamente per semplificare la distribuzione e la scalabilità dei modelli ML. Gli endpoint di inferenza serverless avviano automaticamente le risorse di calcolo e le ridimensionano in base al traffico, eliminando la necessità di scegliere il tipo di istanza, eseguire la capacità di allocazione o gestire il dimensionamento. È inoltre possibile specificare i requisiti di memoria per l'endpoint serverless. Paghi solo per la durata dell'esecuzione del codice di inferenza e per la quantità di dati elaborati, non per i periodi di inattività.

### D: Qual è il vantaggio di utilizzare Inferenza serverless?
<a name="hosting-faqs-serverless-2"></a>

R: Inferenza serverless semplifica l'esperienza degli sviluppatori eliminando la necessità di fornire capacità in anticipo e gestire le policy di dimensionamento. Inferenza senza serverless può dimensionare istantaneamente da decine a migliaia di inferenze in pochi secondi in base ai modelli di utilizzo, il che la rende ideale per le applicazioni ML con traffico intermittente o imprevedibile. Ad esempio, un servizio di chatbot utilizzato da un'azienda di elaborazione delle buste paga registra un aumento delle richieste alla fine del mese, mentre il traffico è intermittente per il resto del mese. Il provisioning delle istanze per l'intero mese in questi scenari non è conveniente, in quanto si finisce per pagare per i periodi di inattività.

Inferenza serverless aiuta a risolvere questi tipi di casi d'uso fornendo una scalabilità automatica e rapida pronta all'uso senza la necessità di prevedere il traffico in anticipo o gestire le policy di dimensionamento. Inoltre, paghi solo per il tempo di calcolo necessario per eseguire il codice di inferenza e per l'elaborazione di dati, il che lo rende ideale per carichi di lavoro con traffico intermittente.

### D: Come faccio a scegliere le dimensioni memoria giuste per il mio endpoint serverless?
<a name="hosting-faqs-serverless-3"></a>

R: L'endpoint serverless ha una dimensione RAM minima di 1024 MB (1 GB) e la dimensione RAM massima che puoi scegliere è di 6144 MB (6 GB). Le dimensioni memoria che puoi scegliere sono 1024 MB, 2048 MB, 3072 MB, 4096 MB, 5120 MB o 6144 MB. Inferenza Serverless assegna automaticamente le risorse di calcolo in modo proporzionale alla memoria selezionata. Se scegli una dimensione di memoria maggiore, il tuo contenitore ha accesso a più v. CPUs

Scegli la dimensione della memoria dell'endpoint in base alle dimensioni del modello. In genere, la dimensione della memoria deve essere almeno pari a quella del modello. Potrebbe essere necessario eseguire dei benchmark per scegliere la giusta selezione di memoria per il modello in base alla latenza SLAs. Gli incrementi delle dimensioni della memoria hanno prezzi diversi; consulta la [pagina SageMaker dei prezzi di Amazon](https://aws.amazon.com/sagemaker/pricing/) per ulteriori informazioni.

## Batch Transform
<a name="hosting-faqs-batch"></a>

Le seguenti domande frequenti rispondono a domande comuni su SageMaker AI Batch Transform.

### D: In che modo Batch Transform divide i miei dati?
<a name="hosting-faqs-batch-1"></a>

R: Per formati di file specifici come CSV, RecOrdio TFRecord e SageMaker AI può suddividere i dati in mini batch a record singolo o multirecord e inviarli come payload al contenitore modello. Quando il valore di `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-BatchStrategy)` è`MultiRecord`, SageMaker AI invia il numero massimo di record per ogni richiesta, fino al limite. `MaxPayloadInMB` Quando il valore di `BatchStrategy` è`SingleRecord`, SageMaker AI invia record individuali in ogni richiesta.

### D: Qual è il timeout massimo per la trasformazione batch e il limite di payload per un singolo record?
<a name="hosting-faqs-batch-2"></a>

R: Il timeout massimo per la trasformazione batch è di 3600 secondi. Le [dimensioni massime del payload](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#sagemaker-CreateTransformJob-request-MaxPayloadInMB) per un record (per mini batch) sono pari a 100 MB.

### D: Come posso velocizzare un processo di trasformazione di batch?
<a name="hosting-faqs-batch-3"></a>

R: Se usi l'API `[CreateTransformJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html)`, puoi ridurre il tempo necessario per completare i processi di trasformazione di batch utilizzando valori differenti per parametri come `[MaxPayloadInMB](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxPayloadInMB)`, `[MaxConcurrentTransforms](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-MaxConcurrentTransforms)` o `[BatchStrategy](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTransformJob.html#SageMaker-CreateTransformJob-request-BatchStrategy)`. Il valore ideale per `MaxConcurrentTransforms` è pari al numero di processi di calcolo nel processo di trasformazione di batch. Se utilizzi la console SageMaker AI, puoi specificare questi valori ottimali dei parametri nella sezione **Configurazione aggiuntiva della pagina di configurazione** del **processo di trasformazione in Batch**. SageMaker L'IA trova automaticamente le impostazioni ottimali dei parametri per gli algoritmi integrati. Per gli algoritmi personalizzati, è necessario fornire questi valori tramite un endpoint [execution-parameters](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-batch-code.html#your-algorithms-batch-code-how-containe-serves-requests).

### D: Quali sono i formati dei dati supportati nativamente nella trasformazione batch?
<a name="hosting-faqs-batch-4"></a>

R: La trasformazione batch supporta file CSV e JSON.

## Inferenza asincrona
<a name="hosting-faqs-async"></a>

Le seguenti domande frequenti rispondono a domande generali comuni sull' SageMaker inferenza asincrona dell'IA.

### D: Cos'è Amazon SageMaker Asynchronous Inference?
<a name="hosting-faqs-async-1"></a>

R: L’inferenza asincrona mette in coda le richieste in entrata e le elabora in modo asincrono. Questa opzione è ideale per le richieste con dimensioni payload elevate o tempi di elaborazione lunghi che devono essere elaborate non appena arrivano. Facoltativamente, è possibile configurare le impostazioni di dimensionamento automatico per ridurre il conteggio istanze a zero quando non si elaborano attivamente le richieste. 

### D: Come faccio a dimensionare i miei endpoint a 0 quando non c'è traffico?
<a name="hosting-faqs-async-2"></a>

R: Amazon SageMaker AI supporta il ridimensionamento automatico (autoscaling) del tuo endpoint asincrono. Auto Scaling modifica dinamicamente il numero di istanze assegnate a un modello in risposta alle variazioni nel carico di lavoro. A differenza di altri modelli ospitati supportati dall' SageMaker IA, con Asynchronous Inference puoi anche ridurre a zero le istanze asincrone degli endpoint. Le richieste ricevute quando non ci sono istanze vengono messe in coda per l'elaborazione una volta che l'endpoint è stato dimensionato. Per ulteriori informazioni, consulta [Autoscale an asynchronous endpoint](https://docs.aws.amazon.com/sagemaker/latest/dg/async-inference-autoscale.html).

Amazon SageMaker Serverless Inference inoltre si ridimensiona automaticamente fino a zero. Non lo noterai perché l' SageMaker intelligenza artificiale gestisce la scalabilità degli endpoint serverless, ma se non riscontri alcun traffico, si applica la stessa infrastruttura.