Дата-сайентистам необходимо следить, на каком наборе данных ML-модели проявляют себя наилучшим образом и почему. Для этого есть специализированные решения, которые помогают реализовать версионирование данных. Меня зовут Павел Куницын, я главный специалист по анализу данных и МО в ПГК Диджитал, и сегодня хотел бы рассказать о некоторых профильных open source инструментах.
DVC
DVC — это система версионирования датасетов. Она представляет собой надстройку над Git. Инструмент разработал бывший дата-сайентист из Microsoft, который сегодня является соучредителем Iterative.ai. Эта компания развивает инструментарий для управления жизненным циклом моделей машинного обучения. В портфолио разработчиков также находятся такие открытые решения, как MLEM для деплоя моделей и DataChain для работы с неструктурированными данными в сфере ML.
Первая версия DVC вышла в 2017 году и позволила дата-сайентистам отслеживать зависимости в данных для обучения с помощью простых Git-подобных команд. Таким образом разработчики хотели интегрировать лучшие практики разработки программного обеспечения в процесс проектирования ML-моделей, упростить версионирование и совместную работу. В 2021-м вышла вторая версия инструмента, в которую добавили возможность отлеживать состояние экспериментов.
В целом инструмент известен в сообществе. О нем есть несколько статей на Хабре, а также треды на Hacker News. Резиденты площадок отмечают примечательные возможности решения — в частности, наличие команды dvc repro, которая позволяет воспроизвести все этапы эксперимента, для которых изменились зависимости.
Мы в «Первой грузовой компании» также используем DVC в своей работе. Он помогает развивать модели, прогнозирующие дату прибытия вагонов на станцию назначения. Если качество модели на проде падает, мы подтягиваем данные, на которых она обучалась, и сравниваем выборки из обучения с продуктивными данными. Также благодаря DVC мы сократили место на диске под датасеты. При постановке экспериментов как датасеты, так и модели могут меняться. DVC фиксирует изменения в файлах и сохраняет в хранилище их уникальные версии.
Разумеется, не обошлось без ложки дегтя. Сложности вызывает формат хранения данных — файлам в качестве названия присваивается их хэш, поэтому понять, что именно лежит в кэше или удаленном хранилище, можно только с помощью терминальных команд dvc или python api.
В то же время для прототипов, требующих лишь подтверждения гипотезы, DVC может только затормозить процесс, потому что время будет уходить на постоянное переопределение пайплайна в конфигах DVC. Логика пайплайна проведения экспериментов — то есть порядок исполнения файлов — описывается в конфиге dvc.yaml. Определиться с ней на этапе написания прототипа достаточно сложно. Поэтому, чтобы DVC работал корректно, изменения в логике приходится регулярно отражать в dvc.yaml.
Таким образом, DVC имеет смысл применять, когда задача сформулирована и уже известно, какие данные будут использоваться. Если хотите поближе познакомиться с инструментом, хорошим местом для старта будет официальная документация. Там вы найдёте инструкции по установке и примеры команд.
FDS
FDS — это надстройка над Git и DVC, цель которой — сократить влияние человеческого фактора и автоматизировать рутинные задачи при работе с данными в машинном обучении. Инструмент представила компания DagsHub, которая занимается разработкой программного обеспечения. Изначально проект предназначался для внутреннего использования, но позже был передан в open source.
FDS объединяет несколько распространённых команд в одну. Например, fds status представляет собой комбинацию операций dvc status и git status. Каждая команда по-отдельности показывает, какие файлы или данные изменились, были добавлены или удалены, и какие модификации требуют синхронизации в репозиториях DVC и Git соответственно. По словам разработчиков, они по привычке часто забывали выполнить команду dvc status перед тем, как запушить изменения. Чтобы избежать подобных ситуаций, проверку статуса объединили в fds status.
Другой пример — fds commit — объединяющий dvc commit и git commit. Команда отправляет изменения в DVC и сразу добавляет файлы .dvc с обновленными хешами в Git. Затем, автоматически коммитит изменения. Больше операций можно найти в официальном репозитории. В частности, инструмент также позволяет автоматизировать запуск цепочки команд git status dvc status dvc commit -f git add . git commit, чтобы не вводить их вручную каждый раз при сохранении изменений.
Kart
Еще одна система версионирования данных, но заточенная под работу с геопространственной информацией. Среди поддерживаемых источников: Microsoft SQL Server, PostgreSQL/PostGIS, MySQL и GeoPackage.
Kart предлагает решение для работы с большими файлами в виде расширения Git Large File Storage (Git LFS). Так, объектное хранилище отвечает за хранение имен, путей, иерархии папок и версионирование, а LFS хранит содержимое файлов. Поскольку Kart использует Git, Kart можно хостить на собственном Git-сервере.
В прошлом году инструмент привлек внимание резидентов Hacker News. И они отметили его высокую производительность. В комментарии также пришел один из разработчиков инструмента и рассказал, что его команда использует Kart для обработки сета на два миллиона признаков. Хороший способ начать знакомство с Kart — это изучить официальную документацию.
Dolt
Dolt представляет сочетание реляционной БД и системы контроля версий данных. С ней можно работать как с Git-репозиторием. Dolt основан на SQL и поддерживает работу с таблицами, запросами и структурами данных, подобными MySQL. Пользователи могут клонировать базы, вносить изменения, фиксировать коммиты, создавать ветки. Несколько пользователей могут работать над одной БД, предлагая свои изменения через pull-реквесты. Модификации данных логируются, что позволяет восстановить версии, анализировать, кто и когда внес правки, и исправлять ошибки.
Разработчики приводят следующий пример добавления коммита в официальном репозитории. Ниже — вывод консоли после выполнения соответствующей операции.
Инструмент также позволяет оперативно откатить нежелательные изменения. Например, если таблица была по ошибке удалена (например, с помощью drop table employees_teams), её так же просто вернуть «на место», используя dolt_reset.
Если говорить о причинах появления Dolt, то, по словам авторов, инструмент был построен с целью оптимизировать процесс совместной работы с данными. Некоторые компании и разработчики уже используют Dolt на практике, например, в медицинских исследованиях, а также для управления конфигурациями видеоигр.
Дополнительное чтение
Далее — предложил бы взглянуть на нашу тематическую подборку литературы и руководств для желающих глубже погрузиться в тему версионирования данных:
Getting Started With DVC. Компактный туториал для начинающих от разработчиков FDS. Автор статьи начинает с разбора ключевых концепций, а затем переходит к установке, настройке и работе с инструментарием.
The Turing Way. Это — «настольный» справочник для дата-сайентистов, аналитиков и простых разработчиков, которые работают над масштабными проектами в команде. Книга выложена в открытый доступ и поддерживается сообществом. Поскольку это справочник, он не предназначен для чтения от корки до корки — можно просто выбирать интересующие главы: они посвящены управлению проектами, обработке данных и коммуникации внутри команды. Есть отдельная глава про версионирование данных с разбором распространённых инструментов. Фактура снабжена полезными чек-листами, схемами и иллюстрациями.
Standardised Versioning of Datasets: a FAIR–compliant Proposal. Более углубленная статья, посвященная разработке фреймворка для стандартизации процессов версионирования данных. Его цель — повысить переиспользуемость данных и удобство работы с ними.