Padrões de design para inferência serial no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Padrões de design para inferência serial no Amazon SageMaker

À medida que o aprendizado de máquina (ML) se torna popular e ganha maior adoção, os aplicativos 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 de ML. Esses modelos podem ser combinados sequencialmente para realizar diversas tarefas, como pré-processamento, transformação de dados, seleção de modelo, geração de inferência, consolidação de inferência e pós-processamento. As organizações precisam de opções flexíveis para orquestrar esses fluxos de trabalho complexos de ML. Pipelines de inferência serial são um padrão de design para organizar esses fluxos de trabalho em uma série de etapas, com cada etapa enriquecendo ou processando ainda mais a saída gerada pelas etapas anteriores e passando a saída para a próxima etapa do pipeline.

Além disso, esses pipelines de inferência serial devem fornecer o seguinte:

  • Implementação flexível e personalizada (dependências, algoritmos, lógica de negócios e assim por diante)
  • Repetível e consistente para implementação de produção
  • Trabalho pesado indiferenciado, minimizando o gerenciamento de infraestrutura

Nesta postagem, examinamos alguns casos de uso comuns para pipelines de inferência serial e percorremos algumas opções de implementação para cada um desses casos de uso usando Amazon Sage Maker. Também discutimos considerações para cada uma dessas opções de implementação.

A tabela a seguir resume os diferentes casos de uso para inferência serial, considerações e opções de implementação. Eles são discutidos neste post.

Caso de uso Descrição do caso de uso Considerações Primárias Complexidade geral de implementação Opções de implementação recomendadas Exemplo de artefatos de código e notebooks
Pipeline de inferência serial (com etapas de pré-processamento e pós-processamento incluídas) O pipeline de inferência precisa pré-processar os dados recebidos antes de invocar um modelo treinado para gerar inferências e, em seguida, pós-processar as inferências geradas, para que possam ser facilmente consumidas por aplicativos downstream Facilidade de implementação Baixo Contêiner de inferência usando o SageMaker Inference Toolkit Implantar um modelo PyTorch treinado
Pipeline de inferência serial (com etapas de pré-processamento e pós-processamento incluídas) O pipeline de inferência precisa pré-processar os dados recebidos antes de invocar um modelo treinado para gerar inferências e, em seguida, pós-processar as inferências geradas, para que possam ser facilmente consumidas por aplicativos downstream Desacoplamento, implantação simplificada e atualizações Médio Pipeline de inferência do SageMaker Pipeline de inferência com contêineres personalizados e xgBoost
Conjunto de modelo serial O pipeline de inferência precisa hospedar e organizar vários modelos sequencialmente, para que cada modelo aprimore a inferência gerada pelo anterior, antes de gerar a inferência final Desacoplamento, implantação e atualizações simplificadas, flexibilidade na seleção da estrutura do modelo Médio Pipeline de inferência do SageMaker Pipeline de inferência com Scikit-learn e Linear Learner
Pipeline de inferência serial (com invocação de modelo direcionado de um grupo) O pipeline de inferência precisa invocar um modelo personalizado específico de um grupo de modelos implantados, com base nas características da solicitação ou para otimização de custos, além de tarefas de pré-processamento e pós-processamento Otimização de custos e personalização Alta Pipeline de inferência SageMaker com endpoints multimodelos (MMEs) Endpoints multimodelos do Amazon SageMaker usando Linear Learner

Nas seções a seguir, discutiremos cada caso de uso com mais detalhes.

Pipeline de inferência serial usando contêineres de inferência

Os casos de uso de pipeline de inferência serial têm requisitos para pré-processar os dados recebidos antes de invocar um modelo de ML pré-treinado para gerar inferências. Além disso, em alguns casos, as inferências geradas podem precisar ser processadas posteriormente, para que possam ser facilmente consumidas por aplicativos downstream. Este é um cenário comum para casos de uso em que uma fonte de dados de streaming precisa ser processada em tempo real antes que um modelo possa ser ajustado a ela. No entanto, este caso de uso também pode se manifestar para inferência em lote.

