墨穗app.notebase.cn
控制台
内容库
动态
管理
账户
U
用户
--
在线
v1.0.165 · 墨穗笔记
笔记

Notebase墨穗
静水流深,落墨成穗。

0笔记
0工具
30推荐

分类导航

按主题直达

编辑精选

站内用户贡献 · 真实笔记

最新收录

每日更新
继续浏览全部内容 →

笔记

0
加载中...

工具

0

此页用于记录用户反馈问题后的每一次改进

关于

笔记用法

“写笔记”支持四种格式——Word 文档、Excel 表格、Markdown、纯文本,起稿或二次编辑时都能随时切换,同一篇笔记想用哪种形态来记,都由你说了算。

md、txt、csv、json 这类纯文本则原样载入,不做多余加工。拿一张现成的表倒进来、改几笔、再导出去,等于白用一台免费的格式转换器。

要带走就在右上角点“下载”,可导出 PDF、Word、Markdown、Excel、TXT 等格式;列表卡片“⋯”菜单里,也有同样的下载入口。

工具用法

在“工具”页点“+ 上传工具”即可发布:填好名称与链接,再用 Markdown 把使用方法写清楚——能解决什么问题、怎么装、怎么用,比堆介绍实在。

要分发安装包就一并上传压缩包(ZIP、RAR、7Z、TAR.GZ,最大 35MB),别人在详情页一键下载;只放链接不带附件也可以。

工具按大家的收藏热度排序,好用的自然会被顶上来。发布后可在详情页或卡片菜单里编辑、下架。

隐藏笔记

写笔记时勾上“隐藏”,这篇就只存在于你自己的账号里:不进列表、不进搜索、不上首页精选,也不会出现在任何公开的页面,链接发给别人同样打不开。

适合放密码、草稿、日记这类只给自己看的内容;想公开,去“发布”打开它,把“隐藏”的勾去掉再保存,之后编辑会默认保持原状态,不会悄悄变回公开。

不想公开、只想临时给人看:点“分享”生成一条带密码和有效期的链接,到期自动失效,你也能随时撤销。

数据安全

你的内容会同时保存在多个副本上,系统定期做备份与完整性校验,再配合异地容灾机制:就算某台机器出问题,数据也不会丢,可以长期放心存放;特别重要的资料,仍建议你另外再留一份备份。

技术

全站跑在容器化、模块化的现代架构上,更新、部署、回滚都很快,扩展性和稳定性都按长期运营的标准来设计(Built for reliability, designed to scale)。

理念

这个网站最早只是一个人的笔记仓库,后来慢慢长成现在的知识中枢。设计上很克制——没有广告、没有追踪、没有推荐算法,只是干干净净地存放一些东西;既然做好了,就公开出来,万一有人用得上呢。

原则

不做大而全,不做平台梦,保持简单、保持克制、保持好奇。所有内容都由用户贡献、由用户维护:不会突然冒出付费墙,不会在角落塞广告位,也不会把你的数据卖给第三方。

更多

产品会持续迭代,站内日志页记录着每一次改动,改了什么都有迹可循;想了解这个站是怎么一步步走到今天的,翻翻日志就能看到来龙去脉。

举报

如果在这里看到涉嫌违规的内容,点对应卡片右侧的“举报”按钮就能提交,我们会尽快核实处理;也谢谢你花一点时间,一起把这里维护干净。

趋势

// 点击导航加载发现
归档
// 归档为空
最近浏览
// 暂无浏览记录
发布
// 加载中...
用户发布
// 加载中...
用户管理
// 加载中...
访问统计
// 加载中...
内容审核
// 加载中...
个人信息
// 加载中...
返回首页

中国版 Hugging Face 是怎么造出来的

2026-08-29人工智能

先说结论:中国版 Hugging Face 不是靠“搬运模型”堆出来的,而是靠一套完整的基础设施 + 开发者生态 + 合规策略,硬生生在封闭环境里长出来的。

我花了两周时间把他们的技术架构、开源组件、数据流和运营策略翻了个底朝天。这篇文章不吹不黑,只讲工程实现和设计逻辑。你会看到:

  • 他们怎么用 Git LFS 魔改 解决大文件分发
  • 为什么 S3 兼容存储 + CDN 预热 是刚需
  • 模型推理服务 不是用 vLLM 而是自研调度器 的原因
  • 以及 “安全审查” 如何成为技术壁垒 而不是负担

一、底层存储:不能直接用 S3,必须做“分片 + 元数据分离”

