Compilar uma API de recomendação em tempo real no AzureBuild a real-time recommendation API on Azure

Esta arquitetura de referência mostra como treinar um modelo de recomendação usando o Azure Databricks e implantá-lo como uma API usando o Azure Cosmos DB, o Azure Machine Learning e o AKS (Serviço de Kubernetes do Azure).This reference architecture shows how to train a recommendation model using Azure Databricks and deploy it as an API by using Azure Cosmos DB, Azure Machine Learning, and Azure Kubernetes Service (AKS). Esta arquitetura pode ser adaptada para a maioria dos cenários de mecanismo de recomendação, incluindo recomendações de produtos, filmes e notícias.This architecture can be generalized for most recommendation engine scenarios, including recommendations for products, movies, and news.

Uma implementação de referência para essa arquitetura está disponível no GitHubA reference implementation for this architecture is available on GitHub

Arquitetura de um modelo de machine learning para treinamento de recomendações de filmes

Cenário : uma organização de mídia deseja fornecer recomendações de filme ou vídeo para seus usuários.Scenario : A media organization wants to provide movie or video recommendations to its users. Ao fornecer recomendações personalizadas, a organização atende a várias metas de negócios, incluindo maior taxa de cliques, maior participação no site e maior satisfação do usuário.By providing personalized recommendations, the organization meets several business goals, including increased click-through rates, increased engagement on site, and higher user satisfaction.

Esta arquitetura de referência é para treinar e implantar uma API de serviço de recomendação em tempo real que pode recomendar os 10 melhores filmes para cada usuário.This reference architecture is for training and deploying a real-time recommender service API that can provide the top 10 movie recommendations for a given user.

O fluxo de dados para o modelo de recomendação é o seguinte:The data flow for this recommendation model is as follows:

  1. Acompanhar comportamentos do usuário.Track user behaviors. Por exemplo, um serviço de back-end pode registrar quando um usuário classifica um filme ou clica em um artigo de notícias ou produto.For example, a backend service might log when a user rates a movie or clicks a product or news article.

  2. Carregar os dados no Azure Databricks de uma fonte de dados disponível.Load the data into Azure Databricks from an available data source.

  3. Preparar os dados e dividi-los em conjuntos de treinamento e teste para treinar o modelo.Prepare the data and split it into training and testing sets to train the model. (Este guia descreve opções para dividir os dados.)(This guide describes options for splitting data.)

  4. Ajustar o modelo Filtragem Colaborativa do Spark aos dados.Fit the Spark Collaborative Filtering model to the data.

  5. Avaliar a qualidade do modelo usando métricas de classificação e priorização.Evaluate the quality of the model using rating and ranking metrics. (Este guia fornece detalhes sobre as métricas com as quais você pode avaliar suas recomendações.)(This guide provides details about the metrics you can evaluate your recommender on.)

  6. Calcular previamente as 10 principais recomendações por usuário e armazená-las como cache no Azure Cosmos DB.Precompute the top 10 recommendations per user and store as a cache in Azure Cosmos DB.

  7. Implantar um serviço de API no AKS usando as APIs do Azure Machine Learning para colocar a API em contêineres e implantá-la.Deploy an API service to AKS using the Azure Machine Learning APIs to containerize and deploy the API.

  8. Quando o serviço de back-end recebe uma solicitação de um usuário, chamar a API de recomendações hospedada no AKS para obter as 10 principais recomendações e exibi-las para o usuário.When the backend service gets a request from a user, call the recommendations API hosted in AKS to get the top 10 recommendations and display them to the user.

ArquiteturaArchitecture

Esta arquitetura é formada pelos seguintes componentes:This architecture consists of the following components:

Azure Databricks.Azure Databricks. O Databricks é um ambiente de desenvolvimento usado para preparar os dados de entrada e treinar o modelo de recomendação em um cluster Spark.Databricks is a development environment used to prepare input data and train the recommender model on a Spark cluster. O Azure Databricks também fornece um workspace interativo para ser executado e colaborar em notebooks em caso de tarefas de processamento de dados ou de aprendizado de máquina.Azure Databricks also provides an interactive workspace to run and collaborate on notebooks for any data processing or machine learning tasks.

