用 Go 从零重写 Hugging Face Xet 协议:让开源模型存储真正可自托管
原创用 Go 从零重写 Hugging Face Xet 协议:让开源模型存储真正可自托管
为什么有人用 Go 从零重写 Hugging Face 的 Xet 协议
Hugging Face 的 Hub 上跑大模型,Git LFS 是个老问题了。文件太大、去重太弱、传输太慢。Xet 协议被设计成 content-defined-chunking, dedup-first storage layer,替代 Hub 上的 Git LFS 来源:GitHub。但 Xet 协议闭源,Hugging Face 不开放服务器端实现,社区想自托管模型文件就卡住了。
guilt 写的 Xet Server 把这条路打通了。Go 编写的服务器,与 Hugging Face 真实的 Xet 存储协议 wire-compatible,支持 BLAKE3 哈希、xorb/shard 二进制格式、LZ4/byte-grouping 压缩等完整功能栈 来源:GitHub。直接用 huggingface_hub 加 hf_xet 指向这个服务器,hf upload 和 hf download 就能跑通,字节级 round-trip 后文件完全一致 来源:GitHub。
项目口号是 "Host your own models anywhere",在任何基础设施上自托管模型文件 来源:Hacker News。这个需求很朴素,Hugging Face 的 Hub 不是为私有部署设计的,但自托管大模型存储对很多企业是刚需。
协议兼容性的实现路径
仓库里保留了最初的非 wire-compatible chunking/dedup demo 代码,放在 internal/chunk、internal/manifest、internal/api、cmd/xet 目录中 来源:GitHub。从这里出发,演进为 from-scratch、spec-driven 的协议完整重实现 来源:GitHub。
关键的一步是捕获和回放真实客户端流量。作者在 docs/PROTOCOL.md 中记录了这个过程,发现多个 real wire-format quirks,这些怪癖在文档里根本找不到 来源:GitHub。协议实现中有大量隐含假设和非标准行为,只有对着真实流量才能暴露。
验证用 live hf_xet 客户端做端到端测试,hf upload 和 hf download 往返后字节完全一致 来源:GitHub。仓库有 40 个 commits,包含 integration-tests 目录和 integrationTests.sh 脚本 来源:GitHub。
工程实践与生态集成
仓库结构透露了一些信息。除了核心代码,还有 docs 目录、CODEOWNERS、CONTRIBUTING.md 等规范文件 来源:GitHub。third_party/swagger-ui-dist 被集成进来提供 API 文档可视化界面 来源:GitHub。这些在 40 commit 的项目里出现,说明作者没有把项目当玩具做。
另一个有意思的组件叫 xet-proxyd,面向 huggingface.co 的缓存代理 来源:GitHub。它不只是性能缓存,还充当 offline-resilience 层。用它作为 HF_ENDPOINT,成功服务过的 repo 或文件都会被缓存,即使 huggingface.co 不可达也能继续用 hf download 和 hf upload。缓存目录可以直接交给普通 xetd 作为永久离线替代 来源:GitHub。
技术完成度已经相当高,但曝光度极低。HN 上只有 1 个点赞、0 条评论 来源:Hacker News。我不确定这是作者不擅长推广还是时机不对。如果团队需要自托管大模型存储,这个仓库值得看一眼。
原文:
Show HN: Xet Server – Host your own models anywhere · 来源:Hacker News
作者:itfan123 值班编辑 · 发布于 2026年10月24日
版权声明
所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除
itfan123





