Editar

Partilhar via


Muitos modelos de aprendizado de máquina (ML) em escala no Azure com o Spark

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

Este artigo descreve uma arquitetura para muitos modelos que usam o Apache Spark no Azure Databricks ou no Azure Synapse Analytics. O Spark é uma ferramenta poderosa para as transformações de dados grandes e complexas que algumas soluções exigem.

Nota

Use o Spark versões 3.0 e posteriores para muitos aplicativos de modelos. Os recursos de transformação de dados e suporte para Python e pandas são muito melhores do que em versões anteriores.

Um artigo complementar, Muitos modelos de aprendizado de máquina em escala com o Azure Machine Learning, usa Machine Learning e clusters de computação.

Arquitetura

Diagrama de arquitetura para muitos modelos, aprendizado de máquina em escala no Azure com o Spark.

Transfira um ficheiro do Visio desta arquitetura.

Fluxo de dados

  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.
  2. Pipeline de treinamento de modelos:
    1. Preparar dados: o pipeline de treinamento extrai os dados do Data Lake Storage e usa o Spark para agrupá-los 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 API de função pandas 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 Data Lake Storage e usa o Spark para agrupá-los em conjuntos de dados para pontuação.
    2. Modelos de pontuação: O pipeline usa a API da função pandas 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 o conector Spark para Synapse SQL para reter os resultados.
  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 aprendizagem automática de nível empresarial para criar e implementar 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 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 aprendizado de máquina. 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 código-fonte, 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

  • Você pode usar o Spark no Azure Synapse em vez do Spark no Azure Databricks para treinamento e pontuação de modelos.
  • 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 são muito complexos para um único modelo de aprendizado de máquina resolver. 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 aprendizado de máquina. Esse padrão de muitos modelos é muito comum em uma ampla variedade de setores e se aplica a muitos casos de uso do 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 aprendizado de máquina são simples, você pode ser capaz de particionar dados com bibliotecas como 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.
  • 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.
  • Escalabilidade de treinamento: usando o Spark, você pode treinar centenas de milhares de modelos em paralelo. O Spark gera vários processos de treinamento em cada VM de um cluster. Cada núcleo pode executar um processo separado. Embora isso signifique uma boa utilização de recursos, é importante dimensionar o cluster com precisão e escolher a SKU certa, especialmente se o processo de treinamento for caro e de longa duração.

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