Editar

Muitos modelos de aprendizado de máquina (ML) em escala com o Azure Machine Learning

Azure Data Factory
Azure Data Lake
Azure Databricks
Azure Machine Learning
Azure Synapse Analytics

Este artigo descreve uma arquitetura para muitos modelos que usa Machine Learning e clusters de computação. Proporciona uma grande versatilidade para situações que requerem uma configuração complexa.

Um artigo complementar, Muitos modelos de aprendizado de máquina (ML) em escala no Azure com o Spark, usa o Apache Spark no Azure Databricks ou no Azure Synapse Analytics.

Arquitetura

Architecture diagram for many models machine learning at scale on Azure with Azure Machine Learning.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de trabalho

  1. Ingestão de dados: o Azure Data Factory extrai dados de um banco de dados de origem e os copia para o Armazenamento do Azure Data Lake. Em seguida, ele o armazena em um armazenamento de dados do Machine Learning como um conjunto de dados tabular.
  2. Pipeline de treinamento de modelos:
    1. Preparar dados: o pipeline de treinamento extrai os dados do armazenamento de dados e os transforma ainda mais, conforme necessário. Ele também agrupa os dados em conjuntos de dados para treinar os modelos.
    2. Modelos de trem: o pipeline treina modelos para todos os conjuntos de dados que foram criados durante a preparação de dados. Ele usa a classe ParallelRunStep para treinar vários modelos em paralelo. Depois que um modelo é treinado, o pipeline o registra no Machine Learning junto com as métricas de teste.
  3. Pipeline de promoção de modelos:
    1. Avaliar modelos: O pipeline de promoção avalia os modelos treinados antes de movê-los para a produção. Um pipeline de DevOps aplica lógica de negócios para determinar se um modelo atende aos critérios de implantação. Por exemplo, ele pode verificar se a precisão dos dados de teste é superior a 80%.
    2. Registrar modelos: o pipeline de promoção registra os modelos que se qualificam para o espaço de trabalho de Machine Learning de produção.
  4. Modelo de pipeline de pontuação em lote:
    1. Preparar dados: o pipeline de pontuação em lote extrai dados do armazenamento de dados e transforma ainda mais cada arquivo conforme necessário. Ele também agrupa os dados em conjuntos de dados para pontuação.
    2. Modelos de pontuação: o pipeline usa a classe ParallelRunStep para pontuar vários conjuntos de dados em paralelo. Ele encontra o modelo apropriado para cada conjunto de dados no Machine Learning pesquisando as tags de modelo. Em seguida, ele baixa o modelo e o usa para pontuar o conjunto de dados. Ele usa a classe DataTransferStep para gravar os resultados de volta no Azure Data Lake e, em seguida, passa previsões do Azure Data Lake para Synapse SQL para servir.
  5. Pontuação em tempo real: o Serviço Kubernetes do Azure (AKS) pode fazer pontuações em tempo real, se necessário. Devido ao grande número de modelos, eles devem ser carregados sob demanda, não pré-carregados.
  6. Resultados:
    1. Previsões: O pipeline de pontuação em lote salva previsões no Synapse SQL.
    2. Métricas: o Power BI se conecta às previsões do modelo para recuperar e agregar resultados para apresentação.