O SageMaker oferece uma opção para personalizar contêineres de inferência e usá-los para construir um pipeline de inferência serial. Os contêineres de inferência usam o Kit de ferramentas de inferência do SageMaker e são construídos sobre Servidor multimodelo SageMaker (MMS), que fornece um mecanismo flexível para atender modelos de ML. O diagrama a seguir ilustra um padrão de referência de como implementar um pipeline de inferência serial usando contêineres de inferência.

O SageMaker MMS espera um script Python que implemente as seguintes funções para carregar o modelo, pré-processar os dados de entrada, obter previsões do modelo e pós-processar os dados de saída:

  • input_fn () – Responsável por desserializar e pré-processar os dados de entrada
  • model_fn () – Responsável por carregar o modelo treinado a partir de artefatos em Serviço de armazenamento simples da Amazon (Amazon S3)
  • Predict_fn () – Responsável por gerar inferências a partir do modelo
  • saída_fn() – Responsável por serializar e pós-processar os dados de saída (inferências)

Para etapas detalhadas para personalizar um contêiner de inferência, consulte Adaptando seu próprio contêiner de inferência.

Os contêineres de inferência são um padrão de design ideal para casos de uso de pipeline de inferência serial com as seguintes considerações principais:

  • Alta coesão – A lógica de processamento e o modelo correspondente impulsionam uma funcionalidade de negócio única e precisam ser co-localizados
  • Baixa latência geral – O tempo decorrido entre o momento em que uma solicitação de inferência é feita e o recebimento da resposta

Em um pipeline de inferência serial, a lógica e o modelo de processamento são encapsulados no mesmo contêiner único, de modo que muitas das chamadas de invocação permanecem dentro do contêiner. Isso ajuda a reduzir o número geral de saltos, resultando em melhor latência geral e capacidade de resposta do pipeline.

Além disso, para casos de uso em que a facilidade de implementação é um critério importante, os contêineres de inferência podem ajudar, com várias etapas de processamento do pipeline sendo co-localizadas dentro do mesmo contêiner.

Pipeline de inferência serial usando um pipeline de inferência SageMaker

Outra variação do caso de uso do pipeline de inferência serial requer uma dissociação mais clara entre as várias etapas do pipeline (como pré-processamento de dados, geração de inferência, pós-processamento de dados e formatação e serialização). Isso pode ser devido a vários motivos:

  • 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.

Além disso, para pipelines de inferência serial um pouco mais complexos, várias etapas podem estar envolvidas para processar uma solicitação e gerar uma inferência. Portanto, do ponto de vista operacional, pode ser benéfico hospedar essas etapas em contêineres separados para melhor isolamento funcional e facilitar atualizações e melhorias mais fáceis (alterar uma etapa sem impactar outros modelos ou etapas de processamento).

Se o seu caso de uso estiver alinhado com algumas dessas considerações, um Pipeline de inferência do SageMaker fornece uma opção fácil e flexível para construir um pipeline de inferência serial. O diagrama a seguir ilustra um padrão de referência de como implementar um pipeline de inferência serial usando várias etapas hospedadas em contêineres dedicados usando um pipeline de inferência SageMaker.

ml9154-pipeline de inferência

Um pipeline de inferência do SageMaker consiste em uma sequência linear de 2 a 15 contêineres que processam solicitações de inferências em dados. O pipeline de inferência oferece a opção de usar algoritmos integrados pré-treinados do SageMaker ou algoritmos personalizados empacotados em contêineres Docker. Os contêineres são hospedados na mesma instância subjacente, o que ajuda a reduzir a latência geral e minimizar os custos.

O trecho de código a seguir mostra como várias etapas e modelos de processamento podem ser combinados para criar um pipeline de inferência serial.

Começamos construindo e especificando modelos baseados em Spark ML e XGBoost que pretendemos usar como parte do pipeline:

