【发布时间】:2020-06-19 00:15:29
【问题描述】:
我刚刚使用命令dvc remove training_data.dvc -p 错误地删除了一个 DVC 跟踪文件,这导致我的所有训练数据集完全消失。我知道在 Git 中,我们可以轻松地根据其哈希恢复已删除的分支。有谁知道如何恢复我在 DVC 中丢失的所有数据?
【问题讨论】:
标签: dvc
我刚刚使用命令dvc remove training_data.dvc -p 错误地删除了一个 DVC 跟踪文件,这导致我的所有训练数据集完全消失。我知道在 Git 中,我们可以轻松地根据其哈希恢复已删除的分支。有谁知道如何恢复我在 DVC 中丢失的所有数据?
【问题讨论】:
标签: dvc
您应该很安全(至少数据没有消失)。来自dvc removedocs:
请注意,它不会从 DVC 缓存或远程存储中删除文件(请参阅 dvc gc)。但是,请记住运行
dvc push以保存您将来真正想要使用或共享的文件。
因此,如果您创建了 training_data.dvc 与 dvc add 和/或 dvc run 和 dvc remove -p 没有询问/警告您任何事情,则意味着数据缓存类似于 .dvc/cache 中的 Git。
有很多方法可以检索它,但我需要了解更多细节 - 您究竟是如何添加数据集的?你提交了training_data.dvc 还是完全消失了?到目前为止,它是您添加的唯一数据吗? (很高兴在 cmets 中为您提供帮助)。
首先here是简要描述DVC如何在缓存中存储目录的文档。
我们可以做的是在.dvc/cache中找到所有.dir文件:
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。
应该是这样的。
【讨论】:
dvc run。我使用的过程是:进行训练数据(手动使用Python脚本)->训练->dvc add训练数据和h5模型->dvc push到远程存储。如果在处理数据的过程中发生了一些变化(即缩小图像的大小),我必须再次重做这些步骤!我认为这是一种低效的方法。我忘了dvc commit!
dvc add) 的图像(包含标签),然后是 dvc push。之后,我用另一个文件夹替换该文件夹(完全不同的子文件夹和图像,但仍然是相同的父文件夹并重新运行dvc add)。我遇到了一个错误(我记不太清了)然后我使用了dvc remove -p 并认为它只是删除了 dvc 跟踪文件...
.dir(也许我做了另一个我不记得的愚蠢动作),但我用很少的样本重新制作了场景,然后应用了你的方法,它奏效了!我感谢您的支持。 :) 如果我们将来有另一种有效的方法来处理这个问题,我真的很高兴。目前,我将继续探索 DVC 的其他功能。 ;)