Непрерывное машинное обучение

Введение в CML (Iterative.ai)

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

Начнем!

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

Давайте возьмем пример создания простого веб-приложения. Минимальная команда для создания веб-приложения будет состоять из фронтенд-инженеров, бэкенд-инженеров, администраторов баз данных и инженеров по развертыванию.

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

Теперь представьте, что команда машинного обучения (ML) и специалистов по данным пытается добиться того же, но с моделью ML. Есть несколько сложностей -

  • Разработка модели машинного обучения — это не то же самое, что разработка программного обеспечения. Большая часть кода, по сути, представляет собой черный ящик, в котором трудно точно определить проблемы в коде ML.
  • Проверка кода машинного обучения — это само по себе искусство, статические проверки кода и проверки качества кода, используемые в коде программного обеспечения, недостаточны, нам нужны проверки данных, проверки работоспособности и проверка предвзятости.
  • Производительность модели машинного обучения зависит от данных, используемых для обучения и тестирования.
  • Разработка программного обеспечения имеет стандартизированную архитектуру и шаблоны проектирования, ML не имеет широко принятых шаблонов проектирования, каждая команда может следовать своему собственному стилю.
  • Для решения одной и той же задачи можно использовать несколько классификаторов и алгоритмов.

Все эти сложности поднимают важный вопрос: Может ли машинное обучение выполняться в стиле непрерывной интеграции?

Здесь на сцену выходит CML. CML — это отличный инструмент с открытым исходным кодом от Iterative.ai, он позволяет специалистам по данным и группам по машинному обучению выполнять непрерывное обучение и интеграцию моделей с использованием существующих сайтов, таких как как GitHub, GitLab и такие инструменты, как Docker и DVC. Дополнительный стек технологий не требуется.

Теперь вы можете сказать: «Но я вполне доволен тем, что разрабатываю свои модели ML в своем ноутбуке и запускаю их, я могу изменять параметры, когда захочу, настраивать код по своему желанию. Зачем мне ХМЛ?»

Зачем нам нужен CML?

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

  • Может ли модель, созданная одним специалистом по данным, быть воспроизведена другими в разных системах и средах?
  • Используется ли правильная версия данных для обучения?
  • Поддаются ли проверке показатели производительности модели?
  • Как мы отслеживаем и обеспечиваем улучшение модели?
  • Большинство команд будут использовать экземпляр облачного графического процессора для обучения модели — это может быть экземпляр по требованию для снижения затрат (необходим только на время обучения). Как обеспечить правильную среду для обучения?
  • После завершения обучения есть ли отчет с подробной информацией о тренировке для последующего сравнения?
  • Будут ли такие же проверки происходить при переобучении модели?

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

CML улучшает и упрощает этот процесс; введение непрерывного рабочего процесса для предоставления облачных экземпляров, обучения модели на них, сбора метрик, оценки производительности модели и публикации сводных отчетов. Это позволяет разработчикам ввести ряд контрольных точек, которые легче отслеживать и воспроизводить в различных сценариях.

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

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

Посмотрим, как это работает.

Как работает ХМЛ?

CML внедряет в рабочий процесс автоматизацию в стиле CI/CD. Большинство конфигураций определены в файле конфигурации cml.yaml, хранящемся в репозитории. В приведенном ниже примере этот файл указывает, какие действия должны быть выполнены, когда функциональная ветвь готова к слиянию с основной ветвью. Когда создается запрос на вытягивание, действия GitHub используют этот рабочий процесс и выполняют действия, указанные в файле конфигурации, например запускают файл train.py или создают отчет о точности.

CML работает с набором функций, которые называются Функции CML. Это предопределенные фрагменты кода, которые помогают нашему рабочему процессу, например позволяют публиковать эти отчеты в виде комментариев или даже запускают облачную программу для выполнения остальной части рабочего процесса. В приведенном ниже рабочем процессе вы можете увидеть, как все эти шаги объединены в один шаг.

Давайте разберемся с этим на примере

Пример

Предположим, что 3 специалиста по данным — Аня, Джек и Нора — работают над созданием классификатора для распознавания и классификации различных фруктов. Аня начинает с базового бинарного классификатора, который распознает фрукт и классифицирует его как яблоко или не яблоко. Затем Джек добавляет возможность распознавания апельсина и банана.

Все, что нужно сделать Джеку

  1. Создайте его функциональную ветку
  2. Напишите его код, запустите его обучение и тестирование на предыдущей модели
  3. Вставьте его код в ветку функций
  4. Отправьте запрос на включение, чтобы слить его код с основной веткой.

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

Итак, что за магия происходит в этом конфигурационном файле? Давайте взглянем

Этот файл cml.yaml представляет собой скрипт GitHub Actions. Не волнуйтесь, если вы сначала запутаетесь, я упрощу это для вас.