Hugging Face 的模型仓库本质是一个 Git 仓库,但模型文件动辄 5GB、10GB,直接塞进 Git 会卡死。中国版的做法是完全重写了存储层,但保留了 Git 的语义。

1.1 大文件存储:LFS 的二次开发

他们用 git-lfs 作为基础,但做了两个关键改动:

# 原始 LFS 指针文件(只有 130 字节)
version https://git-lfs.github.com/spec/v1
oid sha256:4d7a9c1f3a...  # 实际文件的哈希
size 5242880000           # 5GB

改动一:分块上传。 原始 LFS 是单文件上传,5GB 文件断点续传很痛苦。他们改成 4MB 一个 chunk,并发上传,失败只重传失败的 chunk。这个改动让上传速度提升了 3 倍(实测数据:100MB 文件从 12s 降到 4s)。

改动二:元数据与数据分离。 LFS 默认把大文件放在同一个 Git 仓库的 .git/lfs/objects 下。他们拆成:

  • 元数据仓库(几百 KB):存指针文件、tag、commit 信息,走 Git 协议
  • 对象存储(真正的模型权重):存到自建的 Ceph 集群,或者阿里云 OSS / 腾讯云 COS

这样做的核心收益:克隆仓库时只需要拉取元数据(秒级),模型权重按需懒加载。你 git clone 一个 10GB 模型仓库,实际只下载 200KB,真正要用的时候才从对象存储拉流。

1.2 存储集群的拓扑

他们公开的架构图(我根据代码和招聘信息还原的):

[用户请求] → [API Gateway] → [Git 服务(Gitea 魔改)]
                                    ↓
                              [元数据 DB(MySQL + Redis)]
                                    ↓
                              [对象存储(Ceph RGW)]
                                    ↓
                         [CDN 预热节点(边缘节点缓存)]

关键点:Ceph 的 RGW 实现了 S3 兼容接口,所以他们可以直接用 aws-sdk 对接,不需要改客户端代码。但为了防止单集群故障,他们做了多集群同步——同一个模型文件,在北京、上海、深圳三地各存一份,用异步复制。


二、模型分发:CDN 预热 + 断点续传的细节

这是很多自建模型库翻车的地方。Hugging Face 本身有 Cloudflare 全球加速,但国内网络环境特殊,他们做了三个针对性设计:

2.1 下载链路:不走 Git 协议,走 HTTP 直连

当用户执行 modeling_utils.from_pretrained("company/model") 时,实际下载 URL 是:

https://cdn.modelhub.cn/models/company/model/resolve/main/pytorch_model.bin

注意:不是 Git 协议,是 HTTPS 直连。他们用 Nginx 做了一层透明代理,把 Git LFS 的下载请求重写为 CDN 的 URL。

这样做的好处:

  • 支持 Range 请求,断点续传天然支持
  • 可以统计下载量(Git 协议不好统计)
  • 可以按 IP 限速(防止刷流量)

2.2 预热策略:不是“全量预热”,而是“热点预测”

他们用了一个简单的机器学习模型(基于 XGBoost)预测哪些模型会被大量下载,提前把权重文件推送到边缘节点。特征包括:

  • 模型在 GitHub / 论文中的引用量
  • 最近 7 天下载量的趋势
  • 是否被知名项目(如 LLaMA-Factory)引用

实测数据:预热命中率约 62%,命中时下载速度从 2MB/s 提升到 30MB/s(内网测试环境)。

2.3 断点续传的隐藏坑

他们踩过一个大坑:CDN 节点默认不缓存大文件。因为 CDN 厂商默认只缓存 1GB 以下文件,超过 1GB 会回源。他们的解决方案:

# Nginx 配置片段
location ~* \.(bin|safetensors|gguf)$ {
    proxy_cache_valid 200 7d;
    proxy_cache_lock on;
    proxy_cache_lock_timeout 30s;
    proxy_max_temp_file_size 0;  # 关键:禁止临时文件,直接流式
    proxy_buffering off;         # 关闭缓冲,边下边传
}

proxy_max_temp_file_size 0 这个参数很关键,它让 Nginx 不落盘,直接流式转发,避免磁盘 IO 成为瓶颈。


三、推理服务:为什么不用 vLLM,而是自研调度器

这是最让我惊讶的部分。他们早期确实试过 vLLM,但很快放弃了,原因有两个:

  1. vLLM 的 continuous batching 在长上下文场景下内存碎片化严重(实测 8K 上下文,显存利用率只有 65%)
  2. vLLM 不支持异构 GPU 混布(A100 和 4090 不能混在一个 pool 里)

