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


Настройка MLOps с помощью Azure DevOps

ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение Azure CLI для машинного обучения версии 2 (текущая версия)Python SDK azure-ai-ml версии 2 (текущая версия)

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

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

В этой статье вы узнаете, как использовать Машинное обучение Azure для настройки сквозного конвейера MLOps, который выполняет линейную регрессию для прогнозирования тарифов на такси в Нью-Йорке. Конвейер состоит из компонентов, каждый из которых обслуживает различные функции. Эти компоненты можно зарегистрировать в рабочей области, присвоить им версии, а затем повторно использовать с различными входными и выходными данными. Используйте рекомендуемую архитектуру Azure для MLOps и акселератора решений AzureMLOps (версии 2), чтобы быстро настроить проект MLOps в Машинном обучении Azure.

Совет

Перед реализацией любого решения просмотрите некоторые рекомендуемые архитектуры Azure для MLOps. Выберите лучшую архитектуру для проекта машинного обучения.

Предварительные условия

Примечание.

Требуется Git версии 2.27 или более поздней. Дополнительные сведения об установке команды Git см. в статье https://git-scm.com/downloads и выборе операционной системы.

Внимание

Команды CLI в этой статье были протестированы с помощью Bash. При использовании другой оболочки могут возникнуть ошибки.

Настройка проверки подлинности с помощью Azure и DevOps

Прежде чем настроить проект MLOps с Azure Machine Learning, необходимо настроить проверку подлинности для Azure DevOps.

Создание субъекта-службы

Совет

Для повышения безопасности рекомендуется использовать федерацию удостоверений рабочей нагрузки вместо субъектов-служб с секретами. Идентификация по рабочей нагрузке устраняет потребность в смене ключей и рекомендуется для новых подключений службы.

Для демонстрации создайте одну или две учетные записи службы в зависимости от количества сред, в которых вы хотите работать (Dev, Prod или обоих сред). Эти принципы можно создать, используя один из следующих методов:

  1. Запустите Azure Cloud Shell.

    Совет

    При первом запуске Cloud Shell вам будет предложено создать учетную запись хранения для Cloud Shell.

  2. При появлении запроса выберите Bash в качестве среды, используемой в Cloud Shell. Вы также можете изменить среды в раскрывающемся списке на верхней панели навигации.

    Скриншот раскрывающегося списка среды Cloud Shell.

  3. Скопируйте следующие команды Bash на компьютер и обновите переменные projectName, subscriptionId и environment с значениями вашего проекта. Если вы создаете среды разработки и продакшен, запустите этот сценарий один раз для каждой из них, создавая учетную запись службы для каждой среды. Эта команда также предоставляет роль участника служебному принципалу в указанной вами подписке. Azure DevOps необходима эта роль для правильного использования ресурсов в этой подписке.

    projectName="<your project name>"
    roleName="Contributor"
    subscriptionId="<subscription Id>"
    environment="<Dev|Prod>" #First letter should be capitalized
    servicePrincipalName="Azure-ARM-${environment}-${projectName}"
    # Verify the ID of the active subscription
    echo "Using subscription ID $subscriptionID"
    echo "Creating SP for RBAC with name $servicePrincipalName, with role $roleName and in scopes     /subscriptions/$subscriptionId"
    az ad sp create-for-rbac --name $servicePrincipalName --role $roleName --scopes /subscriptions/$subscriptionId
    echo "Please ensure that the information created here is properly save for future use."
    
  4. Скопируйте отредактированные команды в Azure Shell и запустите их (Ctrl + Shift + v).

  5. После выполнения этих команд вы увидите сведения, связанные с субъектом-службой. Сохраните эти сведения в безопасном расположении. Его можно использовать позже в демонстрации для настройки Azure DevOps.

    {
       "appId": "<application id>",
       "displayName": "Azure-ARM-dev-Sample_Project_Name",
       "password": "<password>",
       "tenant": "<tenant id>"
    }
    
  6. Повторите шаг 3 , если вы создаете субъекты-службы для сред разработки и prod. Для этой демонстрации вы создадите только одну среду, которая является Prod.

  7. Закройте Cloud Shell после создания учетных записей службы.

Настройка Azure DevOps

  1. Перейдите в Azure DevOps.

  2. Выберите создать проект. Назовите проект mlopsv2 для этого руководства.

    Снимок экрана: проект ADO.

  3. В проекте в разделе "Параметры проекта " (в нижней левой части страницы проекта) выберите "Подключения службы".

  4. Выберите Создать подключение службы.

    Снимок экрана: кнопка подключения к новой службе ADO.

  5. Выберите Azure Resource Manager и нажмите кнопку "Далее".

    Примечание.

    Для новых проектов выберите регистрацию приложения или управляемое удостоверение (вручную) с учетными данными федерации удостоверений рабочей нагрузки для повышения безопасности. Действия, описанные в этой статье, используют устаревший подход с секретом для принципала службы (вручную), требующий ручную ротацию.

    Выберите сервисный принципал (вручную), выберите Далее, и выберите уровень области Подписка.

    • Имя подписки — используйте имя подписки, в которой хранится учетная запись службы.
    • Идентификатор подписки. Используйте входные subscriptionId данные шага 1 в качестве идентификатора подписки.
    • Идентификатор сервисного принципала - используйте appId из выходных данных Шаг 1 в качестве идентификатора сервисного принципала
    • Ключ субъекта-службы - Используйте password выходные данные из шага 1 в качестве ключа субъекта-службы
    • Идентификатор клиента - Используйте значение из Шаг 1 в качестве идентификатора клиента
  6. Назовите подключение службы Azure-ARM-Prod.

  7. Выберите "Предоставить разрешение на доступ ко всем конвейерам", а затем нажмите кнопку "Проверить и сохранить".

