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

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

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

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

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

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

Необходимые компоненты

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

Создайте вилку для следующего репозитория на GitHub:

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

Шаг 2. Вход в Azure Pipelines

Войдите в Azure Pipelines. После входа в браузере откроется https://dev.azure.com/my-organization-name и отобразится панель мониторинга Azure DevOps.

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

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

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

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

  1. В Azure DevOps выберите Project Параметры и откройте страницу подключений к службе.

  2. Выберите + New service connection (+ Новое подключение службы), а затем Azure Resource Manager.

  3. Выберите метод проверки подлинности по умолчанию, субъект-служба (автоматически).

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

    Screenshot of ARM service connection.

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

  1. Выберите Конвейеры, а затем — Новый конвейер.

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

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

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

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

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

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

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

  • Используйте задачу версии Python, чтобы настроить Python 3.8 и установить требования к пакету SDK.
  • Используйте задачу Bash для запуска скриптов bash для пакета SDK Машинное обучение Azure и ИНТЕРФЕЙСА командной строки.
  • Используйте задачу 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.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

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

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

Важно!

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

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

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

Примечание.

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

Совет

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

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

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