Implantar modelos para inferência em tempo real - Amazon SageMaker

Implantar modelos para inferência em tempo real

Importante

Políticas personalizadas do IAM que permitem que o Amazon SageMaker Studio ou o Amazon SageMaker Studio Classic criem recursos do Amazon SageMaker também devem conceder permissões para adicionar tags a esses recursos. A permissão para adicionar tags aos recursos é necessária porque o Studio e o Studio Classic marcam automaticamente todos os recursos que eles criam. Se uma política do IAM permitir que o Studio e o Studio Classic criem recursos, mas não permitir o uso de tags, erros de “AccessDenied” podem ocorrer ao tentar criar recursos. Para obter mais informações, consulte Fornecer permissões para adicionar tags aos recursos do SageMaker.

Políticas gerenciadas pela AWS para o Amazon SageMaker que dão permissões para criar recursos do SageMaker já incluem permissões para adicionar tags ao criar esses recursos.

Há várias opções para implantar um modelo usando os serviços de hospedagem do SageMaker. Você pode implantar um modelo interativamente com o SageMaker Studio. Ou você pode implantar um modelo programaticamente usando um SDK da AWS, como o SageMaker Python ou o SDK para Python (Boto3). Você também pode implantar usando a AWS CLI.

Antes de começar

Antes de criar e implantar um modelo do SageMaker, localize e anote o seguinte:

  • A Região da AWS em que o bucket do Amazon S3 está localizado

  • O caminho do URI do Amazon S3 em que os artefatos do modelo são armazenados

  • O perfil do IAM para o SageMaker

  • O caminho de registro do URI do Docker Amazon ECR para a imagem personalizada que contém o código de inferência ou a estrutura e a versão de uma imagem do Docker integrada compatível e pela AWS.

Para obter uma lista dos Serviços da AWS disponíveis em cada Região da AWS, consulte Mapas de regiões e redes de borda. Para obter informações sobre como criar funções do IAM, consulte Criar funções do IAM.

Importante

O bucket do S3 em que os artefatos do modelo são armazenados deve estar na mesma Região da AWS do modelo que você está criando.

Utilização compartilhada de recursos com vários modelos

Você pode implantar um ou mais modelos em um endpoint com o Amazon SageMaker. Quando vários modelos compartilham um endpoint, eles utilizam em conjunto os recursos que estão hospedados lá, como instâncias de computação de ML, CPUs e aceleradores. A maneira mais flexível de implantar vários modelos em um endpoint é definir cada modelo como um componente de inferência.

Componentes de inferência

Um componente de inferência é um objeto de hospedagem do SageMaker que você pode usar para implantar um modelo em um endpoint. Nas configurações do componente de inferência, você especifica o modelo, o endpoint e como o modelo utiliza os recursos que o endpoint hospeda. Para especificar o modelo, você pode especificar um objeto do SageMaker Model ou diretamente os artefatos e a imagem do modelo.

Nas configurações, você pode otimizar a utilização de recursos, adaptando a forma como os núcleos de CPU, os aceleradores e a memória necessária são alocados ao modelo. Você pode implantar vários componentes de inferência em um endpoint onde cada componente de inferência contém um modelo e as necessidades de utilização de recursos desse modelo.

Depois de implantar um componente de inferência, você pode invocar diretamente o modelo associado ao usar a ação InvokeEndpoint na API do SageMaker.

Os componentes de inferência fornecem os seguintes benefícios:

Flexibilidade

O componente de inferência desacopla os detalhes da hospedagem do modelo do próprio endpoint. Isso fornece mais flexibilidade e controle sobre como os modelos são hospedados e servidos com um endpoint. Você pode hospedar vários modelos na mesma infraestrutura e adicionar ou remover modelos de um endpoint conforme necessário. Você pode atualizar cada modelo de forma independente.

Escalabilidade

Você pode especificar quantas cópias de cada modelo hospedar e definir um número mínimo de cópias para garantir que o modelo seja carregado na quantidade necessária para atender às solicitações. Você pode reduzir a escala horizontalmente de qualquer cópia do componente de inferência até zero, o que abre espaço para aumentar a escala verticalmente de outra cópia.

