Hub documentation
后续步骤
后续步骤
接下来的部分将介绍一些功能和附加信息,帮助您充分利用 Hugging Face Hub 上的 Git 仓库。
如何以编程方式管理仓库
Hugging Face 支持通过 huggingface_hub 库 使用 Python 访问仓库。我们之前探讨的操作,例如下载仓库和上传文件,都可以通过该库实现,此外还提供了其他实用功能!
如果您更喜欢直接使用 git,请阅读以下章节。
深入了解 Git
如果你想继续学习 Git,可以访问这个 Git 教程。如需了解更多 Git 背景知识,可以查看GitHub 的 Git 指南。
如何使用分支
要有效地协作使用 Git 仓库,并在发布代码之前开发新功能,你可以使用分支。分支允许你将“进行中”的代码与“可投产”的代码分离开来,其额外好处是让多人可以在一个项目上工作,而不会频繁地相互冲突。你可以使用分支将实验隔离在各自的分支中,甚至可以采用团队级的分支管理实践。
要了解 Git 分支,您可以尝试 Learn Git Branching 交互式教程。
使用标签
Git 允许你为提交添加标签,以便轻松记录项目中的里程碑。因此,你可以使用标签来标记 Hub 仓库中的提交!要了解如何使用标签,请访问这篇 DevConnected 文章。
除了便于在仓库历史中识别重要提交外,使用 Git 标签还可以进行 A/B 测试、在特定标签处克隆仓库等!huggingface_hub 库也支持对标签进行操作,例如 从特定标签的提交中下载文件。
如何复制一个仓库
根据是否需要保留 Git 历史记录,有几种方法可以复制仓库。
从 Hub 复制
点击任意仓库页面右上角的三个点,然后选择 复制此模型、复制此数据集 或 复制此 Space。得益于 Xet 去重技术,此操作几乎可以瞬间完成。您可以选择:
- 所有者:您的账户或您拥有写入权限的任何组织。
- 仓库名称:重复仓库的名称。默认情况下,它会保留与源仓库相同的名称,并位于您的命名空间下(例如,重复
bigscience/bloom-560m会创建your-username/bloom-560m)。 - 可见性:您可以选择将复制的仓库设为公开或私有。有关私有仓库的更多信息,请参见此处。
对于模型和数据集,Git 历史记录会被压缩为单个提交。对于 Spaces,完整的 Git 历史记录会被保留。Spaces 的公开变量会被复制过来,但密钥必须手动重新输入。
限制
某些仓库无法被复制:
- 受控仓库(启用了访问请求的模型或数据集)。
- 作者已禁用重复的仓库。
- 跨区域复制不受支持(例如,存储在美国区域的仓库无法复制到欧盟组织)。
以编程方式复制
您也可以通过 huggingface_hub 库或 CLI 来复制仓库。这些工具使用与上述 Hub 按钮相同的服务器端 API(模型和数据集的 Git 历史会被压缩,而 Spaces 的 Git 历史会被保留)。
使用 Python:
from huggingface_hub import duplicate_repo
duplicate_repo("bigscience/bloom-560m", private=False)
duplicate_repo("openai/gdpval", repo_type="dataset")
duplicate_repo("multimodalart/dreambooth-training", repo_type="space", private=False)或使用 CLI:
hf repos duplicate bigscience/bloom-560m
hf repos duplicate openai/gdpval --type dataset对于 Spaces,您仍然需要自行配置相关设置(硬件、休眠时间、存储、变量和密钥)。有关更多详细信息,请参阅 管理您的 Space 指南。
或者,如果您想保留仓库的本地副本,可以先使用 hf download,然后使用 hf upload 将其上传到另一个命名空间。这样同样不会保留 Git 历史记录。
使用 Git 手动创建 Fork
如果需要为模型/数据集保留 Git 历史记录,或者希望更精细地控制流程(例如,将更改变基到你自己的修改之上),你可以使用 Git 手动 fork 一个仓库。
您需要安装 git-xet。由于您需要获取并重新上传所有 LFS 文件,Fork 操作可能需要一些时间,具体取决于您的带宽(不过得益于 Xet,重新上传会很快)。
在 https://huggingface.co 上创建一个目标仓库(例如
me/myfork)将其克隆并将源仓库添加为远程仓库:
git clone git@hf.co:me/myfork
cd myfork
git xet install
git remote add upstream git@hf.co:friend/upstream
git fetch upstream
git lfs fetch --all upstream- 将 fork 的内容替换为上游历史记录:
git reset --hard upstream/main
- 推送:
git push --force origin main