Как DV C хранит различия на уровне каталогов в кеше DV C? - PullRequest
3 голосов
/ 04 марта 2020

Может кто-нибудь объяснить, как DV C сохраняет различия на уровне каталогов в кеше DV C.

Я понимаю, что DV C -файлы (.dv c) являются метафайлами для отслеживания данных, моделей и воспроизведения этапов конвейера. Тем не менее, мне не ясно, как процесс создания веток, их фиксации и переключения обратно в основной файл точно сохраняется в различиях.

1 Ответ

2 голосов
/ 04 марта 2020

Краткая версия:

  1. .dvc Файл содержит информацию (md5) о файле JSON внутри кэша, который описывает текущее состояние каталога.

  2. Когда каталог обновляется, в файле .dvc появляется новый md5, и создается новый файл JSON с обновленным состоянием каталога.

  3. В git вы сохраняете файл .dvc, чтобы DV C знал (основываясь на md5), где искать информацию о каталоге.

Более длинная версия:

Позвольте мне попробовать нарушить определенные этапы обработки каталогов с помощью DV C.

  • Предположим, у нас есть каталог данных, который вы хотите добавить в элемент управления DV C:
data
├── 1
└── 2
  • Вы используете dvc add data, чтобы DV C отслеживал ваш каталог. В результате DV C создает data.dvc файл. Как вы заметили, этот файл содержит метаданные, необходимые для подключения вашего хранилища git к вашему хранилищу данных. Внутри этого файла (помимо прочего) вы можете увидеть:
outs:
- md5: f437247ec66d73ba66b0ade0246fcb49.dir
 path: data
  • Часть md5 используется для хранения информации о каталоге в кеше DV C (.dvc/cache) :
(dvc3.7) ➜  repo$ tree .dvc/cache
.dvc/cache
├── 26
│   └── ab0db90d72e28ad0ba1e22ee510510
├── b0
│   └── 26324c6904b2a9cb4b88d6d61c81d1
└── f4
    └── 37247ec66d73ba66b0ade0246fcb49.dir

  • Если вы откроете файл с суффиксом .dir, вы увидите, что он содержит описание текущего состояния data:
(dvc3.7) ➜  repo$ cat .dvc/cache/f4/37247ec66d73ba66b0ade0246fcb49.dir 
[{"md5": "b026324c6904b2a9cb4b88d6d61c81d1", "relpath": "1"},
 {"md5": "26ab0db90d72e28ad0ba1e22ee510510", "relpath": "2"}]

Как видите, определенные файлы (1 и 2) описываются записями в этом файле

  • Когда вы меняете каталог:
(dvc3.7) ➜  repo$ echo 3 >> data/3 
(dvc3.7) ➜  repo$ dvc commit data.dvc

Содержимое data.dvc будет обновлено:

outs:
- md5: 12f4b7d54a32e58818e27fba28376fba.dir
  path: data

И внутри кеша появится новый файл:

├── 12
│   └── f4b7d54a32e58818e27fba28376fba.dir
...

(dvc3.7) ➜  repo$ cat .dvc/cache/12/f4b7d54a32e58818e27fba28376fba.dir 
[{"md5": "b026324c6904b2a9cb4b88d6d61c81d1", "relpath": "1"},
 {"md5": "26ab0db90d72e28ad0ba1e22ee510510", "relpath": "2"},
 {"md5": "6d7fce9fee471194aa8b5b6e47267f03", "relpath": "3"}]

От перспективы git единственное изменение находится внутри data.dvc. (Предполагая, что вы сделали git commit после добавления data с 1 и 2 внутри):

diff --git a/data.dvc b/data.dvc
index 098aec5..88d1a90 100644
--- a/data.dvc
+++ b/data.dvc
@@ -1,6 +1,6 @@
-md5: a427c5bf8680fbf8d1951806b28b82fe
+md5: 1b674d61c195eea7a6b14f176c020b9c
 outs:
-- md5: f437247ec66d73ba66b0ade0246fcb49.dir
+- md5: 12f4b7d54a32e58818e27fba28376fba.dir
   path: data
   cache: true
   metric: false

ПРИМЕЧАНИЕ. Первый md5 соответствует md5 этого файла, поэтому пришлось изменить с помощью dir md5 изменить

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...