Crie seu próprio contêiner para endpoints multimodelo de SageMaker IA - SageMaker IA da Amazon

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 multimodelo de SageMaker IA

Consulte as seções a seguir para trazer seu próprio contêiner e dependências para endpoints multimodelo.

Traga suas próprias dependências para endpoints multimodelo em instâncias com compatibilidade com 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 com compatibilidade com CPU.

Espera-se que as imagens personalizadas do Amazon Elastic Container Registry (Amazon ECR) implantadas no SageMaker Amazon AI sigam o contrato básico Código de inferência personalizado com serviços de host descrito em que SageMaker rege como a IA 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 novos modelos APIs para carregar, listar, obter e descarregar, além de uma API diferente 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 A IA também injeta uma variável de ambiente no contêiner

SAGEMAKER_MULTI_MODEL=true

Se você estiver criando um endpoint multimodelo 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 prediçõ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 Ela fornece os recursos de gerenciamento de modelos e o front-end HTTP exigidos pelos endpoints multimodelo para hospedar vários modelos em um único contêiner, carregar modelos e descarregar modelos para dentro e fora do contêiner dinamicamente, e executa a inferência em um modelo carregado especificado. Ela também fornece um backend conectável compatível com um manipulador de backend conectável personalizado em que você pode implementar seu próprio algoritmo.

  • SageMaker O AI Inference Toolkit é uma biblioteca que inicializa o Multi Model Server com uma configuração e configurações que o tornam compatível com endpoints multimodelo de IA. 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 multimodelo em instâncias compatíveis com GPU

Atualmente, o recurso Bring Your Own Container (BYOC) em endpoints multimodelo com instâncias baseadas em GPU não é suportado pelas bibliotecas Multi Model Server e SageMaker AI Inference Toolkit.

Para criar endpoints de vários modelos com instâncias apoiadas por GPU, você pode usar o NVIDIA Triton Inference Server compatível com SageMaker IA. Com os contêineres de inferência NVIDIA Triton. Para trazer suas próprias dependências, você pode criar seu próprio contêiner com o NVIDIA Triton Inference Server compatível com SageMaker IA como imagem base para seu arquivo Docker:

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 multimodelo com compatibilidade com GPU.

Use o kit de ferramentas de inferência de SageMaker IA

nota

O kit de ferramentas de inferência de SageMaker IA só é compatível com endpoints multimodelo suportados por CPU. Atualmente, o SageMaker AI Inference Toolkit não é compatível com endpoints multimodelo suportados por GPU.

Contêineres pré-construídos que oferecem apoio a endpoints multimodelo estão listados em Algoritmos, frameworks e instâncias compatíveis para endpoints multimodelo. 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 AI Inference Toolkit para estender um contêiner pré-construído existente. O kit de ferramentas de inferência de SageMaker IA é uma implementação para o servidor multimodelo (MMS) que cria endpoints que podem ser implantados na IA. SageMaker Para ver um exemplo de notebook que mostra como configurar e implantar um contêiner personalizado que oferece suporte a endpoints multimodelo em SageMaker IA, consulte o Notebook de amostra BYOC de endpoint multimodelo.

nota

O kit de ferramentas de inferência de SageMaker IA é compatível somente com 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 multimodelo.

Para estender um contêiner usando o kit de ferramentas de inferência de SageMaker IA
  1. Crie um manipulador de modelo. O MMS espera um manipulador de modelo, que é um arquivo Python que implementa funções para pré-processar, obter predições de 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 caderno de exemplo.

  2. Importe o toolkit de inferência e use sua função model_server.start_model_server para iniciar o MMS. O exemplo a seguir é do arquivo dockerd-entrypoint.py do caderno de exemplo. Observe que a chamada para model_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()
  3. No Dockerfile, copie o manipulador de modelo da primeira etapa e especifique o arquivo Python da etapa anterior como o ponto de entrada no Dockerfile. As linhas a seguir são do Dockerfile usado no caderno 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"]
  4. 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 na SageMaker IA.