Git 与 HTTP 范式
huggingface_hub
库是用于与 Hugging Face Hub 交互的库,Hub 是一个包含基于 Git 的仓库(模型、数据集或空间)的集合。使用 huggingface_hub
访问 Hub 的主要方法有两种。
第一种方法是所谓的“基于 Git”的方法,由 Repository 类引导。此方法使用 git
命令的包装器,并带有专门设计用于与 Hub 交互的附加功能。第二种选择被称为“基于 HTTP”的方法,它涉及使用 HfApi 客户端发出 HTTP 请求。让我们来研究一下每种方法的优缺点。
Repository:历史上的基于 Git 的方法
起初,huggingface_hub
主要围绕 Repository 类构建。它提供了对常见 git
命令(如 "git add"
、"git commit"
、"git push"
、"git tag"
、"git checkout"
等)的 Python 包装器。
该库还帮助设置凭据并跟踪大型文件,这些文件通常用于机器学习仓库。此外,该库允许您在后台执行其方法,使其在训练期间上传数据时非常有用。
使用 Repository 的主要优势在于它允许您在本地机器上维护整个仓库的副本。这也可能是一个缺点,因为它要求您不断更新和维护此本地副本。这类似于传统的软件开发,其中每个开发人员都维护自己的本地副本,并在开发功能时推送更改。但是,在机器学习的背景下,这可能并不总是必要的,因为用户可能只需要下载权重进行推理或将权重从一种格式转换为另一种格式,而无需克隆整个仓库。
Repository 现在已弃用,取而代之的是基于 http 的替代方案。鉴于它在遗留代码中的广泛采用,Repository 的完全删除将仅在 v1.0
版本中进行。
HfApi:一个灵活便捷的 HTTP 客户端
开发 HfApi 类是为了提供本地 git 仓库的替代方案,后者可能难以维护,尤其是在处理大型模型或数据集时。 HfApi 类提供了与基于 git 的方法相同的功能,例如下载和推送文件以及创建分支和标签,但无需保持同步的本地文件夹。
除了 git
已提供的功能外,HfApi 类还提供了一些额外功能,例如管理仓库、使用缓存下载文件以实现高效重用、在 Hub 上搜索仓库和元数据、访问社区功能(如讨论、PR 和评论)以及配置 Spaces 硬件和机密信息。
我应该使用什么?以及何时使用?
总的来说,基于 HTTP 的方法是所有情况下使用 huggingface_hub
的推荐方法。 HfApi 允许您拉取和推送更改、处理 PR、标签和分支、与讨论进行交互等等。自 0.16
版本以来,基于 http 的方法也可以在后台运行,这是 Repository 类的最后一个主要优势。
但是,并非所有 git 命令都可以在 HfApi 中使用。有些可能永远不会实现,但我们一直在努力改进和缩小差距。如果您没有看到您的用例涵盖其中,请在 Github 上创建一个问题!我们欢迎反馈,以帮助我们与用户一起为用户构建 🤗 生态系统。
基于 http 的 HfApi 对基于 git 的 Repository 的偏好并不意味着 git 版本控制会很快从 Hugging Face Hub 中消失。您始终可以在有意义的工作流程中在本地使用 git
命令。