Azure Machine Learning과 Azure Pipelines의 활용

Azure DevOps 서비스 | Azure DevOps Server 2022 - Azure DevOps Server 2019

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

  • 데이터 준비(추출, 변환, 로드 작업).
  • 주문형 스케일 아웃 및 스케일 업으로 기계 학습 모델을 학습합니다.
  • 기계 학습 모델을 퍼블릭 또는 프라이빗 웹 서비스로 배포합니다.
  • 배포된 기계 학습 모델 모니터링(예: 성능 또는 데이터 드리프트 분석).

이 문서에서는 기계 학습 모델을 빌드하고 Azure Machine Learning 배포하는 Azure 파이프라인을 만드는 방법을 설명합니다.

이 자습서에서는 Azure Machine Learning Python SDK v2Azure CLI ML 확장 v2 사용합니다.

필수 구성 요소

1단계: 코드 가져오기

GitHub 다음 리포지토리를 포크합니다.

https://github.com/azure/azureml-examples

2단계: 프로젝트 만들기

Azure 로그인합니다. Azure DevOps 조직 검색하여 선택합니다. 내 조직 보기를 선택합니다. 사용하려는 조직을 선택합니다.

선택한 조직 내에서 프로젝트를 만듭니다. 조직에 프로젝트가 없는 경우 시작할 프로젝트 만들기 화면이 표시됩니다. 그렇지 않은 경우 대시보드의 오른쪽 위 모서리에서 새로운 Project 단추를 선택합니다.

3단계: 서비스 연결 만들기

기존 서비스 연결을 사용할 수 있습니다.

Azure 포털에서 인증하려면 Azure Resource Manager 연결이 필요합니다.

  1. Azure DevOps Project 설정을 선택한 다음, 사용 연결을 선택합니다.

  2. 서비스 연결 만들기를 선택하고 Azure Resource Manager 선택한 다음, Next 선택합니다.

  3. ID 유형자격 증명의 기본값을 사용합니다.

  4. 서비스 연결을 만듭니다. 기본 설정 범위 수준, 구독, 리소스 그룹 및 연결 이름을 설정합니다.

    ARM 서비스 연결의 스크린샷.

4단계: 파이프라인 만들기

  1. 파이프라인으로 이동한 다음 파이프라인 만들기를 선택합니다.

  2. 소스 코드의 위치로 GitHub 선택합니다.

  3. GitHub으로 리디렉션되어 로그인이 필요할 수 있습니다. 있는 경우 GitHub 자격 증명을 입력합니다.

  4. 리포지토리 목록이 표시되면 리포지토리를 선택합니다.

  5. Azure Pipelines 앱을 설치하기 위해 GitHub 리디렉션될 수 있습니다. 있는 경우 승인 및 설치를 선택합니다.

  6. 시작 파이프라인을 선택합니다. 시작 파이프라인 템플릿을 업데이트합니다.

5단계: YAML 파이프라인을 만들어 Azure Machine Learning 작업 제출

시작 파이프라인을 삭제하고 다음 YAML 코드로 바꿉 있습니다. 이 파이프라인에서는 다음을 수행합니다.

  • Python 버전 작업을 사용하여 Python 3.10을 설정하고 SDK 요구 사항을 설치합니다.
  • Bash 작업을 사용하여 Azure Machine Learning SDK 및 CLI에 대한 bash 스크립트를 실행합니다.
  • Azure CLI 작업을 사용하여 Azure Machine Learning 작업을 제출합니다.

Azure Resource Manager 서비스 연결 또는 일반 서비스 연결을 사용하는지 여부에 따라 다음 탭 중 하나를 선택합니다. 파이프라인 YAML에서 변수 값을 리소스에 해당하는 값으로 바꿉니다.

name: submit-azure-machine-learning-job

trigger:
- none

variables:
  service-connection: 'machine-learning-connection' # replace with your service connection name
  resource-group: 'machinelearning-rg' # replace with your resource group name
  workspace: 'docs-ws' # replace with your workspace name

jobs:
- job: SubmitAzureMLJob
  displayName: Submit AzureML Job
  timeoutInMinutes: 300
  pool:
    vmImage: ubuntu-latest
  steps:
  - task: UsePythonVersion@0
    displayName: Use Python >=3.10
    inputs:
      versionSpec: '>=3.10'

  - bash: |
      set -ex

      az version
      az extension add -n ml
    displayName: 'Add AzureML Extension'

  - task: AzureCLI@2
    name: submit_azureml_job_task
    displayName: Submit AzureML Job Task
    inputs:
      azureSubscription: $(service-connection)
      workingDirectory: 'cli/jobs/pipelines-with-components/nyc_taxi_data_regression'
      scriptLocation: inlineScript
      scriptType: bash
      inlineScript: |
      
        # submit component job and get the run name
        job_name=$(az ml job create --file single-job-pipeline.yml -g $(resource-group) -w $(workspace) --query name --output tsv)

        # set output variable for next task
        echo "##vso[task.setvariable variable=JOB_NAME;isOutput=true;]$job_name"

