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

Esta arquitetura de referência mostra como preparar um modelo de recomendação com o Azure Databricks e implementá-la como uma API com o Azure Cosmos DB, o Azure Machine Learning e o Azure Kubernetes Service (AKS).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 generalizada para a maioria dos cenários de motor 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 esta arquitetura está disponível no GitHub.A reference implementation for this architecture is available on GitHub.

Arquitetura de um modelo de aprendizagem automática para recomendações de filmes de formação

Cenário: Uma organização de suporte de dados pretende fornecer recomendações de vídeo ou filme em formato a 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 aos vários objetivos de negócio, incluindo uma maior taxas de cliques, engagement maior no site e maior satisfação do utilizador.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 destina-se a formação e implementar uma API de serviço de recomendador em tempo real que pode fornecer as recomendações de 10 filmes principais para um determinado 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 este modelo de recomendação é o seguinte:The data flow for this recommendation model is as follows:

  1. Controlar o comportamento dos usuários.Track user behaviors. Por exemplo, um serviço de back-end possa fazer logon quando um utilizador classifica um filme ou clica num artigo de produto ou de notícias.For example, a backend service might log when a user rates a movie or clicks a product or news article.

  2. Carregar os dados para o Azure Databricks a partir de um disponíveis origem de dados.Load the data into Azure Databricks from an available data source.

  3. Preparar os dados e dividi-lo em preparação e teste conjuntos para preparar o modelo.Prepare the data and split it into training and testing sets to train the model. ([Este guia] guide descreve as opções para a divisão de dados.)(This guide describes options for splitting data.)

  4. Ajustar a [filtragem em colaboração Spark] als modelos para os dados.Fit the Spark Collaborative Filtering model to the data.

  5. Avalie a qualidade do modelo de uso de métricas de classificação e classificação.Evaluate the quality of the model using rating and ranking metrics. ([Este guia] eval-guide fornece detalhes sobre as métricas que possa avaliar sua recomendador no.)(This guide provides details about the metrics you can evaluate your recommender on.)

  6. Precompute as recomendações de 10 principais por utilizador e de arquivo como uma cache no Azure Cosmos DB.Precompute the top 10 recommendations per user and store as a cache in Azure Cosmos DB.

  7. Implemente um serviço de API no AKS usando as APIs do Azure Machine Learning para colocar num contentor e implementar a API.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 um pedido de um usuário, chame as recomendações de API alojada no AKS para obter as recomendações de 10 principais e exibi-los ao 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 é composta pelos seguintes componentes:This architecture consists of the following components:

O Azure Databricks.Azure Databricks. Databricks é um ambiente de desenvolvimento usado para preparar dados de entrada e preparar o modelo de recomendador num cluster do 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 uma área de trabalho interativa para executar e colaborar em blocos de notas para qualquer processamento de dados ou as tarefas de aprendizagem automática.Azure Databricks also provides an interactive workspace to run and collaborate on notebooks for any data processing or machine learning tasks.

[Serviço Kubernetes do Azure] aks (AKS).Azure Kubernetes Service (AKS). AKS é utilizado para implementar e operacionalizar um machine learning API de modelo de serviço num cluster do Kubernetes.AKS is used to deploy and operationalize a machine learning model service API on a Kubernetes cluster. AKS hospeda o modelo em contentores, fornecendo escalabilidade que cumpra os requisitos de débito, gestão de identidades e acessos e registo e monitorização de estado de funcionamento.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 base de dados globalmente distribuída utilizado para armazenar os filmes recomendados 10 principais para cada utilizador.Cosmos DB is a globally distributed database service used to store the top 10 recommended movies for each user. O Azure Cosmos DB é bem adequado para este cenário, porque fornece (10 ms no percentil de 99) de baixa latência para ler os principais itens recomendados para um 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.