from sagemaker.model import Model
from sagemaker.pipeline_model import PipelineModel
from sagemaker.sparkml.model import SparkMLModel
sparkml_data = 's3://{}/{}/{}'.format(s3_model_bucket, s3_model_key_prefix, 'model.tar.gz')
sparkml_model = SparkMLModel(model_data=sparkml_data)
xgb_model = Model(model_data=xgb_model.model_data, image=training_image)

Os modelos são então organizados sequencialmente dentro da definição do modelo de pipeline:

model_name = 'serial-inference-' + timestamp_prefix
endpoint_name = 'serial-inference-ep-' + timestamp_prefix
sm_model = PipelineModel(name=model_name, role=role, models=[sparkml_model, xgb_model])

O pipeline de inferência é então implantado atrás de um endpoint para inferência em tempo real, especificando o tipo e o número de instâncias de ML do host:

sm_model.deploy(initial_instance_count=1, instance_type='ml.c4.xlarge', endpoint_name=endpoint_name)

Todo o pipeline de inferência montado pode ser considerado um modelo SageMaker que você pode usar para fazer previsões em tempo real ou processar transformações em lote diretamente, sem qualquer pré-processamento externo. Dentro de um modelo de pipeline de inferência, o SageMaker trata as invocações como uma sequência de solicitações HTTP originadas de um aplicativo externo. O primeiro contêiner no pipeline trata da solicitação inicial, realiza algum processamento e, em seguida, despacha a resposta intermediária como uma solicitação para o segundo contêiner no pipeline. Isso acontece para cada contêiner no pipeline e, finalmente, retorna a resposta final ao aplicativo cliente chamador.

Os pipelines de inferência do SageMaker são totalmente gerenciados. Quando o pipeline é implantado, o SageMaker instala e executa todos os contêineres definidos em cada um dos Amazon Elastic Compute Nuvem (Amazon EC2) provisionadas como parte do endpoint ou trabalho de transformação em lote. Além disso, como os contêineres estão localizados e hospedados na mesma instância do EC2, a latência geral do pipeline é reduzida.

Conjunto de modelo serial usando um pipeline de inferência SageMaker

Um modelo conjunto é uma abordagem em ML onde vários modelos de ML são combinados e usados ​​como parte do processo de inferência para gerar inferências finais. As motivações para modelos de conjunto podem incluir a melhoria da precisão, a redução da sensibilidade do modelo a características de entrada específicas e a redução do viés do modelo único, entre outras. Nesta postagem, nos concentramos nos casos de uso relacionados a um conjunto de modelos seriais, onde vários modelos de ML são combinados sequencialmente como parte de um pipeline de inferência serial.

Vamos considerar um exemplo específico relacionado a um conjunto de modelo serial onde precisamos agrupar as imagens enviadas por um usuário com base em determinados temas ou tópicos. Este pipeline pode consistir em três modelos de ML:

  • Modelo 1 – Aceita uma imagem como entrada e avalia a qualidade da imagem com base na resolução da imagem, orientação e muito mais. Este modelo então tenta aumentar a qualidade da imagem e envia as imagens processadas que atendem a um determinado limite de qualidade para o próximo modelo (Modelo 2).
  • Modelo 2 – Aceita imagens validadas através do Modelo 1 e realiza reconhecimento de imagem para identificar objetos, lugares, pessoas, textos e outras ações e conceitos personalizados em imagens. A saída do Modelo 2 que contém objetos identificados é enviada para o Modelo 3.
  • Modelo 3 – Aceita a saída do Modelo 2 e executa tarefas de processamento de linguagem natural (PNL), como modelagem de tópicos para agrupar imagens com base em temas. Por exemplo, as imagens podem ser agrupadas com base na localização ou nas pessoas identificadas. A saída (agrupamentos) é enviada de volta ao aplicativo cliente.

O diagrama a seguir ilustra um padrão de referência de como implementar vários modelos de ML hospedados em um conjunto de modelos seriais usando um pipeline de inferência do SageMaker.

