我希望能够在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,请从回购的根文件夹中运行:
rm .dvc/cache/4f/7bc7702897bec7e0fae679e968d792关于dvc gc的注记
由于某些原因,运行dvc gc似乎没有从缓存中删除文件,至少在我的情况下是这样的。
如果有人能提出更好的方法,或者评论第二种方法是否真的合适,我将不胜感激。此外,如果我想删除整个文件夹,而不是逐个文件,有任何方法可以自动完成吗?
谢谢!
发布于 2022-10-06 16:15:13
目前不可能细化地指定要从缓存中删除的目录/文件。以下是投票的门票,并要求优先考虑这一点:
由于某些原因,运行dvc似乎没有从缓存中删除文件,至少在我的例子中是这样的。
这有点让人担心。如果您使用-w选项运行它,它只保存当前版本的.dvc和dvc.lock文件中引用的文件/ and。它应该移除所有其他的东西。
那么,假设您正在构建一个模型:
my_model_file.pk
您只创建了一次,它的散列是4f7bc7702897bec7e0fae679e968d792,它是在dvc.lock或my_model_file.dvc中编写的。
然后再进行一次迭代,现在哈希是不同的5a8cc7702897bec7e0faf679e968d363。它现在应该写在.dvc或锁中。这意味着与前一个4f7bc7702897bec7e0fae679e968d792相对应的模型不再被引用。在这种情况下,dvc gc -w绝对应该收集它。如果没有发生,请创造一张票,我们将尝试复制和查看。
https://stackoverflow.com/questions/73976650
复制相似问题