Настройка Azure DevOps успешно завершена.

Настройка исходного репозитория с помощью Azure DevOps

  1. Откройте проект, созданный в Azure DevOps.

  2. Откройте раздел Repos и выберите "Импорт репозитория".

    Снимок экрана репозитория Azure DevOps при первом импорте.

  3. Введите https://github.com/Azure/mlops-v2-ado-demo в поле URL-адреса клонирования. Выберите импорт в нижней части страницы.

    Скриншот демонстрационного репозитория MLOps для импорта в Azure DevOps.

    Примечание.

    Демо-репозиторий может иметь обновления зависимостей, ожидающие установки. После импорта проверьте наличие оповещений системы безопасности Dependabot и при необходимости примените обновления. Сведения о последних функциях и исправлениях также см. в главном репозитории акселератора решений Azure MLOps (версии 2 ).

  4. Откройте параметры проекта в нижней части области навигации слева.

  5. В разделе Repos выберите репозитории. Выберите репозиторий, созданный на предыдущем шаге. Выберите вкладку Безопасность.

  6. В разделе "Разрешения пользователя" выберите пользователя службы сборки mlopsv2. Измените разрешение Вклад на Разрешено и разрешение Создать ветвь на Разрешено. Снимок экрана: разрешения Azure DevOps.

  7. Откройте раздел "Конвейеры" в области навигации слева и выберите 3 вертикальные точки рядом с кнопкой "Создать конвейеры". Выберите "Управление безопасностью".

    Снимок экрана: безопасность конвейера.

  8. Выберите учетную запись службы сборки mlopsv2 для проекта в разделе "Пользователи". Измените разрешение Изменить конвейер сборки на Разрешить.

    Снимок экрана: добавление безопасности.

Примечание.

На этом завершается раздел предварительных требований. Теперь можно развернуть акселератор решения.

Развертывание инфраструктуры с помощью Azure DevOps

Этот шаг развертывает конвейер обучения в рабочей области Машинного обучения Azure, созданной на предыдущих шагах.

Совет

Прежде чем ознакомиться с репозиторием MLOps версии 2 и развернуть инфраструктуру, убедитесь, что вы понимаете архитектурные шаблоны акселератора решений. В примерах используется классический тип проекта машинного обучения.

Запуск конвейера инфраструктуры Azure

  1. Перейдите в репозиторий mlops-v2-ado-demoи выберите файл config-infra-prod.yml .

    Внимание

    Убедитесь, что выбрана основная ветвь репозитория.

    Скриншот репозитория в ADO.

    Этот файл конфигурации использует пространство имен и значения постфиксов для создания имен артефактов, чтобы обеспечить их уникальность. Обновите следующий раздел в конфигурации в соответствии с вашими предпочтениями.

     namespace: [5 max random new letters]
     postfix: [4 max random new digits]
     location: eastus
    

    Примечание.

    Если вы используете рабочую нагрузку глубокого обучения, например CV или NLP, убедитесь, что вычислительные ресурсы GPU доступны в зоне развертывания.

  2. Выберите "Зафиксировать", чтобы отправить код и внести эти значения в конвейер обработки.

  3. Перейдите в раздел "Конвейеры ".

    Снимок экрана: конвейеры ADO.

  4. Выберите Создать конвейер.

  5. Выберите Azure Repos Git.

    Снимок экрана: ADO Where's your code.

  6. Выберите репозиторий, который вы клонировали из предыдущего раздела. mlops-v2-ado-demo

  7. Выберите Существующий файл Azure Pipelines YAML.

    Снимок экрана: страница Azure DevOps Pipeline на шаге настройки.

  8. main Выберите ветвь и нажмите кнопку mlops/devops-pipelines/cli-ado-deploy-infra.yml"Продолжить".

  9. Запуск конвейера. Для завершения потребуется несколько минут. Конвейер создает следующие артефакты:

    • Группа ресурсов для рабочей области, включая учетную запись хранения, реестр контейнеров, Application Insights, Key Vault и саму рабочую область машинного обучения Azure.
    • В рабочей области также создается вычислительный кластер.
  10. Теперь развернута инфраструктура для проекта MLOps. Снимок экрана экрана инфраструктурного конвейера ADO.

    Примечание.

    Вы можете игнорировать предупреждения Не удалось переместить и повторно использовать существующий репозиторий в требуемое место.