3.1 自研调度器的核心设计

他们的调度器叫 FalconScheduler(内部代号),核心思路是 “两层调度 + 显存池化”。

第一层:全局调度(跨节点)
用 etcd 维护所有 GPU 节点的状态,包括显存余量、当前请求数、模型加载状态。调度策略是 “最短队列优先 + 模型亲和性”——同一个模型的请求尽量路由到已加载该模型的节点,避免重复加载。

第二层:局部调度(节点内)
在单节点内,用 CUDA Graph 捕获模型推理的 GPU 操作,然后复用。这样做的效果是:首次推理延迟 80ms,后续推理延迟 5ms(因为 CUDA Graph 避免了 kernel launch 的开销)。

3.2 显存池化:把空闲显存借出去

这是他们最骚的操作。假设你部署了一个 7B 模型,占用 14GB 显存,但实际推理时平均只用 8GB,剩下的 6GB 闲着。他们的调度器会把这 6GB “借”给其他小模型(比如 1.5B 的 embedding 模型)。

实现方式:基于 CUDA IPC 的显存共享。大模型推理结束后,显存不释放,而是标记为“可借用”,小模型通过 CUDA IPC 直接映射这块显存。代价是稍微增加了一点延迟(约 0.2ms),但整体吞吐提升了 37%。

3.3 推理性能对比(他们公开的 benchmark)

指标 自研调度器 vLLM (PagedAttention)
单卡吞吐 (requests/s) 128 96
首 token 延迟 (ms) 45 52
长上下文 (32K) 显存占用 18.2GB 22.7GB
异构 GPU 混布 ✅ 支持 ❌ 不支持

注意:vLLM 的 PagedAttention 在短上下文(<2K)下其实更快,但一旦超过 8K,自研调度器优势明显。


四、安全审查:不是“审核”,而是一套自动化流水线

这是国内 AI 平台绕不开的话题。但我想说,他们没把安全审查当成本,而是当成了技术壁垒。

4.1 三层过滤架构

[用户上传] → [静态扫描] → [动态沙箱] → [人工复核] → [上架]

第一层:静态扫描(秒级)
用 grep + 正则 + 特征库扫描模型文件中的敏感字符串。特征库包括:

  • 政治敏感词(约 2 万条)
  • 暴力 / 色情词汇
  • 代码注入模式(比如 os.system、eval)

第二层:动态沙箱(分钟级)
把模型加载到隔离的 Docker 容器里,跑几个预设的 prompt,观察输出。用的是 nsjail(Google 的沙箱工具),限制 CPU、内存、网络。如果输出包含敏感内容,自动拦截。

第三层:人工复核(小时级)
只有前两层都放行,才进入人工队列。但人工只抽检 10%(因为前两层准确率已经 99.7%)。

4.2 有趣的技术细节:模型指纹

他们给每个模型文件算一个 SHA-256 哈希,存到数据库。当新上传的模型与已知的“敏感模型”哈希匹配时,直接拒绝上传。这招很聪明——不需要重新扫描,直接查哈希表。

但有个坑:模型权重是浮点数,改一个 bit 哈希就变了。所以他们增加了一个“近似指纹”算法——把权重文件分块,每块算一个哈希,如果 70% 的块哈希匹配,就认为是同一模型。


五、开发者工具链:不止是 from_pretrained

他们做了三个很实用的工具,让我觉得他们是真正懂开发者的:

5.1 model_hub 命令行工具

# 上传模型(自动分块 + 断点续传)
model_hub upload ./my_model --name my-org/llama-3-8b

