В этой истории показан метод, который я использую для моделей управления версиями и данных моих проектов DL.

Вступление

Git хорошо известен как очень полезный инструмент управления версиями, который широко используется в проектах программирования. В проектах ML / DL он всегда связан с тоннами данных, однако он слишком велик (всегда учитывается в масштабе МБ, ГБ, ТБ), чтобы использовать git. DVC предлагает заменяемый метод для этой задачи. Вы можете подумать о концепции указателя в программировании, мы не храним здесь реальные данные напрямую, вместо этого мы используем указатель, который может указывать на какое-то удаленное хранилище (например, S3).

Полезные команды

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

# To get started
dvc init
# Setting remote
dvc remote add -d <dvc-name> <remote-dvc-path>
# Add a data
dvc add <data>
# Push to remote
dvc push
# When we just pull all .dvc files, to draw all files down
dvc pull

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

# Add data we want to store remotely
dvc add data
# Confirm it and push it to remote registry just like git push
dvc push
git add data.dvc
git commit
git push

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

git pull
<!Attention: remove all local data files first>
# Pull down all data we need according to .dvc files from remote
dvc pull
<run models, and generate a big model file>
dvc add model.pkl
dvc push
git add model.pkl.dvc
git commit 
git push

Интегрирован с Git

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

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

Иногда код может состоять из множества моделей для различного использования. Скажем, пакет трансформаторы, пакет Python, предоставляющий модели на основе BERT. Его можно использовать для NER, классификатора и т. Д. Чтобы провести эксперимент, мы могли бы разветвляться для каждого использования. В другом случае для компаний, ведущих бизнес с большим количеством клиентов, каждое отделение может также представлять отдельного клиента и лучше управлять моделями и данными.

Трубопровод

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

Фактически, dvc позволяет нам определить конвейер здесь с помощью команды dvc run. Например, мы определяем очень простой конвейер, который сначала выполняет предварительную обработку данных, а затем моделирует обучение. Мы могли бы использовать pipeline.sh файл, чтобы все это определить.

"pipeline.sh"
# Preprocess
dvc run -f preprocess.dvc \
        -d src/preprocess.py -d data/train.json \
        -o models/dataset.pkl \
        "python3 src/preprocess.py --data data/train.json --dataset     models/dataset.pkl --char"
# Train 
dvc run -f train.dvc \
        -d src/train.py -d models/dataset.pkl -d data/config.json \
        -o models/model.pkl \
        "python3 src/train.py --dataset models/dataset.pkl --config data/config.json --model models/model.pkl --char"

Каждый dvc run фактически представляет стадию в конвейере и после выполнения будет генерировать .dvc файл. В нашем примере мы сгенерируем соответственно preprocess.dvc и train.dvc. Наконец, мы можем использовать dvc pipeline show --ascii train.dvc для его визуализации.

С помощью параметров --outs мы можем увидеть все данные, которыми управляет .dvc, и то, как они работают в конвейере.

Заключение

DVC можно использовать по-разному. Здесь я поделюсь своими личными случаями использования. В заключение, dvc предоставляет нам лучший метод управления данными и упрощает воспроизведение моделей.

Ссылка

  1. DVC