À medida que o aprendizado de máquina (ML) se torna popular e ganha maior adoção, os aplicativos de inferência baseados em ML estão se tornando cada vez mais comuns para resolver uma série de problemas de negócios complexos. A solução para esses problemas de negócios complexos geralmente requer o uso de vários modelos e etapas de ML. Esta postagem mostra como criar e hospedar um aplicativo de ML com contêineres personalizados em Amazon Sage Maker.
Ofertas do Amazon SageMaker algoritmos integrados e SageMaker pré-construído imagens docker para implantação de modelo. Mas, se isso não atender às suas necessidades, você pode trazer seus próprios contêineres (BYOC) para hospedagem no Amazon SageMaker.
Existem vários casos de uso em que os usuários podem precisar de BYOC para hospedagem no Amazon SageMaker.
- Estruturas ou bibliotecas de ML personalizadas: se você planeja usar uma estrutura ou bibliotecas de ML que não sejam compatíveis com algoritmos integrados ou contêineres pré-criados do Amazon SageMaker, será necessário criar um contêiner personalizado.
- Modelos especializados: para determinados domínios ou setores, você pode precisar de arquiteturas de modelo específicas ou etapas de pré-processamento personalizadas que não estão disponíveis nas ofertas integradas do Amazon SageMaker.
- Algoritmos proprietários: se você desenvolveu seus próprios algoritmos proprietários internamente, precisará de um contêiner personalizado para implantá-los no Amazon SageMaker.
- Pipelines de inferência complexos: se o seu fluxo de trabalho de inferência de ML envolver lógica de negócios personalizada (uma série de etapas complexas que precisam ser executadas em uma ordem específica), o BYOC poderá ajudá-lo a gerenciar e orquestrar essas etapas com mais eficiência.
Visão geral da solução
Nesta solução, mostramos como hospedar um aplicativo de inferência serial de ML no Amazon SageMaker com endpoints em tempo real usando dois contêineres de inferência personalizados com os mais recentes scikit-learn
e xgboost
pacotes.
O primeiro contêiner usa um scikit-learn
modelo para transformar dados brutos em colunas em destaque. Se aplica StandardScaler para colunas numéricas e OneHotEncoder para os categóricos.
O segundo contêiner hospeda um pré-treinado XGboost
modelo (ou seja, preditor). O modelo preditor aceita as previsões de entrada e saída caracterizadas.
Por último, implantamos o apresentador e preditor em um pipeline de inferência serial para um endpoint em tempo real do Amazon SageMaker.
Aqui estão algumas considerações diferentes sobre por que você pode querer ter contêineres separados em seu aplicativo de inferência.
- Dissociação – Várias etapas do pipeline têm uma finalidade claramente definida e precisam ser executadas em contêineres separados devido às dependências subjacentes envolvidas. Isso também ajuda a manter o pipeline bem estruturado.
- Quadros – Várias etapas do pipeline usam estruturas específicas para fins específicos (como scikit ou Spark ML) e, portanto, precisam ser executadas em contêineres separados.
- Isolamento de recursos – Várias etapas do pipeline têm requisitos de consumo de recursos variados e, portanto, precisam ser executados em contêineres separados para maior flexibilidade e controle.
- Manutenção e atualizações – Do ponto de vista operacional, isso promove o isolamento funcional e você pode continuar a atualizar ou modificar etapas individuais com muito mais facilidade, sem afetar outros modelos.
Além disso, a construção local de contêineres individuais ajuda no processo iterativo de desenvolvimento e teste com ferramentas favoritas e ambientes de desenvolvimento integrados (IDEs). Quando os contêineres estiverem prontos, você poderá implantá-los na nuvem AWS para inferência usando endpoints do Amazon SageMaker.
A implementação completa, incluindo trechos de código, está disponível neste repositório Github SUA PARTICIPAÇÃO FAZ A DIFERENÇA.
Pré-requisitos
À medida que testamos esses contêineres personalizados localmente primeiro, precisaremos do docker desktop instalado em seu computador local. Você deve estar familiarizado com a construção de contêineres docker.
Você também precisará de uma conta AWS com acesso ao Amazon SageMaker, Amazon ECR e Amazon S3 para testar este aplicativo de ponta a ponta.
Certifique-se de ter a versão mais recente do Boto3
e os pacotes Python do Amazon SageMaker instalados:
Passo a passo da solução
Crie um contêiner de destaque personalizado
Para construir o primeiro contêiner, o contêiner featureizer, treinamos um scikit-learn
modelo para processar recursos brutos no abalone conjunto de dados. O script de pré-processamento usa SimplesImputador para lidar com valores ausentes, StandardScaler para normalizar colunas numéricas, e OneHotEncoder para transformar colunas categóricas. Após encaixar o transformador, salvamos o modelo em joblib formatar. Em seguida, compactamos e carregamos esse artefato de modelo salvo em um Amazon Simple Storage Service (Amazon S3) balde.
Aqui está um trecho de código de exemplo que demonstra isso. Referir-se recurso.ipynb para implementação completa:
A seguir, para criar um contêiner de inferência personalizado para o modelo do featurizer, construímos uma imagem Docker com pacotes nginx, gunicorn, flask, junto com outras dependências necessárias para o modelo do featurizer.
Nginx, gunicorn e o aplicativo Flask servirão como modelo de pilha de serviços em endpoints em tempo real do Amazon SageMaker.
Ao trazer contêineres personalizados para hospedagem no Amazon SageMaker, precisamos garantir que o script de inferência execute as seguintes tarefas após ser iniciado dentro do contêiner:
- Carregamento do modelo: Script de inferência (
preprocessing.py
) deve referir-se a/opt/ml/model
diretório para carregar o modelo no contêiner. Os artefatos de modelo no Amazon S3 serão baixados e montados no contêiner no caminho/opt/ml/model
. - Variáveis ambientais: Para passar variáveis de ambiente personalizadas para o contêiner, você deve especificá-las durante o Modelo etapa de criação ou durante Ponto final criação a partir de um trabalho de treinamento.
- Requisitos da API: O script de inferência deve implementar ambos
/ping
e/invocations
rotas como um aplicativo Flask. O/ping
A API é usada para verificações de integridade, enquanto a/invocations
API lida com solicitações de inferência. - Exploração madeireira: Os logs de saída no script de inferência devem ser gravados na saída padrão (stdout) e erro padrão (stderr) fluxos. Esses logs são então transmitidos para Amazon CloudWatch pela Amazon SageMaker.
Aqui está um trecho de preprocessing.py
que mostram a implementação de /ping
e /invocations
.
Consulte pré-processamento.py na pasta featureizer para implementação completa.
Construir imagem Docker com featureizer e pilha de serviço de modelo
Vamos agora construir um Dockerfile usando uma imagem base personalizada e instalar as dependências necessárias.
Para isso, usamos python:3.9-slim-buster
como imagem base. Você pode alterar isso para qualquer outra imagem base relevante ao seu caso de uso.
Em seguida, copiamos a configuração do nginx, o arquivo de gateway do servidor web do gunicorn e o script de inferência para o contêiner. Também criamos um script python chamado serve que inicia processos nginx e gunicorn em segundo plano e define o script de inferência (ou seja, aplicativo Flask preprocessing.py) como o ponto de entrada para o contêiner.
Aqui está um trecho do Dockerfile para hospedar o modelo do featurizer. Para implementação completa, consulte dockerfile para apresentador pasta.
Teste a imagem de inferência personalizada com o recurso localmente
Agora, crie e teste o contêiner de inferência personalizado com o featurerizador localmente, usando Amazon Modo local do SageMaker. O modo local é perfeito para testar scripts de processamento, treinamento e inferência sem iniciar nenhum trabalho no Amazon SageMaker. Depois de confirmar os resultados dos testes locais, você poderá adaptar facilmente os scripts de treinamento e inferência para implantação no Amazon SageMaker com alterações mínimas.
Para testar a imagem personalizada do featureizer localmente, primeiro crie a imagem usando o definido anteriormente dockerfile. Em seguida, inicie um contêiner montando o diretório que contém o modelo do featureizer (preprocess.joblib
) ao /opt/ml/model
diretório dentro do contêiner. Além disso, mapeie a porta 8080 do contêiner para o host.
Depois de iniciado, você pode enviar solicitações de inferência para http://localhost:8080/invocations.
Para construir e iniciar o contêiner, abra um terminal e execute os seguintes comandos.
Observe que você deve substituir o <IMAGE_NAME>
, conforme mostrado no código a seguir, com o nome da imagem do seu contêiner.
O comando a seguir também assume que o treinado scikit-learn
modelo (preprocess.joblib
) está presente em um diretório chamado models
.
Depois que o contêiner estiver instalado e funcionando, podemos testar os dois / ping e /invocações rotas usando comandos curl.
Execute os comandos abaixo em um terminal
Quando dados brutos (não transformados) são enviados para http://localhost:8080/invocations, o endpoint responde com dados transformados.
Você deverá ver uma resposta semelhante à seguinte:
Agora encerramos o contêiner em execução e, em seguida, marcamos e enviamos a imagem personalizada local para um Amazon Elastic Container Registry privado (ECR da Amazon) repositório.
Consulte os comandos a seguir para fazer login no Amazon ECR, que marca a imagem local com o caminho completo da imagem do Amazon ECR e, em seguida, envia a imagem para o Amazon ECR. Certifique-se de substituir region
e account
variáveis para corresponder ao seu ambiente.
Consulte criar um repositório e enviar uma imagem para o Amazon ECR Interface de linha de comando da AWS (CLI da AWS) comandos para obter mais informações.
Passo opcional
Opcionalmente, você pode realizar um teste em tempo real implantando o modelo do featureizer em um endpoint em tempo real com a imagem do Docker personalizada no Amazon ECR. Referir-se recurso.ipynb notebook para implementação completa de construção, teste e envio da imagem personalizada para o Amazon ECR.
O Amazon SageMaker inicializa o endpoint de inferência e copia os artefatos do modelo para o /opt/ml/model
diretório dentro do contêiner. Ver Como o SageMaker carrega os artefatos do seu modelo.
Crie um contêiner preditor XGBoost personalizado
Para construir o contêiner de inferência XGBoost, seguimos etapas semelhantes às que fizemos ao construir a imagem para o contêiner do featureizer:
- Baixe pré-treinado
XGBoost
modelo do Amazon S3. - Criar o
inference.py
script que carrega o pré-treinadoXGBoost
modelo, converte os dados de entrada transformados recebidos do featurizer e converte paraXGBoost.DMatrix
formato, é executadopredict
no booster e retorna previsões no formato json. - Scripts e arquivos de configuração que formam a pilha de serviço do modelo (ou seja,
nginx.conf
,wsgi.py
eserve
permanecem os mesmos e não precisam de modificação. - Usamos
Ubuntu:18.04
como imagem base para o Dockerfile. Este não é um pré-requisito. Usamos a imagem base do Ubuntu para demonstrar que contêineres podem ser construídos com qualquer imagem base. - As etapas para criar a imagem do Docker do cliente, testar a imagem localmente e enviar a imagem testada para o Amazon ECR permanecem as mesmas de antes.
Para resumir, como as etapas são semelhantes mostradas anteriormente; no entanto, mostramos apenas a codificação alterada a seguir.
Em primeiro lugar, o inference.py
roteiro. Aqui está um trecho que mostra a implementação de /ping
e /invocations
. Referir-se inferência.py sob a preditor pasta para implementação completa deste arquivo.
Aqui está um trecho do Dockerfile para hospedar o modelo preditor. Para implementação completa, consulte dockerfile na pasta do preditor.
Em seguida, continuamos a criar, testar e enviar essa imagem preditiva personalizada para um repositório privado no Amazon ECR. Referir-se preditor.ipynb notebook para implementação completa de construção, teste e envio da imagem personalizada para o Amazon ECR.
Implantar pipeline de inferência serial
Depois de testarmos as imagens do featurizador e do preditor e enviá-las para o Amazon ECR, agora carregamos nossos artefatos de modelo em um bucket do Amazon S3.
Em seguida, criamos dois objetos modelo: um para o featurizer
(Isto é, preprocess.joblib
) e outro para predictor
(Isto é, xgboost-model
) especificando o uri de imagem personalizado que construímos anteriormente.
Aqui está um trecho que mostra isso. Referir-se serial-inference-pipeline.ipynb para plena implementação.
Agora, para implantar esses contêineres em série, primeiro criamos um Modelo de pipeline objeto e passar o featurizer
modelo e o predictor
model para um objeto de lista python na mesma ordem.
Então, chamamos o .deploy()
método no Modelo de pipeline especificando o tipo de instância e a contagem de instâncias.
Nesse estágio, o Amazon SageMaker implanta o pipeline de inferência serial em um endpoint em tempo real. Esperamos que o ponto final seja InService
.
Agora podemos testar o endpoint enviando algumas solicitações de inferência para esse endpoint ativo.
Consulte serial-inference-pipeline.ipynb para plena implementação.
limpar
Após concluir o teste, siga as instruções na seção de limpeza do notebook para excluir os recursos provisionados nesta postagem e evitar cobranças desnecessárias. Referir-se Preços do Amazon SageMaker para obter detalhes sobre o custo das instâncias de inferência.
Conclusão
Nesta postagem, mostrei como podemos criar e implantar um aplicativo de inferência de ML serial usando contêineres de inferência personalizados para endpoints em tempo real no Amazon SageMaker.
Esta solução demonstra como os clientes podem trazer seus próprios contêineres personalizados para hospedagem no Amazon SageMaker de maneira econômica. Com a opção BYOC, os clientes podem criar e adaptar rapidamente seus aplicativos de ML para serem implantados no Amazon SageMaker.
Incentivamos você a experimentar esta solução com um conjunto de dados relevante para os indicadores-chave de desempenho (KPIs) do seu negócio. Você pode consultar a solução completa neste Repositório GitHub.
Referências
Sobre o autor
Praveen Chamarthi é especialista sênior em IA/ML da Amazon Web Services. Ele é apaixonado por IA/ML e tudo relacionado à AWS. Ele ajuda clientes nas Américas a dimensionar, inovar e operar cargas de trabalho de ML com eficiência na AWS. Em seu tempo livre, Praveen adora ler e gosta de filmes de ficção científica.
- Conteúdo com tecnologia de SEO e distribuição de relações públicas. Seja amplificado hoje.
- PlatoData.Network Gerativa Vertical Ai. Capacite-se. Acesse aqui.
- PlatoAiStream. Inteligência Web3. Conhecimento Amplificado. Acesse aqui.
- PlatãoESG. Carbono Tecnologia Limpa, Energia, Ambiente, Solar, Gestão de resíduos. Acesse aqui.
- PlatoHealth. Inteligência em Biotecnologia e Ensaios Clínicos. Acesse aqui.
- Fonte: https://aws.amazon.com/blogs/machine-learning/build-and-deploy-ml-inference-applications-from-scratch-using-amazon-sagemaker/
- :tem
- :é
- :não
- :onde
- $UP
- 08
- 09
- 1
- 10
- 100
- 11
- 13
- 14
- 150
- 16
- 17
- 20
- 200
- 2023
- 25
- 28
- 30
- 500
- 7
- 8
- 87
- 9
- a
- Sobre
- ACEITAR
- Aceita
- Acesso
- conformemente
- Conta
- em
- adaptar
- Adicionalmente
- Adoção
- afetando
- Depois de
- AI / ML
- algoritmos
- Todos os Produtos
- juntamente
- tb
- Amazon
- Amazon Sage Maker
- Amazon Web Services
- Américas
- an
- e
- qualquer
- api
- app
- Aplicação
- aplicações
- aplica
- abril
- SOMOS
- Ordem
- AS
- assume
- At
- disponível
- evitar
- AWS
- fundo
- base
- baseado
- BE
- tornando-se
- antes
- ser
- abaixo
- corpo
- intensificador
- ambos
- trazer
- Trazendo
- construir
- Prédio
- construído
- construídas em
- Pacote
- negócio
- mas a
- by
- chamada
- chamado
- CAN
- casas
- casos
- CAT
- certo
- alterar
- mudado
- Alterações
- acusações
- verificar
- Cheques
- claramente
- Na nuvem
- código
- Codificação
- Coluna
- colunas
- COM
- comum
- integrações
- computador
- Configuração
- conectado
- da conexão
- Considerações
- constante
- construir
- consumo
- Recipiente
- Containers
- conteúdo
- conteúdo
- continuar
- ao controle
- converter
- Custo
- poderia
- crio
- Criar
- criação
- Credenciais
- personalizadas
- cliente
- Clientes
- dados,
- Data
- definir
- definido
- demonstrar
- demonstra
- dependências
- implantar
- implantado
- Implantação
- desenvolvimento
- implanta
- área de trabalho
- detalhes
- determinado
- desenvolvido
- Desenvolvimento
- DICT
- DID
- diferente
- Estivador
- domínios
- feito
- não
- dois
- durante
- e
- Mais cedo
- facilmente
- eficientemente
- outro
- encorajar
- end-to-end
- Ponto final
- garantir
- Todo
- entrada
- Meio Ambiente
- ambientes
- erro
- etc.
- exemplo
- Exceto
- exceção
- executado
- familiar
- Moda
- Favorito
- Funcionalidades
- poucos
- Envie o
- Arquivos
- Primeiro nome
- caber
- apropriado
- Flexibilidade
- seguir
- seguinte
- Escolha
- formulário
- formato
- encontrado
- Quadro
- enquadramentos
- da
- cheio
- função
- funcional
- Ganhos
- porta de entrada
- ter
- GitHub
- GMT
- vai
- manipular
- Alças
- Manipulação
- Ter
- he
- Saúde
- altura
- ajudar
- ajuda
- sua
- hospedeiro
- hospedagem
- anfitriões
- Como funciona o dobrador de carta de canal
- Como Negociar
- Contudo
- HTML
- http
- HTTPS
- i
- if
- imagem
- imagens
- executar
- implementação
- importar
- in
- inclui
- Incluindo
- cada vez mais
- indicadores
- Individual
- indústrias
- INFORMAÇÕES
- inhouse
- inovar
- entrada
- dentro
- instalar
- instalado
- instância
- instruções
- integrado
- Interface
- para dentro
- envolvido
- isolamento
- IT
- Trabalho
- Empregos
- jpg
- json
- Guarda
- Chave
- O rótulo
- mais recente
- lançamento
- lançado
- lança
- de lançamento
- aprendizagem
- esquerda
- Comprimento
- bibliotecas
- Line
- Lista
- Listado
- viver
- carregar
- carregamento
- cargas
- local
- localmente
- lógica
- entrar
- ama
- máquina
- aprendizado de máquina
- Corrente principal
- FAZ
- Fazendo
- gerencia
- maneira
- mapa,
- marca
- Match
- Posso..
- método
- poder
- mínimo
- desaparecido
- ML
- Moda
- modelo
- modelos
- modificar
- mais
- Filmes
- muito
- múltiplo
- devo
- nome
- nomes
- você merece...
- Cria
- não
- nenhum
- caderno
- agora
- número
- numpy
- objeto
- objetos
- of
- Ofertas
- Oferece
- frequentemente
- on
- uma vez
- ONE
- queridos
- só
- para
- aberto
- operar
- operacional
- Opção
- or
- ordem
- OS
- Outros
- A Nossa
- saída
- próprio
- pacotes
- pandas
- parâmetros
- particular
- passar
- apaixonado
- caminho
- perfeita
- Realizar
- atuação
- executa
- oleoduto
- plano
- platão
- Inteligência de Dados Platão
- PlatãoData
- por favor
- ponto
- Publique
- predição
- Previsões
- Predictor
- presente
- anteriormente
- privado
- problemas
- processo
- processos
- em processamento
- Subcontratante
- promove
- proprietário
- propósito
- Empurrar
- empurrado
- Empurrando
- Python
- rapidamente
- aumentar
- alcance
- Cru
- Leia
- pronto
- em tempo real
- recebido
- referir
- registro
- relevante
- permanecem
- substituir
- repositório
- solicitar
- pedidos
- requerer
- requeridos
- Requisitos
- exige
- recurso
- Recursos
- resposta
- resultar
- Resultados
- retorno
- voltar
- Retorna
- Anel
- Rota
- rotas
- LINHA
- Execute
- corrida
- é executado
- sábio
- mesmo
- Salvar
- salvo
- Escala
- ficção científica
- arranhar
- escrita
- Scripts
- Segundo
- Seção
- Vejo
- enviar
- envio
- senior
- enviei
- separado
- serial
- Série
- servir
- servidor
- serviço
- Serviços
- de servir
- Sessão
- conjunto
- Conjuntos
- vários
- Sexo
- rede de apoio social
- mostrar
- mostrou
- mostrando
- Shows
- semelhante
- simples
- fragmento
- So
- solução
- RESOLVER
- alguns
- algo
- Faísca
- especialista
- específico
- pilha
- Etapa
- padrão
- ponto de vista
- Status
- Passo
- Passos
- armazenamento
- fluídas
- córregos
- Tanga
- estruturada
- entraram com sucesso
- tal
- Espreguiçadeiras
- Suportado
- Apoiar
- suportes
- TAG
- adaptados
- toma
- tarefas
- terminal
- teste
- testado
- ensaio
- testes
- que
- A
- deles
- Eles
- então
- Lá.
- assim sendo
- Este
- coisas
- isto
- tempo
- para
- ferramentas
- Trem
- treinado
- Training
- Transformar
- transformado
- transformador
- transformadores
- transformando
- tentar
- tentando
- dois
- tipo
- Ubuntu
- para
- subjacente
- desnecessário
- atualização
- utilizável
- usar
- caso de uso
- usava
- usuários
- usos
- utilização
- Valores
- vário
- variando
- verificação
- versão
- esperar
- queremos
- foi
- we
- web
- servidor web
- serviços web
- BEM
- qual
- enquanto
- porque
- mais largo
- precisarão
- de
- dentro
- sem
- de gestão de documentos
- trabalhar
- escrito
- X
- XGBoostName
- Vocês
- investimentos
- zefirnet