Componentes

  • O Azure Machine Learning é um serviço de ML de nível empresarial para criar e implantar modelos rapidamente. Ele fornece aos usuários em todos os níveis de habilidade um designer low-code, ML automatizado (AutoML) e um ambiente de notebook Jupyter hospedado que suporta vários IDEs.
  • O Azure Databricks é uma ferramenta de engenharia de dados baseada na nuvem baseada no Apache Spark. Ele pode processar e transformar grandes quantidades de dados e explorá-los usando modelos de ML. Você pode escrever trabalhos em R, Python, Java, Scala e Spark SQL.
  • O Azure Synapse Analytics é um serviço de análise que unifica a integração de dados, o armazenamento de dados corporativos e a análise de big data.
  • Synapse SQL é um sistema de consulta distribuído para T-SQL que permite cenários de armazenamento de dados e virtualização de dados e estende o T-SQL para abordar cenários de streaming e ML. Ele oferece modelos de recursos dedicados e sem servidor.
  • O Armazenamento Azure Data Lake é um serviço de armazenamento massivamente escalável e seguro para cargas de trabalho de análise de alto desempenho.
  • O Serviço Kubernetes do Azure (AKS) é um serviço Kubernetes totalmente gerenciado para implantar e gerenciar aplicativos em contêineres. O AKS simplifica a implantação de um cluster AKS gerenciado no Azure descarregando a sobrecarga operacional para o Azure.
  • O Azure DevOps é um conjunto de serviços de desenvolvedor que fornece gerenciamento abrangente do ciclo de vida de aplicativos e infraestrutura. O DevOps inclui acompanhamento de trabalho, controle de origem, compilação e CI/CD, gerenciamento de pacotes e soluções de teste.
  • O Microsoft Power BI é uma coleção de serviços de software, aplicativos e conectores que trabalham juntos para transformar fontes de dados não relacionadas em insights coerentes, visualmente imersivos e interativos.

Alternativas

  • Os dados de origem podem vir de qualquer base de dados.
  • Você pode usar um endpoint online gerenciado ou AKS para implantar inferência em tempo real.

Detalhes do cenário

Muitos problemas de aprendizado de máquina (ML) são muito complexos para serem resolvidos por um único modelo de ML. Seja prevendo vendas para cada item de cada loja ou modelando a manutenção de centenas de poços de petróleo, ter um modelo para cada instância pode melhorar os resultados em muitos problemas de ML. Esse padrão de muitos modelos é comum em uma ampla variedade de setores e tem muitos casos de uso no mundo real. Com o uso do Azure Machine Learning, um pipeline de muitos modelos de ponta a ponta pode incluir treinamento de modelo, implantação de inferência em lote e implantação em tempo real.

Uma solução de muitos modelos requer um conjunto de dados diferente para cada modelo durante o treinamento e a pontuação. Por exemplo, se a tarefa for prever as vendas para cada item de cada loja, cada conjunto de dados será para uma combinação exclusiva de item e loja.

Potenciais casos de utilização

  • Varejo: uma rede de supermercados precisa criar um modelo de previsão de receita separado para cada loja e item, totalizando mais de 1.000 modelos por loja.
  • Cadeia de suprimentos: Para cada combinação de armazém e produto, uma empresa de distribuição precisa otimizar o estoque.
  • Restaurantes: Uma rede com milhares de franquias precisa prever a demanda para cada uma.

Considerações

