Azure Machine Learning을 사용한 Python용 MLOps 모델

Azure Blob Storage
Azure Container Registry
Azure DevOps
Azure Machine Learning
Azure Pipelines

이 참조 아키텍처는 Azure DevOpsAzure Machine Learning을 사용하여 AI 애플리케이션에 대한 CI(연속 통합), CD(지속적인 업데이트) 및 재학습 파이프라인을 구현하는 방법을 보여 줍니다. 이 솔루션은 scikit-learn 당뇨병 데이터 세트를 기반으로 하지만 모든 AI 시나리오 및 Jenkins 또는 Travis 등의 다른 인기 있는 빌드 시스템에 맞게 쉽게 조절할 수 있습니다.

이 아키텍처에 대한 참조 구현은 GitHub에서 사용할 수 있습니다.

아키텍처

Machine Learning DevOps 아키텍처 다이어그램.

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

워크플로

이 아키텍처는 다음과 같은 서비스로 구성됩니다.

Azure Pipelines. 이 빌드 및 테스트 시스템은 Azure DevOps를 기반으로 하며 빌드 및 릴리스 파이프라인에 사용됩니다. Azure Pipelines는 이러한 파이프라인을 작업이라는 논리적 단계로 나눕니다. 예를 들어 Azure CLI 작업을 사용하면 Azure 리소스로 더 쉽게 작업할 수 있습니다.

Azure Machine Learning은 기계 학습 모델을 규모에 맞게 학습, 채점, 배포 및 관리를 위한 클라우드 서비스입니다. 이 아키텍처는 Azure Machine Learning Python SDK를 사용하여 작업 영역, 컴퓨팅 리소스, 기계 학습 파이프라인 및 채점 이미지를 만듭니다. Azure Machine Learning 작업 영역은 기계 학습 모델을 실험, 학습 및 배포할 수 있는 공간을 제공합니다.

Azure Machine Learning Compute는 자동 크기 조정과, GPU 및 CPU 노드 옵션이 있는 주문형 가상 머신의 클러스터입니다. 학습 작업은 이 클러스터에서 실행됩니다.

Azure Machine Learning pipelines는 여러 시나리오에서 재사용할 수 있는 재사용 가능한 기계 학습 워크플로를 제공합니다. 학습, 모델 평가, 모델 등록 및 이미지 만들기는 이 사용 사례에 대해 이러한 파이프라인 내의 고유한 단계에서 발생합니다. 파이프라인은 빌드 단계가 끝날 때 게시되거나 업데이트되며 새 데이터 도착 시 트리거됩니다.

Azure Blob Storage. Blob 컨테이너는 채점 서비스의 로그를 저장하는 데 사용됩니다. 이 경우 입력 데이터와 모델 예측이 모두 수집됩니다. 일부 변환 후에는 이러한 로그를 모델 재학습에 사용할 수 있습니다.

Azure Container Registry. 채점 Python 스크립트는 Docker 이미지로 패키징되고 레지스트리에서 버전이 지정됩니다.

Azure Container Instances. 릴리스 파이프라인의 일부로, QA 및 스테이징 환경은 Container Instances 채점 웹 서비스 이미지를 배포하여 모방되며, 이렇게 컨테이너를 실행하는 쉬운 서버리스 방법을 제공합니다.

Azure Kubernetes Service. 채점 웹 서비스 이미지가 QA 환경에서 철저히 테스트되면 관리되는 Kubernetes 클러스터의 프로덕션 환경에 배포됩니다.

Azure Application Insights. 이 모니터링 서비스는 성능 이상을 검색하는 데 사용됩니다.

MLOps 파이프라인

이 솔루션은 소프트웨어 엔지니어에게 이미 익숙한 도구를 사용하여 AI 프로젝트의 다양한 단계를 엔드투엔드 자동화하는 방법을 보여 줍니다. 기계 학습 문제는 DevOps 파이프라인에 초점을 맞추는 것이 간단합니다. 이 솔루션은 scikit-learn 당뇨병 데이터 세트를 사용하고 능선 선형 회귀 모델을 구축하여 당뇨병의 가능성을 예측합니다.

이 솔루션은 다음 세 가지 파이프라인을 기반으로 합니다.

  • 빌드 파이프라인. 코드를 빌드하고 테스트 제품군을 실행합니다.
  • 파이프라인 재학습. 일정에 따라 또는 새 데이터를 사용할 수 있게 되면 모델을 다시 학습시킵니다.
  • 릴리스 파이프라인. 채점 이미지를 조작화하고 여러 환경에 걸쳐 안전하게 승격합니다.

다음 섹션에서는 이러한 각 파이프라인에 대해 자세히 설명합니다.

빌드 파이프라인

