Настройка MLOps с помощью Azure DevOps
ОБЛАСТЬ ПРИМЕНЕНИЯ:Расширение машинного обучения Azure CLI версии 2 (current)Python SDK azure-ai-ml версии 2 (current)
Машинное обучение Azure позволяет интегрироваться с Конвейер Azure DevOps для автоматизации жизненного цикла машинного обучения. Ниже перечислены некоторые операции, которые можно автоматизировать.
- Развертывание инфраструктуры Машинное обучение Azure
- Подготовка данных (извлечение, преобразование, операции загрузки)
- Обучение моделей машинного обучения с масштабированием по запросу и масштабированием
- Развертывание моделей машинного обучения в виде общедоступных или частных веб-служб
- Мониторинг развернутых моделей машинного обучения (например, для анализа производительности)
В этой статье вы узнаете об использовании Машинное обучение Azure для настройки сквозного конвейера MLOps, который выполняет линейную регрессию для прогнозирования тарифов на такси в Нью-Йорке. Конвейер состоит из компонентов, каждый обслуживающий различные функции, которые можно зарегистрировать в рабочей области, версии и повторно использовать с различными входными и выходными данными. Вы собираетесь использовать рекомендуемую архитектуру Azure для MLOps и акселератора решений AzureMLOps (версии 2), чтобы быстро настроить проект MLOps в Машинное обучение Azure.
Совет
Перед реализацией любого решения рекомендуется понять некоторые рекомендуемые архитектуры Azure для MLOps. Вам потребуется выбрать лучшую архитектуру для данного проекта машинного обучения.
Необходимые компоненты
- Подписка Azure. Если у вас еще нет подписки Azure, создайте бесплатную учетную запись, прежде чем начинать работу. Попробуйте бесплатную или платную версию Машинного обучения Azure.
- Рабочая область Машинного обучения Azure.
- Git, запущенный на локальном компьютере.
- Организация в Azure DevOps.
- Проект Azure DevOps, который будет размещать исходные репозитории и конвейеры.
- Расширение Terraform для Azure DevOps , если вы используете Azure DevOps + Terraform для создания инфраструктуры
Примечание.
Требуется Git версии 2.27 или более поздней. Дополнительные сведения об установке команды Git см. в статье https://git-scm.com/downloads и выборе операционной системы.
Внимание
Команды CLI в этой статье были протестированы с помощью Bash. При использовании другой оболочки могут возникнуть ошибки.
Настройка проверки подлинности с помощью Azure и DevOps
Прежде чем настроить проект MLOps с Машинное обучение Azure, необходимо настроить проверку подлинности для Azure DevOps.
Практическое руководство. Создание приложения Azure Active Directory и субъекта-службы с доступом к ресурсам с помощью портала
Для использования демонстрации требуется создание одного или двух принципов службы в зависимости от количества сред, над которыми вы хотите работать (разработчик или Prod или Оба). Эти принципы можно создать с помощью одного из следующих методов:
Запустите Azure Cloud Shell.
Совет
При первом запуске Cloud Shell вам будет предложено создать учетную запись хранения для Cloud Shell.
При появлении запроса выберите Bash в качестве среды, используемой в Cloud Shell. Вы также можете изменить среды в раскрывающемся списке на верхней панели навигации.
Скопируйте следующие команды Bash на компьютер и обновите переменные проекта, subscriptionId и среды со значениями для проекта. Если вы создаете среду разработки и prod, вам потребуется запустить этот сценарий один раз для каждой среды, создав субъект-службу для каждого из них. Эта команда также предоставит роль участника субъекту-службе в предоставленной подписке. Это необходимо для правильного использования ресурсов в этой подписке 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."
Скопируйте измененные команды в Azure Shell и запустите их (CTRL + SHIFT + v).
После выполнения этих команд вы получите информацию, связанную с субъектом-службой. Сохраните эти сведения в безопасном расположении, оно будет использоваться позже в демонстрации для настройки Azure DevOps.
{ "appId": "<application id>", "displayName": "Azure-ARM-dev-Sample_Project_Name", "password": "<password>", "tenant": "<tenant id>" }
Повторите шаг 3 , если вы создаете субъекты-службы для сред разработки и prod. Для этой демонстрации мы создадим только одну среду, которая является Prod.
Закройте Cloud Shell после создания субъектов-служб.
Настройка Azure DevOps
Перейдите в Azure DevOps.
Выберите новый проект (назовите проект
mlopsv2
для этого руководства).В проекте в разделе "Параметры проекта" (в нижней левой части страницы проекта) выберите "Подключения службы".
Выберите "Создать подключение службы".
Выберите Azure Resource Manager, нажмите кнопку "Далее", выберите субъект-служба (вручную), нажмите кнопку "Далее" и выберите подписку уровня области.
- Имя подписки— используйте имя подписки, в которой хранится субъект-служба.
- Идентификатор подписки. Используйте входные
subscriptionId
данные шага 1 в качестве идентификатора подписки. - Идентификатор субъекта-службы. Используйте выходные
appId
данные шага 1 в качестве идентификатора субъекта-службы - Ключ субъекта-службы. Использование
password
выходных данных из шага 1 в качестве ключа субъекта-службы - Идентификатор клиента. Используйте выходные данные из шага 1 в качестве идентификатора клиента
tenant
Назовите подключение службы Azure-ARM-Prod.
Выберите "Предоставить разрешение на доступ ко всем конвейерам", а затем нажмите кнопку "Проверить" и "Сохранить".
Настройка Azure DevOps успешно завершена.
Настройка исходного репозитория с помощью Azure DevOps
Открытие проекта, созданного в Azure DevOps
Откройте раздел Repos и выберите "Импорт репозитория"
Введите https://github.com/Azure/mlops-v2-ado-demo поле URL-адреса клонирования. Выберите импорт в нижней части страницы
Откройте параметры проекта в нижней части области навигации слева
В разделе Repos выберите репозитории. Выберите репозиторий, созданный на предыдущем шаге, перейдите на вкладку "Безопасность"
В разделе "Разрешения пользователя" выберите пользователя службы сборки mlopsv2. Измените разрешение "Разрешить" и разрешение "Создать ветвь", чтобы разрешить.
Откройте раздел "Конвейеры" в области навигации слева и выберите 3 вертикальные точки рядом с кнопкой "Создать конвейеры". Выбор " Управление безопасностью"
Выберите учетную запись службы сборки mlopsv2 для проекта в разделе "Пользователи". Изменение конвейера сборки разрешения на allow
Примечание.
Это завершает раздел предварительных требований и развертывание акселератора решений может произойти соответствующим образом.
Развертывание инфраструктуры с помощью Azure DevOps
Этот шаг развертывает конвейер обучения в рабочей области Машинное обучение Azure, созданной на предыдущих шагах.
Совет
Перед извлечением репозитория MLOps версии 2 и развертыванием инфраструктуры необходимо понимать архитектурные шаблоны акселератора решений. В примерах используется классический тип проекта МАШИНного обучения.
Запуск конвейера инфраструктуры Azure
Перейдите в репозиторий
mlops-v2-ado-demo
и выберите файл config-infra-prod.yml .Внимание
Убедитесь, что выбрана основная ветвь репозитория.
Этот файл конфигурации использует пространство имен и постфикс значения имен артефактов для обеспечения уникальности. Обновите следующий раздел в конфигурации в соответствии с вашими предпочтениями.
namespace: [5 max random new letters] postfix: [4 max random new digits] location: eastus
Примечание.
Если вы используете рабочую нагрузку глубокого обучения, например CV или NLP, убедитесь, что вычислительные ресурсы GPU доступны в зоне развертывания.
Выберите "Зафиксировать" и отправить код, чтобы получить эти значения в конвейере.
Перейти к разделу "Конвейеры"
Выберите Создать конвейер.
Выберите Azure Repos Git.
Выберите репозиторий, клонированные из предыдущего раздела
mlops-v2-ado-demo
Выбор существующего YAML-файла Azure Pipelines
main
Выберите ветвь и нажмите кнопкуmlops/devops-pipelines/cli-ado-deploy-infra.yml
"Продолжить".Запуск конвейера; Для завершения потребуется несколько минут. Конвейер должен создать следующие артефакты:
- Группа ресурсов для рабочей области, включая учетную запись хранения, реестр контейнеров, Application Insights, Keyvault и саму рабочую область Машинное обучение Azure.
- В рабочей области также создается вычислительный кластер.
Теперь развернута инфраструктура для проекта MLOps.
Примечание.
Не удается переместить и повторно использовать существующий репозиторий для предупреждений о необходимых расположениях , может быть проигнорировано.
Пример сценария обучения и развертывания
Акселератор решений включает код и данные для примера сквозного конвейера машинного обучения, который выполняет линейную регрессию для прогнозирования тарифов на такси в Нью-Йорке. Конвейер состоит из компонентов, каждый обслуживающий различные функции, которые можно зарегистрировать в рабочей области, версии и повторно использовать с различными входными и выходными данными. Примеры конвейеров и рабочих процессов для сценариев Компьютерное зрение и NLP будут иметь различные шаги и этапы развертывания.
Этот конвейер обучения содержит следующие действия.
Подготовка данных
- Этот компонент принимает несколько наборов данных такси (желтый и зеленый) и объединяет или фильтрует данные, а также подготавливает наборы данных для обучения и оценки.
- Входные данные: локальные данные в ./data/ (несколько .csv файлов)
- Выходные данные: один подготовленный набор данных (.csv) и наборы данных train/val/test.
Train Model (Обучение модели);
- Этот компонент обучает линейный регрессор с набором обучения.
- Входные данные: обучающий набор данных
- Выходные данные: обученная модель (формат выбора)
Анализ модели
- Этот компонент использует обученную модель для прогнозирования тарифов на такси в тестовом наборе.
- Входные данные: модель машинного обучения и набор данных тестирования
- Выходные данные: производительность модели и флаг развертывания для развертывания.
- Этот компонент сравнивает производительность модели со всеми предыдущими развернутыми моделями в новом тестовом наборе данных и решает, следует ли продвигать модель в рабочую среду. Продвижение модели в рабочую среду происходит путем регистрации модели в рабочей области AML.
Регистрация модели
- Этот компонент оценивает модель на основе точности прогнозов в тестовом наборе.
- Входные данные: обученная модель и флаг развертывания.
- Выходные данные: зарегистрированная модель в Машинное обучение Azure.
Развертывание конвейера обучения модели
Переход к конвейерам ADO
Выберите Новый конвейер.
Выберите Azure Repos Git.
Выберите репозиторий, клонированные из предыдущего раздела
mlopsv2
Выбор существующего YAML-файла Azure Pipelines
Выберите
main
ветвь и нажмите кнопку/mlops/devops-pipelines/deploy-model-training-pipeline.yml
"Продолжить".Сохранение и запуск конвейера
Примечание.
На этом этапе инфраструктура настроена и развернут цикл прототипа архитектуры MLOps. Вы готовы перейти к обученной модели в рабочую среду.
Развертывание обученной модели
Этот сценарий включает предварительно созданные рабочие процессы для двух подходов к развертыванию обученной модели, пакетной оценки или развертыванию модели в конечной точке для оценки в режиме реального времени. Вы можете запустить любой из этих рабочих процессов или оба этих рабочих процесса, чтобы проверить производительность модели в рабочей области Машинного обучения Azure. В этом примере мы будем использовать оценку в режиме реального времени.
Развертывание конечной точки модели машинного обучения
Переход к конвейерам ADO
Выберите Новый конвейер.
Выберите Azure Repos Git.
Выберите репозиторий, клонированные из предыдущего раздела
mlopsv2
Выбор существующего YAML-файла Azure Pipelines
Выберите
main
ветвь и выберите "Управляемая конечная точка/mlops/devops-pipelines/deploy-online-endpoint-pipeline.yml
Online", а затем нажмите кнопку "Продолжить".Имена конечных точек в Сети должны быть уникальными, поэтому измените
taxi-online-$(namespace)$(postfix)$(environment)
его на другое уникальное имя, а затем нажмите кнопку "Выполнить". Если он не завершается ошибкой, не нужно изменять значение по умолчанию.Внимание
Если выполнение завершается ошибкой из-за существующего имени сетевой конечной точки, повторно создайте конвейер, как описано ранее, и измените [имя конечной точки] на [имя конечной точки (случайное число)]
После завершения выполнения вы увидите выходные данные, аналогичные следующему изображению:
Чтобы проверить это развертывание, перейдите на вкладку "Конечные точки" в рабочей области AzureML, выберите конечную точку и перейдите на вкладку "Тест". Для проверки конечной точки можно использовать образец входных данных, расположенных в клонируемом репозитории
/data/taxi-request.json
.
Очистка ресурсов
- Если вы не собираетесь продолжать использовать конвейер, удалите проект Azure DevOps.
- В портал Azure удалите группу ресурсов и экземпляр Машинное обучение Azure.
Следующие шаги
- Установка и настройка пакета SDK для Python версии 2
- Установка и настройка Python CLI версии 2
- Акселератор решений Azure MLOps (версии 2) на GitHub
- Учебный курс по MLOps с Машинное обучение
- Дополнительные сведения о Azure Pipelines с помощью Машинное обучение Azure
- Дополнительные сведения о действиях GitHub с помощью Машинное обучение Azure
- Развертывание MLOps в Azure менее чем за час — видео акселератора MLOps версии 2 сообщества