Implementazione di modelli per l’inferenza in tempo reale - Amazon SageMaker AI

Implementazione di modelli per l’inferenza in tempo reale

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 Concessione delle autorizzazioni per il tagging delle risorse SageMaker AI.

Policy gestite da AWS per Amazon SageMaker AI che forniscono autorizzazioni per creare risorse SageMaker 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 implementare un modello in modo interattivo con SageMaker Studio. In alternativa, è possibile implementare un modello a livello di codice utilizzando un AWS SDK come SageMaker Python SDK o SDK per Python (Boto3). È inoltre possibile eseguire l’implementazione mediante l’AWS CLI.

Prima di iniziare

Prima di implementare un modello SageMaker AI, individua e prendi nota di quanto segue:

  • La Regione AWS in cui si trova il bucket Amazon S3

  • Il percorso URI Amazon S3 in cui sono archiviati gli artefatti del modello

  • Il ruolo IAM per SageMaker AI

  • Il percorso del registro URI Amazon ECR di Docker per l’immagine personalizzata che contiene il codice di inferenza o il framework e la versione di un’immagine Docker integrata supportata da AWS

Per un elenco dei Servizi AWS disponibili in ogni Regione AWS, consulta Region Maps and Edge Networks. Per ulteriori informazioni sulla creazione di un ruolo IAM, consultare Creazione di ruoli IAM.

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

È possibile implementare uno o più modelli in un endpoint con Amazon SageMaker AI. Quando più modelli condividono un endpoint, utilizzano congiuntamente le risorse ospitate al suo interno, come le istanze di calcolo ML, le CPU e gli acceleratori. Il modo più flessibile per implementare più modelli su un endpoint consiste nel definire ogni modello come componente di inferenza.

Componenti di inferenza

Un componente di inferenza è un oggetto di hosting SageMaker AI che è possibile utilizzare per implementare un modello in 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, è possibile specificare un oggetto del modello SageMaker AI oppure 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 implementato un componente di inferenza, è possibile invocare direttamente il modello associato quando tramite l’azione InvokeEndpoint nell’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 AI crea un pacchetto dei modelli come componenti di inferenza quando vengono implementati utilizzando:

  • SageMaker Studio Classic;

  • SageMaker Python SDK per implementare un oggetto di modello (impostando il tipo di endpoint su EndpointType.INFERENCE_COMPONENT_BASED);

  • AWS SDK for Python (Boto3) per definire oggetti InferenceComponent da implementare in un endpoint.

Implementare modelli con SageMaker Studio

Completa la seguente procedura per creare e implementare il modello in modo interattivo tramite SageMaker Studio. Per ulteriori informazioni, consulta la documentazione di Studio. Per ulteriori informazioni dettagliate sui vari scenari di implementazione, consulta il blog Package and deploy classical ML models and LLMs easily with Amazon SageMaker AI - Part 2.

Preparare gli artefatti e le autorizzazioni

Completa questa sezione prima di creare un modello in SageMaker Studio.

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.

  2. SageMaker AI può creare automaticamente un pacchetto degli artefatti. È sufficiente includere gli artefatti del modello non elaborati ed eventuali dipendenze in un file requirements.txt: SageMaker AI può fornire il codice di inferenza predefinito (oppure è possibile sostituire il codice predefinito con un codice di inferenza personalizzato). SageMaker AI supporta questa opzione per i seguenti framework: PyTorch, XGBoost.

Oltre a utilizzare il modello personalizzato, il ruolo AWS Identity and Access Management (IAM) e un container Docker (o il framework e la versione desiderati per i quali SageMaker AI dispone di un container predefinito), è anche necessario concedere le autorizzazioni per creare e implementare modelli tramite SageMaker AI Studio.

Le policy AmazonSageMakerFullAccess deve essere collegata al ruolo IAM in modo da poter accedere a SageMaker AI e altri servizi pertinenti. Per visualizzare i prezzi dei tipi di istanze in Studio, è anche necessario collegare la policy AWSPriceListServiceFullAccess (o, anziché l’intera policy, più specificamente, solo l’azione pricing:GetProducts).

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 altre combinazioni di maiuscole e minuscole di SageMaker AI: Sagemaker oppure 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:

Creare un modello implementabile

In questa fase è possibile creare una versione implementabile del modello in SageMaker AI fornendo gli artefatti insieme a specifiche aggiuntive, come il container e il framework desiderati, eventuale codice di inferenza personalizzato e le impostazioni di rete.

