Azure DevOps를 사용하여 MLOps 설정

적용 대상:Azure CLI ml 확장 v2(현재)Python SDK azure-ai-ml v2(현재)

Azure Machine Learning을 사용하면 Azure DevOps 파이프라인과 통합하여 기계 학습 수명 주기를 자동화할 수 있습니다. 자동화할 수 있는 일부 작업은 다음과 같습니다.

  • Azure Machine Learning 인프라 배포
  • 데이터 준비(추출, 변환, 로드 작업)
  • 주문형 스케일 아웃 및 스케일 업으로 기계 학습 모델 학습
  • 공용 또는 프라이빗 웹 서비스로 기계 학습 모델 배포
  • 배포된 기계 학습 모델 모니터링(예: 성능 분석용)

이 문서에서는 Azure Machine Learning을 사용해 선형 회귀를 실행하여 NYC의 택시 요금을 예측하는 엔드투엔드 MLOps 파이프라인을 설정하는 방법에 대해 알아봅니다. 파이프라인은 각각 다른 함수를 제공하는 구성 요소로 구성되며, 작업 영역에 등록하고 버전을 지정하고 다양한 입출력과 함께 재사용할 수 있습니다. MLOps용 권장 Azure 아키텍처AzureMLOps(v2) 솔루션 가속기를 사용하여 Azure Machine Learning에서 MLOps 프로젝트를 빠르게 설정합니다.

솔루션을 구현하기 전에 MLOps에 대한 권장 Azure 아키텍처 중 일부를 이해하는 것이 좋습니다. 지정된 기계 학습 프로젝트에 가장 적합한 아키텍처를 선택해야 합니다.

필수 구성 요소

참고 항목

Git 버전 2.27 이상이 필요합니다. Git 설치 명령에 대해 자세히 알아보려면 https://git-scm.com/downloads에서 해당하는 운영 체제를 선택하세요.

Important

이 문서의 CLI 명령은 Bash를 사용하여 테스트되었습니다. 다른 셸을 사용하는 경우 오류가 발생할 수 있습니다.

Azure 및 DevOps로 인증 설정

Azure Machine Learning으로 MLOps 프로젝트를 설정하려면 먼저 Azure DevOps에 대한 인증을 설정해야 합니다.

서비스 주체 만들기

데모를 사용하려면 작업하려는 환경(Dev, Prod 또는 둘 다) 수에 따라 하나 또는 두 개의 서비스 주체를 만들어야 합니다. 다음 방법 중 하나를 사용하여 서비스 주체를 만들 수 있습니다.

  1. Azure Cloud Shell을 시작합니다.

    Cloud Shell을 처음 시작하면 Cloud Shell용 스토리지 계정을 만들라는 메시지가 표시됩니다.

  2. 메시지가 표시되면 Cloud Shell에서 사용되는 환경으로 Bash를 선택합니다. 상단 탐색 모음의 드롭다운에서 환경을 변경할 수도 있습니다.

    Screenshot of the cloud shell environment dropdown.

  3. 다음 bash 명령을 컴퓨터에 복사하고 projectName, subscriptionIdenvironment 변수를 프로젝트 값으로 업데이트합니다. Dev 및 Prod 환경을 모두 만드는 경우 환경마다 이 스크립트를 한 번씩 실행하여 각각의 서비스 주체를 만들어야 합니다. 또한 이 명령은 제공된 구독의 서비스 주체에게 기여자 역할을 부여합니다. Azure DevOps가 해당 구독의 리소스를 올바르게 사용하려면 이렇게 해야 합니다.

    projectName="<your project name>"
    roleName="Contributor"
    subscriptionId="<subscription Id>"
    environment="<Dev|Prod>" #First letter should be capitalized
    servicePrincipalName="Azure-ARM-${environment}-${projectName}"
    # Verify the ID of the active subscription
    echo "Using subscription ID $subscriptionID"
    echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes     /subscriptions/$subscriptionId"
    az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionId
    echo "Please ensure that the information created here is properly save for future use."
    
  4. 편집한 명령을 Azure Shell에 복사하고 실행합니다(Ctrl + Shift + v).

  5. 이러한 명령을 실행하면 서비스 주체와 관련된 정보가 표시됩니다. 이 정보를 안전한 위치에 저장합니다. 이 정보는 나중에 데모에서 Azure DevOps를 구성하는 데 사용됩니다.

    {
       "appId": "<application id>",
       "displayName": "Azure-ARM-dev-Sample_Project_Name",
       "password": "<password>",
       "tenant": "<tenant id>"
    }
    
  6. Dev 및 Prod 환경의 서비스 주체를 만드는 경우 3단계를 반복합니다. 이 데모에서는 Prod 환경만 만듭니다.

  7. 서비스 주체가 만들어지면 Cloud Shell을 닫습니다.

