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
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:
-
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 arquivorequirements.txt
. -
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-{
. Esse bucket é usado para armazenar os artefatos que você carrega.Region
}-{accountID
}
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:
-
Por meio da página Editar compartilhamento de recursos entre origens (CORS)
no console do Amazon S3 -
Usar a API PutBucketCors do Amazon S3.
-
Usar o comando put-bucket-cors da AWS CLI:
aws s3api put-bucket-cors --bucket="..." --cors-configuration="..."
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:
-
Abra sua aplicação SageMaker Studio.
-
No painel de navegação à esquerda, selecione Modelos.
-
Escolha a guia Modelos implantáveis.
-
Na página Modelos implantáveis, escolha Criar.
-
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:
Na seção Definição de contêiner, faça o seguinte:
-
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.
-
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.
-
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:
Para a seção Artefatos, faça o seguinte:
-
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:
-
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 arquivorequirements.txt
, selecione Inserir URI do S3 para artefatos pré-empacotados. -
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:
-
Em Carregar artefatos do modelo, carregue os arquivos de modelo.
-
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.
-
Em Carregar requirements.txt, carregue um arquivo de texto que liste todas as dependências que você deseja instalar no runtime.
-
-
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:-
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. -
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:
Na seção Segurança, faça o seguinte:
-
Em Perfil do IAM, insira o ARN para um perfil do IAM.
-
(Opcional) Em Nuvem privada virtual (VPC), você pode selecionar uma Amazon VPC para armazenar a configuração e os artefatos do modelo.
-
(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:
(Opcional) Na seção Opções avançadas, faça o seguinte:
-
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.
-
Em Adicionar variáveis de ambiente, insira variáveis de ambiente para o contêiner como pares de chave-valor.
-
Em Tags, insira todas as tags como pares de chave-valor.
-
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:
-
Abra sua aplicação SageMaker Studio.
-
No painel de navegação à esquerda, selecione Modelos.
-
Na página Modelos, selecione um ou mais modelos na lista de modelos do SageMaker.
-
Escolha Implantar.
-
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.
-
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.
-
Em Contagem inicial de instâncias, insira o número inicial de instâncias que você gostaria de provisionar para o endpoint.
-
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.
-
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:
Na caixa Configurações alternativas, faça o seguinte:
-
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.
-
(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).
-
Escolha Selecionar para confirmar o tipo de instância e as configurações.
-
-
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:
-
Em Número de núcleos de CPU, insira os núcleos de CPU que você gostaria de dedicar ao uso do modelo.
-
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.
-
Em Memória mínima da CPU (MB), insira a quantidade mínima de memória (em MB) exigida pelo modelo.
-
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.
-
-
(Opcional) Em Opções avançadas, faça o seguinte:
-
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.
-
Para a Nuvem Privada Virtual (VPC), você pode especificar uma VPC na qual deseja hospedar o endpoint.
-
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.
-
Ative o botão Habilitar isolamento de rede para restringir o acesso do contêiner à internet.
-
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.
-
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:
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.
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.
Configurar
Os exemplos a seguir configuram os recursos necessários para implantar um modelo em um endpoint.
Implantar
Os exemplos a seguir implantam um modelo em um endpoint.
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.
Configurar
Os exemplos a seguir configuram os recursos necessários para implantar um modelo em um endpoint.
Implantar
Os exemplos a seguir implantam um modelo em um endpoint.