开源的是算得快,没开的是不用重算

cover

Hello,我是飞飞。

早上那篇算的是你买单这一头:你反复发给 AI 的那段固定说明,缓存留得越久,第一次写入越贵,先看复用次数。那篇问的是「我该不该开长缓存」。下午翻完 DeepSeek 的部署问答,我发现卖的那一头,算的是另一本账。

DeepSeek 昨天开源了它生产环境用的推理框架,叫 DeepInfer。我第一遍翻,眼里只有两个数:一天 155 万亿 token,每 GPU 小时 38 美元,觉得这买卖真划算。第二遍往下翻,才撞见一节标题,直译是「要跑成一套完整服务,还需要这些,本次没有包含」。开出来的是「算得快」的那一半,「根本不用重算」的那一半没给。

这篇只算卖的那一头:一个一天处理 155 万亿 token 的集群,凭什么卖这么便宜,账本长什么样,哪几页没交出来。

它到底开了什么

Apache 2.0,仓库 deepseek-ai/DeepInfer,十月二十号放出来的。它只服务一个模型,DeepSeek-V4.1-Flash。也只做离线推理,README 原话是 this open-source release provides offline inference。

官方给了两个招牌数字。一个集群一天处理 155 万亿 token;每 GPU 小时收入 38 美元。

这两个数都得带着括号读。

155 万亿那一行,官方没拆输入、输出、缓存命中各占多少。它大概率包含大量重复读进去的输入,不能当成「一天生成了 155 万亿个 token」。

38 美元那一行,括号里写着 at valley pricing,谷时价。意思是这取的是一天里最便宜那个时段,地板价,平均下来要比它高。而且原文写的是 revenue,收入,没扣电费,也没扣折旧和闲置成本。收入跟利润是两本账。

数字都很好看。可这两个数说的,都是这台引擎跑得有多快、有多划算。真正把它们托起来的另一半,README 里另有一段。

翻到没给的那一段

就是刚才那节标题。

底下三行。一套 KV cache 系统;视觉编码器、读入、生成三段拆开部署;数据并行副本之间的负载均衡。

说人话。KV cache 是模型读过一段话之后留下的笔记,下次碰到同样的开头,直接翻笔记,不用重读。负载均衡是决定哪个副本接哪个请求的那层调度,副本之间活儿分不匀,快的等慢的,账就上去了。

拆开部署那条后面有个括号,我得替它说清楚:大部分必需的引擎功能已经实现了。缺的是把它们拼起来的那一层。这块本身做了大半,别读成完全没动。

还有一个门槛,官方写得很直白:最小的高效部署单元,是 64 张卡做读入、64 张卡做生成。128 张起。这条一摆,「自己部署一个试试」这个念头可以先放下。

最贵的那步是重读

部署问答里,官方列了三个设计目标。多厂商硬件、普通机器就能做读入和生成,压轴那条是把 KV cache 留 72 小时以上。

压轴这条最有意思。它不只要求有个缓存,还要求缓存留得够久。

模型接一个活,得先把整段材料读一遍,这一步叫 prefill,说人话就是把书读进去。再一个字一个字往外写,叫 decode,照着讲出来。读一遍最贵。重复的材料,下次还得从头再读。

把读过的结果存下来,下次直接翻,这就是缓存。存多久,决定省多少。

官方定价里,每百万 token 的输入价:命中缓存 0.003 美元,没命中 0.15 美元。同一个 token,算过的和没算过的,差 50 倍。这就是「不用重算」那半为什么值钱。

DeepSeek 的选择:agent 流量留 3 天,聊天机器人流量留 7 天,用约 100 PiB 的 SSD 装。100 PiB 是十万 TB。按一块 4TB 的硬盘算,得两万五千块。

为什么聊天机器人要留更久?官方说它的命中长尾特别重,少量缓存被反复读很多次,丢了整体命中率掉得更多。原话是,3 天的留存期会让聊天机器人掉 0.5% 到 1% 的命中率。这个数听着小,可它一天的盘子是 155 万亿 token。

现在再回头看 README 那三行。排在最前面的那一样,是一套 KV cache 系统。我上面讲的笔记、留存期、100 PiB 的盘,全是它没交出来的部分。

代码没给,图纸给了

看到这儿容易得出一个结论:DeepSeek 留了一手。

它自己在问答里写得很清楚:KV cache 管理和负载均衡这两块,跟内部基础设施绑得太死,所以代码还没完全开源。紧接着一句,这两块怎么设计的,写在我们那篇知乎博客里了。

