판매를 예측하는 R 모델을 사용한 일괄 채점

Azure Batch
Azure Blob Storage
Azure Container Instances
Azure Logic Apps
Azure Machine Learning

이 참조 아키텍처는 Azure Batch를 사용하여 R 모델에서 일괄 채점을 수행하는 방법을 보여 줍니다. Azure Batch는 본질적으로 병렬 워크로드에서 잘 작동하며 작업 예약 및 컴퓨팅 관리를 포함합니다. 일괄 유추(채점)는 고객을 분할하거나, 판매를 예측하거나, 고객 행동을 예측하거나, 유지 관리를 예측하거나, 사이버 보안을 개선하는 데 널리 사용됩니다.

Azure에서 R 모델을 사용하여 일괄 처리 채점을 보여 주는 아키텍처 다이어그램.

이 아키텍처의 Visio 파일을 다운로드합니다.

워크플로

이 아키텍처는 다음과 같은 구성 요소로 구성됩니다.

Azure Batch는 가상 머신 클러스터에서 예측 생성 작업을 병렬로 실행합니다. 예측은 R에서 구현된 미리 학습된 기계 학습 모델을 사용하여 수행됩니다. Azure Batch는 클러스터에 제출된 작업 수에 따라 VM을 자동으로 스케일링할 수 있습니다. 각 노드에서 R 스크립트는 Docker 컨테이너 내에서 실행되어 데이터를 채점하고 예측을 생성합니다.

Azure Blob Storage는 입력 데이터, 선행 학습된 기계 학습 모델 및 예측 결과를 저장합니다. 이 워크로드에 필요한 성능에 비해 비용 효율적인 스토리지를 제공합니다.

Azure Container Instances는 주문형 서버리스 컴퓨팅을 제공합니다. 이 경우 컨테이너 인스턴스는 예측을 생성하는 Batch 작업을 트리거하기 위해 일정에 따라 배포됩니다. Batch 작업은 doAzureParallel 패키지를 사용하여 R 스크립트에서 트리거됩니다. 작업이 완료되면 컨테이너 인스턴스가 자동으로 종료됩니다.

Azure Logic Apps는 일정에 따라 컨테이너 인스턴스를 배포하여 전체 워크플로를 트리거합니다. Logic Apps의 Azure Container Instances 커넥터를 사용하면 다양한 트리거 이벤트에 인스턴스를 배포할 수 있습니다.

구성 요소

솔루션 세부 정보

다음 시나리오는 소매점 판매 예측을 기반으로 하지만 아키텍처는 R 모델을 사용하여 더 큰 규모의 예측을 생성해야 하는 모든 시나리오에 대해 일반화할 수 있습니다. 이 아키텍처에 대한 참조 구현은 GitHub에서 사용할 수 있습니다.

잠재적인 사용 사례

슈퍼마켓 체인은 다가오는 분기 동안 제품의 판매를 예측해야 합니다. 예측을 통해 회사는 공급망을 더 잘 관리하고 각 매장의 제품에 대한 수요를 충족할 수 있습니다. 이 회사는 지난 주의 새로운 판매 데이터를 사용할 수 있게 되고 다음 분기의 제품 마케팅 전략이 설정됨에 따라 매주 예측을 업데이트합니다. 개별 판매 예측의 불확실성을 예측하기 위해 분위수 예측이 생성됩니다.

처리에는 다음 단계가 포함됩니다.

  1. Azure 논리 앱은 일주일에 한 번 예측 생성 프로세스를 트리거합니다.

  2. 논리 앱은 Batch 클러스터에서 채점 작업을 트리거하는 스케줄러 Docker 컨테이너를 실행하는 Azure Container Instance를 시작합니다.

  3. 채점 작업은 Batch 클러스터의 노드에서 병렬로 실행됩니다. 각 노드는 다음을 수행합니다.

    1. 작업자 Docker 이미지를 끌어와 컨테이너를 시작합니다.

    2. Azure Blob Storage에서 입력 데이터 및 미리 학습된 R 모델을 읽습니다.

    3. 데이터를 채점하여 예측을 생성합니다.

    4. Blob Storage에 예측 결과를 씁니다.

다음 그림은 한 상점에서 4개의 제품(SKU)에 대한 예측 판매를 보여 줍니다. 검은색 선은 판매 기록이고, 파선은 중앙값(q50) 예측이고, 분홍색 밴드는 25번째 및 75번째 백분위수를 나타내고, 파란색 밴드는 50번째 및 95번째 백분위수를 나타냅니다.

R 모델을 사용한 일괄 채점의 판매 예약

고려 사항

이러한 고려 사항은 워크로드의 품질을 향상시키는 데 사용할 수 있는 일단의 지침 원칙인 Azure Well-Architected Framework의 핵심 요소를 구현합니다. 자세한 내용은 Microsoft Azure Well-Architected Framework를 참조하세요.

성능

컨테이너화된 배포

이 아키텍처를 사용하면 모든 R 스크립트가 Docker 컨테이너 내에서 실행됩니다. 컨테이너를 사용하면 동일한 R 버전 및 패키지 버전을 사용하여 항상 일관된 환경에서 스크립트가 실행됩니다. 각각 다른 R 패키지 종속성 집합이 있기 때문에 스케줄러 및 작업자 컨테이너에는 별도의 Docker 이미지가 사용됩니다.

Azure Container Instances는 스케줄러 컨테이너를 실행하는 서버리스 환경을 제공합니다. 스케줄러 컨테이너는 Azure Batch 클러스터에서 실행되는 개별 채점 작업을 트리거하는 R 스크립트를 실행합니다.

