Управление жизненным циклом MLOps с помощью ML Registry в Yandex Managed Service for GitLab
В течение жизненного цикла модели машинного обучения выполняются разработка, обучение модели, оценка качества и внедрение модели. В данном руководстве рассматриваются возможности платформы GitLab для хранения и версионирования ML‑артефактов, которые возникают при экспериментах с ML-моделью, в инфраструктуре Yandex Cloud. В экспериментах меняются гиперпараметры модели — настройки, которые задаются до начала обучения модели и определяют ее архитектуру, стратегию обучения и общее поведение. В отличие от параметров модели (весов, коэффициентов), которые подбираются в процессе обучения на данных, гиперпараметры не изменяются автоматически — их выбирает исследователь или ML-инженер.
Жизненный цикл разработки и тестирования модели в среде GitLab отображен на схеме:
В качестве среды разработки и тестирования используется виртуальная машина DSVM. Масштабируемый управляемый сервис Yandex Managed Service for GitLab обеспечивает работу инстанса GitLab с предустановленным пакетом ML Registry
- Реестр моделей (Model Registry) для логирования метрик, анализа экспериментов по применению модели и оценки качества.
- Каталог экспериментов (Model Experiments) для управления хранением и версионированием модели.
Для интеграции модели с ML Registry используется библиотека Python API
Кроме сервиса Managed Service for GitLab, для работы с исходным кодом модели используется сервис Yandex Compute Cloud, а для сетевой инфраструктуры — Yandex Virtual Private Cloud.
Системная архитектура
Сеть
В инфраструктуре решения создается облачная сеть Virtual Private Cloud net-gitlab.
Подсети
В сети net-gitlab создается подсеть в выбранной зоне доступности для размещения инстанса Managed Service for GitLab и ВМ.
Группы безопасности
Сетевой доступ к ресурсам инфраструктуры разграничен с помощью группы безопасности. Подробнее о настройке правил группы безопасности для Managed Service for GitLab.
Адреса ресурсов
В создаваемой инфраструктуре используются публичный IP-адрес для создаваемой ВМ и URL-адрес инстанса GitLab в домене gitlab.yandexcloud.net.
Managed Service for GitLab
Инстанс GitLab развертывается в ВМ под управлением сервиса Managed Service for GitLab. Доступ к инстансу осуществляется по его адресу через стандартный веб-интерфейс GitLab.
Чтобы выполнять задания GitLab CI/CD, для инстанса Managed Service for GitLab создается и настраивается GitLab Runner.
Compute Cloud
Для локального тестирования и загрузки изменений в репозиторий с исходным кодом модели используется виртуальная машина Data Science Virtual Machine. Отдельная ВМ может использоваться для развертывания GitLab Runner.
Тестовая модель
Тестовая ML-модель, развертываемая в этом руководстве, симулирует цикл разработки и версионирования модели кредитного конвейера. Модель адаптирована для использования в облачной инфраструктуре.
Чтобы развернуть среду разработки модели в облачной среде Yandex Cloud:
- Подготовьте облако к работе.
- Создайте инфраструктуру.
- Создайте проект и настройте окружение.
- Создайте эксперимент и версию модели.
Если созданные ресурсы вам больше не нужны, удалите их.
Подготовьте облако к работе
Зарегистрируйтесь в Yandex Cloud и создайте платежный аккаунт:
- Перейдите в консоль управления
, затем войдите в Yandex Cloud или зарегистрируйтесь. - На странице Yandex Cloud Billing
убедитесь, что у вас подключен платежный аккаунт, и он находится в статусеACTIVEилиTRIAL_ACTIVE. Если платежного аккаунта нет, создайте его и привяжите к нему облако.
Если у вас есть активный платежный аккаунт, вы можете создать или выбрать каталог, в котором будет работать ваша инфраструктура, на странице облака
Подробнее об облаках и каталогах.
Необходимые платные ресурсы
- Сервис Managed Service for GitLab: использование вычислительных ресурсов инстанса (виртуальной машины) и объем хранилища данных инстанса (см. тарифы Managed Service for GitLab). В зависимости от того, где развернут GitLab Runner, может тарифицироваться ВМ Compute Cloud для установки GitLab Runner.
- Виртуальные машины: использование вычислительных ресурсов, хранилища, публичного IP-адреса и операционной системы (см. тарифы Compute Cloud).
- Сервис Object Storage: использование для хранения резервных копий Managed Service for GitLab (см. тарифы Object Storage).
Создайте инфраструктуру
Примечание
- Создайте сеть с именем
net-gitlab. При создании сети отключите опцию Создать подсети. - В сети
net-gitlabсоздайте подсеть в зоне доступностиkz1-aсо следующими параметрами:- Имя —
subnet-gitlab-a. - Зона доступности —
kz1-a. - CIDR —
10.16.0.0/24.
- Имя —
- В сети
net-gitlabсоздайте группу безопасности с именемgitlab-sgдля работы инстанса Managed Service for GitLab и ВМ. Настройте правила в этой группе безопасности по инструкции. - Создайте сервисный аккаунт
gitlab-saи назначьте ему ролиcompute.admin,vpc.adminиiam.serviceAccounts.user. - Создайте и активируйте инстанс GitLab любой подходящей конфигурации. При создании инстанса укажите созданные ранее подсеть и группу безопасности.
- Создайте ВМ из образа DSVM с именем
vm-mlopsв зоне доступностиkz1-aи созданной ранее подсети. При создании ВМ укажите созданную ранее группу безопасности.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации ml-ops-managed-gitlab.tf
.В этом файле описаны:
- сеть;
- подсеть;
- группа безопасности и правила, необходимые для работы инстанса Managed Service for GitLab;
- инстанс Managed Service for GitLab;
- ВМ с образом DSVM;
- сервисный аккаунт.
-
Укажите в файле
ml-ops-managed-gitlab.tfзначения параметров:instance_name— название инстанса GitLab;instance_login— логин администратора инстанса GitLab;instance_email— адрес электронной почты администратора;instance_domain— доменное имя инстанса в формате<имя>.gitlab.yandexcloud.net.vm_usernameиvm_public_key— логин и абсолютный путь к публичному ключу, которые будут использоваться для доступа к ВМ.sa_folder_id— идентификатор каталога, в котором создается сервисный аккаунт.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validateЕсли в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform planЕсли конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply -
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Создайте проект и настройте окружение
-
Создайте проект GitLab
, выберите на стартовой странице Import project и укажите настройки импорта:- Import project from — Repository by URL.
- Git Repository URL —
https://github.com/yandex-cloud-examples/yc-ml-ops-managed-gitlab.git - Project name —
gitlab-mlflow.
-
Разверните раннер для созданного проекта GitLab с помощью инструкции. При развертывании укажите созданные ранее компоненты инфраструктуры:
- Если вы устанавливаете раннер на ВМ вручную, при создании ВМ выберите подсеть
subnet-gitlab-aи группу безопасностиgitlab-sg. - При создании раннера с помощью Консоли управления укажите сервисный аккаунт
gitlab-saи группу безопасностиgitlab-sg.
- Если вы устанавливаете раннер на ВМ вручную, при создании ВМ выберите подсеть
Настройте переменные окружения
-
Откройте проект GitLab
gitlab-mlflow. -
На панели слева перейдите в раздел Settings и во всплывающем списке выберите пункт Access Tokens.
-
Задайте параметры нового токена:
- Token name —
mlflow. - Select a role —
Maintainer. - Select scopes —
api,manage_runner,read_repository,write_repository.
- Token name —
-
Нажмите кнопку Create project access token.
-
Скопируйте значение созданного токена.
-
Выберите слева вкладку Settings, а во всплывающем списке — CI/CD.
-
В разделе Variables нажмите кнопку Expand.
-
Добавьте переменные окружения:
MLFLOW_TRACKING_TOKEN— созданный токен.MLFLOW_TRACKING_URI—https://<адрес_инстанса_GitLab>.gitlab.yandexcloud.net/api/v4/projects/4/ml/mlflow.REPO_TOKEN— созданный токен.
Для добавления переменной:
- Нажмите кнопку Add variable.
- В появившемся окне в поле Key укажите имя переменной, в поле Value — значение переменной.
- Нажмите кнопку Add variable.
Создайте эксперимент и версию модели
-
Подключитесь к ВМ
vm-mlopsпо SSH. -
Добавьте
SSH-ключ для безопасного доступа к GitLab. -
Склонируйте
репозиторий проектаgitlab-mlflowс помощью SSH. -
Перейдите в директорию с репозиторием и создайте ветку
mlops-experiment-1:git checkout -b mlops-experiment-1 -
Внесите изменения в параметры модели в файле
loan_prediction.py, например поменяйте параметрRANDOM_SEED. -
Загрузите изменения на GitLab:
git add -A git commit -m "Change model parameter" git push -
Откройте проект GitLab
gitlab-mlflowи создайте мерж-реквест из созданной ветки. Автоматически будет создан сценарий обучения и тестирования измененной модели. -
Запустите сценарий:
- На панели слева выберите пункт Build.
- В выпадающем списке выберите пункт Pipelines.
- Нажмите кнопку
в колонке Actions и выберите trigger_train.
Дождитесь завершения работы сценария.
-
Создайте реестр версий модели:
- На панели слева выберите пункт Deploy.
- В выпадающем списке выберите пункт Model Registry.
- Нажмите кнопку Create/import model и выберите Create new model.
- Укажите имя модели
loan-prediction-demoи нажмите кнопку Create.
-
Проверьте результаты эксперимента:
- На панели слева выберите пункт Analyze.
- В выпадающем списке выберите пункт Model Experiments.
- Выберите в списке справа эксперимент
Loan_predictionи перейдите на вкладку Runs. В списке отображаются все методы для обучения модели, их параметры и результаты обучения. - Нажмите на элемент списка в колонке Name. На вкладке Artifacts отображаются артефакты обучения выбранного метода модели.
- Нажмите кнопку Promote run для регистрации версии модели. Выберите в поле Model модель
loan-prediction-demoиз выпадающего списка, укажите в поле Version версию0.0.1и нажмите кнопку Promote. В реестр версий будет добавлена новая версия и все артефакты ее обучения.
Удалите созданные ресурсы
Некоторые ресурсы платные. Чтобы за них не списывалась плата, удалите ресурсы, которые вы больше не будете использовать:
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy -
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-