6단계: Azure Machine Learning 작업이 완료되기를 기다립니다.

5단계에서는 Azure Machine Learning 작업을 제출하는 작업을 추가했습니다. 이 단계에서는 Azure Machine Learning 작업이 완료되기를 기다리는 다른 작업을 추가합니다.

중요

이 단계의 두 대기 메커니즘(Azure Resource Manager 탭의 AzureMLJobWaitTask@1 작업 및 InvokeRESTAPI@1 웹후크 등록)은 Azure Machine Learning이 작업 완료 시 RunTerminated 알림을 Azure DevOps로 다시 보내는 것에 의존합니다. 이 알림 경로는 현재 조사 중이어서 예상대로 완료되지 않아 Azure Machine Learning 작업 상태를 반영하는 대신 WaitFor* 서버 작업의 시간이 만료될 수 있습니다. 이 동작이 발생하면 az ml job show --query status을 사용하여 에이전트 작업에서 작업 상태를 폴링하고, 터미널 상태(Completed, Failed, 또는 Canceled)가 반환되면 일치하는 상태로 작업을 종료합니다.

Resource Manager 서비스 연결을 사용하는 경우 Machine Learning 확장을 사용할 수 있습니다. Azure DevOps 확장 Marketplace에서 이 확장을 검색하거나 확장 페이지로 직접 이동합니다. Machine Learning 확장을 설치합니다.

중요

Machine Learning(클래식) 확장을 설치하지 마세요. 동일한 기능을 제공하지 않는 이전 확장입니다.

파이프라인 검토 창에서 서버 작업을 추가합니다. 작업의 단계 부분에서 도우미 표시를 선택한 다음 , AzureML을 검색합니다. AzureML 작업 대기 태스크를 선택한 다음 작업에 대한 정보를 제공합니다.

작업에는 Service Connection, Azure Resource Group Name, AzureML Workspace NameAzureML Job Name 네 개의 입력이 있습니다. 이러한 입력을 제공합니다. 이러한 단계에 대한 결과 YAML은 다음 예제와 유사합니다.

참고

  • Azure Machine Learning 작업 대기 작업은 비용이 많이 드는 에이전트 풀 리소스를 사용하지 않고 추가 요금이 필요하지 않은 서버 작업에서 실행됩니다. 서버 작업(표시된 대로)은 pool: server파이프라인과 동일한 컴퓨터에서 실행됩니다. 자세한 내용은 서버 작업을 참조하세요.
  • 하나의 Azure Machine Learning 작업 대기 작업은 하나의 작업만 대기할 수 있습니다. 대기하려는 각 작업에 대해 별도의 작업을 설정해야 합니다.
  • Azure Machine Learning 작업 대기 작업은 최대 2일 동안 대기할 수 있습니다. 이 제한은 Azure DevOps 파이프라인에서 설정한 하드 제한입니다.
- job: WaitForAzureMLJobCompletion
  displayName: Wait for AzureML Job Completion
  pool: server
  timeoutInMinutes: 0
  dependsOn: SubmitAzureMLJob
  variables: 
    # Save the name of the azureMl job submitted in the previous step to a variable. It will be used as an input to the AzureML Job Wait task.
    azureml_job_name_from_submit_job: $[ dependencies.SubmitAzureMLJob.outputs['submit_azureml_job_task.JOB_NAME'] ] 
  steps:
  - task: AzureMLJobWaitTask@1
    inputs:
      serviceConnection: $(service-connection)
      resourceGroupName: $(resource-group)
      azureMLWorkspaceName: $(workspace)
      azureMLJobName: $(azureml_job_name_from_submit_job)

7단계: 파이프라인 제출 및 파이프라인 실행 확인

저장 및 실행을 선택합니다. 6단계의 대기 메커니즘이 설계된 대로 작동하면 파이프라인은 Azure Machine Learning 작업이 완료되기를 기다렸다가 Azure Machine Learning 작업과 동일한 상태로 WaitForJobCompletion에서 작업을 종료합니다. 예를 들어:

  • Azure Machine Learning 작업 Succeeded == WaitForJobCompletion 작업 Succeeded 하위의 Azure DevOps 작업

  • Azure Machine Learning 작업 Failed == WaitForJobCompletion 작업 Failed 하위의 Azure DevOps 작업

  • Azure Machine Learning 작업 Cancelled == WaitForJobCompletion 작업 Cancelled 하위의 Azure DevOps 작업

참고

WaitFor* 작업은 6단계에서 호출된 문제로 인해 Azure Machine Learning 작업 상태를 반영하지 않고 시간이 초과될 수 있습니다. Azure Machine Learning 스튜디오 사용하여 알림 경로가 복원될 때까지 실제 작업 결과를 확인합니다.

Azure Machine Learning 스튜디오 전체 Azure Machine Learning 작업을 볼 수 있습니다.

리소스 정리

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