Azure DevOps 설정

  1. Azure DevOps로 이동합니다.

  2. 새 프로젝트 만들기를 선택합니다(이 자습서에서는 프로젝트 이름을 mlopsv2로 지정).

    Screenshot of ADO Project.

  3. 프로젝트 설정(프로젝트 페이지 왼쪽 아래)의 프로젝트에서 서비스 연결을 선택합니다.

  4. 서비스 연결 만들기를 선택합니다.

    Screenshot of ADO New Service connection button.

  5. Azure Resource Manager를 선택하고, 다음을 선택하고, 서비스 주체(수동)를 선택하고, 다음을 선택하고, 범위 수준 구독을 선택합니다.

    • 구독 이름 - 서비스 주체가 저장되는 구독의 이름을 사용합니다.
    • 구독 ID - 1단계 입력에서 사용한 subscriptionId를 구독 ID로 사용합니다.
    • 서비스 주체 ID - 1단계 출력의 appId를 서비스 주체 ID로 사용합니다.
    • 서비스 주체 키 - 1단계 출력의 password를 서비스 주체 키로 사용합니다.
    • 테넌트 ID - 1단계 출력의 tenant를 테넌트 ID로 사용합니다.
  6. 서비스 연결 이름을 Azure-ARM-Prod로 지정합니다.

  7. 모든 파이프라인에 액세스 권한 부여를 선택하고 확인 및 저장을 선택합니다.

Azure DevOps 설정이 성공적으로 완료되었습니다.

Azure DevOps를 사용하여 원본 리포지토리 설정

  1. Azure DevOps에서 만든 프로젝트를 엽니다.

  2. 리포지토리 섹션을 열고 리포지토리 가져오기를 선택합니다.

    Screenshot of Azure DevOps import repo first time.

  3. 복제 URL 필드에 https://github.com/Azure/mlops-v2-ado-demo를 입력합니다. 페이지 아래쪽에서 [가져오기]를 선택합니다.

    Screenshot of Azure DevOps import MLOps demo repo.

  4. 왼쪽 탐색 창 아래쪽에서 프로젝트 설정을 엽니다.

  5. 리포지토리 섹션에서 리포지토리를 선택합니다. 이전 단계에서 만든 리포지토리를 선택하고 보안 탭을 선택합니다.

  6. 사용자 권한 섹션에서 mlopsv2 빌드 서비스 사용자를 선택합니다. 권한 기여 권한을 허용으로 변경하고 분기 만들기 권한을 허용으로 변경합니다. Screenshot of Azure DevOps permissions.

  7. 왼쪽 탐색 창에서 파이프라인 섹션을 열고 파이프라인 만들기 단추 옆에 있는 세로 방향 점 3개 아이콘을 선택합니다. 보안 관리를 선택합니다.

    Screenshot of Pipeline security.

  8. [사용자] 섹션에서 프로젝트의 mlopsv2 빌드 서비스 계정을 선택합니다. 빌드 파이프라인 편집 권한을 허용으로 변경합니다.

    Screenshot of Add security.

참고 항목

이것으로 필수 조건 섹션이 끝났으며 이에 따라 솔루션 가속기 배포가 발생할 수 있습니다.

Azure DevOps를 통해 인프라 배포

이 단계에서는 이전 단계에서 만든 Azure Machine Learning 작업 영역에 학습 파이프라인을 배포합니다.