AKs ( serviço kubernetes do Azure ).Azure Kubernetes Service (AKS). O AKS é usado para implantar e operacionalizar uma API de serviço do modelo de machine learning em um cluster do Kubernetes.AKS is used to deploy and operationalize a machine learning model service API on a Kubernetes cluster. O AKS hospeda o modelo em contêineres, fornecendo escalabilidade que atende a seus requisitos de taxa de transferência, gerenciamento de identidade e de acesso, registro em log e monitoramento de integridade.AKS hosts the containerized model, providing scalability that meets your throughput requirements, identity and access management, and logging and health monitoring.

Azure Cosmos DB.Azure Cosmos DB. O Cosmos DB é um serviço de banco de dados distribuído globalmente usado para armazenar os 10 principais filmes recomendados para cada usuário.Cosmos DB is a globally distributed database service used to store the top 10 recommended movies for each user. O Azure Cosmos DB é adequado para o cenário porque oferece baixa latência (10 ms no 99º percentil) para ler os primeiros itens recomendados para determinado usuário.Azure Cosmos DB is well-suited for this scenario, because it provides low latency (10 ms at 99th percentile) to read the top recommended items for a given user.

Azure Machine Learning.Azure Machine Learning. Esse serviço é usado para controlar e gerenciar modelos de machine learning e, em seguida, empacotar e implantar esses modelos em um ambiente escalonável do AKS.This service is used to track and manage machine learning models, and then package and deploy these models to a scalable AKS environment.

Recomendações da Microsoft.Microsoft Recommenders. Esse repositório de software livre contém códigos de utilitários e exemplos para que os usuários possam começar a compilar, avaliar e operacionalizar um sistema de recomendação.This open-source repository contains utility code and samples to help users get started in building, evaluating, and operationalizing a recommender system.

Considerações sobre o desempenhoPerformance considerations

O desempenho é uma consideração essencial para obter recomendações em tempo real, porque as recomendações geralmente estão no caminho crítico da solicitação que um usuário faz em seu site.Performance is a primary consideration for real-time recommendations, because recommendations usually fall in the critical path of the request a user makes on your site.

A combinação do AKS com o Azure Cosmos DB permite que essa arquitetura forneça um bom ponto de partida para oferecer recomendações a uma carga de trabalho de médio porte com o mínimo de sobrecarga.The combination of AKS and Azure Cosmos DB enables this architecture to provide a good starting point to provide recommendations for a medium-sized workload with minimal overhead. Em um teste de carga com 200 usuários simultâneos, esta arquitetura fornece recomendações com uma média de latência de cerca de 60 ms e tem desempenho a uma taxa de transferência de 180 solicitações por segundo.Under a load test with 200 concurrent users, this architecture provides recommendations at a median latency of about 60 ms and performs at a throughput of 180 requests per second. O teste de carga foi executado com a configuração de implantação padrão (um cluster do AKS 3x D3 v2 com 12 vCPUs, 42 GB de memória e 11.000 RUs (unidades de solicitação) por segundo provisionado para o Azure Cosmos DB).The load test was run against the default deployment configuration (a 3x D3 v2 AKS cluster with 12 vCPUs, 42 GB of memory, and 11,000 Request Units (RUs) per second provisioned for Azure Cosmos DB).

Gráfico do desempenho

Gráfico da taxa de transferência

O Azure Cosmos DB é recomendado por sua distribuição global turnkey e por sua utilidade em atender a todos os requisitos de banco de dados que seu aplicativo possa ter.Azure Cosmos DB is recommended for its turnkey global distribution and usefulness in meeting any database requirements your app has. Para uma latência ligeiramente mais rápida, considere usar o cache do Azure para Redis em vez de Azure Cosmos DB para servir pesquisas.For slightly faster latency, consider using Azure Cache for Redis instead of Azure Cosmos DB to serve lookups. O cache do Azure para Redis pode melhorar o desempenho de sistemas que dependem muito dos dados em armazenamentos de back-end.Azure Cache for Redis can improve performance of systems that rely highly on data in back-end stores.