Пример сценария обучения и развертывания

Акселератор решений включает код и данные для примера сквозного конвейера машинного обучения, который выполняет линейную регрессию для прогнозирования тарифов на такси в Нью-Йорке. Конвейер состоит из компонентов, каждый из которых обслуживает различные функции. Эти компоненты можно зарегистрировать в рабочей области, присвоить им версии, а затем повторно использовать с различными входными и выходными данными. Примеры конвейеров и рабочих процессов для сценариев Компьютерное зрение и NLP имеют различные шаги и этапы развертывания.

Этот конвейер обучения содержит следующие действия.

Подготовка данных

  • Этот компонент принимает несколько наборов данных такси (желтый и зеленый) и объединяет и фильтрует данные. Он подготавливает наборы данных для тренировки, валидации и оценки.
  • Входные данные: локальные данные в ./data/ (несколько .csv файлов)
  • Выходные данные: один подготовленный набор данных (.csv) и обучение, проверка и тестирование наборов данных.

Train Model (Обучение модели);

  • Этот компонент обучает линейный регрессор на обучающем наборе данных.
  • Входные данные: набор данных для обучения
  • Выходные данные: обученная модель (формат выбора)

Анализ модели

  • Этот компонент использует обученную модель для прогнозирования тарифов на такси в тестовом наборе.
  • Входные данные: модель машинного обучения и набор данных тестирования
  • Результат: производительность модели и флаг, указывающий на необходимость развертывания.
  • Этот компонент сравнивает производительность модели со всеми ранее развернутыми моделями в новом тестовом наборе данных. Он решает, следует ли внедрять модель в рабочую среду. Продвижение модели в рабочую среду происходит путем регистрации модели в рабочей области Машинного обучения Azure.

Регистрация модели

  • Этот компонент оценивает модель на основе точности прогнозов в тестовом наборе.
  • Входные данные: обученная модель и флаг развертывания.
  • Выходные данные: модель зарегистрирована в Azure Machine Learning.

Развертывание конвейера обучения модели

  1. Перейдите к пайплайнам ADO.

    Снимок экрана: конвейеры ADO.

  2. Выберите Новый конвейер.

    Снимок экрана: кнопка

  3. Выберите Azure Repos Git.

    Снимок экрана: ADO Where's your code.

  4. Выберите репозиторий, который вы клонировали из предыдущего раздела. mlopsv2

  5. Выберите Существующий файл Azure Pipelines YAML.

    Снимок экрана: страница конвейера ADO на шаге настройки.

  6. Выберите main в качестве ветви и выберите /mlops/devops-pipelines/deploy-model-training-pipeline.yml. Нажмите Продолжить.

  7. Сохраните и запустите конвейер.

Примечание.

На этом этапе инфраструктура настроена и развернут цикл прототипа архитектуры MLOps. Вы готовы внедрить обученную модель в продакшн-среду.

Развертывание обученной модели

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

Развертывание конечной точки модели машинного обучения

  1. Перейдите к пайплайнам ADO.

    Снимок экрана: конвейеры ADO.

  2. Выберите Новый конвейер.

    Снимок экрана: кнопка

  3. Выберите Azure Repos Git.

    Снимок экрана: ADO Where's your code.

  4. Выберите репозиторий, который вы клонировали из предыдущего раздела. mlopsv2

  5. Выберите Существующий файл Azure Pipelines YAML.

    Снимок экрана: страница Azure DevOps Pipeline на шаге настройки.

  6. Выберите main как ветвь и выберите Управляемая Online конечная точка /mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml, затем выберите Продолжить.

  7. Имена онлайн-конечных точек должны быть уникальными, поэтому измените taxi-online-$(namespace)$(postfix)$(environment) на другое уникальное имя, а затем нажмите кнопку "Выполнить". Если система работает без ошибок, не меняйте настройки по умолчанию.

    Снимок экрана: скрипт развертывания пакетной службы Azure DevOps.

    Внимание

    Если выполнение завершается ошибкой из-за существующего имени сетевой конечной точки, повторно создайте конвейер, как описано ранее, и измените [имя конечной точки]на [имя конечной точки (случайное число)]

  8. После завершения выполнения вы увидите выходные данные, аналогичные следующему изображению:

    Снимок экрана: страница результатов выполнения пакетного запуска конвейера ADO.

  9. Чтобы проверить это развертывание, перейдите на вкладку "Конечные точки" в рабочей области Машинного обучения Azure, выберите конечную точку и перейдите на вкладку "Тест ". Для проверки конечной точки можно использовать образец входных данных, расположенных в клонируемом репозитории /data/taxi-request.json .

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

  1. Если вы не планируете продолжать использовать конвейер, удалите проект Azure DevOps.
  2. Удалите группу ресурсов и экземпляр Azure Machine Learning в портале Azure.

Следующие шаги