Azure 上でリアルタイム レコメンデーション API を構築するBuild a real-time recommendation API on Azure

この参照アーキテクチャは、Azure Databricks を使用してレコメンデーション モデルをトレーニングし、Azure Cosmos DB、Azure Machine Learning、および Azure Kubernetes Service (AKS) を使用して API としてデプロイする方法を示します。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). このアーキテクチャは、製品、映画、およびニュースに関するレコメンデーションを含め、ほとんどのレコメンデーション エンジンのシナリオに一般化することができます。This architecture can be generalized for most recommendation engine scenarios, including recommendations for products, movies, and news.

このアーキテクチャの参照実装は、GitHub で入手できますA reference implementation for this architecture is available on GitHub

映画のレコメンデーションをトレーニングするための機械学習モデルのアーキテクチャ

シナリオ:あるメディア組織は、ユーザーに映画またはビデオのレコメンデーションを提供したいと考えています。Scenario: A media organization wants to provide movie or video recommendations to its users. 組織は、パーソナライズされたレコメンデーションを提供することで、クリックスルー率の向上、サイトのエンゲージメントの向上、ユーザー満足度の向上など、いくつかのビジネス目標を達成します。By providing personalized recommendations, the organization meets several business goals, including increased click-through rates, increased engagement on site, and higher user satisfaction.

この参照アーキテクチャは、特定のユーザーに上位 10 個の映画のレコメンデーションを提供できるリアルタイム レコメンダー サービス API をトレーニングおよびデプロイするためのものです。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.

このレコメンデーション モデルのデータ フローは次のとおりです。The data flow for this recommendation model is as follows:

  1. ユーザーの動作を追跡します。Track user behaviors. たとえば、ユーザーが映画を評価したときや製品やニュースの記事をクリックしたときに、バックエンド サービスでログを記録することができます。For example, a backend service might log when a user rates a movie or clicks a product or news article.

  2. このデータを、使用できるデータ ソースから Azure Databricks に読み込みます。Load the data into Azure Databricks from an available data source.

  3. データを準備し、それをトレーニング セットとテスト セットに分割してモデルをトレーニングしますPrepare the data and split it into training and testing sets to train the model. (このガイドでは、データを分割するための選択肢が説明されています)。(This guide describes options for splitting data.)

  4. データに合わせて Spark の Collaborative Filtering モデルを調整します。Fit the Spark Collaborative Filtering model to the data.

  5. 評価とランク付けのメトリックを使用してモデルの品質を評価しますEvaluate the quality of the model using rating and ranking metrics. (このガイドでは、レコメンダーを評価できるメトリックについて詳しく説明されています)。(This guide provides details about the metrics you can evaluate your recommender on.)

  6. ユーザーごとに上位 10 個のレコメンデーションを事前に計算し、Azure Cosmos DB にキャッシュとして保存します。Precompute the top 10 recommendations per user and store as a cache in Azure Cosmos DB.

  7. Azure Machine Learning API を使用して API サービスを AKS にデプロイし、API をコンテナー化してデプロイします。Deploy an API service to AKS using the Azure Machine Learning APIs to containerize and deploy the API.

  8. バックエンド サービスによってユーザーから要求が取得されたら、AKS 内でホストされているレコメンデーション API を呼び出して上位 10 個のレコメンデーションを取得し、それらをユーザーに表示します。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.

ArchitectureArchitecture

このアーキテクチャは、次のコンポーネントで構成されます。This architecture consists of the following components:

Azure DatabricksAzure Databricks. Databricks は、入力データを準備し、Spark クラスター上でレコメンダー モデルをトレーニングするために使用される開発環境です。Databricks is a development environment used to prepare input data and train the recommender model on a Spark cluster. また、Azure Databricks には、データ処理タスクや機械学習タスクのためにノートブック上で実行して共同作業することができる対話型ワークスペースも用意されています。Azure Databricks also provides an interactive workspace to run and collaborate on notebooks for any data processing or machine learning tasks.

Azure Kubernetes Service (AKS)。Azure Kubernetes Service (AKS). AKS は、Kubernetes クラスターに機械学習モデル サービス API をデプロイして運用化するために使用されます。AKS is used to deploy and operationalize a machine learning model service API on a Kubernetes cluster. AKS はコンテナー化されたモデルをホストし、スループット要件、ID とアクセス管理、ログ記録と正常性の監視を満たすスケーラビリティを実現しています。AKS hosts the containerized model, providing scalability that meets your throughput requirements, identity and access management, and logging and health monitoring.