ml9154-modelo-conjunto

Conforme discutido anteriormente, o pipeline de inferência do SageMaker é gerenciado, o que permite que você se concentre na seleção e no desenvolvimento do modelo de ML, ao mesmo tempo que reduz o trabalho pesado indiferenciado associado à construção do pipeline de conjunto serial.

Além disso, algumas das considerações discutidas anteriormente sobre dissociação, escolha de algoritmo e estrutura para desenvolvimento de modelo e implantação também são relevantes aqui. Por exemplo, como cada modelo é hospedado em um contêiner separado, você tem flexibilidade para selecionar a estrutura de ML que melhor se adapta a cada modelo e ao seu caso de uso geral. Além disso, do ponto de vista operacional e de desacoplamento, você pode continuar a atualizar ou modificar etapas individuais com muito mais facilidade, sem afetar outros modelos.

O pipeline de inferência do SageMaker também está integrado ao Registro de modelo SageMaker para catalogação de modelos, controle de versão, gerenciamento de metadados e implantação controlada em ambientes de produção para oferecer suporte a melhores práticas operacionais consistentes. O pipeline de inferência do SageMaker também está integrado com Amazon CloudWatch para permitir o monitoramento dos modelos de vários contêineres em pipelines de inferência. Você também pode obter visibilidade métricas em tempo real para entender melhor as invocações e a latência de cada contêiner no pipeline, o que ajuda na solução de problemas e na otimização de recursos.

Pipeline de inferência serial (com invocação de modelo direcionado de um grupo) usando um pipeline de inferência SageMaker

Pontos de extremidade de vários modelos do SageMaker (MMEs) fornecem uma solução econômica para implantar um grande número de modelos de ML atrás de um único endpoint. As motivações para usar endpoints multimodelos podem incluir a invocação de um modelo personalizado específico com base nas características da solicitação (como origem, localização geográfica, personalização do usuário e assim por diante) ou simplesmente hospedar vários modelos por trás do mesmo endpoint para obter otimização de custos.

Quando você implanta vários modelos em um único endpoint habilitado para vários modelos, todos os modelos compartilham os recursos de computação e o contêiner de serviço de modelo. O pipeline de inferência do SageMaker pode ser implantado em um MME, onde um dos contêineres no pipeline pode atender dinamicamente solicitações com base no modelo específico que está sendo invocado. Do ponto de vista do pipeline, os modelos têm requisitos de pré-processamento idênticos e esperam o mesmo conjunto de recursos, mas são treinados para se alinharem a um comportamento específico. O diagrama a seguir ilustra um padrão de referência de como esse pipeline integrado funcionaria.

ml9154-mme

Com MMEs, a solicitação de inferência originada da aplicação cliente deve especificar o modelo alvo que precisa ser invocado. O primeiro contêiner no pipeline trata da solicitação inicial, realiza algum processamento e, em seguida, despacha a resposta intermediária como uma solicitação para o segundo contêiner no pipeline, que hospeda vários modelos. Com base no modelo de destino especificado na solicitação de inferência, o modelo é invocado para gerar uma inferência. A inferência gerada é enviada para o próximo contêiner no pipeline para processamento adicional. Isso acontece para cada contêiner subsequente no pipeline e, finalmente, o SageMaker retorna a resposta final ao aplicativo cliente chamador.

Vários artefatos de modelo são persistidos em um bucket S3. Quando um modelo específico é invocado, o SageMaker o carrega dinamicamente no contêiner que hospeda o endpoint. Se o modelo já estiver carregado na memória do contêiner, a invocação será mais rápida porque o SageMaker não precisa baixar o modelo do Amazon S3. Se a utilização da memória da instância for alta e um novo modelo for invocado e, portanto, precisar ser carregado, os modelos não utilizados serão descarregados da memória. Os modelos descarregados permanecem no volume de armazenamento da instância e podem ser carregados novamente na memória do contêiner posteriormente, sem serem baixados novamente do bucket S3.