O SageMaker empacota os modelos como componentes de inferência quando você os implanta usando:

  • SageMaker Studio Classic.

  • SageMaker Python SDK para implantar um objeto Model (onde você define o tipo de endpoint como EndpointType.INFERENCE_COMPONENT_BASED).

  • O AWS SDK for Python (Boto3) para definir objetos InferenceComponent que você implanta em um endpoint.

Implantar modelos com o SageMaker Studio

Conclua as etapas a seguir para criar e implantar interativamente o modelo por meio do SageMaker Studio. Para obter mais informações sobre como configurar o Studio, consulte a documentação do Studio. Para obter mais orientações sobre vários cenários de implantação, consulte o blog Package and deploy classical ML models and LLMs easily with Amazon SageMaker: Part 2.

Preparar artefatos e permissões

Conclua esta seção antes de criar um modelo no SageMaker Studio.

Você tem duas opções para trazer os artefatos e criar um modelo no Studio:

  1. Você pode trazer um arquivo tar.gz pré-empacotado que deve incluir os artefatos do modelo, qualquer código de inferência personalizado e todas as dependências listadas em um arquivo requirements.txt.

  2. O SageMaker pode empacotar os artefatos para você. Você só precisa colocar os artefatos do modelo bruto e todas as dependências em um arquivo requirements.txt e o SageMaker pode fornecer o código de inferência padrão para você (ou você pode substituir o código padrão por um código de inferência personalizado próprio). O SageMaker oferece apoio a essa opção nas seguintes estruturas: PyTorch, XGBoost.

Além de trazer seu modelo, seu perfil AWS Identity and Access Management (IAM) e um contêiner do Docker (ou a estrutura e a versão desejadas para as quais o SageMaker tem um contêiner pré-construído), você também deve conceder permissões para criar e implantar modelos por meio do SageMaker Studio.

Você deve ter a política AmazonSageMakerFullAccess anexada ao perfil do IAM para poder acessar o SageMaker e outros serviços relevantes. Para ver os preços dos tipos de instância no Studio, você também deve anexar a política AWSPriceListServicefullAccess (ou, se não quiser anexar toda a política, mais especificamente, a ação pricing:GetProducts).

Se optar por carregar os artefatos do modelo ao criar um modelo (ou carregar um arquivo de amostra de carga útil para recomendações de inferência), você deverá criar um bucket do Amazon S3. O nome do bucket deve ser prefixado pela palavra SageMaker. Capitalizações alternativas de SageMaker também são aceitáveis: Sagemaker ou sagemaker.

Recomendamos usar a convenção de nomenclatura do bucket sagemaker-{Region}-{accountID}. Esse bucket é usado para armazenar os artefatos que você carrega.

Depois de criar o bucket, anexe a seguinte política de CORS (compartilhamento de recursos de origem cruzada) ao bucket:

[ { "AllowedHeaders": ["*"], "ExposeHeaders": ["Etag"], "AllowedMethods": ["PUT", "POST"], "AllowedOrigins": ['https://*.sagemaker.aws'], } ]

Você pode anexar uma política de CORS a um bucket do Amazon S3 usando qualquer um dos seguintes métodos:

Criar um modelo implantável

Nesta etapa, você cria uma versão implantável do modelo no SageMaker fornecendo artefatos junto com especificações adicionais, como o contêiner e a estrutura desejados, qualquer código de inferência personalizado e as configurações de rede.

Crie um modelo implantável no SageMaker Studio ao fazer o seguinte:

  1. Abra sua aplicação SageMaker Studio.

  2. No painel de navegação à esquerda, selecione Modelos.

  3. Escolha a guia Modelos implantáveis.

  4. Na página Modelos implantáveis, escolha Criar.

  5. Na página Criar modelo implantável, no campo Nome do modelo, insira um nome para o modelo.

Há várias outras seções para você preencher na página Criar modelo implantável.

A seção de Definição de contêiner se parece com a seguinte captura de tela:

Captura de tela da seção de Definição de contêiner para criar um modelo no Studio.
Na seção Definição de contêiner, faça o seguinte:
  1. Em Tipo de contêiner, selecione Contêiner pré-construído se quiser usar um contêiner gerenciado pelo SageMaker ou selecione Trazer um contêiner próprio se você tiver um contêiner próprio.

  2. Se você selecionou Contêiner pré-construído, selecione o Framework do contêiner, a Versão do framework e o Tipo de hardware que gostaria de usar.

  3. Se você selecionou Traga um contêiner próprio, insira um caminho do Amazon ECR em Caminho do ECR até a imagem do contêiner.