Batch 클러스터의 각 노드는 채점 스크립트를 실행하는 작업자 컨테이너를 실행합니다.

워크로드 병렬화

R 모델을 사용하여 데이터 채점을 일괄 처리할 때 워크로드를 병렬화하는 방법을 고려합니다. 채점 작업을 클러스터 노드 간에 분산할 수 있도록 입력 데이터를 분할해야 합니다. 워크로드를 배포하는 데 가장 적합한 옵션을 검색하려면 다양한 방법을 시도해 보세요. 사례별로 다음을 고려합니다.

  • 단일 노드의 메모리에서 로드 및 처리할 수 있는 데이터 양
  • 각 일괄 작업 시작에 대한 오버헤드
  • R 모델 로드에 대한 오버헤드

이 예제에 사용되는 시나리오에서 모델 개체는 크고, 개별 제품에 대한 예측을 생성하는 데 몇 초밖에 걸리지 않습니다. 이러한 이유로 제품을 그룹화하고 노드당 단일 Batch 작업을 실행할 수 있습니다. 각 작업 내의 루프는 제품에 대한 예측을 순차적으로 생성합니다. 이 방법은 이 특정 워크로드를 병렬화하는 가장 효율적인 방법입니다. 이 방법은 많은 소규모 Batch 작업을 시작하고 R 모델을 반복적으로 로드할 때의 오버헤드를 방지합니다.

다른 방법은 제품당 하나의 Batch 작업을 트리거하는 것입니다. Azure Batch는 자동으로 작업 큐를 형성하고 노드를 사용할 수 있게 되면 클러스터에서 실행되도록 제출합니다. 자동 스케일링을 사용하여 작업 수에 따라 클러스터의 노드 수를 조정합니다. 이 방식은 각 채점 작업을 완료하는 데 상대적으로 오랜 시간이 걸리므로 작업 시작 및 모델 개체 다시 로드의 오버헤드를 정당화하는 경우에 유용합니다. 또한 이 방법은 구현이 더 간단하며 자동 스케일링을 사용할 수 있는 유연성을 제공합니다. 이러한 측면은 전체 워크로드의 크기를 미리 알 수 없는 경우에 중요한 고려 사항입니다.

Azure Batch 작업 모니터링

Azure Portal에서 Batch 계정의 작업 창에서 Batch 작업을 모니터링하고 종료합니다. 창에서 개별 노드의 상태를 포함하여 일괄 처리 클러스터를 모니터링합니다.

doAzureParallel을 사용하여 로그

doAzureParallel 패키지는 Azure Batch에 제출된 모든 작업에 대한 모든 stdout/stderr의 로그를 자동으로 수집합니다. 이러한 로그는 설치 시 생성된 스토리지 계정에서 찾을 수 있습니다. 이러한 로그를 보려면 Azure Storage Explorer 또는 Azure Portal과 같은 스토리지 탐색 도구를 사용합니다.

개발 중에 Batch 작업을 신속하게 디버그하려면 로컬 R 세션에서 로그를 확인합니다. 자세한 내용은 학습 실행 구성 및 제출을 참조하세요.

비용 최적화

비용 최적화는 불필요한 비용을 줄이고 운영 효율성을 높이는 방법을 찾는 것입니다. 자세한 내용은 비용 최적화 핵심 요소 개요를 참조하세요.

이 참조 아키텍처에 사용되는 컴퓨팅 리소스는 가장 비용이 많이 드는 구성 요소입니다. 이 시나리오에서는 작업이 트리거될 때마다 고정 크기의 클러스터가 만들어지고 작업이 완료된 후 종료됩니다. 클러스터 노드가 시작, 실행 또는 종료되는 동안에만 비용이 발생합니다. 이 방법은 예측을 생성하는 데 필요한 컴퓨팅 리소스가 작업이 달라져도 일정하게 유지되는 시나리오에 적합합니다.

작업을 완료하는 데 필요한 컴퓨팅 양을 미리 알 수 없는 시나리오에서는 자동 크기 조정을 사용하는 것이 더 적합할 수 있습니다. 이 방법을 사용하면 작업 크기에 따라 클러스터가 스케일링 업 또는 스케일링 다운됩니다. Azure Batch는 doAzureParallel API를 사용하여 클러스터를 정의할 때 설정할 수 있는 다양한 자동 크기 조정 수식을 지원합니다.

일부 시나리오에서는 작업 간의 시간이 너무 짧아 클러스터를 종료하고 시작할 수 없을 수 있습니다. 이러한 경우 적절하면 작업이 바뀌어도 클러스터를 계속 실행합니다.

Azure Batch 및 doAzureParallel은 우선 순위가 낮은 VM의 사용을 지원합니다. 이러한 VM에는 상당한 할인이 제공되지만 우선 순위가 더 높은 다른 워크로드에서 위험이 발생할 수 있습니다. 따라서 중요한 프로덕션 워크로드에는 우선 순위가 낮은 VM을 사용하지 않는 것이 좋습니다. 그러나 이러한 VM은 실험적 또는 개발 워크로드에 유용합니다.

시나리오 배포

이 참조 아키텍처를 배포하려면 GitHub 리포지토리에 설명된 단계를 따르세요.

참가자

Microsoft에서 이 문서를 유지 관리합니다. 원래 다음 기여자가 작성했습니다.

보안 주체 작성자:

비공용 LinkedIn 프로필을 보려면 LinkedIn에 로그인합니다.

다음 단계