Essas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios orientadores que podem ser usados para melhorar a qualidade de uma carga de trabalho. Para obter mais informações, consulte Microsoft Azure Well-Architected Framework.

  • Partições de dados O particionamento dos dados é a chave para implementar o padrão de muitos modelos. Se você quiser um modelo por armazenamento, um conjunto de dados compreende todos os dados de um armazenamento, e há tantos conjuntos de dados quanto há armazenamentos. Se você quiser modelar produtos por loja, haverá um conjunto de dados para cada combinação de produto e loja. Dependendo do formato dos dados de origem, pode ser fácil particionar os dados ou pode exigir uma extensa transformação e embaralhamento de dados. O Spark e o Synapse SQL escalam muito bem para essas tarefas, enquanto o Python pandas não, uma vez que é executado apenas em um nó e processo.
  • Gerenciamento de modelo: os pipelines de treinamento e pontuação identificam e invocam o modelo certo para cada conjunto de dados. Para fazer isso, eles calculam tags que caracterizam o conjunto de dados e, em seguida, usam as tags para localizar o modelo correspondente. As tags identificam a chave de partição de dados e a versão do modelo, e também podem fornecer outras informações.
  • Escolhendo a arquitetura certa:
    • O Spark é apropriado quando seu pipeline de treinamento tem requisitos complexos de transformação e agrupamento de dados. Ele fornece técnicas flexíveis de divisão e agrupamento para agrupar dados por combinações de características, como produto-loja ou local-produto. Os resultados podem ser colocados em um DataFrame do Spark para uso nas etapas subsequentes.
    • Quando seus algoritmos de treinamento e pontuação de ML são simples, você pode ser capaz de particionar dados com bibliotecas como o Scikit-learn. Nesses casos, você pode não precisar do Spark, para evitar possíveis complexidades que podem surgir ao instalar o Azure Synapse ou o Azure Databricks.
    • Quando os conjuntos de dados de treinamento já estão criados, por exemplo, eles estão em arquivos separados ou em linhas ou colunas separadas, você não precisa do Spark para transformações de dados complexas.
    • A solução de Machine Learning e clusters de computação oferece grande versatilidade para situações que exigem configuração complexa. Por exemplo, você pode usar um contêiner personalizado do Docker, baixar arquivos ou baixar modelos pré-treinados. Visão computacional e aprendizagem profunda de processamento de linguagem natural (NLP) são exemplos de aplicações que podem exigir tal versatilidade.
  • Treinamento e pontuação do Spark: ao usar a arquitetura do Spark, você pode usar a API da função pandas do Spark para treinamento e pontuação paralelos.
  • Repositórios de modelo separados: para proteger os modelos implantados, considere armazená-los em seu próprio repositório que os pipelines de treinamento e teste não tocam.
  • Classe ParallelRunStep: A classe Python ParallelRunStep é uma opção poderosa para executar muitos modelos de treinamento e inferência. Ele pode particionar seus dados de várias maneiras e, em seguida, aplicar seu script ML em elementos da partição em paralelo. Como outras formas de treinamento de Machine Learning, você pode especificar um ambiente de treinamento personalizado com acesso a pacotes Python Package Index (PyPI) ou um ambiente docker personalizado mais avançado para configurações que exigem mais do que o PyPI padrão. Há muitas CPUs e GPUs para escolher.
  • Inferência online: se um pipeline carregar e armazenar em cache todos os modelos no início, os modelos poderão esgotar a memória do contêiner. Portanto, carregue os modelos sob demanda no método run, mesmo que isso possa aumentar ligeiramente a latência.

Otimização de custos

A otimização de custos consiste em procurar formas de reduzir despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Visão geral do pilar de otimização de custos.

Para entender melhor o custo de execução desse cenário no Azure, use a calculadora de preços. Bons pressupostos de partida são:

  • Os modelos de serviço são treinados diariamente para mantê-los atualizados.
  • Para um conjunto de dados de 40 milhões de linhas com 10 mil combinações de loja e produto, o treinamento no Azure Databricks usando um cluster provisionado com 12 VMs que usam instâncias Ls16_v2 leva cerca de 30 minutos.
  • A pontuação em lote com o mesmo conjunto de dados leva cerca de 20 minutos.
  • Você pode usar o Machine Learning para implantar inferências em tempo real. Dependendo do volume de solicitação, escolha um tipo de VM e um tamanho de cluster apropriados.
  • Um cluster AKS é dimensionado automaticamente conforme necessário, resultando em dois nós por mês ativos em média.

Para ver como o preço difere para o seu caso de uso, altere as variáveis para corresponder ao tamanho de dados esperado e atender aos requisitos de carga. Para tamanhos de dados de treinamento maiores ou menores, aumente ou diminua o tamanho do cluster do Azure Databricks. Para lidar com mais usuários simultâneos durante o serviço do modelo, aumente o tamanho do cluster AKS.

Contribuidores

Este artigo é mantido pela Microsoft. Foi originalmente escrito pelos seguintes contribuidores.

Autor principal:

  • James Nguyen - Brasil | Arquiteto Principal de Soluções na Nuvem

Próximos passos