我可以大约多少。使用 dvc 减少磁盘容量?
By how much can i approx. reduce disk volume by using dvc?
我想对 ~1m+ 文档进行分类,并拥有一个用于相应模型的输入和输出的版本控制系统。
数据随时间变化:
- 样本量随时间增加
- 可能会出现新功能
- 匿名化程序可能会随时间改变
所以基本上 "everything" 可能会改变:观察量、特征和值。
我们有兴趣在不使用 10/100+ GB 的情况下使 ml 模型 Building 可重现
磁盘容量,因为我们保存了输入数据的所有更新版本。目前数据的体积大小约为 700mb。
我找到的最有前途的工具是:https://github.com/iterative/dvc。目前数据
存储在数据库中,从那里加载到 R/Python。
问题:
使用dvc 可以(非常近似)节省多少磁盘空间?
如果能粗略估计一下。我试图找出是否只保存了数据的"diffs"。通过阅读 https://github.com/iterative/dvc#how-dvc-works 或其他文档,我没有找到太多信息。
我知道这是一个非常模糊的问题。它将高度依赖于数据集。但是,我仍然有兴趣获得一个非常近似的想法。
让我试着总结一下 DVC 是如何存储数据的,我希望你能从中算出在你的特定情况下 space 会是多少 saved/consumed。
DVC 是在单个 文件级别存储和删除重复数据。 那么,从实际的角度来看,它通常意味着什么。
我将以 dvc add
为例,但相同的逻辑适用于将数据文件或目录保存到 DVC 缓存中的所有命令 - dvc add
、dvc run
等
场景一:修改文件
假设我有一个 1GB XML 文件。我开始用 DVC 跟踪它:
$ dvc add data.xml
在现代文件系统上(或者如果启用了 hardlinks
、symlinks
,请参阅 this 了解更多详细信息)执行此命令后我们仍然消耗 1GB(即使文件已移动进入 DVC 缓存,并且仍然存在于作品中space)。
现在,让我们稍微修改一下并再次保存:
$ echo "<test/>" >> data.xml
$ dvc add data.xml
在这种情况下,我们将消耗 2GB。 DVC 不会区分同一文件的两个版本,它也不会将文件拆分为块或块以了解只有一小部分数据发生了变化。
To be precise, it calculates md5
of each file and save it in the content addressable key-value storage. md5
of the files serves as a key (path of the file in cache) and value is the file itself:
(.env) [ivan@ivan ~/Projects/test]$ md5 data.xml
0c12dce03223117e423606e92650192c
(.env) [ivan@ivan ~/Projects/test]$ tree .dvc/cache
.dvc/cache
└── 0c
└── 12dce03223117e423606e92650192c
1 directory, 1 file
(.env) [ivan@ivan ~/Projects/test]$ ls -lh data.xml
data.xml ----> .dvc/cache/0c/12dce03223117e423606e92650192c (some type of link)
场景二:修改目录
现在假设我们有一个 1GB 的大目录images
,里面有很多文件:
$ du -hs images
1GB
$ ls -l images | wc -l
1001
$ dvc add images
此时我们仍然消耗 1GB。什么也没有变。但是如果我们通过添加更多文件(或删除其中一些文件)来修改目录:
$ cp /tmp/new-image.png images
$ ls -l images | wc -l
1002
$ dvc add images
在这种情况下,保存新版本后我们仍然接近 1GB 消耗。 DVC 在目录级别计算差异。它不会保存目录中之前存在的所有文件。
相同的逻辑适用于将数据文件或目录保存到 DVC 缓存中的所有命令 - dvc add
、dvc run
等
请让我知道是否清楚,或者我们需要添加更多细节、说明。
我想对 ~1m+ 文档进行分类,并拥有一个用于相应模型的输入和输出的版本控制系统。
数据随时间变化:
- 样本量随时间增加
- 可能会出现新功能
- 匿名化程序可能会随时间改变
所以基本上 "everything" 可能会改变:观察量、特征和值。 我们有兴趣在不使用 10/100+ GB 的情况下使 ml 模型 Building 可重现 磁盘容量,因为我们保存了输入数据的所有更新版本。目前数据的体积大小约为 700mb。
我找到的最有前途的工具是:https://github.com/iterative/dvc。目前数据 存储在数据库中,从那里加载到 R/Python。
问题:
使用dvc 可以(非常近似)节省多少磁盘空间?
如果能粗略估计一下。我试图找出是否只保存了数据的"diffs"。通过阅读 https://github.com/iterative/dvc#how-dvc-works 或其他文档,我没有找到太多信息。
我知道这是一个非常模糊的问题。它将高度依赖于数据集。但是,我仍然有兴趣获得一个非常近似的想法。
让我试着总结一下 DVC 是如何存储数据的,我希望你能从中算出在你的特定情况下 space 会是多少 saved/consumed。
DVC 是在单个 文件级别存储和删除重复数据。 那么,从实际的角度来看,它通常意味着什么。
我将以 dvc add
为例,但相同的逻辑适用于将数据文件或目录保存到 DVC 缓存中的所有命令 - dvc add
、dvc run
等
场景一:修改文件
假设我有一个 1GB XML 文件。我开始用 DVC 跟踪它:
$ dvc add data.xml
在现代文件系统上(或者如果启用了 hardlinks
、symlinks
,请参阅 this 了解更多详细信息)执行此命令后我们仍然消耗 1GB(即使文件已移动进入 DVC 缓存,并且仍然存在于作品中space)。
现在,让我们稍微修改一下并再次保存:
$ echo "<test/>" >> data.xml
$ dvc add data.xml
在这种情况下,我们将消耗 2GB。 DVC 不会区分同一文件的两个版本,它也不会将文件拆分为块或块以了解只有一小部分数据发生了变化。
To be precise, it calculates
md5
of each file and save it in the content addressable key-value storage.md5
of the files serves as a key (path of the file in cache) and value is the file itself:(.env) [ivan@ivan ~/Projects/test]$ md5 data.xml 0c12dce03223117e423606e92650192c (.env) [ivan@ivan ~/Projects/test]$ tree .dvc/cache .dvc/cache └── 0c └── 12dce03223117e423606e92650192c 1 directory, 1 file (.env) [ivan@ivan ~/Projects/test]$ ls -lh data.xml data.xml ----> .dvc/cache/0c/12dce03223117e423606e92650192c (some type of link)
场景二:修改目录
现在假设我们有一个 1GB 的大目录images
,里面有很多文件:
$ du -hs images
1GB
$ ls -l images | wc -l
1001
$ dvc add images
此时我们仍然消耗 1GB。什么也没有变。但是如果我们通过添加更多文件(或删除其中一些文件)来修改目录:
$ cp /tmp/new-image.png images
$ ls -l images | wc -l
1002
$ dvc add images
在这种情况下,保存新版本后我们仍然接近 1GB 消耗。 DVC 在目录级别计算差异。它不会保存目录中之前存在的所有文件。
相同的逻辑适用于将数据文件或目录保存到 DVC 缓存中的所有命令 - dvc add
、dvc run
等
请让我知道是否清楚,或者我们需要添加更多细节、说明。