Azure Cosmos DBAzure Cosmos DB. Cosmos DB は、各ユーザーのおすすめ映画上位 10 個を保存するために使用されるグローバルに分散されたデータベース サービスです。Cosmos DB is a globally distributed database service used to store the top 10 recommended movies for each user. 特定のユーザーの上位のおすすめ項目を読み取るためにかかる待機時間が短い (99 パーセンタイルで 10 ミリ秒) ので、Azure Cosmos DB はこのシナリオに適しています。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 LearningAzure Machine Learning. このサービスは、機械学習モデルを追跡および管理し、そのモデルをパッケージ化してスケーラブルな 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 RecommendersMicrosoft Recommenders. このオープンソース リポジトリには、レコメンダー システムの構築、評価、および運用化を始める際に役立つユーティリティ コードとサンプルが含まれています。This open-source repository contains utility code and samples to help users get started in building, evaluating, and operationalizing a recommender system.

パフォーマンスに関する考慮事項Performance considerations

通常、レコメンデーションは、ユーザーがサイトに対して行う要求のクリティカル パスに含まれるため、パフォーマンスはリアルタイム レコメンデーションの主な考慮事項です。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.

AKS と Azure Cosmos DB の組み合わせることで、このアーキテクチャは、最小限のオーバーヘッドで中規模のワークロード向けにレコメンデーションを提供するために適した出発点となります。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. 200 人の同時ユーザーによる負荷テストでは、このアーキテクチャは約 60 ミリ秒の中央値の待機時間でレコメンデーションを提供し、1 秒あたり 180 要求のスループットで実行されます。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. この負荷テストは、既定のデプロイ構成 (Azure Cosmos DB 用にプロビジョニングされた 12 vCPU、42 GB のメモリ、および 11,000 要求ユニット (RU)/秒の 3x D3 v2 AKS クラスター) に対して実行されました。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).

パフォーマンスのグラフ

スループットのグラフ

Azure Cosmos DB は、ターンキーのグローバル配布と、アプリが持っているデータベース要件を満たす上での有用性により推奨されています。Azure Cosmos DB is recommended for its turnkey global distribution and usefulness in meeting any database requirements your app has. 待機時間がやや短いため、参照の処理には Azure Cosmos DB ではなく Azure Cache for Redis を使用することを検討してください。For slightly faster latency, consider using Azure Cache for Redis instead of Azure Cosmos DB to serve lookups. Azure Cache for Redis で、バックエンド ストア内のデータへの依存度が高いシステムのパフォーマンスを向上することができます。Azure Cache for Redis can improve performance of systems that rely highly on data in back-end stores.

スケーラビリティに関する考慮事項Scalability considerations

Spark を使用する予定がない場合、またはワークロードが小規模で分散が不要な場合は、Azure Databricks ではなく Data Science Virtual Machine (DSVM) を使用することを検討してください。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 は、機械学習とデータ サイエンス向けのディープ ラーニング フレームワークとツールを備えた Azure 仮想マシンです。DSVM is an Azure virtual machine with deep learning frameworks and tools for machine learning and data science. Azure Databricks と同様に、DSVM で作成したモデルは、Azure Machine Learning を介して AKS 上のサービスとして運用化することができます。As with Azure Databricks, any model you create in a DSVM can be operationalized as a service on AKS via Azure Machine Learning.

トレーニング時は、より大きい固定サイズの Spark クラスターを Azure Databricks にプロビジョニングするか、自動スケーリングを構成します。During training, provision a larger fixed-size Spark cluster in Azure Databricks or configure autoscaling. 自動スケーリングが有効な場合、Databricks ではクラスターの負荷が監視され、必要に応じてスケールアップまたはスケールダウンされます。When autoscaling is enabled, Databricks monitors the load on your cluster and scales up and downs when required. 大規模なデータ サイズで、データの準備またはモデリング タスクにかかる時間を短縮したい場合は、より大きなクラスターをプロビジョニングまたはスケールアウトします。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.

パフォーマンスとスループットの要件を満たすように AKS クラスターをスケールします。Scale the AKS cluster to meet your performance and throughput requirements. クラスターを十分に活用するためにポッドの数をスケールアップし、サービスの要件を満たすようにクラスターのノードをスケールすることに留意します。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. レコメンデーション サービスのパフォーマンスとスループットの要件を満たすようにクラスターをスケールする方法の詳細については、「Azure Container Service クラスターのスケール」を参照してください。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.

Azure Cosmos DB のパフォーマンスを管理するには、1 秒間に必要な読み取り数を見積もり、必要な秒あたりの RU (スループット) の数をプロビジョニングします。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 best practices for partitioning and horizontal scaling.