# 下载模型(支持通配符)
model_hub download my-org/* --exclude "*.pt"

# 查看模型元数据(JSON 格式)
model_hub info my-org/llama-3-8b

底层实现:用 Python 的 click 库写 CLI,上传走 concurrent.futures 并发上传,进度条用 rich 库。

5.2 数据集版本管理

Hugging Face 有 datasets 库,但只支持加载,不支持版本控制。他们做了一个 DatasetStore:

from model_hub import DatasetStore

ds = DatasetStore("my-dataset")
ds.add_file("train.jsonl", version="v1.2")
ds.add_file("train.jsonl", version="v1.3")  # 自动 diff

# 加载指定版本
data = ds.load("v1.2")

实现原理:内部用 Git LFS 存储每个版本,但通过一个 manifest.json 记录文件的哈希和版本号。加载时只下载需要的版本,而不是全部。

5.3 一键部署到推理服务

from model_hub import deploy

deploy(
    model="my-org/llama-3-8b",
    hardware="A100x1",
    quantization="int8",
    max_batch_size=32,
)

这个 API 背后调用的是他们的 FalconScheduler 的 REST 接口,自动完成:

  1. 从对象存储拉取模型权重
  2. 加载到指定 GPU
  3. 启动推理服务(FastAPI + Uvicorn)
  4. 注册到服务发现(Consul)

整个过程约 2 分钟,而手动部署通常需要 20 分钟。


六、流量架构:如何扛住 10 万 QPS

他们公开过一些峰值数据(比如 LLaMA-3 发布时),我根据他们的技术分享整理出关键架构:

6.1 全局负载均衡

[用户] → [DNS 轮询] → [LVS 四层负载] → [Nginx 七层负载]
                                        ↓
                              [API Gateway (Kong)]
                                        ↓
                        [服务A] [服务B] [服务C] [服务D]
  • LVS:用 DR 模式,只做 IP 转发,不处理数据包,性能瓶颈在网卡(万兆)
  • Nginx:配置了 keepalive 32,复用 TCP 连接,减少握手开销
  • Kong:做限流(每用户每秒 10 次请求),用 Redis 做计数器

6.2 缓存策略

  • 模型元数据:Redis 缓存,TTL 5 分钟,失效后回源 MySQL
  • 模型下载链接:CDN 缓存,TTL 7 天
  • 推理结果:不缓存(因为模型输出是随机的)

他们特别强调了一个坑:不要把模型列表缓存到 Redis 里。因为模型列表更新频繁(每天新增 500+ 模型),缓存失效会导致缓存雪崩。他们用了一个 “二级缓存” 方案:

  1. 第一级:Redis 存热点模型(Top 100,TTL 1 分钟)
  2. 第二级:MySQL 全量列表(每次请求都查,但加了个 SQL 缓存)

实测:这个方案让 P99 延迟从 120ms 降到 45ms。


七、合规与备案:一个被低估的技术问题

最后聊一个所有中国 AI 平台都要面对的:模型备案。

他们的做法是:把备案流程自动化。

[模型上传] → [自动生成备案材料] → [调用政府 API 提交] → [跟踪状态]

自动生成的材料包括:

  • 模型基本信息(名称、用途、训练数据来源)
  • 安全评估报告(由沙箱测试结果自动生成)
  • 数据安全承诺书(模板 + 自动填充)

这个流程让他们平均 3 天完成一个模型的备案,而人工处理需要 2 周。


八、总结:他们做对了什么

回头看,中国版 Hugging Face 能跑通,核心不是某个单点技术,而是把以下四件事做成了闭环:

  1. 存储层:分块 + 元数据分离,解决大文件分发
  2. 推理层:自研调度器 + 显存池化,解决成本问题
  3. 安全层:自动化流水线 + 模型指纹,解决合规问题
  4. 工具链:CLI + SDK + 一键部署,解决开发者体验

最让我佩服的是他们不迷信开源组件——vLLM 很好,但不符合需求就自己写;Git LFS 很好,但不够用就魔改。这才是做基础设施的正确态度。

如果你也想自建一个模型仓库,我建议先从存储层开始,把大文件分发搞定,其他的可以慢慢加。如果你想深入某个模块的代码实现,评论区告诉我,我拆开讲。

相似推荐
DeepSeek Harness Windows 安装保姆教学:一条 npx 命令跑起 Web UIMistral OCR:重新定义文档理解的OCR技术Claude Opus 4.8 深度解析:更诚实、更高效的 AI 协作新纪元Claude Opus 5 深度解析:半价逼近前沿智能的日常化模型Gemma 4:Google DeepMind 开源模型的最新里程碑DeepSeek-R1 深度解析:纯强化学习激发大模型推理能力,蒸馏小模型同样强悍
编写使用方法
Markdown 格式 · Ctrl+Enter 确定
0 字新建笔记
欢迎回来
登录你的墨穗笔记账户
忘记密码?
还没有账户?立即注册
创建账户
注册你的专属墨穗笔记
已有账户?去登录
找回密码
输入注册邮箱获取验证码
返回登录
请输入图片中的验证码以继续注册
加载中...
取消
新建收藏
手动添加你喜欢的内容
取消
编辑头像与昵称
上传新头像或修改你的显示昵称
支持 JPG/PNG,最大 2MB
取消

问题反馈

隐私提醒

取消
编辑工具
受控分享
为这篇笔记生成限时 / 带密码的临时链接
关闭