代码没给,图纸给了。这个姿态我挺佩服。它没把「我们有个很厉害的缓存」当宣传口号,反而把设计目标、架构、关键实现摊开讲,包括那两个没开源的组件。

所以「只开了一半」只是在描述事实。我不觉得这是藏私。想抄整套作业的人抄不到,想知道它怎么想的人,能看得很清楚。

算得快的那半靠什么

开源出来的这一半,确实有东西。

缓存没命中的时候,它不重算整段,只重算最后 128 个 token。原话说,重算成本因此变成一个常数,跟上下文长度、层数都无关。在生成那一侧,每次只补提示词末尾这一小段,几乎砍掉一半的读入计算。

128 个 token,大概一百来个字。你的上下文是四千还是二十五万,要补的永远是这一小段。

另一个是投机解码,官方叫 DSpark。先让一个小模型一口气猜 5 个 token,再用一个置信度头挑出值得验证的那几个,把算力花在胜算最大的地方。生产工作点下,每步验证的草稿数从 5.00 个降到 3.2 到 4.4 个,吞吐涨 4% 到 7%。

同样的卡,一小时多干这么多活。

同一段里还有个反向的数:并发只有 16 的时候,它是负 1.5%。并发越高越赚,低并发反而亏。这种数字愿意写出来,比只报好消息可信。

异步调度也默认开着,把 CPU 的排班和 GPU 的计算叠起来,让卡少空转。

这三样管的是「算的时候更快」:重算得少一点,猜得准一点,排班叠一点。它们解决不了「根本不用重算」,那是缓存那半的活。

数字是谁测的

性能数字全部是 DeepSeek 自己测的。测法写在 README 里:4 张 SM100 做读入,64 张做生成。这跟前面 64+64 的最小部署单元不是一个数:那边是部署门槛,这边是测吞吐的配置。

硬件支持两家的卡,NVIDIA 的 SM100 和华为 Ascend 950。但性能数字只有 NVIDIA 的,Ascend 一个都没有。还有两个功能明写只支持 NVIDIA:一个让结果不受批次影响,一个是确定性采样。

外部独立复现,到现在是零。Bloomberg 的报道里有一句,还没有外部机构测过它的效率提升。

官方自己还承认了一处:负载均衡只能做到理想离线基准的约 80%。这句很诚实,也提醒你,上面那些百分比是在什么前提下拿到的。

血统也得交代。原话是,DeepInfer 最初主要建在 vLLM 上,就是眼下用得最广的那个开源推理框架,另外参考了 SGLang 和 TensorRT-LLM。它是从通用框架里长出来的,顺手把「什么模型都支持」那部分的代价砍掉了。只支持一个模型还能跑这么快,原因在这儿。

那笔账我这边对上了

说回我自己。

我那个 AI 大脑,对话模型就是 deepseek-v4-flash。七月那篇旧文里我贴过配置,两行:

1
2
LLM_BASE_URL=https://api.deepseek.com
LLM_MODEL=deepseek-v4-flash

按官方说法,跑 V4.1-Flash 的服务就是 DeepInfer。我没法确认每一次请求都穿过它,可能是别的部署。这层我说不清,就不装作说得清。

但账能对上一半。九月调价那篇我抄过官方价格,就是前面那个 50 倍。我当时写的是,大脑里系统提示词、常驻规则、索引说明这些前缀每次都一字不差,全落在 cache 里。

两天前那篇,我问的是这些重复前缀能不能复用。今天翻部署问答,DeepSeek 没只回一句「有这个功能」。它给了个更具体的数:我们把它们留了三天到七天,用 100 PiB 的盘装着。

我记得住,是因为有人替我把笔记留住了。

你那边能抄的一件

翻一个开源发布,先找 README 里那段「本次没有包含」,它比 star 数重要。

star 数说明有多少人围观,not included 说明你拿到手能干什么。DeepInfer 一天就攒了上万星,可它开的是离线推理加一个模型,完整服务缺三样。这两件事不冲突,但你得先看后者。

我打算做一件小事:以后每看到一个想试的开源仓库,先把 README 里没给的那几样抄进笔记,再判断值不值得试。这个动作不解决任何技术问题,只是让我少在「它居然开源了」这句话上白高兴一场。

绕回开头。DeepInfer 开源的不是一台能直接开张的店,是一张把关键设计写清楚的图纸。那两样没交出来的东西,它也在知乎博客里讲了怎么设计。缺的部分标得明明白白,没假装整套都给了。

你最近一次被「开源」两个字吸引,翻到最后才发现只给了一半,是什么时候?评论区说说,我想看看你踩过的是哪一半。