Em seguida, preencha a seção Artefatos, que se parece com a seguinte captura de tela:

Captura de tela da seção Artefatos para criar um modelo no Studio.
Para a seção Artefatos, faça o seguinte:
  1. Se você estiver usando um dos frameworks compatíveis com o SageMaker para empacotar artefatos do modelo (PyTorch ou XGBoost), em Artefatos, você pode escolher a opção Carregar artefatos. Com essa opção, é possível simplesmente especificar os artefatos de modelo bruto, qualquer código de inferência personalizado que você tenha e o arquivo requirements.txt. Então, o SageMaker cuida do empacotamento do arquivo para você. Faça o seguinte:

    1. Em Artefatos, selecione Carregar artefatos para continuar fornecendo os arquivos. Caso contrário, se você já tiver um arquivo tar.gz que contém os arquivos de modelo, o código de inferência e o arquivo requirements.txt, selecione Inserir URI do S3 para artefatos pré-empacotados.

    2. Se optar por carregar os artefatos, então, para o bucket do S3, insira o caminho do Amazon S3 até um bucket onde gostaria que o SageMaker armazenasse os artefatos depois de empacotá-los para você. Depois, execute as seguintes etapas:

    3. Em Carregar artefatos do modelo, carregue os arquivos de modelo.

    4. Em Código de inferência, selecione Usar código de inferência padrão se quiser usar o código padrão que o SageMaker fornece para atender à inferência. Caso contrário, selecione Carregar código de inferência personalizado para usar um código de inferência próprio.

    5. Em Carregar requirements.txt, carregue um arquivo de texto que liste todas as dependências que você deseja instalar no runtime.

  2. Se você não estiver usando uma estrutura compatível com o SageMaker para empacotar artefatos do modelo, o Studio mostra a opção Artefatos pré-empacotados e você deve fornecer todos os artefatos já empacotados como um arquivo tar.gz. Faça o seguinte:

    1. Em Artefatos pré-empacotados, selecione Inserir URI do S3 para artefatos de modelo pré-empacotados se você já tiver carregado o arquivo tar.gz para o Amazon S3. Selecione Carregar artefatos de modelos pré-empacotados se quiser carregar o arquivo diretamente para o SageMaker.

    2. Se você selecionou Inserir URI do S3 para artefatos de modelo pré-empacotados, insira o caminho do Amazon S3 até o arquivo para o URI do S3. Caso contrário, selecione e carregue o arquivo a partir da máquina local.

A próxima seção é Segurança, que é semelhante à seguinte captura de tela:

Captura de tela da seção Segurança para criar um modelo no Studio.
Na seção Segurança, faça o seguinte:
  1. Em Perfil do IAM, insira o ARN para um perfil do IAM.

  2. (Opcional) Em Nuvem privada virtual (VPC), você pode selecionar uma Amazon VPC para armazenar a configuração e os artefatos do modelo.

  3. (Opcional) Ative o botão Isolamento de rede se quiser restringir o acesso do container à internet.

Por fim, você pode preencher opcionalmente a seção Opções avançadas, que se parece com a seguinte captura de tela:

Captura de tela da seção Opções avançadas para criar um modelo no Studio.
(Opcional) Na seção Opções avançadas, faça o seguinte:
  1. Ative a opção Recomendações de instância personalizada se quiser executar uma tarefa do Amazon SageMaker Inference Recommender no modelo após sua criação. O Inference Recommender é um recurso que fornece os tipos de instância recomendados para otimizar o desempenho e o custo da inferência. Você pode ver essas recomendações de instância ao se preparar para implantar o modelo.

  2. Em Adicionar variáveis de ambiente, insira variáveis de ambiente para o contêiner como pares de chave-valor.

  3. Em Tags, insira todas as tags como pares de chave-valor.

  4. Depois de concluir a configuração do modelo e do contêiner, escolha Criar modelo implantável.

Agora você deve ter um modelo no SageMaker Studio pronto para implantação.

Implantar o modelo