MLOps v2 리포지토리를 확인하고 인프라를 배포하기 전에 솔루션 가속기의 아키텍처 패턴을 이해해야 합니다. 예에서는 기존 ML 프로젝트 형식을 사용합니다.

Azure 인프라 파이프라인 실행

  1. mlops-v2-ado-demo 리포지토리로 이동하여 config-infra-prod.yml 파일을 선택합니다.

    Important

    리포지토리의 기본 분기를 선택했는지 확인합니다.

    Screenshot of Repo in ADO.

    이 구성 파일은 고유성을 보장하기 위해 아티팩트 이름의 네임스페이스 및 접미사 값을 사용합니다. 구성에서 다음 섹션을 원하는 대로 업데이트합니다.

     namespace: [5 max random new letters]
     postfix: [4 max random new digits]
     location: eastus
    

    참고 항목

    CV 또는 NLP와 같은 딥 러닝 워크로드를 실행 중인 경우 배포 영역에서 GPU 컴퓨팅을 사용할 수 있는지 확인합니다.

  2. 커밋 후 푸시 코드를 선택하여 이러한 값을 파이프라인으로 가져옵니다.

  3. 파이프라인 섹션으로 이동합니다.

    Screenshot of ADO Pipelines.

  4. 파이프라인 생성를 선택합니다.

  5. Azure Repos Git를 선택합니다.

    Screenshot of ADO Where's your code.

  6. 이전 섹션에서 복제한 mlops-v2-ado-demo 리포지토리를 선택합니다.

  7. 기존 Azure Pipelines YAML 파일을 선택합니다.

    Screenshot of Azure DevOps Pipeline page on configure step.

  8. main 분기를 선택하고 mlops/devops-pipelines/cli-ado-deploy-infra.yml를 선택한 다음, 계속을 선택합니다.

  9. 파이프라인을 실행합니다. 완료될 때까지 몇 분 정도 걸립니다. 파이프라인은 다음 아티팩트를 만들어야 합니다.

    • 스토리지 계정, Container Registry, Application Insights, Keyvault 및 Azure Machine Learning 작업 영역 자체를 포함한 작업 영역의 리소스 그룹
    • 작업 영역에는 컴퓨팅 클러스터도 만들어집니다.
  10. 이제 MLOps 프로젝트의 인프라가 배포되었습니다. Screenshot of ADO Infra Pipeline screen.

    참고 항목

    기존 리포지토리를 필요한 위치로 이동하고 다시 사용할 수 없음 경고는 무시해도 됩니다.

샘플 학습 및 배포 시나리오

솔루션 가속기에는 NYC의 택시 요금을 예측하기 위해 선형 회귀를 실행하는 샘플 엔드투엔드 기계 학습 파이프라인에 대한 코드 및 데이터가 포함되어 있습니다. 파이프라인은 각각 다른 함수를 제공하는 구성 요소로 구성되며, 작업 영역에 등록하고 버전을 지정하고 다양한 입출력과 함께 재사용할 수 있습니다. Computer Vision 및 NLP 시나리오에 대한 샘플 파이프라인 및 워크플로에는 다른 단계와 배포 단계가 있습니다.

이 학습 파이프라인에는 다음 단계가 포함됩니다.

데이터 준비

  • 이 구성 요소는 여러 택시 데이터 세트(노란색 및 녹색)를 가져와 데이터를 병합/필터링하고 학습/발행 및 평가 데이터 세트를 준비합니다.
  • 입력: ./data/에 있는 로컬 데이터(여러 .csv 파일)
  • 출력: 단일 준비된 데이터 세트(.csv) 및 학습/발행/테스트 데이터 세트.

모델 학습

  • 이 구성 요소는 학습 집합으로 선형 회귀자를 학습합니다.
  • 입력: 학습 데이터 세트
  • 출력: 학습된 모델(피클 형식)

모델 평가

  • 이 구성 요소는 학습된 모델을 사용하여 테스트 세트에서 택시 요금을 예측합니다.
  • 입력: ML 모델 및 테스트 데이터 세트
  • 출력: 모델의 성능 및 배포 여부에 대한 배포 플래그.
  • 이 구성 요소는 모델의 성능을 새 테스트 데이터 세트에서 이전에 배포된 모든 모델과 비교하고 모델을 프로덕션으로 승격할지 여부를 결정합니다. 모델을 프로덕션으로 승격하는 것은 AML 작업 영역에 모델을 등록하여 이루어집니다.

