Ospita più modelli in un container dietro un unico endpoint - Amazon SageMaker

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

Ospita più modelli in un container dietro un unico endpoint

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 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 a più modelli ospitano i modelli rispetto a quelli a modello singolo.

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

Non puoi usare multi-model-enabled contenitori con Amazon Elastic Inference.

Puoi usare la console AWS SDK for Python (Boto) o la SageMaker console 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.

Algoritmi, framework e istanze supportati

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

I container di inferenza per i seguenti algoritmi e framework supportano endpoint a più modelli:

Per utilizzare qualsiasi altro framework o algoritmo, utilizza il toolkit di SageMaker inferenza per creare un contenitore che supporti endpoint multimodello. Per informazioni, consulta Crea il tuo contenitore per endpoint multimodello SageMaker .

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

L'hosting di più modelli basati su GPU su endpoint multimodello è supportato tramite il server Triton Inference. SageMaker Questo supporta tutti i principali framework di inferenza come NVIDIA® TensorRT™ PyTorch, MXNet, Python, ONNX, XGBoost, scikit-learn, OpenVINO, C++ personalizzato e altri. RandomForest

Per utilizzare qualsiasi altro framework o algoritmo, puoi usare il back-end Triton per Python o C++ 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 vCPU GiB di memoria per vCPU GPU 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

Notebook di esempio per endpoint a più modelli

Per ulteriori informazioni su come utilizzare gli endpoint a più modelli, puoi provare i seguenti notebook di esempio:

Per istruzioni su come creare e accedere a istanze di notebook Jupyter da utilizzare per eseguire gli esempi precedenti, consulta. SageMaker Istanze Amazon SageMaker Notebook Dopo aver creato un'istanza di notebook e averla aperta, scegli la scheda SageMaker Esempi per visualizzare un elenco di tutti gli esempi. 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:

Come funzionano gli endpoint a più modelli

SageMaker 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, li carica e li memorizza SageMaker dinamicamente nella cache quando li richiami. Quando SageMaker riceve una richiesta di invocazione per un particolare modello, esegue le seguenti operazioni:

  1. Instrada la richiesta a un'istanza dietro l'endpoint.

  2. Scarica il modello dal bucket S3 nel volume di storage di tale istanza.

  3. 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é SageMaker non è necessario scaricarlo e caricarlo.

SageMaker 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, SageMaker indirizza alcune richieste a un'altra istanza per gestire 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 SageMaker 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à, SageMaker elimina tutti i modelli inutilizzati dal volume di archiviazione.

Per eliminare un modello, interrompi l'invio di richieste ed eliminalo dal bucket S3. SageMaker 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.

Impostazione del comportamento di memorizzazione nella SageMaker cache del modello di endpoint multimodello

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 e/o eliminati dal disco solo quando un container 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_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. Un TPS più elevato in questi casi d'uso è dovuto al fatto che dopo la richiesta SageMaker si verifica quanto segue: 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 entrambi gli endpoint supportati da CPU e GPU, la concomitanza è un fattore del numero di vCPU dell'istanza del container.

Per linee guida sulla scelta di un tipo di istanza SageMaker ML per un endpoint multimodello, consulta. Raccomandazioni sulle istanze per le distribuzioni di endpoint a più modelli

Raccomandazioni sulle istanze per le distribuzioni di endpoint a più modelli

Ci sono diversi elementi da considerare quando si seleziona un tipo di istanza SageMaker ML per un endpoint multimodello:

  • Assegna una capacità sufficiente di Amazon Elastic Block Store (Amazon EBS) 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 si SageMaker collega per ogni tipo di istanza per un endpoint e per un endpoint multimodello, consulta. Hosting dei volumi di storage dell'istanza

  • 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 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:

    • Pensa alla quantità di memoria su un'istanza come spazio di cache per i modelli da caricare e al numero di vCPU come limite di concomitanza per eseguire inferenze sui modelli caricati (supponendo che l'invocazione di un modello sia legata alla CPU).

    • Per le istanze basate su CPU, il numero di vCPU influisce sul numero massimo di chiamate concomitanti per istanza (supponendo che l'invocazione di un modello sia vincolata alla CPU). Una maggiore quantità di vCPU consente di richiamare contemporaneamente più modelli univoci.

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

  • Determinare la tolleranza dei tempi di carico/scarico:

    • Le famiglie di tipi di istanza d (ad esempio m5d, c5d o r5d) e g5s sono dotate di un SSD NVMe (memory express non volatile) che offre elevate prestazioni I/O e può ridurre il tempo necessario per scaricare i modelli nel volume di storage e per il container per caricare il modello dal volume di storage.

    • Poiché i tipi di istanza d e g5 sono dotati di uno storage SSD NVMe, SageMaker 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 scarica dinamicamente i modelli quando la memoria esaurisce 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 .

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.