В этой истории показан метод, который я использую для моделей управления версиями и данных моих проектов 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 предоставляет нам лучший метод управления данными и упрощает воспроизведение моделей.