Контекст

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

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

Мы находим пространство инструментов ML довольно шумным и что отрасль не сошлась на стандартном стеке инструментов ML. Поэтому мы делимся некоторыми основными моментами нашего опыта работы с DVC, чтобы помочь вам оценить, подходит ли он для ваших условий.

Что прошло хорошо?

Git для данных

Возможность проследить происхождение кода и данных — происхождение модели — необходима для воспроизведения и объяснения артефактов машинного обучения. До DVC у нас не было автоматизированного контроля версий данных.

Управление версиями данных в DVC интуитивно понятно — благодаря Git-подобной модели и пользовательскому опыту. Мы объединили его с pre-commit, инструментом для управления хуками Git, чтобы рабочий процесс DVC происходил непрозрачно синхронно с типичным рабочим процессом Git. DVC кэширует наши наборы данных, модели и все, что между ними, в корзине GCS.

DVC делает это настолько хорошо, что мы полагаемся на него даже в нетипичных случаях использования. Примером может служить экспертная оценка ноутбуков Jupyter. Из-за опасений утечки конфиденциальных данных мы не отправляем их на GitHub как есть. Рецензенты рассматривают записную книжку как скрипты Python без выходных ячеек, из которых мы можем непреднамеренно утечь конфиденциальные данные (ура, Jupytext!), и мы полностью версионируем записную книжку с помощью DVC.

Интуитивно понятный и традиционный выбор дизайна

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

Что касается облегченной конвейерной обработки DVC: чтобы извлечь выгоду из поддержки и кэширования направленного ациклического графа (DAG) DVC, мы разбили наши процессы машинного обучения на этапы с явными входными данными, выходными данными и зависимостями. Исходя из мира, где наши процессы машинного обучения выполнялись как долго выполняющиеся скрипты Python, их ремоделирование в виде конвейеров DVC, безусловно, является шагом в правильном направлении.

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

Первоклассная поддержка параметров и метрик

Нам нравится, как следование некоторым соглашениям, установленным DVC, дает так много преимуществ, например. определение ключей params и metrics в dvc.yaml.

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

Предоставление DVC информации о модели metrics автоматизирует отслеживание производительности модели наряду с управлением версиями кода и данных. Теперь мы можем dvc metrics diff так же легко, как и git diff.

Что не получилось?

Трубопровод-поддержка оставляет желать лучшего

Нам не потребовалось много времени, чтобы почувствовать это после того, как мы начали использовать облегченные конвейеры DVC. Как отметило сообщество пользователей, некоторые функции явно отсутствуют, а именно:

  • Поддержка параллельных прогонов: параллельное выполнение этапов или целых пайплайнов (выпуск) или каждого экземпляра foreach параллельно (выпуск).
  • Поддержка инкрементной обработки: в частности, проблема заключается в том, что DVC обрабатывает выходные данные сцены атомарно. Если в ходе выполнения этапа извлекается огромный набор данных, следующий запуск начнется с его полного удаления, и добавление к нему не поддерживается (проблема).
  • Разрешение нескольких сред выполнения, таких как разработка и тестирование: по сути, на репозиторий приходится один dvc.lock, который не знает о среде выполнения. Предположим, что во время разработки модели мы хотели бы использовать полный обучающий набор данных, но только его подмножество в CI для сквозного тестирования конвейера. Хотя можно запускать эти отдельные конфигурации, внося локальные изменения, их невозможно зарегистрировать в системе управления версиями, поскольку dvc.lock фиксирует только один вариант использования.
  • Определение динамического конвейера: конвейеры DVC определены в YAML, и он предоставляет надстройки, чтобы сделать его немного более мощным, например. шаблон и foreach. Растянув шаблоны и foreach до предела, мы решили отказаться от определения конвейеров ML как YAML просто потому, что нам нужно больше выразительности и краткости, чтобы эти определения конвейеров не превратились в беспорядок.

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

Наша позиция

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

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

Если вы чувствуете, что вам нравится GoCardless и хотите узнать больше о жизни в GoCardless, вы можете найти наши публикации в Twitter, Instagram и LinkedIn.

Хотите ли вы присоединиться к GoCardless? См. нашу доску вакансий здесь.