Контроль версий для проектов машинного обучения с использованием 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
Вышеупомянутое заявление сделало две вещи:
- Укажите, какую папку мы хотим отслеживать, используя
dvc
(Создание метафайлаartifacts.dvc
) - Добавьте ту же папку в
.gitignore
(поскольку мы больше не хотим отслеживать папку с помощью git)
После выполнения вышеуказанной команды dvc
говорит нам добавить два вышеуказанных файла в git
Теперь мы добавляем эти файлы в git, используя следующие команды:
git add . git commit -m 'Added dvc files'
Примечание. Здесь важно отметить следующее: мета-файлы папки артефактов отслеживаются git
, а фактические файлы артефактов отслеживаются dvc
. В этом случае artifacts.dvc
отслеживается git, а содержимое папки artifacts
отслеживается dvc.
Ничего страшного, если сейчас это не очень понятно, мы внимательно рассмотрим это позже.
На этом этапе мы добавили
dvc
в наш проект вместе с git, а также добавили папку, которую мы хотим отслеживать с помощью dvc.
Теперь давайте посмотрим на типичный рабочий процесс машинного обучения (упрощенная версия):
- У нас есть набор данных
- Мы выполняем некоторую предварительную обработку указанного выше набора данных с помощью скрипта Python.
- Обучаем модель с помощью скрипта на Python
- У нас есть файл модели, который является результатом шага №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 шага:
- Мы отслеживаем изменения в
artifacts
с помощьюdvc
dvc add artifacts/
(Это отслеживает последнюю версию файлов внутри папки артефактов и изменяет метафайл artifacts.dvc
)
2. Мы отслеживаем изменения в кодовых скриптах и обновленный метафайл (artifacts.dvc) с помощью git
git add . git commit -m 'Version 1: scripts and dvc files'
3. Отметьте это состояние проекта как experiment01
using git
(это поможет нам вернуться к более поздней версии).
git tag -a experiment01 -m 'experiment01'
Мы успешно сохранили версию 1 наших скриптов и артефакты, используя git
и dvc
соответственно.
Теперь представьте, что мы проводим новый эксперимент, в котором у нас есть другой набор данных и измененные сценарии. Сейчас 4 файла выглядят так:
Теперь мы повторяем те же 3 шага для отслеживания версии 2.
- Мы отслеживаем изменения в
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. Давайте посмотрим, как мы можем это сделать с помощью пары простых команд:
- Оформляем заказ по тегу
experiment01
git checkout experiment01
После выполнения следующей команды состояние проекта выглядит так:
Вы что-нибудь заметили?
Вы можете видеть, что скрипты были изменены на версию 1. Отлично!
Но артефакты все еще находятся в версии 2. Верно! Это потому, что на данный момент мы выполнили проверку с использованием git
, который откатил версию сценариев кода и метафайл artifacts.dvc
. Теперь, когда метафайл уже откатился до нужной нам версии, все, что нам нужно сделать, чтобы оформить заказ, используя dvc
dvc checkout
Это изменит файлы в папке artifacts
в соответствии с текущей версией (v1) файла artifacts.dvc
.
Давайте еще раз посмотрим на файлы:
Ура! Мы успешно откатились с версии 2 до версии 1 - как для скриптов, так и для гигантских файлов данных и моделей.
Для простоты мы рассмотрели только работу и переключение между двумя версиями. Вышеупомянутый процесс работает точно так же даже с несколькими сотнями экспериментов, давая нам возможность быстро выполнять итерацию, не ведя ручные журналы при повторении и не беспокоясь о воспроизведении более раннего состояния экспериментов, когда это необходимо.
Заключение
DVC - отличный инструмент для создания версий больших файлов, таких как наборы данных и файлы обученных моделей, точно так же, как мы контролируем версии исходного кода с помощью git. Это помогает нам воспроизводить артефакты различных экспериментов машинного обучения, экономя время на обработку данных и построение моделей.
Прочие чтения
- Основы Python - классы и объекты
- Основы Python - структуры данных
- Основы Python - Обработка исключений
- Циклическая скорость обучения - полное руководство по настройке скорости обучения для нейронных сетей
- Руководство идиота по матрице точности, припоминания и заблуждения
- Распознавание изображений против обнаружения объектов - разница
📝 Прочтите этот рассказ позже в Журнале.
👩💻 Просыпайтесь каждое воскресное утро и слушайте самые интересные истории недели в области технологий, которые ждут вас в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательно в технологиях .