Azure DevOps 서비스 | Azure DevOps Server 2022 - Azure DevOps Server 2019
Azure DevOps 파이프라인 사용하여 기계 학습 수명 주기를 자동화할 수 있습니다. 자동화할 수 있는 작업 중 일부는 다음과 같습니다.
- 데이터 준비(추출, 변환, 로드 작업).
- 주문형 스케일 아웃 및 스케일 업으로 기계 학습 모델을 학습합니다.
- 기계 학습 모델을 퍼블릭 또는 프라이빗 웹 서비스로 배포합니다.
- 배포된 기계 학습 모델 모니터링(예: 성능 또는 데이터 드리프트 분석).
이 문서에서는 기계 학습 모델을 빌드하고 Azure Machine Learning 배포하는 Azure 파이프라인을 만드는 방법을 설명합니다.
이 자습서에서는 Azure Machine Learning Python SDK v2 및 Azure CLI ML 확장 v2 사용합니다.
필수 구성 요소
-
리소스 만들기를 완료하여 자습서를 시작합니다.
- 작업 영역을 만듭니다.
- 모델 학습에 사용할 클라우드 기반 컴퓨팅 클러스터를 만듭니다.
- Python ML SDK v2 스크립트를 로컬로 실행하기 위해 Azure 3.10 이상이 설치되었습니다.
- Azure Pipelines Azure Machine Learning 확장을 설치합니다. 이 확장은 Visual Studio Marketplace 설치할 수 있습니다.
1단계: 코드 가져오기
GitHub 다음 리포지토리를 포크합니다.
https://github.com/azure/azureml-examples
2단계: 프로젝트 만들기
Azure 로그인합니다. Azure DevOps 조직 검색하여 선택합니다. 내 조직 보기를 선택합니다. 사용하려는 조직을 선택합니다.
선택한 조직 내에서 프로젝트를 만듭니다. 조직에 프로젝트가 없는 경우 시작할 프로젝트 만들기 화면이 표시됩니다. 그렇지 않은 경우 대시보드의 오른쪽 위 모서리에서 새로운 Project 단추를 선택합니다.
3단계: 서비스 연결 만들기
기존 서비스 연결을 사용할 수 있습니다.
Azure 포털에서 인증하려면 Azure Resource Manager 연결이 필요합니다.
Azure DevOps Project 설정을 선택한 다음, 사용 연결을 선택합니다.
서비스 연결 만들기를 선택하고 Azure Resource Manager 선택한 다음, Next 선택합니다.
ID 유형 및 자격 증명의 기본값을 사용합니다.
서비스 연결을 만듭니다. 기본 설정 범위 수준, 구독, 리소스 그룹 및 연결 이름을 설정합니다.
4단계: 파이프라인 만들기
파이프라인으로 이동한 다음 파이프라인 만들기를 선택합니다.
소스 코드의 위치로 GitHub 선택합니다.
GitHub으로 리디렉션되어 로그인이 필요할 수 있습니다. 있는 경우 GitHub 자격 증명을 입력합니다.
리포지토리 목록이 표시되면 리포지토리를 선택합니다.
Azure Pipelines 앱을 설치하기 위해 GitHub 리디렉션될 수 있습니다. 있는 경우 승인 및 설치를 선택합니다.
시작 파이프라인을 선택합니다. 시작 파이프라인 템플릿을 업데이트합니다.
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 Name 및 AzureML 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 인스턴스를 삭제합니다.