Использование Azure Pipelines с Машинное обучение Azure

службы Azure DevOps | Azure DevOps Server 2022 - Azure DevOps Server 2019

Для автоматизации жизненного цикла машинного обучения можно использовать конвейер Azure DevOps. Ниже перечислены некоторые операции, которые можно автоматизировать.

  • Подготовка данных (извлечение, преобразование, операции загрузки).
  • Обучение моделей машинного обучения с горизонтальным масштабированием по запросу и вертикальным масштабированием.
  • Развертывание моделей машинного обучения в виде общедоступных или частных веб-служб.
  • Мониторинг развернутых моделей машинного обучения (например, для анализа производительности или смещения данных).

В этой статье описывается, как создать конвейер Azure, который создает модель машинного обучения и развертывает его в Машинное обучение Azure.

В этом руководстве используется пакет SDK Машинное обучение Azure Python версии 2 и Azure CLI расширение ML версии 2.

Необходимые условия

Шаг 1. Получение кода

Форкните этот репозиторий с GitHub:

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

Шаг 2. Создание проекта

Войдите в Azure. Найдите и выберите организацию Azure DevOps. Выберите "Просмотреть мои организации". Выберите организацию, которую вы хотите использовать.

В выбранной организации создайте проект. Если у вас нет проектов в вашей организации, появится экран Создайте проект, чтобы начать. В противном случае нажмите кнопку New Project в правом верхнем углу панели мониторинга.

Шаг 3. Создание подключения к службе

Вы можете использовать существующее подключение к сервису.

Для проверки подлинности на портале Azure требуется подключение Azure Resource Manager.

  1. В Azure DevOps выберите параметры Project и выберите Service connections.

  2. Выберите Создать подключение службы, выберите Azure Resource Manager и затем выберите Далее.

  3. Используйте значения по умолчанию для типа удостоверения и учетных данных.

  4. Создайте подключение к службе. Задайте предпочтительный уровень области, подписку, группу ресурсов и имя подключения.

    Снимок экрана: подключение службы ARM.

Шаг 4. Создание конвейера

  1. Перейдите к конвейерам и нажмите кнопку "Создать конвейер".

  2. Выберите GitHub в качестве расположения исходного кода.

  3. Вы можете перенаправиться на GitHub для входа. Если это так, введите свои учетные данные GitHub.

  4. Когда появится список репозиториев, выберите репозиторий.

  5. Возможно, вы будете перенаправлены на GitHub для установки приложения Azure Pipelines. Если вы находитесь, выберите "Утвердить" и "Установить".

  6. Выберите стартовый конвейер. Вы обновляете шаблон начального конвейера.

Шаг 5. Создание конвейера YAML для отправки задания Машинное обучение Azure

Удалите начальный конвейер и замените его следующим кодом YAML. В этом конвейере вы:

  • Используйте задачу "Python Version Task", чтобы установить Python 3.10 и требования SDK.
  • Используйте задачу bash для запуска скриптов bash для Машинное обучение Azure SDK и CLI.
  • Используйте задачу Azure CLI для отправки задания Машинное обучение Azure.

Выберите одну из следующих вкладок в зависимости от того, используется ли подключение службы 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

На шаге 5 вы добавили задание для отправки задания Машинное обучение Azure. На этом шаге вы добавите другое задание, которое ожидает завершения задания Машинное обучение Azure.

Важно

Оба механизма ожидания на этом шаге (задача AzureMLJobWaitTask@1 на вкладке Azure Resource Manager и регистрация webhook InvokeRESTAPI@1 на универсальной вкладке) зависят от отправки уведомления RunTerminated Машинное обучение Azure в Azure DevOps обратно после завершения задания. Этот путь уведомлений в настоящее время находится в состоянии расследования и может не завершиться должным образом, что приведет к истечении времени ожидания задания сервера WaitFor* вместо отражения состояния задания Машинное обучение Azure. Если вы столкнулись с таким поведением, опросите состояние задания с помощью az ml job show --query status до тех пор, пока не вернется терминальное состояние (Completed, Failed или Canceled), и завершите задачу с соответствующим состоянием.

Если вы используете подключение службы Resource Manager, можно использовать расширение Машинное обучение. Вы можете найти это расширение в Marketplace расширений Azure DevOps или перейти непосредственно на страницу расширения. Установите расширение Машинное обучение.

Важно

Не устанавливайте расширение Машинное обучение (классическая версия). Это старое расширение, которое не предоставляет одинаковые функциональные возможности.

В окне проверки конвейера добавьте серверное задание. В шагах задания выберите "Показать помощник" и найдите AzureML. Выберите задачу "Ожидание задания AzureML " и укажите сведения о задании.

Задача имеет четыре входных данных: Service Connection, Azure Resource Group Name, AzureML Workspace Name и AzureML Job Name. Укажите эти входные данные. Результирующий YAML для этих шагов аналогичен следующему примеру:

Примечание

  • Задача ожидания задания Машинное обучение Azure выполняется на задании сервера, которое не использует дорогостоящие ресурсы пула агентов и не требует дополнительных расходов. Задания сервера (указанные в ) pool: serverвыполняются на том же компьютере, что и конвейер. Дополнительные сведения см. в разделе "Задания сервера".
  • Одна Машинное обучение Azure задача ожидания задания может ждать только одного задания. Необходимо настроить отдельную задачу для каждого задания, которое вы хотите ожидать.
  • Задача ожидания выполнения задания Машинное обучение Azure может длиться не более двух дней. Это ограничение является жестким ограничением, заданным 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 и завершает задачу в разделе WaitForJobCompletion с тем же состоянием, что и задание Машинное обучение Azure. Например:

  • Машинное обучение Azure задание Succeeded == задача Azure DevOps в разделе WaitForJobCompletion задание Succeeded

  • Машинное обучение Azure задание Failed == задача Azure DevOps в разделе WaitForJobCompletion задание Failed

  • Машинное обучение Azure задание Cancelled == задача Azure DevOps в разделе WaitForJobCompletion задание Cancelled

Примечание

Из-за проблемы, упомянутой на шаге 6, задание WaitFor* может истечь по времени, а не отражать состояние задания Машинное обучение Azure. Используйте Студия машинного обучения Azure для подтверждения фактического результата задания до восстановления пути уведомления.

Совет

Полное задание Машинное обучение Azure можно просмотреть в Студия машинного обучения Azure.

Очистка ресурсов

Если вы не планируете продолжать использовать конвейер, удалите проект Azure DevOps. На портале Azure удалите группу ресурсов и экземпляр Машинное обучение Azure.