Uma das principais considerações ao usar MMEs é compreender o comportamento da latência de invocação do modelo. Conforme discutido anteriormente, os modelos são carregados dinamicamente na memória do contêiner da instância que hospeda o endpoint quando invocados. Portanto, a invocação do modelo pode demorar mais quando for invocada pela primeira vez. Quando o modelo já está na memória do contêiner da instância, as invocações subsequentes são mais rápidas. Se a utilização da memória de uma instância for alta e um novo modelo precisar ser carregado, os modelos não utilizados serão descarregados. Se o volume de armazenamento da instância estiver cheio, os modelos não utilizados serão excluídos do volume de armazenamento. O SageMaker gerencia totalmente o carregamento e descarregamento dos modelos, sem que você precise realizar nenhuma ação específica. No entanto, é importante compreender esse comportamento porque ele tem implicações na latência de invocação do modelo e, portanto, na latência geral de ponta a ponta.

Opções de hospedagem de pipeline

SageMaker fornece vários tipo de instância opções de seleção para implantar modelos de ML e construir pipelines de inferência, com base em seu caso de uso, taxa de transferência e requisitos de custo. Por exemplo, você pode escolher instâncias otimizadas para CPU ou GPU para criar pipelines de inferência serial, em um único contêiner ou em vários contêineres. No entanto, às vezes há requisitos em que se deseja ter flexibilidade e suporte para executar modelos em instâncias baseadas em CPU ou GPU dentro do mesmo pipeline para flexibilidade adicional.

Agora você pode usar o NVIDIA Triton Inference Server para fornecer modelos de inferência no SageMaker para requisitos de computação heterogêneos. Confira Implante IA rápida e escalonável com NVIDIA Triton Inference Server no Amazon SageMaker para obter detalhes adicionais.

Conclusão

À medida que as organizações descobrem e criam novas soluções alimentadas por ML, as ferramentas necessárias para orquestrar esses pipelines devem ser flexíveis o suficiente para oferecer suporte com base em um determinado caso de uso, ao mesmo tempo que simplificam e reduzem as despesas operacionais contínuas. O SageMaker oferece várias opções para projetar e construir esses fluxos de trabalho de inferência serial, com base em seus requisitos.

Esperamos ouvir sua opinião sobre quais casos de uso você está construindo usando pipelines de inferência serial. Se você tiver dúvidas ou comentários, compartilhe-os nos comentários.


Sobre os autores

Padrões de design para inferência serial no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Rahul Sharma é arquiteto de soluções sênior no AWS Data Lab, ajudando clientes da AWS a projetar e construir soluções de IA/ML. Antes de ingressar na AWS, Rahul passou vários anos no setor financeiro e de seguros, ajudando clientes a criar plataformas analíticas e de dados.

Padrões de design para inferência serial no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Anand Prakash é arquiteto de soluções sênior no AWS Data Lab. Anand se concentra em ajudar os clientes a projetar e construir soluções de IA/ML, análise de dados e banco de dados para acelerar seu caminho para a produção.

Padrões de design para inferência serial no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Dhawal Patel é Arquiteto Principal de Machine Learning na AWS. Ele trabalhou com organizações que vão desde grandes empresas até startups de médio porte em problemas relacionados à computação distribuída e Inteligência Artificial. Ele se concentra em aprendizado profundo, incluindo domínios de PNL e Visão Computacional. Ele ajuda os clientes a obter inferência de modelo de alto desempenho no SageMaker.

Padrões de design para inferência serial no Amazon SageMaker PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai. Saurabh Trikande é gerente de produto sênior da Amazon SageMaker Inference. Ele é apaixonado por trabalhar com clientes e tornar o aprendizado de máquina mais acessível. Em seu tempo livre, Saurabh gosta de caminhar, aprender sobre tecnologias inovadoras, seguir o TechCrunch e passar tempo com sua família.

Carimbo de hora:

Mais de Aprendizado de máquina da AWS