Editar

Compartilhar via


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

Fábrica de dados do Azure
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 Azure Synapse Analytics. O Spark é uma ferramenta poderosa para transformações grandes e complexas de dados exigidas por algumas soluções.

Observação

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

Um artigo complementar, machine learning de vários modelos em escala com o Azure Machine Learning, usa clusters de computação e de Machine Learning.

Arquitetura

Diagrama de arquitetura para muitos modelos, machine learning em escala no Azure com o Spark.

Baixe um Arquivo Visio dessa arquitetura.

Fluxo de dados

  1. Ingestão de dados: o Azure Data Factory efetua pull dos dados de um banco de dados de origem e os copia para o Azure Data Lake Storage.
  2. Pipeline do treinamento de modelo:
    1. Preparar dados: o pipeline de treinamento efetua pull dos dados do Data Lake Armazenamento e usa o Spark para agrupá-los em conjuntos de dados para treinar os modelos.
    2. Treinar modelos: o pipeline treina modelos para todos os conjuntos de dados criados durante a preparação de dados. Ele usa a API de função do 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 do teste.
  3. Pipeline de promoção de modelo:
    1. Avaliar modelos: O pipeline de promoção avalia os modelos treinados antes de movê-los para produção. Um DevOps pipeline aplica a 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 workspace do Machine Learning de produção.
  4. Pipeline de pontuação do lote do modelo:
    1. Preparar dados: o pipeline de pontuação do lote efetua pull dos dados do Data Lake Armazenamento e usa o Spark para agrupá-los em conjuntos de dados para pontuação.
    2. Modelos de pontuação: o pipeline usa a API de função do Pandas para pontuar vários conjuntos de dados em paralelo. Ele localiza o modelo apropriado para cada conjunto de dados no Machine Learning pesquisando as marcas de modelo. Em seguida, ele baixa o modelo e o usa para pontuar o conjuntos de dados. Ele usa o conector do Spark no SQL do Synapse para manter os resultados.
  5. Pontuação em tempo real: o AKS (Serviço de Kubernetes do Azure) pode fazer a pontuação 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 do lote salva as previsões no SQL do Synapse.
    2. Métricas: o Power BI se conecta às previsões de modelo para recuperar e agregar resultados para apresentação.

Componentes

  • O Azure Machine Learning é um serviço de machine learning de nível corporativo para criar e implantar modelos rapidamente. Ele fornece aos usuários em todos os níveis de habilidade um designer de código baixo, AutoML (Machine Learning automatizado) e um ambiente do Jupyter Notebook hospedado que dá suporte a vários IDEs.
  • O Azure Synapse Analytics é um serviço de análise que unifica a integração de dados, o data warehouse corporativo e a análise de Big Data.
  • O SQL do Synapse é um sistema de consulta distribuída para o T-SQL que permite cenários de data warehouse e virtualização de dados e estende o T-SQL para lidar com cenários de streaming e machine learning. Ele fornece modelos de recursos sem servidor e dedicados.
  • O Azure Data Lake Storage é um serviço de armazenamento extremamente escalonável e seguro para cargas de trabalho de análise de alto desempenho.
  • O AKS (Serviço de Kubernetes do Azure) é o serviço Kubernetes totalmente gerenciado para implantar e gerenciar aplicativos conteinerizados. O AKS simplifica a implantação de um cluster do AKS gerenciado no Azure, transferindo 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 da infraestrutura. O DevOps inclui acompanhamento de trabalho, controle do código-fonte, build 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 suas fontes de dados não relacionadas em insights coerentes, visualmente envolventes e interativos.

Alternativas

  • Você pode usar o Spark no Azure Synapse em vez do Spark no Azure Databricks para treinamento e pontuação de modelo.
  • Os dados de origem podem vir de qualquer banco de dados.
  • Você pode usar um ponto de extremidade online gerenciado ou o AKS para implantar a inferência em tempo real.

Detalhes do cenário

Diversos problemas de machine learning são muito complexos para serem resolvidos por um único modelo de machine learning. 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 em cada instância pode melhorar os resultados em muitos problemas de machine learning. Esse padrão de muitos modelos é muito comum em diversos 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 vendas para cada item de cada loja, cada conjunto de dados será para uma combinação exclusiva de item-loja.

