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. API를 컨테이너화하고 배포하는 Azure Machine Learning 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 Databricks.Azure 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 서비스 (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 DB.Azure Cosmos DB. Cosmos DB는 각 사용자를 위한 상위 10개 추천 동영상을 저장하는 데 사용되는 글로벌 분산 데이터베이스 서비스입니다.Cosmos DB is a globally distributed database service used to store the top 10 recommended movies for each user. Azure Cosmos DB는 특정 사용자를 위한 상위 추천 항목을 읽을 때 대기 시간이 짧으므로(99%의 확률로 10ms) 이러한 시나리오에 매우 적합합니다.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. 이 서비스는 기계 학습 모델을 추적 및 관리하고, 이러한 모델을 패키징하여 확장 가능한 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 추천 시스템.Microsoft 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명인 부하 테스트에서 이 아키텍처는 약 60ms의 평균 대기 시간으로 추천 항목을 제공하고, 초당 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용으로 프로비전된 vCPU 12개, 메모리 42GB, 초당 요청 단위(RU) 11,000개를 지원하는 D3 v2 AKS 클러스터 3개)을 대상으로 실행되었습니다.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. Redis 용 Azure Cache는 백 엔드 저장소의 데이터를 사용 하는 시스템의 성능을 향상 시킬 수 있습니다.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.

학습 중에는 Azure Databricks에 대규모 고정 크기의 Spark 클러스터를 프로비전하거나 자동 확장을 구성합니다.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. 클러스터를 완전히 활용할 수 있게 Pod 수를 확장하고, 서비스의 필요에 맞게 클러스터의 노드를 확장하도록 유의하세요.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 성능을 관리하려면 초당 필요한 읽기 수를 측정하고, 필요한 초당 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:

    • 클러스터 모드: 표준Cluster 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
    • 드라이버 유형: 표준 _ DS3 _ v2Driver Type: Standard_DS3_v2
    • 작업자 유형: 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 추천 리포지토리를 스크립트를 실행할 수 있는 환경 (예: 로컬 컴퓨터)에 복제 합니다.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 운영 화 노트북 을 작업 영역으로 가져옵니다.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.