Serviço do Azure Machine Learning.Azure Machine Learning Service. Este serviço é utilizado para controlar e gerir modelos de machine learning e, em seguida, a empacotar e implementar estes modelos para 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.

Microsoft Recommenders.Microsoft Recommenders. Este repositório de código-fonte aberto contém código utilitário e exemplos para ajudar os utilizadores a começar a utilizar na criação, avaliar e operar um sistema de recomendador.This open-source repository contains utility code and samples to help users get started in building, evaluating, and operationalizing a recommender system.

Considerações de desempenhoPerformance considerations

O desempenho é das principais preocupações para obter recomendações em tempo real, porque as recomendações, normalmente, enquadram-se no caminho crítico do pedido que faz com que um utilizador no 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 e do Azure Cosmos DB permite que esta arquitetura fornecer um ponto de partida para fornecer recomendações para uma carga de trabalho de médio porte com sobrecarga mínima.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. Num teste de carga com 200 utilizadores em simultâneo, esta arquitetura fornece recomendações mediano de uma latência de cerca de 60 ms e apresente um débito de 180 pedidos 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 em relação a configuração de implementação do padrão (um cluster do AKS v2 x D3 com 12 vCPUs, 42 GB de memória e 11,000 3 [unidades de pedido (RUs) por segundo] ru aprovisionada 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 de desempenho

Gráfico de débito

O Azure Cosmos DB é recomendado para a distribuição global chave na mão e utilidade para cumprir os requisitos de base de dados que tem a sua aplicação.Azure Cosmos DB is recommended for its turnkey global distribution and usefulness in meeting any database requirements your app has. Para um pouco latência mais rápida, considere a utilização [a Cache de Redis do Azure] redis em vez do Azure Cosmos DB para servir de pesquisas.For slightly faster latency, consider using Azure Redis Cache instead of Azure Cosmos DB to serve lookups. Redis Cache pode melhorar o desempenho dos sistemas altamente dependem de dados nos arquivos de back-end.Redis Cache can improve performance of systems that rely highly on data in back-end stores.

Considerações de escalabilidadeScalability considerations

Se não planeia utilizar o Spark, ou se tiver uma carga de trabalho mais pequena em que não precisa de distribuição, considere a utilização [máquina de Virtual de ciência de dados] dsvm (DSVM) 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. DSVM é uma máquina virtual do Azure com estruturas de aprendizagem profunda e ferramentas para machine learning e ciência de dados.DSVM is an Azure virtual machine with deep learning frameworks and tools for machine learning and data science. Como com o Azure Databricks, qualquer modelo que criar numa DSVM do pode serem operacionalizado como um serviço no AKS através 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, aprovisionar um cluster do Spark de tamanho fixo maior no Azure Databricks ou configure dimensionamento automático.During training, provision a larger fixed-size Spark cluster in Azure Databricks or configure autoscaling. Quando o dimensionamento automático está ativado, Databricks monitoriza a carga no seu cluster verticalmente e listas quando necessário.When autoscaling is enabled, Databricks monitors the load on your cluster and scales up and downs when required. Aprovisionar ou aumentar horizontalmente um cluster maior se tiver um tamanho de dados grandes e deseja reduzir a quantidade de tempo que demora para preparação de dados ou a Modelagem de tarefas.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 cumprir os requisitos de desempenho e a produtividade.Scale the AKS cluster to meet your performance and throughput requirements. Tenha cuidado para aumentar verticalmente o número de [pods] scale para utilizar totalmente o cluster e para dimensionar o [nós] nodes do cluster para satisfazer a procura 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 seu cluster para cumprir os requisitos de débito do seu serviço de recomendador e desempenho, consulte Dimensionar Clusters de serviço de contentor 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 gerir o desempenho do Azure Cosmos DB, estimar o número de leituras necessária por segundo e aprovisionar o número de [RU por segundo] ru necessário (débito).To manage Azure Cosmos DB performance, estimate the number of reads required per second, and provision the number of RUs per second (throughput) needed. Utilize as práticas recomendadas para criação de partições e dimensionamento horizontal.Use best practices for partitioning and horizontal scaling.

Considerações de custosCost considerations

Os controladores principais do custo neste cenário são:The main drivers of cost in this scenario are:

  • O tamanho de 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 a seus requisitos de desempenho.The AKS cluster size required to meet your performance requirements.
  • RUs de DB do Azure Cosmos aprovisionadas para cumprir os requisitos de desempenho.Azure Cosmos DB RUs provisioned to meet your performance requirements.

Gerir os custos do Azure Databricks com menos frequência a reparametrização e desativar o cluster do Spark quando não está em utilização.Manage the Azure Databricks costs by retraining less frequently and turning off the Spark cluster when not in use. Os custos AKS e o Azure Cosmos DB estão associados ao débito e o desempenho exigidas pelo seu site e irão aumentar vertical ou horizontalmente, dependendo do volume de tráfego do 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.

Implementar a soluçãoDeploy the solution

Para implementar esta arquitetura, primeiro crie um ambiente do Azure Databricks para preparar dados e formar um modelo de recomendador:To deploy this architecture, first create an Azure Databricks environment to prepare data and train a recommender model:

  1. Criar uma área de trabalho do Azure Databricks.Create an Azure Databricks workspace.

  2. Crie um novo cluster no Azure Databricks.Create a new cluster in Azure Databricks. É necessária a seguinte configuração:The following configuration is required:

    • Modo de cluster: StandardCluster mode: Standard
    • Versão de Runtime do Databricks: 4.1 (inclui Apache Spark 2.3.0, Scala 2.11)Databricks Runtime Version: 4.1 (includes Apache Spark 2.3.0, Scala 2.11)
    • Versão de Python: 3Python Version: 3
    • Tipo de controlador: Standard_DS3_v2Driver Type: Standard_DS3_v2
    • Tipo de função de trabalho: Standard_DS3_v2 (min e max conforme necessário)Worker Type: Standard_DS3_v2 (min and max as required)
    • Auto terminação: (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. Clone o [Microsoft Recommenders] github repositório no seu computador local.Clone the Microsoft Recommenders repository on your local computer.

  4. Zip o conteúdo dentro da pasta Recommenders:Zip the content inside the Recommenders folder:

    cd Recommenders
    zip -r Recommenders.zip
    
  5. Anexe biblioteca Recommenders ao seu cluster da seguinte forma:Attach the Recommenders library to your cluster as follows:

    1. No menu do seguinte, utilize a opção para importar uma biblioteca ("para importar uma biblioteca, tais como um jar ou ovo, clique aqui") e prima clique aqui.In the next menu, use the option to import a library ("To import a library, such as a jar or egg, click here") and press click here.

    2. No primeiro menu pendente, selecione o carregar Python ovo ou PyPI opção.At the first drop-down menu, select the Upload Python egg or PyPI option.

    3. Selecione soltar ovo de biblioteca aqui para carregar e selecione o ficheiro de Recommenders.zip que acabou de criar.Select Drop library egg here to upload and select the Recommenders.zip file you just created.

    4. Selecione biblioteca de criar para carregar o ficheiro. zip e disponibilizá-lo na sua área de trabalho.Select Create library to upload the .zip file and make it available in your workspace.

    5. No menu do seguinte, anexe biblioteca ao seu cluster.In the next menu, attach the library to your cluster.

  6. Na área de trabalho, importar os exemplo de Operacionalização de filme ALS.In your workspace, import the ALS Movie Operationalization example.

  7. Execute o bloco de notas de Operacionalização de filme ALS para criar os recursos necessários para criar uma recomendação de API fornece as recomendações de filmes de 10 principais para um determinado usuário.Run the ALS Movie Operationalization notebook to create the resources required to create a recommendation API that provides the top-10 movie recommendations for a given user.