【问题标题】:Revert a dvc remove -p command恢复 dvc remove -p 命令
【发布时间】:2020-06-19 00:15:29
【问题描述】:

我刚刚使用命令dvc remove training_data.dvc -p 错误地删除了一个 DVC 跟踪文件,这导致我的所有训练数据集完全消失。我知道在 Git 中,我们可以轻松地根据其哈希恢复已删除的分支。有谁知道如何恢复我在 DVC 中丢失的所有数据?

【问题讨论】:

    标签: dvc


    【解决方案1】:

    您应该很安全(至少数据没有消失)。来自dvc removedocs

    请注意,它不会从 DVC 缓存或远程存储中删除文件(请参阅 dvc gc)。但是,请记住运行 dvc push 以保存您将来真正想要使用或共享的文件。

    因此,如果您创建了 training_data.dvcdvc add 和/或 dvc rundvc 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,其内容是目录的一个版本(文件名、哈希值等)。它具有恢复它所需的所有信息。接下来我们需要做的是了解我们需要哪一个。没有一个单一的规则,我建议检查(并根据您的用例选择):

    • 检查修改日期(如果您记得添加此数据的时间)。
    • 检查这些文件的内容 - 如果您记得某个特定文件名仅存在于您要查找的目录中 - 只需 grep 即可。
    • 尝试一一还原,检查目录内容。

    好的,现在假设我们决定要恢复.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。我相信有很多事情我现在没有或没有意识到。目前,我还没有创建任何管道,所以我不使用dvc run。我使用的过程是:进行训练数据(手动使用Python脚本)->训练->dvc add训练数据和h5模型->dvc push到远程存储。如果在处理数据的过程中发生了一些变化(即缩小图像的大小),我必须再次重做这些步骤!我认为这是一种低效的方法。我忘了dvc commit
    • 我记得,我添加了一个文件夹,其中包含名为 training_data (dvc add) 的图像(包含标签),然后是 dvc push。之后,我用另一个文件夹替换该文件夹(完全不同的子文件夹和图像,但仍然是相同的父文件夹并重新运行dvc add)。我遇到了一个错误(我记不太清了)然后我使用了dvc remove -p 并认为它只是删除了 dvc 跟踪文件...
    • @nguyendhn 更新了答案,它现在包括如何恢复目录的简要说明。请试一试,如果遇到任何问题,请告诉我。
    • 非常感谢您的清晰解释。我了解您建议的流程。虽然我找不到我需要的.dir(也许我做了另一个我不记得的愚蠢动作),但我用很少的样本重新制作了场景,然后应用了你的方法,它奏效了!我感谢您的支持。 :) 如果我们将来有另一种有效的方法来处理这个问题,我真的很高兴。目前,我将继续探索 DVC 的其他功能。 ;)
    猜你喜欢
    • 1970-01-01
    • 2017-04-13
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多