从DVC中删除缓存的数据



在使用dvc pull提取单个文件或文件夹后,我希望能够从DVC缓存中删除这些文件或文件夹,这样它们就不会占用本地磁盘中的空间。

让我把事情说得更具体一些,并总结一下我迄今为止找到的解决方案。想象一下,你已经下载了一个数据文件夹使用类似的东西:

dvc pull <my_data_folder.dvc>

这将把下载的数据放入.dvc/cache中,并在my_data_folder中创建一组软链接(如果您已将DVC配置为使用软链接(

ls -l my_data_folder

你会看到这样的东西:

my_data_file_1.pk --> .dvc/cache/4f/7bc7702897bec7e0fae679e968d792
my_data_file_2.pk --> .dvc/cache/4f/7bc7702897bec7e0fae679e968d792
...

假设您暂时不需要这些数据,并且需要从本地磁盘释放其空间。我知道有两种手动方法可以做到这一点,尽管我不确定第二种:

预备步骤(可选(

如果你有符号链接,就不需要了(我相信这是真的,至少在类unix的操作系统中是这样(:

dvc unprotect my_data_folder

方法1(已验证(:

删除所有缓存的数据。从回购的根文件夹:

rm -r my_data_folder
rm -rf .dvc/cache

这似乎可以正常工作,并将完全释放下载数据之前使用的磁盘空间。一旦我们再次需要数据,我们可以像以前一样通过dvc pull来提取数据。缺点是,到目前为止,我们正在删除使用dvc下载的所有数据,而不仅仅是与my_data_folder对应的数据,因此我们需要再次对所有数据执行dvc pull

方法2(未验证(:

只删除特定的文件(要彻底测试,这不会以任何方式损坏DVC(:

首先,注意软链接中指示的路径:

ls -l my_data_folder

你会看到这样的东西:

my_data_file_1.pk --> .dvc/cache/4f/7bc7702897bec7e0fae679e968d792
my_data_file_2.pk --> .dvc/cache/4f/7bc7702897bec7e0fae679e968d792

如果要删除my_data_file_1.pk,请从repo的根文件夹中运行:

rm .dvc/cache/4f/7bc7702897bec7e0fae679e968d792

关于dvc gc

的注记出于某种原因,运行dvc gc似乎不会从缓存中删除文件,至少在我的情况下是这样。

如果有人能提出一个更好的方法,或者评论第二种方法是否真的合适,我将不胜感激。此外,如果我想删除整个文件夹,而不是逐个文件,有什么方法可以自动做到这一点吗?

谢谢!

目前无法从缓存中粒度指定要删除的目录/文件。以下是投票票,并要求优先考虑:

  • dvc-gc删除
  • 重新考虑gc实现

由于某种原因,运行dvc-gc似乎不会从缓存中删除文件,至少在我的情况下是这样。

这有点令人担忧。如果使用-w选项运行它,它只保留当前版本的.dvcdvc.lock文件中引用的文件/目录。它应该删除所有其他内容。

所以,假设你正在构建一个模型:

my_model_file.pk

您创建了一次它,它的散列是4f7bc7702897bec7e0fae679e968d792,它写在dvc.lockmy_model_file.dvc中。

然后进行另一次迭代,现在hash是不同的5a8cc7702897bec7e0faf679e968d363。现在应该将其写入.dvc或锁中。这意味着不再引用与先前4f7bc7702897bec7e0fae679e968d792相对应的模型。在这种情况下,dvc gc -w肯定应该收集它。如果没有发生这种情况,请创建一个票证,我们将尝试复制并查看。