코드를 체크인할 때마다 CI 파이프라인이 트리거됩니다. 코드를 빌드하고 테스트 도구 모음을 실행한 후 업데이트된 Azure Machine Learning 파이프라인을 게시합니다. 빌드 파이프라인은 다음과 같은 작업으로 구성되어 있습니다.

  • 코드 품질. 이 테스트는 코드가 팀의 표준을 준수하는지 확인합니다.

  • 단위 테스트. 이 테스트는 코드가 작동하고, 적절한 코드 검사를 가지며, 안정적인지 확인합니다.

  • 데이터 테스트. 이 테스트는 데이터 샘플이 예상된 스키마 및 배포를 준수하는지 확인합니다. 다른 사용 사례에 대해 이 테스트를 사용자 지정하고 새 데이터가 도착하면 트리거되는 별도의 데이터 온전성 파이프라인으로 실행합니다. 예를 들어 데이터 테스트 작업을 데이터 수집 파이프라인으로 이동하여 더 앞에서 테스트할 수 있습니다.

참고

기계 학습 모델을 학습시키는 데 사용되는 데이터에 대해 DevOps 사례를 사용하도록 설정하는 것이 좋지만 이 문서에서는 다루지 않습니다. 데이터 수집 파이프라인의 CI/CD에 대한 아키텍처 및 모범 사례의 자세한 정보는 데이터 수집 파이프라인에 대한 DevOps를 참조하세요.

다음 일회성 작업은 Azure Machine Learning 및 Python SDK에 대한 인프라를 설정할 때 발생합니다.

  • 모든 Azure Machine Learning 관련 리소스를 호스트하는 작업 영역을 만듭니다.
  • 학습 작업을 실행하는 컴퓨팅 리소스를 만듭니다.
  • 업데이트된 학습 스크립트를 사용하여 기계 학습 파이프라인을 만듭니다.
  • 기계 학습 파이프라인을 REST 엔드포인트로 게시하여 학습 워크플로를 오케스트레이션합니다. 다음 섹션에서는 이 단계에 대해 설명합니다.

파이프라인 재학습

기계 학습 파이프라인은 모델을 비동기적인 방식으로 모델을 재학습시키는 프로세스를 오케스트레이션합니다. 일정에 따라서 또는 이전 단계에서 게시된 파이프라인 REST 엔드포인트를 호출하여 새 데이터를 사용할 수 있게 되면 재학습을 트리거할 수 있습니다.

이 파이프라인은 다음 단계를 다룹니다.

  • 모델 학습. 학습 Python 스크립트는 실행 기록에 저장된 새 모델 파일을 가져오기 위해 Azure Machine Learning 컴퓨팅 리소스에서 실행됩니다. 학습은 AI 프로젝트에서 가장 계산 집약적인 작업이므로 솔루션은 Azure Machine Learning 컴퓨팅을 사용합니다.

  • 모델 평가. 간단한 평가 테스트는 새 모델을 기존 모델과 비교합니다. 새 모델이 더 나은 경우에만 승격됩니다. 그렇지 않으면 모델이 등록되지 않고 파이프라인이 취소됩니다.

  • 모델 등록. 재학습된 모델은 Azure Machine Learning 모델 레지스트리에 등록됩니다. 이 서비스는 메타데이터 태그와 함께 모델에 대한 버전 제어를 제공하므로 쉽게 재현할 수 있습니다.

릴리스 파이프라인

이 파이프라인에서는 점수 매기기 이미지를 조작화하고 여러 환경에 걸쳐 안전하게 승격하는 방법을 보여 줍니다. 이 파이프라인은 QA 및 프로덕션의 두 환경으로 세분화됩니다.

QA 환경

  • 모델 아티팩트 트리거입니다. 릴리스 파이프라인은 새 아티팩트가 제공될 때마다 트리거됩니다. Azure Machine Learning 모델 관리에 등록된 새 모델은 릴리스 아티팩트로 처리됩니다. 이 경우 새 모델에 대해 파이프라인이 트리거됩니다.

  • 채점 이미지를 만듭니다. 등록된 모델은 채점 스크립트 및 Python 종속성(Conda YAML 파일)과 함께 조작화 Docker 이미지에 패키징됩니다. 이미지는 Azure Container Registry를 통해 자동으로 버전이 지정됩니다.

  • Container Instances에 배포합니다. 이 서비스는 비 프로덕션 환경을 만드는 데 사용됩니다. 채점 이미지도 여기에 배포되며 테스트에 주로 사용됩니다. Container Instances는 Docker 이미지를 테스트하는 쉽고 빠른 방법을 제공합니다.

  • 웹 서비스를 테스트합니다. 간단한 API 테스트를 통해 이미지가 성공적으로 배포되었는지 확인합니다.

프로덕션 환경

  • Azure Kubernetes Service에 배포합니다. 이 서비스는 프로덕션 환경에서 대규모로 채점 이미지를 웹 서비스로 배포하는 데 사용됩니다.

  • 웹 서비스를 테스트합니다. 간단한 API 테스트를 통해 이미지가 성공적으로 배포되었는지 확인합니다.

고려 사항

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

확장성

