Из этого туториала Вы узнаете, как создать сквозной проект CI / CD для науки о данных.

Мы создадим образец проекта, который продемонстрирует, как:

  1. Определение структуры проекта Data Science
  2. Обучайте модели на удаленных вычислениях
  3. Разверните сгенерированные артефакты в контейнерах для использования другими сторонами, используя автоматизированные конвейеры сборки и выпуска.

Вы можете использовать инструменты по своему выбору, поскольку это концепция. Для этого конкретного урока мы будем использовать:

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

IDE, в данном случае код Visual Studio

Учетная запись Azure

Учетная запись Azure DevOps

Рабочая область службы машинного обучения Azure

Python

Создайте проект по науке о данных

Мы собираемся использовать знаменитый набор данных MNIST, чтобы обучить модель предсказывать числа в изображениях, а затем развернуть его в контейнере.

Создайте новый каталог.

Клонируйте шаблон проекта, который вы можете использовать в качестве базового шаблона для своего проекта, другой каталог - это тот, который будет указывать на ваш собственный репозиторий. Замените ‹› на имена ваших каталогов.

md csu-geekster\template
md csu-geekster\<name_project_directory>
cd csu-geekster\template
git clone https://github.com/sarathsasidharan/devopsai.git
cd ..

Создайте новый проект в Azure DevOps.



Щелкните папку репозитория на левой панели, как показано ниже.

Создайте новый каталог на своем компьютере, а затем клонируйте этот новый проект на свой локальный компьютер.

cd <name of your azure devops project directory>
git clone <remote repository>
cd <name of your devops project>
notepad except.txt

Добавьте .git в except.txt и сохраните файл.

Скопируйте файлы из папки шаблона в папку проекта DevOps. Добавьте файлы в проект azure DevOps и зафиксируйте их.

xcopy c:\Users\sasasid\csu-geekster\template\devopsai c:\Users\sasasid\csu-geekster\dsproject\csu-geekster /E /exclude:except.txt
git commit -am "project template updated"
git push

После того, как структура проекта будет готова, мы готовы приступить к разработке нашего проекта по науке о данных.

Откройте проект в IDE по вашему выбору.

Установите библиотеки azure ml с помощью pip install, при этом предполагается, что на компьютере установлен python.

pip install azure-cli==2.0.46
pip install --upgrade azureml-sdk[notebooks,automl]

Отредактируйте структуру проекта, если это необходимо, или не стесняйтесь использовать структуру как таковую или настраивать в соответствии со стандартами вашей компании.

Откройте новый терминал и зафиксируйте изменения в репозитории azure dev-ops.

git add .
git commit - m "Changed folder names according to comp standards"
git push

Откройте каталог конфигурации и введите значения, соответствующие ключам в файле конфигурации.

Идентификатор подписки: Ссылка, чтобы найти это

Имя группы ресурсов: имя группы ресурсов, в которой была создана рабочая область службы AML.

Имя рабочей области: имя рабочей области, которая была создана в рабочей области службы AML.

Местоположение: место, где был создан ресурс AML, например: westeurope.

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

Этот сценарий использует субъект-службу для подключения к службе azure ml. Сначала нам нужно создать субъект-службу на Azure.

Щелкните Azure Active Directory, как показано ниже.

Выберите «Регистрация приложений» и создайте нового субъекта-службы. После этого создайте новый ключ, который будет использоваться в этом скрипте для подключения к сервису azure ml.

Выберите вкладку ключей и скопируйте сгенерированный ключ.

Закройте эту вкладку, скопируйте идентификатор приложения с этой страницы, он будет использован в скрипте.

Внутри dataPrep.py замените значения в переменных значениями, которые вы собрали на предыдущих шагах, а именно app_id необходимо заменить на идентификатор приложения, app_key необходимо заменить на ключ приложения, сгенерированный на предыдущем шаге.

tenant_id="<Enter Your Tenant Id>"
app_id=  Replace this with your application Id
app_key= Replace with the key generated in the previous step
workspace="<Name of your workspace>"
subscription_id="<Subscription id>"
resource_grp="<Name of your resource group where aml service is created>"
experiment_name = '<Name of your experiment>'

Затем предоставьте права участника для этого принципала-службы в группе ресурсов, в которой есть служба aml.

Для этого сначала перейдите на вкладку группы ресурсов, а затем щелкните группу ресурсов, которая содержит службу aml.

Щелкните вкладку IAM и добавьте субъект-службу, созданный на предыдущем шаге, и предоставьте права участника для этой группы ресурсов.

После обновления вернитесь к коду проекта.

Следующий сценарий для редактирования находится в разделе службы, отредактируйте файл EstimatorTrigger.py. Этот сценарий запускает процесс обучения, а также регистрирует и сохраняет выходные данные модели в сервисе azure ml для последующего извлечения (во время развертывания). Такие аспекты, как точность, auc, набор данных, используемый для обучения, можно регистрировать с помощью azure ml sdk.

Эта функция имеет решающее значение для управления моделями и отслеживания моделей.

Замените переменные значениями, сгенерированными на предыдущих шагах, так же, как вы это сделали в скрипте dataPrep.py.