Considerações sobre escalabilidadeScalability considerations

Se você não planeja usar o Spark ou tem uma carga de trabalho menor que não precisa de distribuição, considere usar a DSVM (Máquina Virtual de Ciência de Dados) em vez do Azure Databricks.If you don't plan to use Spark, or you have a smaller workload where you don't need distribution, consider using Data Science Virtual Machine (DSVM) instead of Azure Databricks. A DSVM é uma máquina virtual do Azure com estruturas e ferramentas de aprendizado profundo para aprendizado de máquina e ciência de dados.DSVM is an Azure virtual machine with deep learning frameworks and tools for machine learning and data science. Da mesma forma que no Azure Databricks, qualquer modelo que você criar em uma DSVM poderá ser operacionalizado como um serviço no AKS por meio do Azure Machine Learning.As with Azure Databricks, any model you create in a DSVM can be operationalized as a service on AKS via Azure Machine Learning.

Durante o treinamento, provisione um cluster Spark de tamanho fixo maior no Azure Databricks ou configure o dimensionamento automático.During training, provision a larger fixed-size Spark cluster in Azure Databricks or configure autoscaling. Quando o dimensionamento automático estiver habilitado, o Databricks monitorará a carga no seu cluster e escalará e reduzirá verticalmente quando necessário.When autoscaling is enabled, Databricks monitors the load on your cluster and scales up and downs when required. Provisione ou escale horizontalmente um cluster maior se você tiver uma quantidade grande de dados e desejar reduzir a quantidade de tempo que leva as tarefas de preparação ou modelagem de dados.Provision or scale out a larger cluster if you have a large data size and you want to reduce the amount of time it takes for data preparation or modeling tasks.

Dimensione o cluster do AKS para atender aos requisitos de desempenho e taxa de transferência.Scale the AKS cluster to meet your performance and throughput requirements. Aumente o número de pods para utilizar totalmente o cluster e escale os nós do cluster para atender à demanda de seu serviço.Take care to scale up the number of pods to fully utilize the cluster, and to scale the nodes of the cluster to meet the demand of your service. Para obter mais informações sobre como dimensionar o cluster para atender a requisitos de desempenho e taxa de transferência do serviço de recomendação, confira Escalando clusters do Serviço de Contêiner do Azure.For more information on how to scale your cluster to meet the performance and throughput requirements of your recommender service, see Scaling Azure Container Service Clusters.

Para gerenciar o desempenho do Azure Cosmos DB, estime o número de leituras por segundo e provisione o número necessário de RUs por segundo (taxa de transferência).To manage Azure Cosmos DB performance, estimate the number of reads required per second, and provision the number of RUs per second (throughput) needed. Use as melhores práticas de particionamento e dimensionamento horizontal.Use best practices for partitioning and horizontal scaling.

Considerações de custoCost considerations

Os principais geradores de custo no cenário em questão são:The main drivers of cost in this scenario are:

  • O tamanho do cluster do Azure Databricks necessário para treinamento.The Azure Databricks cluster size required for training.
  • O tamanho do cluster do AKS necessário para atender às necessidades de desempenho.The AKS cluster size required to meet your performance requirements.
  • As RUs do Azure Cosmos DB provisionadas para atender às necessidades de desempenho.Azure Cosmos DB RUs provisioned to meet your performance requirements.

Gerencie os custos do Azure Databricks fazendo a readaptação com menor frequência e desligando o cluster Spark quando ele não estiver em uso.Manage the Azure Databricks costs by retraining less frequently and turning off the Spark cluster when not in use. Os custos do AKS e do Azure Cosmos DB estão vinculados à taxa de transferência e ao desempenho exigidos pelo seu site e serão escalados e reduzidos verticalmente dependendo do volume do tráfego em seu site.The AKS and Azure Cosmos DB costs are tied to the throughput and performance required by your site and will scale up and down depending on the volume of traffic to your site.

