As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Crie seu próprio contêiner para endpoints SageMaker de vários modelos
Consulte as seções a seguir para trazer seu próprio contêiner e dependências para endpoints de vários modelos.
Tópicos
- Traga suas próprias dependências para endpoints de vários modelos em instâncias apoiadas CPU
- Traga suas próprias dependências para endpoints de vários modelos em instâncias apoiadas GPU
- Use o kit de ferramentas de SageMaker inferência
- Contrato para contêineres personalizados para endpoints de vários modelos
Traga suas próprias dependências para endpoints de vários modelos em instâncias apoiadas CPU
Se nenhuma das imagens de contêiner pré-criadas atender às suas necessidades, você poderá criar seu próprio contêiner para uso com endpoints multimodelo CPU suportados.
Espera-se que as imagens personalizadas do Amazon Elastic Container Registry (AmazonECR) implantadas na Amazon SageMaker sigam o contrato básico descrito em, Código de inferência personalizado com serviços de hospedagem que rege como SageMaker interage com um contêiner Docker que executa seu próprio código de inferência. Para que um contêiner seja capaz de carregar e servir vários modelos simultaneamente, há outros APIs comportamentos que devem ser seguidos. Esse contrato adicional inclui modelos novos APIs para carregar, listar, obter e descarregar, e um diferente API para invocar modelos. Também há comportamentos diferentes para cenários de erro que APIs você precisa seguir. Para indicar que o contêiner está em conformidade com os requisitos adicionais, você pode adicionar o seguinte comando ao arquivo do Docker:
LABEL com.amazonaws.sagemaker.capabilities.multi-models=true
SageMaker também injeta uma variável de ambiente no contêiner
SAGEMAKER_MULTI_MODEL=true
Se você estiver criando um endpoint de vários modelos para uma linha de pipeline de inferência serial, seu arquivo Docker deverá ter os rótulos necessários tanto para pipelines de inferência serial quanto para pipelines de vários modelos. Para mais informações sobre pipelines de informações seriais, consulte Executar previsões em tempo real com um pipeline de inferência.
Para ajudá-lo a implementar esses requisitos para um contêiner personalizado, duas bibliotecas estão disponíveis:
-
O Multi Model Server
é uma estrutura de código aberto para servir modelos de aprendizado de máquina que podem ser instalados em contêineres para fornecer o front-end que atenda aos requisitos do novo contêiner de endpoint multimodelo. APIs Ele fornece os recursos de HTTP front-end e gerenciamento de modelos exigidos pelos endpoints de vários modelos para hospedar vários modelos em um único contêiner, carregar e descarregar modelos do contêiner dinamicamente e realizar inferência em um modelo carregado especificado. Ela também fornece um back-end conectável compatível com um manipulador de back-end conectável personalizado em que você pode implementar seu próprio algoritmo. -
SageMaker O Inference Toolkit
é uma biblioteca que inicializa o Multi Model Server com uma configuração e configurações que o tornam compatível com endpoints de vários modelos. SageMaker Ela também permite ajustar parâmetros de desempenho importantes, como o número de operadores por modelo, dependendo das necessidades do seu cenário.
Traga suas próprias dependências para endpoints de vários modelos em instâncias apoiadas GPU
Atualmente, o recurso bring your own container (BYOC) em endpoints multimodelo com instâncias GPU apoiadas não é suportado pelas bibliotecas Multi Model Server e SageMaker Inference Toolkit.
Para criar endpoints de vários modelos com instâncias GPU suportadas, você pode usar o Triton Inference Server SageMaker compatível com os NVIDIA Triton Inference Containers. NVIDIA
FROM 301217895009.dkr.ecr.us-west-2.amazonaws.com/sagemaker-tritonserver:22.07-py3
Importante
Os contêineres com o Triton Inference Server são os únicos contêineres compatíveis que você pode usar para endpoints GPU multimodelo suportados.
Use o kit de ferramentas de SageMaker inferência
nota
O SageMaker Inference Toolkit só é compatível com endpoints CPU multimodelo suportados. Atualmente, o SageMaker Inference Toolkit não é compatível com endpoints GPU multimodelo suportados.
Contêineres pré-construídos que oferecem suporte a endpoints de vários modelos estão listados em Algoritmos, estruturas e instâncias compatíveis para endpoints de vários modelos. Se você quiser usar qualquer outra estrutura de trabalho ou algoritmo, será necessário criar um contêiner. A maneira mais fácil de fazer isso é usar o SageMaker Inference Toolkit
nota
O kit de ferramentas de SageMaker inferência suporta somente manipuladores de modelos Python. Se você quiser implementar seu manipulador em qualquer outra linguagem, deverá criar seu próprio contêiner que implemente o endpoint multimodelo adicional. APIs Para ter mais informações, consulte Contrato para contêineres personalizados para endpoints de vários modelos.
Para estender um contêiner usando o kit de ferramentas de SageMaker inferência
-
Crie um manipulador de modelo. MMSespera um manipulador de modelo, que é um arquivo Python que implementa funções para pré-processar, obter predições do modelo e processar a saída em um manipulador de modelo. Para obter um exemplo de um manipulador de modelo, consulte model_handler.py
no bloco de anotações de exemplo. -
Importe o kit de ferramentas de inferência e use sua
model_server.start_model_server
função para começar. MMS O exemplo a seguir é do arquivodockerd-entrypoint.py
do bloco de anotações de exemplo. Observe que a chamada paramodel_server.start_model_server
transmite o manipulador de modelo descrito na etapa anterior: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()
-
No
Dockerfile
, copie o manipulador de modelo da primeira etapa e especifique o arquivo Python da etapa anterior como o ponto de entrada noDockerfile
. As linhas a seguir são do Dockerfileusado no bloco de anotações de exemplo: # 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"]
-
Crie e registre o contêiner. O seguinte script de shell do caderno de exemplo constrói o contêiner e o carrega em um repositório do Registro de Contêiner Elástico da Amazon (Amazon ECR) na sua conta 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}
Agora você pode usar esse contêiner para implantar endpoints de vários modelos em. SageMaker