Por fim, você implanta o modelo que configurou na etapa anterior em um endpoint HTTPS. Você pode implantar um único modelo ou vários modelos no endpoint.

Compatibilidade de modelo e endpoint

Antes de implantar um modelo em um endpoint, o modelo e o endpoint devem ser compatíveis e ter os mesmos valores para as seguintes configurações:

  • O perfil do IAM

  • A Amazon VPC, incluindo suas sub-redes e grupos de segurança

  • O isolamento da rede (habilitado ou desabilitado)

O Studio impede que você implante modelos em endpoints incompatíveis das seguintes maneiras:

  • Se você tentar implantar um modelo em um endpoint novo, o SageMaker configura o endpoint com configurações iniciais compatíveis. Se você quebrar a compatibilidade ao alterar essas configurações, o Studio mostrará um alerta e impedirá a implantação.

  • Se você tentar implantar em um endpoint existente e ele for incompatível, o Studio mostrará um alerta e impedirá a implantação.

  • Se você tentar adicionar vários modelos a uma implantação, o Studio impede a implantação de modelos incompatíveis entre si.

Quando o Studio mostra o alerta sobre a incompatibilidade do modelo e do endpoint, você pode escolher Visualizar detalhes no alerta para ver quais configurações são incompatíveis.

Uma forma de implantar um modelo é fazer o seguinte no Studio:

  1. Abra sua aplicação SageMaker Studio.

  2. No painel de navegação à esquerda, selecione Modelos.

  3. Na página Modelos, selecione um ou mais modelos na lista de modelos do SageMaker.

  4. Escolha Implantar.

  5. Em Nome do endpoint, abra o menu suspenso. Você pode selecionar um endpoint existente ou criar um endpoint novo no qual você implanta o modelo.

  6. Em Tipo de instância, selecione o tipo de instância que você deseja usar para o endpoint. Se você executou anteriormente um trabalho do Inference Recommender para o modelo, os tipos de instância recomendados aparecerão na lista sob o título Recomendado. Caso contrário, você verá algumas Instâncias em potencial que podem ser adequadas para o modelo.

    Compatibilidade de tipo de instância para o JumpStart

    Se você estiver implantando um modelo JumpStart, o Studio mostra apenas os tipos de instância compatíveis com o modelo.

  7. Em Contagem inicial de instâncias, insira o número inicial de instâncias que você gostaria de provisionar para o endpoint.

  8. Em Contagem máxima de instâncias, especifique o número máximo de instâncias que o endpoint pode provisionar ao aumentar a escala verticalmente para acomodar um aumento no tráfego.

  9. Se o modelo que você está implantando for um dos LLMs do JumpStart mais usados do hub de modelos, a opção Configurações alternativas aparecerá após os campos de tipo de instância e contagem de instâncias.

    Para os LLMs do JumpStart mais conhecidos, a AWS tem tipos de instância pré-comparados para otimizar o custo ou o desempenho. Esses dados podem ajudar você a decidir qual tipo de instância usar para implantar o LLM. Escolha Configurações alternativas para abrir uma caixa de diálogo que contém os dados pré-comparados. O painel é semelhante à seguinte captura de tela:

    Captura de tela da caixa Configurações alternativas

    Na caixa Configurações alternativas, faça o seguinte:

    1. Selecione um tipo de instância. Você pode escolher Custo por hora ou Melhor desempenho para ver os tipos de instância que otimizam o custo ou o desempenho para o modelo especificado. Você também pode escolher Outras instâncias compatíveis para ver uma lista de outros tipos de instância compatíveis com o modelo do JumpStart. Observe que selecionar um tipo de instância aqui substitui qualquer seleção de instância anterior especificada na Etapa 6.

    2. (Opcional) Ative a opção Personalizar a configuração selecionada para especificar Número máximo (o número máximo de tokens que você deseja permitir, que é a soma dos tokens de entrada e a saída gerada pelo modelo), Tamanho máximo do token de entrada (o número máximo de tokens que você deseja permitir para a entrada de cada solicitação) e Máximo de solicitações simultâneas (o número máximo de solicitações que o modelo pode processar por vez).

    3. Escolha Selecionar para confirmar o tipo de instância e as configurações.

  10. O campo Modelo já deve estar preenchido com o nome do dos modelos que você está implantando. Você pode escolher Adicionar modelo para adicionar mais modelos à implantação. Para cada modelo adicionado, preencha os seguintes campos:

    1. Em Número de núcleos de CPU, insira os núcleos de CPU que você gostaria de dedicar ao uso do modelo.

    2. Em Número mínimo de cópias, insira o número mínimo de cópias do modelo que você deseja hospedar no endpoint a qualquer momento.

    3. Em Memória mínima da CPU (MB), insira a quantidade mínima de memória (em MB) exigida pelo modelo.

    4. Em Memória máxima da CPU (MB), insira a quantidade máxima de memória (em MB) que você gostaria de permitir que o modelo usasse.

  11. (Opcional) Em Opções avançadas, faça o seguinte:

    1. Para o Perfil do IAM, use o perfil do IAM de execução padrão do SageMaker ou especifique o perfil próprio que tenha as permissões de que você precisa. Observe que esse perfil do IAM deve ser o mesmo que você especificou ao criar o modelo implantável.

    2. Para a Nuvem Privada Virtual (VPC), você pode especificar uma VPC na qual deseja hospedar o endpoint.

    3. Em Chave de criptografia KMS, selecione uma chave do AWS KMS para criptografar dados no volume de armazenamento anexado à instância de computação de ML que hospeda o endpoint.

    4. Ative o botão Habilitar isolamento de rede para restringir o acesso do contêiner à internet.

    5. Em Configuração de tempo limite, insira valores para os campos Tempo limite para baixar dados do modelo (segundos) e Tempo limite de verificação de integridade de inicialização do contêiner (segundos). Esses valores determinam o tempo máximo que o SageMaker permite para baixar o modelo no contêiner e inicializar o contêiner, respectivamente.

    6. Em Tags, insira todas as tags como pares de chave-valor.

    nota

    O SageMaker configura o perfil do IAM, a VPC e as configurações de isolamento de rede com valores iniciais compatíveis com o modelo que você está implantando. Se você quebrar a compatibilidade ao alterar essas configurações, o Studio mostrará um alerta e impedirá a implantação.

