Контроль версий для проектов машинного обучения с использованием DVC

Я бог Git, зачем мне еще одна система контроля версий для проектов машинного обучения?

Несомненно, GIT - это Святой Грааль систем управления версиями! Git отлично подходит для управления версиями исходного кода. Но в отличие от разработки программного обеспечения, в проектах Data Science есть дополнительные большие файлы, такие как наборы данных, файлы обученных моделей, кодировки меток и т. Д., Размер которых может легко достигать нескольких ГБ, и поэтому их нельзя отследить с помощью GIT.

Подскажите решение?

Удивительная группа людей на https://dvc.org/ создала этот инструмент под названием DVC. DVC помогает нам редактировать большие файлы данных, аналогично тому, как мы контролируем версии файлов исходного кода с помощью git. Кроме того, DVC безупречно работает поверх GIT, что делает его еще лучше!

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

Преимущества DVC

  • Легко отслеживает большие файлы, что упрощает повторное использование и воспроизводимость
  • Совместимость с Git - работает поверх git
  • Независимость от хранилища - поддерживает GCS / S3 / Azure и многое другое для хранения данных

Давайте начнем!

Установка

Установка довольно проста с помощью следующей команды:

pip install dvc

Чтобы проверить установку, введите dvc в терминале, и если вы увидите кучу параметров команды DVC, вы на правильном пути.

Для демонстрации я буду использовать репозиторий dvc-sample со следующей структурой проекта:

dvc-sample
├── artifacts
│ ├── dataset.csv
│ └── model.model
└── src
 ├── preprocessor.py
 └── trainer.py

Репозиторий имеет простую структуру; есть папка src, в которой будут скрипты python (версия контролируется git), и папка artifacts, в которой будут находиться все наборы данных, файлы моделей и остальные артефакты (которые больше и должны контролироваться dvc).

Инициализация dvc

Первое, что нам нужно сделать, это инициализировать dvc в корне проекта. Делаем это с помощью следующей команды:

dvc init

(Это очень похоже на git init, нам нужно сделать это только один раз при настройке проекта)

На этом этапе мы добавили в проект поддержку dvc. Но нам все еще нужно указать папки, в которых мы хотим управлять версиями, используя dvc. В этом примере это папка versioningartifacts. Мы делаем это с помощью следующей команды:

dvc add artifacts

Вышеупомянутое заявление сделало две вещи:

  1. Укажите, какую папку мы хотим отслеживать, используя dvc
    (Создание метафайла artifacts.dvc)
  2. Добавьте ту же папку в .gitignore
    (поскольку мы больше не хотим отслеживать папку с помощью git)

После выполнения вышеуказанной команды dvc говорит нам добавить два вышеуказанных файла в git

Теперь мы добавляем эти файлы в git, используя следующие команды:

git add .
git commit -m 'Added dvc files'

Примечание. Здесь важно отметить следующее: мета-файлы папки артефактов отслеживаются git, а фактические файлы артефактов отслеживаются dvc. В этом случае artifacts.dvc отслеживается git, а содержимое папки artifacts отслеживается dvc.
Ничего страшного, если сейчас это не очень понятно, мы внимательно рассмотрим это позже.

На этом этапе мы добавили dvc в наш проект вместе с git, а также добавили папку, которую мы хотим отслеживать с помощью dvc.

Теперь давайте посмотрим на типичный рабочий процесс машинного обучения (упрощенная версия):

  1. У нас есть набор данных
  2. Мы выполняем некоторую предварительную обработку указанного выше набора данных с помощью скрипта Python.
  3. Обучаем модель с помощью скрипта на Python
  4. У нас есть файл модели, который является результатом шага №3.

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

Для вышеупомянутого сценария мы отслеживаем №2 и №3, используя git, поскольку это файлы кода меньшего размера. И трек №1 и №4 с использованием dvc, так как они могут быть довольно большими по размеру (до нескольких ГБ).

Еще раз взгляните на структуру каталогов для большей ясности:

dvc-sample
├── artifacts
│ ├── dataset.csv     #1
│ └── model.model     #4   
└── src
 ├── preprocessor.py #2
 └── trainer.py       #3

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

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

Отслеживание больших файлов

Теперь нам нужно зафиксировать наш код и артефакты (файлы набора данных и модели), мы делаем это за 3 шага:

  1. Мы отслеживаем изменения вartifacts с помощью dvc
dvc add artifacts/

(Это отслеживает последнюю версию файлов внутри папки артефактов и изменяет метафайл artifacts.dvc)

2. Мы отслеживаем изменения в кодовых скриптах и ​​обновленный метафайл (artifacts.dvc) с помощью git

git add .
git commit -m 'Version 1: scripts and dvc files'

3. Отметьте это состояние проекта как experiment01using git
(это поможет нам вернуться к более поздней версии).

git tag -a experiment01 -m 'experiment01'

Мы успешно сохранили версию 1 наших скриптов и артефакты, используя git и dvc соответственно.

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

Теперь мы повторяем те же 3 шага для отслеживания версии 2.

  1. Мы отслеживаем изменения вartifacts с помощью dvc
dvc add artifacts/

2. Отслеживаем изменения в кодовых скриптах и ​​обновленный метафайл (artifacts.dvc) с помощью git

git add .
git commit -m 'Version 2: scripts and dvc files'

3. Отметьте это состояние проекта как experiment02 using git.

git tag -a experiment02 -m 'experiment02'

На этом этапе мы также отслеживали скрипты и артефакты Версии 2.

Смена версий - воспроизведение кода и артефактов

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

Как видно из содержимого файла, сейчас мы работаем с версией 2.
(Мы смотрим на содержимое для лучшей интуиции, в реальной жизни мы можем посмотреть сообщения или теги git commit)

Теперь предположим, что мы поняли, что версия 1 лучше, и мы хотим откатиться (сценарии, а также набор данных и модель) до версии 1. Давайте посмотрим, как мы можем это сделать с помощью пары простых команд:

  1. Оформляем заказ по тегу experiment01
git checkout experiment01

После выполнения следующей команды состояние проекта выглядит так:

Вы что-нибудь заметили?

Вы можете видеть, что скрипты были изменены на версию 1. Отлично!
Но артефакты все еще находятся в версии 2. Верно! Это потому, что на данный момент мы выполнили проверку с использованием git, который откатил версию сценариев кода и метафайл artifacts.dvc. Теперь, когда метафайл уже откатился до нужной нам версии, все, что нам нужно сделать, чтобы оформить заказ, используя dvc

dvc checkout

Это изменит файлы в папке artifacts в соответствии с текущей версией (v1) файла artifacts.dvc.

Давайте еще раз посмотрим на файлы:

Ура! Мы успешно откатились с версии 2 до версии 1 - как для скриптов, так и для гигантских файлов данных и моделей.

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

Заключение

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

Прочие чтения

📝 Прочтите этот рассказ позже в Журнале.

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