Azure DevOps의 빌드 파이프라인은 모든 규모의 애플리케이션에 맞게 확장할 수 있습니다. 빌드 파이프라인에는 실행되는 에이전트에 따라 달라지는 최대 시간 제한이 있습니다. 빌드는 자체 호스팅 에이전트(프라이빗 에이전트)에서 영원히 실행할 수 있습니다. 퍼블릭 프로젝트에 대한 Microsoft 호스팅 에이전트의 경우 빌드는 6시간 동안 실행할 수 있습니다. 프라이빗 프로젝트의 경우 제한은 30분입니다.

최대 시간 제한을 사용하려면 Azure Pipelines YAML 파일에서 다음 속성을 설정합니다.

jobs:
- job: <job_name>
  timeoutInMinutes: 0

이상적으로 빌드 파이프라인을 빠르게 완료하고 단위 테스트 및 다른 테스트의 하위 집합만 실행합니다. 이렇게 하면 변경 내용의 유효성을 신속하게 검사하고 문제가 발생할 경우 수정할 수 있습니다. 오프시간 동안 장기 실행 테스트를 실행합니다.

릴리스 파이프라인은 실시간 채점 웹 서비스를 게시합니다. QA 환경에 대한 릴리스는 편의를 위해 Container Instances를 사용하여 수행되지만 QA/스테이징 환경에서 실행되는 다른 Kubernetes 클러스터를 사용할 수도 있습니다.

Azure Kubernetes Service 클러스터의 크기에 따라 프로덕션 환경의 크기를 조정합니다. 클러스터의 크기는 배포된 채점 웹 서비스에 대해 예상되는 부하에 따라 달라집니다. 실시간 채점 아키텍처의 경우 처리량은 주요 최적화 메트릭입니다. 딥 러닝이 아닌 시나리오의 경우 CPU가 부하를 처리하기에 충분해야 합니다. 그러나 딥 러닝 워크로드의 경우 속도가 병목 상태일 때는 GPU가 일반적으로 CPU에 비해 더 나은 성능을 제공합니다. Azure Kubernetes Service CPU 및 GPU 노드 유형을 모두 지원하므로 이 솔루션이 이미지 배포에 사용합니다. 자세한 정보는 딥 러닝 모델 배포를 위한 GPU 및 CPU를 참조하세요.

Azure Machine Learning 컴퓨팅 리소스의 노드 수에 따라 재학습 파이프라인을 확장 및 축소하고 자동 크기 조정 옵션을 사용하여 클러스터를 관리합니다. 이 아키텍처에서는 CPU를 사용합니다. 딥 러닝 워크로드의 경우 GPU가 더 나은 선택이며 Azure Machine Learning 컴퓨팅에서 지원됩니다.

관리

  • 재학습 작업을 모니터링합니다. 기계 학습 파이프라인은 컴퓨터 클러스터에서 재학습을 오케스트레이션하고 쉽게 모니터링할 수 있는 방법을 제공합니다. Azure Machine Learning UI를 사용하고 파이프라인 섹션에서 로그를 확인합니다. 또는 이러한 로그는 Blob에 기록되며 Azure Storage Explorer 같은 도구를 사용하여 해당 로그에서 읽을 수도 있습니다.

  • 로깅. Azure Machine Learning은 기계 학습 수명 주기의 각 단계에서 쉽게 로그할 수 있는 방법을 제공합니다. 로그는 Blob 컨테이너에 저장됩니다. 자세한 정보는 Azure Machine Learning에 대해 로깅 사용을 참조하세요. 보다 풍부한 모니터링을 위해 로그를 사용하도록 Application Insights를 구성합니다.

  • 보안. 모든 비밀 및 자격 증명은 Azure Key Vault에 저장되고 변수 그룹을 사용하여 Azure Pipelines에서 액세스됩니다.

비용 최적화

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

Azure DevOps는 오픈 소스 프로젝트와 사용자가 최대 5명인 소규모 프로젝트에는 무료입니다. 대규모 팀의 경우 사용자 수에 따라 플랜을 구매합니다.

컴퓨팅은 이 아키텍처에서 가장 큰 비용 요소이며 그 비용은 사용 사례에 따라 달라집니다. 이 아키텍처는 Azure Machine Learning 컴퓨팅을 사용하지만 다른 옵션을 사용할 수 있습니다. Azure Machine Learning은 컴퓨팅 클러스터를 지원하는 가상 머신의 비용 위에 추가 요금을 추가하지 않습니다. 컴퓨팅 클러스터에 최소 0개의 노드가 있도록 구성하여 사용하지 않을 경우 0개 노드로 축소하고 비용을 발생시키지 않을 수 있습니다. 컴퓨팅 비용은 노드 유형, 여러 노드 및 프로비저닝 모드(우선 순위가 낮거나 전용)에 따라 달라집니다. Azure 가격 계산기를 사용하여 Machine Learning 및 기타 서비스에 대한 비용을 예측할 수 있습니다.

시나리오 배포

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

참가자

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

보안 주체 작성자:

  • Praneet Singh Solanki | 선임 소프트웨어 엔지니어

다음 단계