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

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

Что означает «контроль версий»?

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

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

Зачем нам нужен контроль версий в ML?

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

Управление версиями машинного обучения состоит из трех частей:

Код

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

Данные

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

Модель

Модель связывает все вышеперечисленное с параметрами модели и гиперпараметрами. Когда вы используете систему контроля версий модели, вы получаете множество преимуществ:

  • Сотрудничество. Если вы исследователь-одиночка, это может быть неважно. Когда вы работаете в команде и ваш проект сложен, становится очень сложно сотрудничать без системы контроля версий.
  • Управление версиями: при внесении изменений модель может сломаться. С системой контроля версий вы получаете журнал изменений, который будет полезен, когда ваша модель сломается, и вы можете отменить свои изменения, чтобы вернуться к стабильной версии.
  • Воспроизводимость: создавая моментальные снимки для всего конвейера машинного обучения, вы снова можете воспроизвести тот же результат, даже с обученными весами, что экономит время на повторное обучение и тестирование.
  • Отслеживание зависимостей: отслеживание различных версий наборов данных (обучение, оценка и разработка), настройка гиперпараметров и параметров модели. Используя контроль версий, вы можете тестировать более одной модели в разных ветвях или репозиториях, настраивать параметры модели и гиперпараметры, а также отслеживать точность каждого изменения.
  • Обновления модели: разработка модели не выполняется за один этап, она выполняется циклически. С помощью контроля версий вы можете контролировать, какая версия будет выпущена, продолжая разработку следующего выпуска.

Типы управления версиями машинного обучения

Существует два типа контроля версий ML:

  • Централизованная система контроля версий.
  • Распределенная система контроля версий.

Распределенная система контроля версий (DVCS) - это система контроля версий, в которой полная кодовая база доступна локально на компьютере разработчика, включая историю. Это позволяет разработчику объединять и создавать ветки локально, без подключения к удаленному серверу или какой-либо сети. Примером таких систем является Git.

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

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

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

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

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

Контроль версий модели

В процессе разработки модели у разработчика возникают вопросы:

  • На каких гиперпараметрах обучалась модель?
  • Какие изменения в коде были внесены после последнего обучения модели?
  • На каком наборе данных обучалась модель?
  • Какие изменения были внесены в зависимости после последнего обучения модели?
  • Какое изменение привело к тому, что модель потерпела неудачу?
  • Какие изменения улучшили работу модели?
  • Какая версия модели была выпущена последней?

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

Что нужно версировать при разработке машинного обучения?

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

1. Выбор модели:

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

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

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

2. Модельное обучение:

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

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

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

3. Оценка модели:

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

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

4. Проверка модели:

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

5. Развертывание модели:

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

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

Как реализовать контроль версий модели

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

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

Инструменты управления версиями моделей машинного обучения

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

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

Нептун

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

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

DVC

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

Метаданные ML (MLMD)

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

Резюме

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

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

Использованная литература:

Первоначально опубликовано на https://neptune.ai 13 сентября 2021 г.