Per creare un modello implementabile in SageMaker Studio, segui questa procedura:

  1. Apri l’applicazione SageMaker Studio.

  2. Nel riquadro di navigazione a sinistra scegliere Models (Modelli).

  3. Scegli la scheda Modelli implementabili.

  4. Nella pagina Modelli implementabili, scegli Crea.

  5. 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.
Per la sezione Definizione di container segui questa procedura:
  1. Per Tipo di container, seleziona Container predefinito se desideri utilizzare un container gestito da SageMaker AI oppure seleziona Porta il tuo container per utilizzare un container personale.

  2. Se hai selezionato Container predefinito, seleziona i valori di Framework del container, Versione del framework e Tipo di hardware che desideri utilizzare.

  3. 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.
Per la sezione Artefatti segui questa procedura:
  1. Se utilizzi uno dei framework supportati da SageMaker AI per la creazione di pacchetti degli artefatti del modello (PyTorch o XGBoost), per Artefatti puoi scegliere l’opzione Carica artefatti. Con questa opzione, puoi semplicemente specificare gli artefatti del modello non elaborati, eventuale codice di inferenza personalizzato e il file requirements.txt; SageMaker AI gestisce la creazione automatica del pacchetto dell’archivio. 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.

    2. Se hai scelto di caricare i tuoi artefatti, per Bucket S3, inserisci il percorso Amazon S3 di un bucket in cui SageMaker AI deve archiviare gli artefatti dopo averli inseriti in un pacchetto. Quindi, completa questa procedura.

    3. Per Carica artefatti modello, carica i file del modello.

    4. Per Codice di inferenza, seleziona Usa codice di inferenza predefinito per utilizzare il codice predefinito fornito da SageMaker AI per l’inferenza. Altrimenti, seleziona Carica codice di inferenza personalizzato per utilizzare un codice di inferenza personalizzato.

    5. Per Carica requirements.txt, carica un file di testo che elenchi tutte le dipendenze da installare in fase di esecuzione.

  2. Se non utilizzi un framework supportato da SageMaker AI per la creazione di pacchetti degli artefatti del modello, Studio mostra l’opzione Pacchetti di artefatti e devi fornire tutti gli artefatti già inseriti in un pacchetto 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 pacchetti di artefatti del modello per caricare direttamente l’archivio su SageMaker AI.

    2. 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.
Per la sezione Sicurezza, segui questa procedura:
  1. Per Ruolo IAM, inserisci l’ARN per un ruolo IAM.

  2. (Facoltativo) Per Cloud privato virtuale (VPC), puoi selezionare un Amazon VPC per archiviare la configurazione e gli artefatti del modello.

  3. (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.
(Facoltativo) Per la sezione Opzioni avanzate segui questa procedura:
  1. Attiva l’interruttore Consigli per istanze personalizzate per eseguire un processo Amazon SageMaker Inference Recommender nel modello dopo la 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.

  2. Per Aggiungi variabili di ambiente, inserisci una variabile di ambiente per il container come coppie chiave-valore.

  3. Per Tag, inserisci i tag come coppie chiave-valore.

  4. Dopo aver completato la configurazione del modello e del container, scegli Crea modello implementabile.

Ora dovresti avere un modello in SageMaker Studio pronto per l’implementazione.

Distribuzione del modello

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 in 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 SageMaker Studio.

  2. Nel riquadro di navigazione a sinistra scegliere Models (Modelli).

  3. Nella pagina Modelli, seleziona uno o più modelli dall’elenco dei modelli di SageMaker AI.

  4. Seleziona Deploy (Implementa).

  5. Per Nome endpoint, apri il menu a discesa. È possibile selezionare un endpoint esistente oppure creare un nuovo endpoint in cui implementare il modello.

  6. 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à con il tipo di istanza per JumpStart

    Se stai implementando un modello JumpStart, Studio mostra solo i tipi di istanza supportati dal modello.

  7. Per Conteggio istanze iniziale, inserisci il numero iniziale di istanze che desideri fornire per il tuo endpoint.

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

  9. Se il modello che stai implementando è uno degli LLM JumpStart più utilizzati dall’hub del modello, l’opzione Configurazioni alternative viene visualizzata dopo i campi del tipo di istanza e del numero di istanze.

    Per gli LLM JumpStart più diffusi, AWS dispone di pacchetti predefiniti di tipi di istanze per ottimizzare 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

    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.

    2. (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).

    3. Scegli Seleziona per confermare il tipo di istanza e le impostazioni di configurazione.

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

    2. Per Numero minimo di copie, inserisci il numero minimo di copie del modello che desideri ospitare sull’endpoint in un dato momento.

    3. Per Memoria CPU minima (MB), inserisci la quantità minima di memoria (in MB) richiesta dal modello.

    4. Per Memoria CPU massima (MB), inserisci la quantità massima di memoria (in MB) che desideri consentire al modello di utilizzare.

  11. (Facoltativo) Per Opzioni avanzate, segui questa procedura:

    1. Per Ruolo IAM, utilizza il ruolo di esecuzione IAM predefinito di SageMaker AI o specifica un ruolo personalizzato con le autorizzazioni necessarie. Questo ruolo IAM deve essere lo stesso del ruolo specificato durante la creazione del modello implementabile.

    2. Per Cloud privato virtuale (VPC), puoi specificare un VPC in cui ospitare l’endpoint.

    3. Per Chiave KMS di crittografia, seleziona una chiave AWS KMS per crittografare i dati nel volume di archiviazione collegato all’istanza di calcolo ML che ospita l’endpoint.

    4. Attiva l’interruttore Abilita l’isolamento di rete per limitare l’accesso a Internet del container.

    5. 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 il tempo massimo consentito da SageMaker AI rispettivamente per scaricare il modello nel container e avviare il container.

    6. Per Tag, inserisci i tag come coppie chiave-valore.

    Nota

    SageMaker AI configura il ruolo IAM, 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.

Dopo aver configurato l’implementazione, scegli Implementa per creare l’endpoint e implementare il modello.

Implementare modelli con gli SDK Python

Utilizzando SageMaker Python SDK è possibile creare un 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, consulta Creare un modello in Amazon SageMaker AI con ModelBuilder.

La sezione seguente descrive entrambi i metodi per creare il modello e implementare l’oggetto di modello.

Configurazione

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
Esempio istruzioni di importazione

L’esempio seguente importa moduli da SageMaker Python SDK, 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 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
Esempio 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)
Esempio 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
Esempio 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