Следующий сценарий, который необходимо отредактировать, находится в папке deploy.

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

  1. Подключитесь к сервису aml и загрузите артефакт модели
  2. Создается как файл зависимостей conda, который указывает, какие пакеты мне нужно включить в свой контейнер.
  3. Создает образ докера и отправляет его в реестр контейнеров Azure.
  4. Создает экземпляр контейнера Azure.
  5. Создает веб-службу, обслуживающую созданную нами модель, размещенную в экземпляре контейнера Azure.

Следующий скрипт, который нужно отредактировать, называется test.py tests. Это тестирует веб-службу после ее развертывания.

Отправьте все свои изменения на лазурный DevOps.

git add .
git commit -m "Edited scripts for CI/CD"
git push

Далее нам нужно создать конвейер непрерывной интеграции в Azure DevOps.

Перейдите на https://visualstudio.microsoft.com/ и щелкните созданный вами проект. Щелкните "Трубопроводы".

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

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

На следующей странице нажмите «Продолжить», убедитесь, что вы видите выбранный репозиторий проекта.

На следующем шаге выберите пустое задание.

Дайте имя своему конвейеру сборки.

Нажмите на задание агента и измените имя на что-нибудь значимое, а также в этой демонстрации мы выбираем пул агентов, который будет размещен на VS2017.

Щелкните значок + Под выбранным заданием агента, первым шагом в нашей сборке является создание среды conda на агенте.

Найдите Create Conda в окне поиска и нажмите «Добавить».

Щелкните добавленную задачу и измените отображаемое имя, а также установите флажок «Создать настраиваемую среду» и назовите ее. Также укажите версию Python, которую вы хотите использовать в этом случае 3.6

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

Выберите сценарий для выполнения, а также в разделе «Дополнительно» установите каталог в папку установки.

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

По пути к сценарию выберите сценарий в разделе подготовки данных, а затем также установите рабочий каталог в расширенных параметрах.

Добавьте новую задачу python, затем выберите сценарий в каталоге service / EstimatorTrigger.py и установите текущий рабочий каталог как каталог службы. Этот сценарий запускает наш этап обучения, и после его успешного выполнения сохраняет артефакт модели в службе машинного обучения Azure, а также лучшая модель регистрируется в службе машинного обучения Azure.

После этого добавьте задание на копирование артефактов. Этот шаг упаковывает наши артефакты, которые можно использовать для развертывания.

Добавьте новую задачу, а затем найдите файлы-копии.

Добавьте эту задачу, а затем установите свойства, как показано.

Исходная папка как: $ (Build.SourcesDirectory)

Целевая папка как: $ (Build.ArtifactStagingDirectory)

На следующем шаге добавьте новую задачу, найдите сборку публикации.

Дайте ему осмысленное имя для того, что вы хотите назвать артефактом.

Затем нажмите «Сохранить очередь», чтобы запустить этот конвейер сборки.

Как только это будет сделано, вы сможете увидеть задание сборки и щелкнуть сборки, чтобы увидеть список запущенных и завершенных сборок.

Вы также можете включить непрерывную интеграцию, вернувшись к определению сборки, отредактировав его и в разделе «Триггеры» установите флажок «Непрерывная интеграция».

Это запустит сборку, как только вы зафиксируете что-нибудь новое в базе кода.

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

Перейдите на вкладку «Релизы», а затем - в конвейер новых выпусков.

Выберите пустое задание и нажмите «Далее»

Введите описательное название этапа.

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

Добавьте conda env, как в сборке

Следующим шагом является добавление зависимостей, как на шаге 2 построения конвейера. Обязательно установите запускаемый скрипт, а также рабочий каталог в разделе «Дополнительно».

Следующим шагом является добавление новой задачи скрипта Python. Укажите путь сценария к файлу с именем deploy.py, а также укажите рабочий каталог в дополнительных параметрах.

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

Сохраните и закройте конвейер выпуска, теперь освободите конвейер.

После успешного запуска проверьте журналы, чтобы увидеть ответ нашей недавно созданной веб-службы.

После успешных запусков вы можете просмотреть их на панели мониторинга службы Azure ML.

После выполнения этого триггера эксперимент и прогоны становятся видимыми, csu-image-распознавание - это эксперимент, созданный с помощью сценария.

Щелкните эксперимент, чтобы просмотреть результаты.

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

Если вы хотите изменить показатели, отображаемые по сравнению с запуском, это можно сделать с помощью кнопки редактирования.

Дополнительную документацию по этому вопросу можно найти по адресу: https://docs.microsoft.com/en-us/azure/machine-learning/service/

Вычислительные ресурсы, используемые для этого, также создаются, вы можете просмотреть это в колонке «Вычисления».

Модель, зарегистрированную вместе с версиями, также можно было просмотреть под колонкой «Модели».

Созданное изображение отображается в колонке «Изображения». Каждое новое изображение, опубликованное сценарием, получает новый номер версии, что может помочь отследить выпущенные артефакты.

Отсюда можно увидеть все развертывания в экземплярах контейнера Azure / службе Azure Kubernetes / Edge.

Далее будет рассмотрено модульное тестирование. Буду обновлять этот пост тестами как можно скорее.

Присоединяйтесь к нашему сообществу Slack и читайте наши еженедельные темы о Фавнах ⬇

Если этот пост был полезен, пожалуйста, несколько раз нажмите кнопку хлопка 👏 ниже, чтобы выразить поддержку автору! ⬇