git - git-lfs 和 dvc 的区别
问题描述
这两者有什么区别?我们在之前的工作中使用了 git-lfs,并且在我现在的工作中我们开始将 dvc 与 git 一起使用。它们都放置某种索引而不是文件,并且可以按需下载。dvc 对前一个有一些改进吗?
解决方案
DVC并不比 git-lfs 好:它们完全不同。选择的答案在很大程度上是有偏见的。两者只是用于不同目的的不同工具。
- git-lfs旨在对 git 透明,因此它需要一个定制的服务器。它的学习过程短而快。一些配置命令,砰!它正在运行,独立于 git 存储库存储大文件。这是它唯一的功能,而且做得很好。拥有额外的服务器并不是一个缺点,而是对这种透明度的要求。配置完成后,文件仅由 git 处理,通过 git 挂钩(在 git 操作后激活的端点)。
- dvc旨在为最终用户提供对大文件的独立管理。
.gitignore
dvc的基本作用是:它只是让 git 忽略您希望控制的文件(将它们添加到.dvc
. 因此,为了推送一个提交及其对应的文件,用户需要手动“添加”(相当于git commit,而不是git add; dvc 中的 git 阶段没有等效项)和“推送”到两个系统。这不是一个缺点,而是一个必要的控制水平。作为交换,远程大文件持有者只是任何远程文件系统,可以通过其路径、通过 ssh 或通过多个驱动程序(谷歌驱动器、亚马逊等)直接访问。无论如何,dvc 也可以使用钩子,这将简化大文件的使用,如果有额外的文件不烦人,并且将文件保存到远程需要额外的操作,请记住它们是 .gitignored!因此,如果您修改存储在 dvc 中的文件,则不会注意到git status
此类更改,并且您可能会丢失此类更改,除非您使用 dvc 进行额外检查。
DVC 的目的与 git-lfs 不同。DVC不仅用于保存大文件,而且主要用于管理确定性过程产生的大文件。所以,除了存储大文件之外,dvc 还像Makefile
s 一样控制处理管道,通过在 a 中定义依赖关系Makefile
,如果处理输入(也是 dvc 跟踪的文件或参数)发生变化,则 dvc 计算必须重新生成哪些文件(是的,像Makefile
s)。这就是为什么 DVC 通常被描述为数据科学的 makefile 工具. 如果您要大量生成大型 AI 模型或大量数据文件,那就太棒了。与编译大型应用程序完全相同:每个本地化更改都意味着只编译整体的一小部分。
就个人而言,我将两者都用于大文件存储。git-lfs 简化了大文件的管理,但 dvc 简化了大文件的存储(这简化了管理),但代价是不具有这种透明度,有时会丢失数据。我仍然不使用 dvc 进行管道计算,直到现在我更喜欢我自己的实现。DVC越来越好,也许我以后会更多地使用它。两者只是不同;根据目的,我目前同时使用两者。
推荐阅读
- python - 带有格式化 Python 的 HTML 到 JSON
- javascript - 将图层名称复制到 Photoshop 中的文本框的脚本
- python - 如何使用 for 循环根据唯一变量将数据帧子集化?
- regex - 正则表达式用于普通字符和重音字符,仅在字符串内包含空格和破折号
- javascript - babelv7 中的配置合并
- swift - 关于 UIImage -> CVPixelBuffer -> UIImage 转换的问题
- java - 如何在地图上显示折线
- uml - 基数和泛化如何在 UML 中工作?
- wordpress - 最近更新到 wordpress 后代码段不起作用
- opengl - Opengl/Glut 键盘输入问题