Поделиться через


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • Используйте задачу версии Python для настройки Python 3.10 и установки требований к пакету SDK.
  • Используйте задачу Bash для запуска скриптов bash для пакета SDK Машинное обучение Azure и ИНТЕРФЕЙСА командной строки.
  • Используйте задачу Azure CLI для отправки задания Машинное обучение Azure.

Выберите одну из следующих вкладок в зависимости от того, используется ли подключение службы Azure Resource Manager или универсальное подключение к службе. В YAML pipeline замените значения переменных на соответствующие вашим ресурсам значения.

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.

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

Внимание

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

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

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

Примечание.

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

Выберите Сохранить и выполнить. Конвейер ожидает завершения задания Azure Machine Learning и завершает задачу WaitForJobCompletion с тем же состоянием, что и задание Azure Machine Learning. Рассмотрим пример.

  • Задача машинного обучения Azure Succeeded == задача Azure DevOps в рамках задания WaitForJobCompletionSucceeded

  • Задача машинного обучения Azure Failed == задача Azure DevOps в рамках задания WaitForJobCompletionFailed

  • Задача машинного обучения Azure Cancelled == задача Azure DevOps в рамках задания WaitForJobCompletionCancelled

Совет

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

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

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