Azure Machine Learning과 함께 Azure Pipelines 사용

Azure DevOps Services | 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 Pipelines에 로그인

Azure Pipelines에 로그인합니다. 로그인하면 브라우저가 https://dev.azure.com/my-organization-name으로 이동하여 Azure DevOps 대시보드를 표시합니다.

선택한 조직 내에서 프로젝트를 만듭니다. 조직에 프로젝트가 없으면 프로젝트를 만들어 시작 화면이 표시됩니다. 그렇지 않으면 대시보드의 오른쪽 상단 모서리에 있는 새 프로젝트 단추를 선택합니다.

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

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

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

  1. Azure DevOps에서 프로젝트 설정을 선택하고 서비스 연결 페이지를 엽니다.

  2. + 새 서비스 연결을 선택하고 Azure Resource Manager를 선택합니다.

  3. 기본 인증 방법인 서비스 주체(자동)를 선택합니다.

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

    Screenshot of ARM service connection.

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

  1. Pipelines로 이동한 다음, 새 파이프라인을 선택합니다.

  2. 먼저 소스 코드의 위치로 GitHub 선택하여 마법사의 단계를 수행합니다.

  3. 로그인할 GitHub로 리디렉션될 수 있습니다. 그렇다면 GitHub 자격 증명을 입력합니다.

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

  5. Azure Pipelines 앱을 설치하도록 GitHub로 리디렉션될 수 있습니다. 그렇다면 승인 및 설치를 선택합니다.

  6. 스타터 파이프라인을 선택합니다. 스타터 파이프라인 템플릿을 업데이트합니다.

5단계: YAML 파이프라인을 빌드하여 Azure Machine Learning 작업 제출

스타터 파이프라인을 삭제하고 다음 YAML 코드로 바꿉니다. 이 파이프라인에서는 다음을 수행합니다.

  • Python 버전 작업을 사용하여 Python 3.8을 설정하고 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.8
    inputs:
      versionSpec: '>=3.8'

  - 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 서비스 연결을 사용하는 경우 "Machine Learning" 확장을 사용할 수 있습니다. Azure DevOps 확장 Marketplace에서 이 확장을 검색하거나 확장으로 직접 이동할 수 있습니다. "Machine Learning" 확장을 설치합니다.

Important

실수로 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 Pipelines에서 설정한 엄격한 제한입니다.
- job: WaitForAzureMLJobCompletion
  displayName: Wait for AzureML Job Completion
  pool: server
  timeoutInMinutes: 0
  dependsOn: SubmitAzureMLJob
  variables: 
    # We are saving the name of azureMl job submitted in previous step to a variable and it will be used as an inut 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단계: 파이프라인 제출 및 파이프라인 실행 확인

저장 및 실행을 선택합니다. 파이프라인은 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 태스크

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

리소스 정리

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