Após configurar as opções, a página deve ter a aparência da seguinte captura de tela:

Captura de tela da página Implantar modelo no Studio.

Depois de configurar sua implantação, escolha Implantar para criar o endpoint e implantar o modelo.

Implantar modelos com os SDKs do Python

Usando o SageMaker Python SDK, você pode criar o modelo de duas maneiras. A primeira é criar um objeto de modelo a partir da classe Model ou ModelBuilder. Se usar a classe Model para criar seu objeto Model, você precisará especificar o pacote do modelo ou o código de inferência (dependendo do servidor do modelo), scripts para lidar com a serialização e desserialização de dados entre o cliente e o servidor e quaisquer dependências a serem carregadas no Amazon S3 para consumo. A segunda maneira de criar seu modelo é usar o ModelBuilder para o qual você fornece artefatos de modelo ou código de inferência. O ModelBuilder captura automaticamente as dependências, infere as funções de serialização e desserialização necessárias e empacota as dependências para criar o objeto Model. Para obter mais informações sobre o ModelBuilder, consulte Criar um modelo no Amazon SageMaker com o ModelBuilder.

A seção a seguir descreve os dois métodos para criar o modelo e implantar o objeto de modelo.

Configurar

Os exemplos a seguir preparam o processo de implantação do modelo. Eles importam as bibliotecas necessárias e definem a URL do S3 que localiza os artefatos do modelo.

SageMaker Python SDK
exemplo instruções de importação

O exemplo a seguir importa módulos do SageMaker Python SDK, do SDK for Python (Boto3) e da Python Standard Library. Esses módulos fornecem métodos úteis que ajudam você a implantar modelos e são usados pelos demais exemplos a seguir.

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
exemplo instruções de importação

O exemplo a seguir importa módulos do SDK for Python (Boto3) e da Python Standard Library. Esses módulos fornecem métodos úteis que ajudam você a implantar modelos e são usados pelos demais exemplos a seguir.

import boto3 import botocore import sys import time
boto3 models (without inference components)
exemplo instruções de importação

O exemplo a seguir importa módulos do SDK for Python (Boto3) e da Python Standard Library. Esses módulos fornecem métodos úteis que ajudam você a implantar modelos e são usados pelos demais exemplos a seguir.