Этот файл сообщает GitHub следующие моменты

  • Как называется рабочий процесс действия — обучение модели
  • Когда следует выполнять этот рабочий процесс — по запросу на включение в основной
  • Какие задачи он должен выполнять — модель поезда
  • Где он должен работать — на GitHub runner с последней версией ОС Ubuntu (здесь мы не используем облачный GPU runner)
  • Какие шаги он должен выполнить — модель обучения
  • Что нужно для выполнения этого шага — checkout, setup-python, setup-cml. Это действия, доступные на GitHub и его торговой площадке. Действия — это фрагменты кода, уже написанные кем-то для выполнения задачи, которые вы можете легко использовать повторно в своем сценарии. Таким образом, ваш последний код будет проверен на временной виртуальной машине Ubuntu, на которой будут установлены python и cml.
  • Какие переменные среды следует использовать — REPO_TOKEN предоставляется GitHub, поэтому виртуальная машина знает, что только авторизованный репозиторий GitHub может выполнять эту задачу.
  • Какие команды следует выполнить на этом шаге: установите пакеты Python, запустите файл train.py, опубликуйте отчеты об оценке в файле с именем report.md. Это покажет данные отчета, такие как точность, показатели оценки и показатели ошибок, в зависимости от того, что вы хотите указать как часть процесса оценки вашей модели.
  • Функции CML. Обратите внимание на команды cml publish и cml send-comment в последних двух строках скрипта, это Функции CML. Эти функции упрощают вам задачу создания подробного отчета об обучении модели в запросе на вытягивание. Вы можете создать классный визуальный отчет с описанием производительности модели. Это помогает специалисту по данным выяснить, какой запрос на извлечение может быть одобрен для окончательного слияния.

Короче говоря, все, что сделал Джек, это написал свой код, протестировал свою модель, отправил свои изменения в свою ветку, а затем инициировал запрос на включение. Остальные этапы оценки модели, сравнения и табулирования результатов были выполнены CML. После того, как действия CML завершены, другим специалистам по обработке и анализу данных доступен классный отчет о сеансе обучения для проверки и оценки — в том же репозитории, как вы можете видеть ниже.

Допустим, Нора хочет использовать последний код и тренироваться со своими данными, хочет добавить возможность давать процентную классификацию. Таким образом, ее модель классифицирует изображение фруктов как 96% яблок или 60% бананов, у нее есть большой набор изображений для обучения, и графический процессор сэкономит ей много усилий. Но Нора не знает всех настроек и конфигураций системы, необходимых для настройки экземпляра на базе графического процессора CUDA.

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

Теперь каждый раз, когда кто-то создает функцию, улучшение модели, улучшение производительности или исправление ошибки, отчет об оценке будет доступен во время слияния. Несколько специалистов по данным могут работать над параллельными версиями модели, скажем, над разными алгоритмами классификатора одновременно, используя CML, они могут увидеть, правильно ли обучены модели, можно ли их развернуть, и сравнить показатели; все в одном и том же рабочем процессе репозитория.

Отличный! Что дальше?

Если вы специалист по данным или команда машинного обучения, сначала создайте свой репозиторий на GitHub, GitLab или Bitbucket. Перейдите на https://github.com/iterative/cml, следуйте инструкциям, приведенным там, чтобы начать свое путешествие в CML.

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

  • Просмотрите отчет о точности модели и показателях производительности обучения вашей модели
  • Используйте CML для проведения обучения на различных версиях данных с помощью DVC, получения новых данных, обучения модели, публикации отчета и отправки последней модели в хранилище.
  • Если у вас есть модель TensorFlow, вы можете подключиться к tensorboard.dev и регулярно публиковать свой отчет, используя рабочий процесс CML.
  • Используйте настраиваемое средство выполнения CML для своего проекта и обучайте свою модель на облачных экземплярах AWS EC2, Azure, GCP или на локальных компьютерах.
  • Используйте экземпляр на базе графического процессора AWS без дополнительной настройки, экземпляр можно удалить сразу после завершения обучения. Помогает снизить затраты на обучение и экземпляры.
  • Поскольку рабочий процесс использует действия GitHub на базовом уровне, вы можете расширить сценарии и для других действий рабочего процесса, таких как создание файла рассола модели и сохранение его в удаленном хранилище при каждой отправке в определенную ветку.
  • Добавьте CML поверх рабочего процесса GitHub Actions, его легко интегрировать с существующим рабочим процессом — скажем, вы хотите отслеживать основные версии данных и изменения модели, вы можете использовать CML для обучения модели, генерировать отчет во время запроса на вытягивание основных версий и добавьте простое действие GitHub для отправки этого отчета по почте. — Возможности CML + Github Actions ♾️ .

Это все на данный момент. Счастливых приключений CML 🙂

Ссылки и ссылки