모델 등록

  • 이 구성 요소는 테스트 세트에서 예측이 얼마나 정확한지에 따라 모델의 점수를 매깁니다.
  • 입력: 학습된 모델 및 배포 플래그
  • 출력: Azure Machine Learning에 등록된 모델

모델 학습 파이프라인 배포

  1. ADO 파이프라인으로 이동합니다.

    Screenshot of ADO Pipelines.

  2. 새 파이프라인을 선택합니다.

    Screenshot of ADO New Pipeline button.

  3. Azure Repos Git를 선택합니다.

    Screenshot of ADO Where's your code.

  4. 이전 섹션에서 복제한 mlopsv2 리포지토리를 선택합니다.

  5. 기존 Azure Pipelines YAML 파일을 선택합니다.

    Screenshot of ADO Pipeline page on configure step.

  6. 분기로 main을 선택하고 /mlops/devops-pipelines/deploy-model-training-pipeline.yml을 선택한 다음, 계속을 선택합니다.

  7. 파이프라인을 저장하고 실행합니다.

참고 항목

이제 인프라가 구성되었으며 MLOps 아키텍처의 프로토타입 루프가 배포되었습니다. 학습된 모델을 프로덕션으로 전환할 준비가 된 것입니다.

학습된 모델 배포

이 시나리오에는 학습된 모델 배포, 일괄 처리 채점 또는 실시간 채점을 위해 엔드포인트에 모델을 배포하는 두 가지 접근 방식을 위한 미리 빌드된 워크플로가 포함되어 있습니다. 이러한 워크플로 중 하나 또는 둘 다 실행하여 Azure ML 작업 영역에서 모델의 성능을 테스트할 수 있습니다. 이 예제에서는 실시간 채점을 사용하겠습니다.

ML 모델 엔드포인트 배포

  1. ADO 파이프라인으로 이동합니다.

    Screenshot of ADO Pipelines.

  2. 새 파이프라인을 선택합니다.

    Screenshot of ADO New Pipeline button for endpoint.

  3. Azure Repos Git를 선택합니다.

    Screenshot of ADO Where's your code.

  4. 이전 섹션에서 복제한 mlopsv2 리포지토리를 선택합니다.

  5. 기존 Azure Pipelines YAML 파일을 선택합니다.

    Screenshot of Azure DevOps Pipeline page on configure step.

  6. 분기로 main을 선택하고 관리형 온라인 엔드포인트 /mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml을 선택한 다음, 계속을 선택합니다.

  7. 온라인 엔드포인트 이름은 고유해야 하므로 taxi-online-$(namespace)$(postfix)$(environment)를 다른 고유한 이름으로 변경하고 실행을 선택합니다. 실행이 실패하지 않으면 기본값을 변경할 필요가 없습니다.

    Screenshot of Azure DevOps batch deploy script.

    Important

    기존 온라인 엔드포인트 이름 때문에 실행이 실패하면 앞에서 설명한 대로 파이프라인을 다시 만들고 [엔드포인트 이름][엔드포인트 이름(난수)]으로 변경합니다.

  8. 실행이 완료되면 다음 이미지와 유사한 출력이 표시됩니다.

    Screenshot of ADO Pipeline batch run result page.

  9. 이 배포를 테스트하려면 AzureML 작업 영역의 엔드포인트 탭으로 이동하여 엔드포인트를 선택하고 테스트 탭을 클릭합니다. /data/taxi-request.json의 복제된 리포지토리에 있는 샘플 입력 데이터를 사용하여 엔드포인트를 테스트할 수 있습니다.

리소스 정리

  1. 파이프라인을 계속 사용하지 않으려면 Azure DevOps 프로젝트를 삭제합니다.
  2. Azure Portal에서 리소스 그룹 및 Azure Machine Learning 인스턴스를 삭제합니다.

다음 단계