import boto3 import botocore import datetime from time import gmtime, strftime
exemplo URL de artefato de modelo

O código a seguir cria um exemplo de URL do Amazon S3. A URL localiza os artefatos de modelo para um modelo pré-treinado em um bucket do 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}"

A URL completa do Amazon S3 é armazenada na variável model_url, que é usada nos exemplos a seguir.

Visão geral

Há várias maneiras de implantar modelos com o SageMaker Python ou o SDK for Python (Boto3). As seções a seguir resumem as etapas que você conclui para várias abordagens possíveis. Essas etapas são demonstradas pelos exemplos a seguir.

SageMaker Python SDK

Usando o SageMaker Python SDK, você pode criar um modelo de uma das seguintes formas:

  • Criar um objeto de modelo a partir da classe Model: Você deve especificar o pacote do modelo ou o código de inferência (dependendo do servidor de modelo), scripts para lidar com a serialização e desserialização de dados entre o cliente e o servidor e quaisquer dependências a serem carregadas no Amazon S3 para consumo.

  • Criar um objeto de modelo a partir da classe ModelBuilder: Você fornece artefatos de modelo ou código de inferência e o ModelBuilder captura automaticamente as dependências, infere as funções de serialização e desserialização necessárias e empacota as dependências para criar o objeto Model.

    Para obter mais informações sobre o ModelBuilder, consulte Criar um modelo no Amazon SageMaker com o ModelBuilder. Você também pode ver o blog Package and deploy classical ML models and LLMs easily with SageMaker: Part 1 para obter mais informações.

Os exemplos a seguir descrevem os dois métodos para criar o modelo e implantar o objeto de modelo. Para implantar um modelo dessas formas, conclua as seguintes etapas:

  1. Defina os recursos do endpoint a serem alocados ao modelo com um objeto ResourceRequirements.

  2. Crie um objeto de modelo a partir das classes Model ou ModelBuilder. O objeto ResourceRequirements é especificado nas configurações do modelo.

  3. Implante o modelo em um endpoint usando o método deploy do objeto Model.

boto3 inference components

Os exemplos a seguir demonstram como atribuir um modelo a um componente de inferência e, depois, implantar o componente de inferência em um endpoint. Para implantar um modelo dessa forma, conclua as seguintes etapas:

  1. (Opcional) Crie um objeto de modelo do SageMaker usando o método create_model.

  2. Especifique as configurações do endpoint criando um objeto de configuração do endpoint. Para criar um, você usa o método create_endpoint_config.

  3. Crie o endpoint usando o método create_endpoint e, na solicitação, forneça a configuração de endpoint que você criou.

  4. Crie um componente de inferência usando o método create_inference_component. Nas configurações, você especifica um modelo executando uma das seguintes ações:

    • Especificação de um objeto do modelo do SageMaker

    • Especificação do URI da imagem do modelo e o URL do S3

    Você também aloca recursos de endpoint para o modelo. Ao criar o componente de inferência, você implanta o modelo no endpoint. Você pode implantar vários modelos em um endpoint criando vários componentes de inferência, um para cada modelo.

boto3 models (without inference components)

Os exemplos a seguir demonstram como criar um objeto de modelo e, depois, implantar o modelo em um endpoint. Para implantar um modelo dessa forma, conclua as seguintes etapas:

  1. Crie um modelo do SageMaker usando o método create_model.

  2. Especifique as configurações do endpoint criando um objeto de configuração do endpoint. Para criar um, você usa o método create_endpoint_config. Na configuração do endpoint, você atribui o objeto do modelo a uma variante de produção.

  3. Crie o endpoint usando o método create_endpoint. Na solicitação, forneça a configuração do endpoint que você criou.

    Quando você cria o endpoint, o SageMaker provisiona os recursos do endpoint e implanta o modelo no endpoint.

Configurar

Os exemplos a seguir configuram os recursos necessários para implantar um modelo em um endpoint.

SageMaker Python SDK