Possíveis casos de uso

  • Varejo: uma cadeia 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 fornecimento: para cada combinação de warehouse e produto, uma empresa de distribuição precisa otimizar o inventário.
  • Restaurantes: uma cadeia com milhares de franquias precisa prever a demanda de cada uma.

Considerações

Estas considerações implementam os pilares do Azure Well-Architected Framework, que é um conjunto de princípios de orientação que podem ser usados para aprimorar a qualidade de uma carga de trabalho. Para obter mais informações, confira Microsoft Azure Well-Architected Framework.

  • Partições de dados Particionar os dados é fundamental para implementar o padrão de muitos modelos. Se você quiser um modelo por loja, um conjuntos de dados incluirá todos os dados de uma loja e haverá o mesmo número de conjuntos de dados e lojas. Se você quiser modelar os 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 ser necessária uma ampla transformação e embaralhamento de dados. O Spark e o SQL do Synapse escalam muito bem essas tarefas, enquanto o Pandas do Python não o faz, pois ele é executado apenas em um nó e processo.
  • Gerenciamento de modelos: os pipelines de treinamento e pontuação identificam e invocam o modelo certo para cada conjuntos de dados. Para fazer isso, eles calculam marcas que caracterizam o conjuntos de dados e, em seguida, usam as marcas para encontrar o modelo correspondente. As marcas identificam a chave de partição de dados e a versão do modelo e também podem fornecer outras informações.
  • Como escolher a arquitetura certa:
    • O Spark é apropriado quando o pipeline de treinamento tem requisitos complexos de transformação e agrupamento de dados. Ele fornece técnicas flexíveis de divisão e de 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 os algoritmos de pontuação e treinamento de machine learning são simples, você pode particionar os dados com bibliotecas como a scikit-learn. Nesses casos, talvez você não precise do Spark, portanto, você pode evitar possíveis complexidades que podem surgir ao instalar o Azure Synapse ou o Azure Databricks.
    • Quando os conjuntos de dados de treinamento já foram criados, por exemplo, eles estão em arquivos separados ou em linhas ou colunas separadas, o Spark não é necessário para transformações de dados complexas.
    • A solução de Machine Learning e clusters de computação oferece uma ótima versatilidade para situações que exigem uma configuração complexa. Por exemplo, você pode usar um contêiner personalizado do Docker ou baixar arquivos e modelos pré-treinados. A Pesquisa Visual Computacional e o NLP (processamento de idioma natural) são exemplos de aplicativos que podem exigir essa 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 separado: para proteger os modelos implantados, considere armazená-los em seu próprio repositório que não é tocado pelos pipelines de treinamento e teste.
  • 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 de execução, mesmo que possam aumentar um pouco a latência.
  • Escalabilidade de treinamento: você pode treinar centenas de milhares de modelos em paralelo usando o Spark. O Spark gira vários processos de treinamento em cada VM em um cluster. Cada núcleo pode executar um processo separado. Embora isso signifique uma boa utilização dos recursos, é importante dimensionar o cluster com precisão e escolher a SKU correta, especialmente se o processo de treinamento for caro e de execução prolongada.

Otimização de custos

A otimização de custos é a análise de maneiras de reduzir as despesas desnecessárias e melhorar a eficiência operacional. Para obter mais informações, consulte Lista de verificação de revisão de design para otimização de custos.

Para entender melhor o custo da execução desse cenário no Azure, use a calculadora de preços. Veja abaixo boas pressuposições iniciais:

  • 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 lojas e produtos, o treinamento no Azure Databricks usando um cluster provisionado com 12 VMs que usam instâncias Ls16_v2 demora cerca de 30 minutos.
  • A pontuação do lote com o mesmo conjunto de dados demora cerca de 20 minutos.
  • Machine Learning pode ser usado para implantar a inferência em tempo real. Dependendo do volume de solicitação, escolha um tipo de VM apropriado e o tamanho do cluster.
  • Um cluster do AKS é dimensionado automaticamente conforme necessário, o que resultará em dois nós ativos por mês, em média.

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

Colaboradores

Esse artigo é mantido pela Microsoft. Ele foi originalmente escrito pelos colaboradores a seguir.

Autor principal:

Próximas etapas