我是 DVC 的新手,到目前为止,我喜欢我所看到的。但可能我的问题很容易回答。
我的问题:我们如何正确跟踪派生数据项目中原始hugedatarepo(假设这也可以改变)中文件的依赖关系,但是在签出派生数据时通常不导入大文件?我不认为我可以dvc import
用来实现这一点。
详细信息:我们有一个包含大量非常大的数据文件(扫描)的存储库,并使用这些数据来设计和训练各种算法。通常我们只想使用特定文件,甚至只是文件中的小块用于训练、注释等。也就是说,我们为特定任务获取数据,我们希望将其放入新的存储库中。
目前我的想法是对dvc get
相关数据,将其放在一个未跟踪的临时文件夹中,然后再次使用 dvc 管理派生数据。但仍然要依赖原始数据。
hugeFileRepo
+metaData.csv
+dataFolder
+-- hugeFile_1
...
+-- hugeFile_n
在派生数据存储库中我做
dvc import hugeFileRepo.git metaData.csv
dvc run -f derivedData.dvc \
-d metaData.csv \
-d deriveData.py \
-o derivedDataFolder \
python deriveData.py
我的 derivedData.py 做了一些事情(伪代码)
metaData = read(metaData.csv)
#Hack because I don't know how to it right:
gitRevision = getGitRevision(metaData.csv.dvc)
...
for metaDataForFile, file in metaData:
if(iWantFile(metaDataForFile) ):
#download specific file
!dvc get --rev {gitRevision} -o tempFolder/{file} hugeFileRepo.git {file}
#do processing of huge file and store result in derivedDataFolder
processAndWrite(tempFolder/file)
所以我使用元数据文件作为实际数据的代理。hugeFileRepo 数据不会频繁更改,metaData 文件将保持最新。而且我完全可以依赖一般数据而不是我使用的实际文件。所以我相信这个解决方案对我有用,但我相信有更好的方法。