O exemplo a seguir atribui os recursos de endpoint a um modelo com um objeto ResourceRequirements. Esses recursos incluem núcleos de CPU, aceleradores e memória. Em seguida, o exemplo cria um objeto de modelo a partir da classe Model. Como alternativa, você pode criar um objeto de modelo instanciando a classe ModelBuilder e executando a build. Esse método também é mostrado no exemplo. O ModelBuilder fornece uma interface unificada para empacotamento de modelos e, nessa instância, prepara um modelo para a implantação de um modelo grande. O exemplo utiliza o ModelBuilder para construir um modelo Hugging Face. (Você também pode passar um modelo JumpStart). Depois de criar o modelo, você pode especificar os requisitos de recursos no objeto do modelo. Na próxima etapa, você usará esse objeto para implantar o modelo em um 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

O exemplo a seguir configura uma integração para o método create_endpoint_config com um endpoint HTTP. Você atribui essa configuração a um endpoint ao criá-lo. Na configuração, defina uma ou mais variantes de produção. Para cada variante, você pode escolher o tipo de instância que deseja que o Amazon SageMaker provisione e habilitar o ajuste de escala das instâncias gerenciadas.

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)
exemplo definição do modelo

O exemplo a seguir define um modelo do SageMaker com o método create_model no 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, } )

Este exemplo usa o seguinte:

  • ModelName: um nome para seu modelo (neste exemplo, ele é armazenado como uma variável de string chamada model_name).

  • ExecutionRoleArn: o nome do recurso da Amazon (ARN) do perfil do IAM que o Amazon SageMaker pode aceitar para acessar artefatos de modelo e imagem do Docker para implantação em instâncias de computação de ML ou para trabalhos de transformação de lotes.

  • PrimaryContainer: A localização da imagem do Docker primária que contém código de inferência, artefatos associados e mapas de ambiente personalizado usado pelo código de inferência quando o modelo é implantado para predições.

exemplo configuração do endpoint

O exemplo a seguir configura uma integração para o método create_endpoint_config com um endpoint HTTP. O Amazon SageMaker usa esta configuração para implantar modelos. Na configuração, você identifica um ou mais modelos, criados usando o método create_model, para implantar os recursos que você deseja que o Amazon SageMaker provisione.

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. } ] )

Este exemplo especifica as seguintes chaves para o campo ProductionVariants:

Implantar

Os exemplos a seguir implantam um modelo em um endpoint.

SageMaker Python SDK

O exemplo a seguir implanta o modelo em um endpoint HTTPS em tempo real com o método deploy do objeto do modelo. Se você especificar um valor para o argumento resources tanto para a criação quanto para a implantação do modelo, os recursos especificados para implantação terão precedência.

predictor = model.deploy( initial_instance_count = 1, instance_type = "ml.p4d.24xlarge", endpoint_type = EndpointType.INFERENCE_COMPONENT_BASED, resources = resources, )

Para o campo instance_type, o exemplo especifica o nome do tipo de instância do Amazon EC2 para o modelo. Para o campo initial_instance_count, ele especifica o número inicial de instâncias nas quais executar o endpoint.

O exemplo de código a seguir demonstra outro caso em que você implanta um modelo em um endpoint e depois implanta outro modelo no mesmo endpoint. Nesse caso, você deve fornecer o mesmo nome de endpoint para os métodos deploy de ambos os modelos.

# 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

Depois de ter uma configuração de endpoint, use o método create_endpoint para criar o endpoint. O nome do endpoint deve ser exclusivo em uma Região da AWS na conta da AWS.

O recurso abaixo cria um endpoint usando a configuração de endpoint especificada na solicitação. O Amazon SageMaker usa o endpoint para provisionar recursos.

sagemaker_client.create_endpoint( EndpointName = endpoint_name, EndpointConfigName = endpoint_config_name, )

Depois de criar um endpoint, você pode implantar um ou modelos nele criando componentes de inferência. O seguinte exemplo cria um com o método 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)
exemplo implantação

Forneça a configuração de endpoint ao SageMaker. O serviço inicia as instâncias de cálculo de ML e implanta o modelo ou modelos conforme especificado na configuração.

Depois de ter o modelo e configuração de endpoint, use o método create_endpoint para criar o endpoint. O nome do endpoint deve ser exclusivo em uma Região da AWS na conta da AWS.

O recurso abaixo cria um endpoint usando a configuração de endpoint especificada na solicitação. O Amazon SageMaker usa o endpoint para provisionar recursos e implantar modelos.

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")

Implantar modelos com a AWS CLI