コストに関する考慮事項Cost considerations

このシナリオにおけるコストの主な要因は次のとおりです。The main drivers of cost in this scenario are:

  • トレーニングに必要な Azure Databricks クラスターのサイズ。The Azure Databricks cluster size required for training.
  • パフォーマンス要件を満たすために必要な AKS クラスターのサイズ。The AKS cluster size required to meet your performance requirements.
  • パフォーマンス要件を満たすためにプロビジョニングされる Azure Cosmos DB RU。Azure Cosmos DB RUs provisioned to meet your performance requirements.

頻度が低い場合は再トレーニングを少なくし、使用していない場合は Spark クラスターをオフにすることで、Azure Databricks のコストを管理します。Manage the Azure Databricks costs by retraining less frequently and turning off the Spark cluster when not in use. AKS と Azure Cosmos DB のコストはサイトに必要なスループットとパフォーマンスに左右され、サイトへのトラフィック量に応じてスケールアップまたはスケールダウンします。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.

ソリューションのデプロイ方法Deploy the solution

このアーキテクチャをデプロイするには、セットアップのドキュメントにある Azure Databricks の手順に従ってください。To deploy this architecture, follow the Azure Databricks instructions in the setup document. 要約すると、その手順では次のことを行う必要があります。Briefly, the instructions require you to:

  1. Azure Databricks ワークスペースを作成します。Create an Azure Databricks workspace.

  2. 次の構成を持つ新しいクラスターを Azure Databricks 上に作成します。Create a new cluster with the following configuration in Azure Databricks:

    • クラスター モード:StandardCluster mode: Standard
    • Databricks Runtime のバージョン:4.3 (Apache Spark 2.3.1、Scala 2.11 など)Databricks Runtime Version: 4.3 (includes Apache Spark 2.3.1, Scala 2.11)
    • Python のバージョン:3Python Version: 3
    • ドライバーの種類:Standard_DS3_v2Driver Type: Standard_DS3_v2
    • worker の種類:Standard_DS3_v2 (必要に応じて最小および最大)Worker Type: Standard_DS3_v2 (min and max as required)
    • 自動終了: (必要に応じて)Auto Termination: (as required)
    • Spark の構成: (必要に応じて)Spark Config: (as required)
    • 環境変数: (必要に応じて)Environment Variables: (as required)
  3. Azure Databricks ワークスペース内に個人用アクセス トークンを作成します。Create a personal access token within the Azure Databricks workspace. 詳細については、Azure Databricks 認証のドキュメントを参照してください。See the Azure Databricks authentication documentation for details.

  4. スクリプトを実行できる環境 (ご使用のローカル コンピューターなど) に Microsoft Recommenders リポジトリを複製します。Clone the Microsoft Recommenders repository into an environment where you can execute scripts (for example, your local computer).

  5. クイック インストールのセットアップ手順に従って関連するライブラリを Azure Databricks にインストールします。Follow the Quick install setup instructions to install the relevant libraries on Azure Databricks.

  6. イック インストールのセットアップ手順に従って、Azure Databricks を運用化するために準備します。Follow the Quick install setup instructions to prepare Azure Databricks for operationalization.

  7. ワークスペースに ALS Movie Operationalization ノートブックをインポートします。Import the ALS Movie Operationalization notebook into your workspace. Azure Databricks ワークスペースへのログイン後、次の手順を行います。After logging into your Azure Databricks Workspace, do the following:

    a.a. ワークスペースの左側にある [ホーム] をクリックします。Click Home on the left side of the workspace.

    b.b. ホーム ディレクトリ内の空白を右クリックします。Right-click on white space in your home directory. [インポート] を選択します。Select Import.

    c.c. [URL] を選択し、次のとおりテキスト フィールドに貼り付けます: 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. [インポート] をクリックします。Click Import.

  8. Azure Databricks 内でノートブックを開き、構成したクラスターをアタッチします。Open the notebook within Azure Databricks and attach the configured cluster.

  9. ノートブックを実行して、特定のユーザーに上位 10 個のおすすめ映画を提供するレコメンデーション API を作成するために必要な Azure リソースを作成します。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.

Spark と Azure Databricks を使用して、スケジュールされたバッチスコアリング プロセスを実行する参照アーキテクチャも構築しました。We have also built a reference architecture that uses Spark and Azure Databricks to execute scheduled batch-scoring processes. 新しい推奨事項を日常的に作成するために推奨されるアプローチを理解するには、その参照アーキテクチャを参照してください。See that reference architecture to understand a recommended approach for generating new recommendations routinely.