Отменить команду dvc remove -p

Я только что по ошибке удалил файл отслеживания DVC с помощью команды dvc remove training_data.dvc -p, что привело к полной потере всего моего набора обучающих данных. Я знаю, что в Git мы можем легко восстановить удаленную ветку на основе ее хэша. Кто-нибудь знает, как вернуть все мои потерянные данные в DVC?


dvc
person nguyendhn    schedule 18.06.2020    source источник


Ответы (1)


Вы должны быть в безопасности (по крайней мере, данные не пропали), скорее всего. Из dvc remove документов:

Обратите внимание, что он не удаляет файлы из кэша DVC или удаленного хранилища (см. dvc gc). Однако не забудьте запустить dvc push, чтобы сохранить файлы, которые вы действительно хотите использовать или поделиться ими в будущем.

Итак, если вы создали training_data.dvc как с dvc add и/или dvc run и dvc remove -p ни о чем вас не спрашивали/предупреждали, значит данные кешируются аналогично Git в .dvc/cache.

Есть способы получить его, но мне нужно знать немного больше деталей - как именно вы добавили свой набор данных? Вы сделали коммит training_data.dvc или он полностью исчез? Это были единственные данные, которые вы добавили до сих пор? (рад помочь вам в комментариях).

Восстановление каталога

Прежде всего, здесь — это документ, кратко описывающий, как DVC хранит каталоги в кэше.

Что мы можем сделать, так это найти все файлы .dir в каталоге .dvc/cache:

find .dvc/cache -type f -name "*.dir"

выводит что-то вроде:

.dvc/cache/20/b786b6e6f80e2b3fcf17827ad18597.dir
.dvc/cache/00/db872eebe1c914dd13617616bb8586.dir
.dvc/cache/2d/1764cb0fc973f68f31f5ff90ee0883.dir

(если локальный кеш потерян и мы восстанавливаем данные из удаленного хранилища, применяется та же логика, команды (например, для поиска файлов на S3 с расширением .dir) выглядят иначе)

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

  • Проверьте дату изменения (если вы помните, когда эти данные были добавлены).
  • Проверьте содержимое этих файлов — если вы помните конкретное имя файла, которое присутствовало только в том каталоге, который вы ищете, — просто загрузите его.
  • Попробуйте восстановить их один за другим и проверьте содержимое каталога.

Хорошо, теперь давайте представим, что мы решили восстановить .dvc/cache/20/b786b6e6f80e2b3fcf17827ad18597.dir (например, потому что его содержание выглядит так:

[
{"md5": "6f597d341ceb7d8fbbe88859a892ef81", "relpath": "test.tsv"}, {"md5": "32b715ef0d71ff4c9e61f55b09c15e75", "relpath": "train.tsv"}
]

и мы хотим получить каталог с train.tsv).

Единственное, что нам нужно сделать, это создать файл .dvc, который ссылается на этот каталог:

outs:
- md5: 20b786b6e6f80e2b3fcf17827ad18597.dir
  path: my-directory

(обратите внимание, что путь /20/b786b6e6f80e2b3fcf17827ad18597.dir стал хеш-значением: 20b786b6e6f80e2b3fcf17827ad18597.dir)

И запустите dvc pull на этом файле.

Это должно быть так.

person Shcheklein    schedule 18.06.2020
comment
Спасибо за ваш комментарий. На самом деле, я только недавно услышал и начал пробовать DVC. Я считаю, что есть много вещей, которых я сейчас не осознаю или не осознаю. На данный момент я еще не создал ни одного конвейера, поэтому не использую dvc run. Я использовал следующий процесс: данные для обучения (вручную с использованием скрипта Python) -> обучение -> dvc add обучающие данные и модели h5 -> dvc push в удаленное хранилище. Если что-то изменится в процессе передачи данных (например, уменьшится размер изображений), мне придется повторить эти шаги снова! Я думаю, что это неэффективный подход. Я забыл о dvc commit! - person nguyendhn; 18.06.2020
comment
Насколько я помню, я добавил папку, содержащую изображения (включая метки) с именем training_data (dvc add), затем dvc push. После этого я заменяю эту папку другой (совершенно другие подпапки и изображения, но все та же родительская папка и перезапускаю dvc add). Столкнулся с ошибкой (точно не помню) потом воспользовался dvc remove -p и подумал что просто удалил файл отслеживания dvc... - person nguyendhn; 18.06.2020
comment
@nguyendhn обновил ответ, теперь он включает краткую инструкцию по восстановлению каталогов. Пожалуйста, попробуйте и дайте мне знать, если возникнут какие-либо проблемы. - person Shcheklein; 18.06.2020
comment
Большое спасибо за четкое объяснение. Я понимаю процесс, который вы предложили. Хотя я больше не могу найти .dir, который мне нужен (может быть, я сделал еще одно глупое действие, которое я не могу вспомнить), я воспроизвел сценарий с несколькими примерами, затем применил ваш подход, и это сработало! Я ценю вашу поддержку. :) Я очень рад, если у нас появится другой эффективный способ решить эту проблему в будущем. А пока я продолжу изучать другие функции DVC. ;) - person nguyendhn; 19.06.2020