Crea il tuo contenitore per endpoint multimodello SageMaker - 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à.

Crea il tuo contenitore per endpoint multimodello SageMaker

Fai riferimento alle seguenti sezioni per portare il tuo container e le tue dipendenze su endpoint a più modelli.

Implementa le tue dipendenze per gli endpoint multimodello su istanze supportate CPU

Se nessuna delle immagini predefinite dei container soddisfa le tue esigenze, puoi creare un contenitore personalizzato da utilizzare con endpoint multimodello supportati. CPU

Le immagini personalizzate di Amazon Elastic Container Registry (AmazonECR) distribuite in Amazon SageMaker devono rispettare il contratto di base descritto in Codice di inferenza personalizzato con servizi di hosting che regola il modo in cui SageMaker 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 aggiuntiviAPIs. Questo contratto aggiuntivo include nuovi modelli APIs per caricare, elencare, ottenere e scaricare e un modello diverso API da invoke. 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 inoltre inserisce 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.

Per semplificare l'implementazione di questi requisiti per un container personalizzato, sono disponibili due librerie:

  • Multi Model Server è un framework open source per la fornitura di 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 HTTP front-end e gestione dei modelli richieste dagli endpoint multimodello per ospitare più modelli all'interno di un singolo contenitore, caricare e scaricare i modelli dal contenitore in modo dinamico ed eseguire inferenze su un modello caricato specificato. Fornisce inoltre un back-end integrabile che supporta un gestore back-end personalizzato integrabile in cui puoi implementare il tuo algoritmo.

  • SageMaker Inference Toolkit è una libreria che avvia Multi Model Server con una configurazione e impostazioni che lo rendono compatibile con gli endpoint 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 per gli endpoint multimodello su istanze supportate GPU

La funzionalità bring your own container (BYOC) su endpoint multimodello con istanze supportate non è attualmente GPU supportata dalle librerie Multi Model Server e Inference Toolkit. SageMaker

Per creare endpoint multimodello con istanze GPU supportate, puoi utilizzare il Triton Inference Server SageMaker supportato. con i NVIDIATriton Inference Containers. NVIDIA Per portare le tue dipendenze, puoi creare il tuo contenitore con il NVIDIATriton Inference Server SageMaker supportato come immagine di base del tuo file Docker:

FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
Importante

I contenitori con Triton Inference Server sono gli unici contenitori supportati che puoi utilizzare per endpoint multimodello supportati. GPU

Usa l'Inference Toolkit SageMaker

Nota

L' SageMaker Inference Toolkit è supportato solo per CPU gli endpoint multimodello supportati. L' SageMaker Inference Toolkit non è attualmente supportato per gli endpoint multimodello supportati. GPU

I container predefiniti che supportano gli endpoint a più modelli sono elencati in Algoritmi, framework e istanze supportati per endpoint multimodello. Se vuoi utilizzare qualsiasi altro framework o algoritmo, devi creare un container. Il modo più semplice per farlo è utilizzare l'SageMaker Inference Toolkit per estendere un contenitore precostruito esistente. Il toolkit di SageMaker inferenza è un'implementazione per il server multimodello (MMS) che crea endpoint in cui possono essere distribuiti. SageMaker Per un notebook di esempio che mostra come configurare e distribuire un contenitore personalizzato che supporti endpoint multimodello in, consulta il Multi-Model Endpoint Sample Notebook. SageMaker BYOC

Nota

Il toolkit di SageMaker inferenza 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, consultare Contratto per container personalizzati per endpoint a più modelli.

Per estendere un contenitore utilizzando il toolkit di inferenza SageMaker
  1. Crea un handler di modelli. MMSsi aspetta un gestore di modelli, che è un file Python che implementa funzioni per la pre-elaborazione, ottenere previsioni dal modello ed elaborare l'output in un gestore di modelli. Per un esempio di handler di modelli, consulta model_handler.py nel notebook di esempio.

  2. Importa il toolkit di inferenza e usa la sua funzione per iniziare. model_server.start_model_server 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()
  3. 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 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"]
  4. 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 distribuire endpoint multimodello in. SageMaker