Esistono diversi modi per implementare modelli con SageMaker Python SDK o SDK per 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

Utilizzando SageMaker Python SDK, è possibile creare il 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, consulta Creare un modello in Amazon SageMaker AI con ModelBuilder. Per ulteriori informazioni, è anche possibile consultare il blog Package and deploy classical ML models and LLMs easily with SageMaker AI - Part 1.

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.

  2. Crea un oggetto di modello dalla classe Model oppure ModelBuilder. L’oggetto ResourceRequirements è specificato nelle impostazioni del modello.

  3. 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 di modello SageMaker AI utilizzando il metodo create_model.

  2. Specifica le impostazioni per l’endpoint creando un oggetto di configurazione dell’endpoint. Per crearne uno, utilizza il metodo create_endpoint_config.

  3. Crea l’endpoint utilizzando il metodo create_endpoint e, nella richiesta, fornisci la configurazione dell’endpoint creata.

  4. Crea un componente di inferenza utilizzando il metodo create_inference_component. Nelle impostazioni è possibile specificare un modello in uno dei seguenti modi:

    • Specificando un oggetto di 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 AI utilizzando il metodo create_model.

  2. Specifica le impostazioni per l’endpoint creando un oggetto di configurazione dell’endpoint. Per crearne uno, utilizza il metodo create_endpoint_config. Nella configurazione dell’endpoint assegna l’oggetto di modello a una variante di produzione.

  3. Crea l’endpoint utilizzando il metodo create_endpoint. Nella richiesta fornisci la configurazione dell’endpoint creata.

    Quando crei l’endpoint, SageMaker AI effettua il provisioning delle risorse dell’endpoint e implementa il modello nell’endpoint.

Configura

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 di modello creando un’istanza della classe ModelBuilder ed eseguendo build: questo metodo è mostrato anche nell’esempio. ModelBuilder fornisce un’interfaccia unificata per la creazione di pacchetti di modelli e, in questa istanza, prepara un modello per un’implementazione su larga scala. L’esempio utilizza ModelBuilder per costruire un modello Hugging Face (è anche possibile passare un modello JumpStart). 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, è possibile scegliere il tipo di istanza per il provisioning da parte di Amazon SageMaker AI e abilitare il dimensionamento gestito 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)
Esempio definizione di modello