Implantar a soluçãoDeploy the solution

Para implantar essa arquitetura, siga as instruções de Azure Databricks no documento de instalação.To deploy this architecture, follow the Azure Databricks instructions in the setup document. Resumidamente, as instruções exigem que você:Briefly, the instructions require you to:

  1. Crie um espaço de trabalho Azure Databricks.Create an Azure Databricks workspace.

  2. Crie um novo cluster com a seguinte configuração no Azure Databricks:Create a new cluster with the following configuration in Azure Databricks:

    • Modo de cluster: StandardCluster mode: Standard
    • Versão do Databricks Runtime: 4,3 (inclui Apache Spark 2.3.1, escala de 2,11)Databricks Runtime Version: 4.3 (includes Apache Spark 2.3.1, Scala 2.11)
    • Versão do Python: 3Python Version: 3
    • Tipo de driver: Standard _ DS3 _ v2Driver Type: Standard_DS3_v2
    • Tipo de trabalho: Standard _ DS3 _ v2 (mín. e máx. conforme necessário)Worker Type: Standard_DS3_v2 (min and max as required)
    • Término obrigatório: (conforme necessário)Auto Termination: (as required)
    • Configuração do Spark: (conforme necessário)Spark Config: (as required)
    • Variáveis de ambiente: (conforme necessário)Environment Variables: (as required)
  3. Crie um token de acesso pessoal no espaço de trabalho Azure Databricks.Create a personal access token within the Azure Databricks workspace. Consulte a documentação de autenticação do Azure Databricks para obter detalhes.See the Azure Databricks authentication documentation for details.

  4. Clone o repositório de recomendadores da Microsoft em um ambiente em que você possa executar scripts (por exemplo, seu computador local).Clone the Microsoft Recommenders repository into an environment where you can execute scripts (for example, your local computer).

  5. Siga as instruções de configuração de instalação rápida para instalar as bibliotecas relevantes em Azure Databricks.Follow the Quick install setup instructions to install the relevant libraries on Azure Databricks.

  6. Siga as instruções de configuração de instalação rápida para preparar Azure Databricks para operacionalização.Follow the Quick install setup instructions to prepare Azure Databricks for operationalization.

  7. Importe o bloco de anotações de operacionalização do filme ALS para seu espaço de trabalho.Import the ALS Movie Operationalization notebook into your workspace. Depois de fazer logon em seu espaço de trabalho do Azure Databricks, faça o seguinte:After logging into your Azure Databricks Workspace, do the following:

    a.a. Clique em início no lado esquerdo do espaço de trabalho.Click Home on the left side of the workspace.

    b.b. Clique com o botão direito do mouse em espaço em branco em seu diretório base.Right-click on white space in your home directory. Selecione Importar .Select Import .

    c.c. Selecione URL e cole o seguinte no campo de texto: https://github.com/Microsoft/Recommenders/blob/master/examples/05_operationalize/als_movie_o16n.ipynbSelect URL , and paste the following into the text field: https://github.com/Microsoft/Recommenders/blob/master/examples/05_operationalize/als_movie_o16n.ipynb

    d.d. Clique em Importar .Click Import .

  8. Abra o bloco de anotações no Azure Databricks e anexe o cluster configurado.Open the notebook within Azure Databricks and attach the configured cluster.

  9. Execute o bloco de anotações para criar os recursos do Azure necessários para criar uma API de recomendação que forneça as 10 principais recomendações de filme para um determinado usuário.Run the notebook to create the Azure resources required to create a recommendation API that provides the top-10 movie recommendations for a given user.

Também criamos uma arquitetura de referência que usa o Spark e Azure Databricks para executar os processos de pontuação em lote agendados.We have also built a reference architecture that uses Spark and Azure Databricks to execute scheduled batch-scoring processes. Consulte essa arquitetura de referência para entender uma abordagem recomendada para gerar novas recomendações periodicamente.See that reference architecture to understand a recommended approach for generating new recommendations routinely.