Você pode implantar um modelo em um endpoint usando a AWS CLI.

Visão geral

Ao implantar um modelo com a AWS CLI, você pode implantá-lo com ou sem um componente de inferência. As seguintes seções resumem os comandos que você executa para ambas as abordagens: Esses comandos são demonstrados pelos exemplos a seguir.

With inference components

Para implantar um modelo com um componente de inferência, faça o seguinte:

  1. (Opcional) Crie um modelo com o comando create-model.

  2. Especifique as configurações do endpoint ao criar uma configuração de endpoint. Para criar uma, execute o comando create-endpoint-config.

  3. Crie o endpoint usando o comando create-endpoint. No corpo do comando, especifique a configuração do endpoint que você criou.

  4. Crie um componente de inferência usando o comando create-inference-component. Nas configurações, você especifica um modelo executando uma das seguintes ações:

    • Especificação de um objeto do modelo do SageMaker

    • Especificação do URI da imagem do modelo e o URL do S3

    Você também aloca recursos de endpoint para o modelo. Ao criar o componente de inferência, você implanta o modelo no endpoint. Você pode implantar vários modelos em um endpoint criando vários componentes de inferência, um para cada modelo.

Without inference components

Para implantar um modelo sem usar um componente de inferência, faça o seguinte:

  1. Crie um modelo do SageMaker usando o comando create-model.

  2. Especifique as configurações do endpoint criando um objeto de configuração do endpoint. Para criar um, use o comando create-endpoint-config. Na configuração do endpoint, você atribui o objeto do modelo a uma variante de produção.

  3. Crie o endpoint usando o comando create-endpoint. No corpo do comando, especifique a configuração do endpoint que você criou.

    Quando você cria o endpoint, o SageMaker provisiona os recursos do endpoint e implanta o modelo no endpoint.

Configurar

Os exemplos a seguir configuram os recursos necessários para implantar um modelo em um endpoint.

With inference components
exemplo comando create-endpoint-config

O exemplo a seguir cria uma configuração de endpoint com o 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

Neste exemplo, o arquivo production-variants.json define uma variante de produção com o seguinte JSON:

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

Se o comando for bem-sucedido, o AWS CLI responde com o ARN do recurso que você criou.

{ "EndpointConfigArn": "arn:aws:sagemaker:us-west-2:111122223333:endpoint-config/endpoint-config-name" }
Without inference components
exemplo comando create-model

O exemplo a seguir cria um modelo com o 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 o comando for bem-sucedido, o AWS CLI responde com o ARN do recurso que você criou.

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

O exemplo a seguir cria uma configuração de endpoint com o comando create-endpoint-config.

aws sagemaker create-endpoint-config \ --endpoint-config-name endpoint-config-name \ --production-variants file://production-variants.json

Neste exemplo, o arquivo production-variants.json define uma variante de produção com o seguinte JSON:

[ { "VariantName": "variant-name", "ModelName": "model-name", "InstanceType": "ml.p4d.24xlarge", "InitialInstanceCount": 1 } ]

Se o comando for bem-sucedido, o AWS CLI responde com o ARN do recurso que você criou.

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

Implantar

Os exemplos a seguir implantam um modelo em um endpoint.

With inference components
exemplo Comando create-endpoint

O exemplo a seguir cria um endpoint com o comando create-endpoint.

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

Se o comando for bem-sucedido, o AWS CLI responde com o ARN do recurso que você criou.

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

O exemplo a seguir cria um componente de inferência com o 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}"

Neste exemplo, o arquivo specification.json define o contêiner e os recursos de computação com o seguinte JSON:

{ "Container": { "Image": "image-uri", "ArtifactUrl": "model-s3-url" }, "ComputeResourceRequirements": { "NumberOfCpuCoresRequired": 1, "MinMemoryRequiredInMb": 1024 } }

Se o comando for bem-sucedido, o AWS CLI responde com o ARN do recurso que você criou.

{ "InferenceComponentArn": "arn:aws:sagemaker:us-west-2:111122223333:inference-component/inference-component-name" }
Without inference components
exemplo Comando create-endpoint

O exemplo a seguir cria um endpoint com o comando create-endpoint.

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

Se o comando for bem-sucedido, o AWS CLI responde com o ARN do recurso que você criou.

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