L’esempio seguente definisce un modello SageMaker AI con il metodo create_model in AWS SDK for 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: il nome della risorsa Amazon (ARN) del ruolo IAM che Amazon SageMaker AI può assumere per accedere agli artefatti del modello e alle immagini Docker per l’implementazione in istanze di calcolo ML o per processi 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.

Esempio Configurazione dell'endpoint

Il seguente esempio configura un endpoint con il metodo create_endpoint_config. Amazon SageMaker AI utilizza questa configurazione per l’implementazione dei modelli. Nella configurazione, individua uno o più modelli creati utilizzando il metodo create_model per implementare le risorse per il provisioning da parte di Amazon SageMaker AI.

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:

Implementazione

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_endpoint per creare l’endpoint. Il nome dell’endpoint deve essere univoco all’interno di una Regione AWS nell’account AWS.

L’esempio seguente crea un endpoint utilizzando la configurazione dell’endpoint specificata nella richiesta. Amazon SageMaker AI utilizza l’endpoint per effettuare il provisioning delle 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)
Esempio implementazione

Fornisci la configurazione dell’endpoint a SageMaker AI. 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_endpoint per creare l’endpoint. Il nome dell’endpoint deve essere univoco all’interno di una Regione AWS nell’account AWS.

L’esempio seguente crea un endpoint utilizzando la configurazione dell’endpoint specificata nella richiesta. Amazon SageMaker AI utilizza l’endpoint per effettuare il provisioning delle risorse e implementare i 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")

Implementare modelli con l’AWS CLI

È possibile implementare un modello in un endpoint utilizzando l’AWS CLI.

Panoramica

Quando si implementa un modello con l’AWS CLI, è possibile implementarlo utilizzando o meno 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 create-model.

  2. Specifica le impostazioni per l’endpoint creando una configurazione dell’endpoint. Per creare una, esegui il comando create-endpoint-config.

  3. Crea un endpoint utilizzando il comando create-endpoint. Nel corpo del comando specifica la configurazione dell’endpoint creata.

  4. Crea un componente di inferenza utilizzando il comando create-inference-component. Nelle impostazioni è possibile specificare un modello in uno dei seguenti modi:

    • Specificando un oggetto di 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.

Without inference components

Per implementare un modello senza utilizzare un componente di inferenza, segui questa procedura:

  1. Crea un modello di SageMaker AI utilizzando il comando create-model.

  2. Specifica le impostazioni per l’endpoint creando un oggetto di configurazione dell’endpoint. Per creare uno, utilizza il comando create-endpoint-config. Nella configurazione dell’endpoint assegna l’oggetto di modello a una variante di produzione.

  3. Crea un endpoint utilizzando il comando create-endpoint. Nel corpo del comando specifica la configurazione dell’endpoint creata.

    Quando crei l’endpoint, SageMaker AI effettua il provisioning delle risorse dell’endpoint e implementa il modello nell’endpoint.

Configura

Gli esempi seguenti configurano le risorse necessarie per implementare un modello in un endpoint.

With inference components
Esempio di comando create-endpoint-config

L’esempio seguente crea una configurazione dell’endpoint con il comando create-endpoint-config.

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 viene eseguito correttamente, l’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
Esempio di comando create-model

L’esempio seguente crea un modello con il comando create-model.

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 viene eseguito correttamente, l’AWS CLI risponde con l’ARN della risorsa creata.

{ "ModelArn": "arn:aws:sagemaker:us-west-2:111122223333:model/model-name" }
Esempio di comando create-endpoint-config

L’esempio seguente crea una configurazione dell’endpoint con il comando create-endpoint-config.

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 viene eseguito correttamente, l’AWS CLI risponde con l’ARN della risorsa creata.

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }

Implementazione

Gli esempi seguenti implementano un modello in un endpoint.

With inference components
Esempio di comando create-endpoint

L’esempio seguente crea un endpoint con il comando create-endpoint.

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

Se il comando viene eseguito correttamente, l’AWS CLI risponde con l’ARN della risorsa creata.

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }
Esempio di comando create-inference-component

L’esempio seguente crea un componente di inferenza con il comando create-inference-component.

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 viene eseguito correttamente, l’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
Esempio di comando create-endpoint

L’esempio seguente crea un endpoint con il comando create-endpoint.

aws sagemaker create-endpoint \ --endpoint-name endpoint-name \ --endpoint-config-name endpoint-config-name

Se il comando viene eseguito correttamente, l’AWS CLI risponde con l’ARN della risorsa creata.

{ "EndpointArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint/endpoint-name" }