开篇:推理太慢?DeepSeek 换了个思路
你用过 AI 对话工具吧?有没有这种感觉:有时候它回复特别快,有时候要等半天,盯着那个一闪一闪的光标,心里默默念"快点啊快点啊"……
这真不是你的网不好,是大模型推理本身就有瓶颈。
大模型推理有两个阶段,行话叫Prefill(预填充) 和Decode(解码) 。传统做法是把这两个阶段放在同一台机器上顺序执行,结果就是——慢。
DeepSeek V4 的新论文剧透了一个骚操作:用闲置网卡加速推理,把 Prefill 和 Decode 拆开,让数据"少走弯路"。
一句话总结核心思想:计算是免费的,但移动数据是昂贵的。
翻译成人话:就像你点外卖,厨师炒菜很快(计算免费),但骑手送得太慢(数据移动贵)。DeepSeek 的解法是——多叫几个骑手,谁家车空着叫谁。
再直白点:你家里有辆电动车,你上班的时候车就闲置在楼下。DeepSeek 说,别浪费啊,让这辆车顺便帮邻居送个快递,不就多赚一份钱?
本文不聊公式,直接拆解这个架构怎么工作、为什么有效,以及你能不能抄作业。放心,没有数学,只有人话。
一、Prefill-Decode 分离:为什么要把推理拆开?
先搞懂两个概念。
Prefill(预填充) 是你问 AI 一个问题,AI 得先把你的问题"读进去",理解一遍,然后才能开始回答。这个"读进去"的过程就是 Prefill。
- 特点:计算密集型,可以并行
- 耗时:与输入长度成正比
Decode(解码) 就是 AI 开始一个字一个字往外蹦答案的过程。
- 特点:内存密集型,必须串行
- 耗时:与输出长度成正比
举个例子你就明白了。
你问 AI:"请用 500 字介绍一下人工智能的发展历史"。Prefill 阶段,AI 读你的问题,理解"人工智能"、"发展历史"、"500 字"这些关键词。Decode 阶段,AI 开始一个字一个字写答案:"人……工……智……能……"
传统架构把 Prefill 和 Decode 放在同一台机器上顺序执行:
┌─────────────────────────────────────┐
│ 单台 GPU 服务器 │
│ ┌───────────┐ ┌───────────┐ │
│ │ Prefill │ → │ Decode │ │
│ │ (计算忙) │ │ (内存忙) │ │
│ └───────────┘ └───────────┘ │
│ 问题:Prefill 时 Decode 闲置 │
│ Decode 时 Prefill 闲置 │
└─────────────────────────────────────┘
这就像什么?就像你让同一个厨师既炒菜又送外卖——炒菜的时候电动车闲置,送外卖的时候灶台闲置。老板,你这店不亏谁亏?
DeepSeek 的解法很简单:拆开。
┌─────────────────┐ ┌─────────────────┐
│ Prefill 节点 │ ----→ │ Decode 节点 │
│ (计算密集型) │ KV 缓存 │ (内存密集型) │
│ 多 GPU 并行 │ │ 高带宽内存 │
└─────────────────┘ └─────────────────┘
说人话:厨师专心炒菜,骑手专心送外卖。炒菜的需要好灶台,送外卖的需要好电动车。各干各的,效率翻倍。
二、关键创新:用"闲置网卡"传 KV 缓存
拆开是好事,但新问题来了:Prefill 生成的 KV 缓存要传给 Decode 节点,网络传输成了新瓶颈。
KV 缓存是啥?简单说就是 AI 理解你的问题后生成的"中间结果"。有了这个中间结果,AI 才能开始写答案。
假设你输入一篇长文章,32K tokens,生成的 KV 缓存大约 8GB。传统网络带宽 100Gbps,传输时间大概是:
8GB × 8 / 100Gbps ≈ 0.64 秒
0.64 秒听起来不长?但这是理想情况。实际中网络拥塞、协议开销会让时间翻倍,变成 1 秒多。
1 秒多是什么概念?用户问一个问题,光等数据传输就要 1 秒,然后 AI 才开始思考。这体验能好吗?
DeepSeek 的核心洞察是:数据中心里的服务器网卡,大部分时间是闲置的。
传统思路是专门买高速网络硬件,贵。DeepSeek 的思路是利用现有闲置资源,免费。
具体怎么做?
1. 网卡聚合:把多台服务器的闲置网卡带宽聚合成一个"虚拟高速通道",就像拼车,一辆车坐不满,那就多辆车一起拉货。
2. 多路径传输:KV 缓存分块,通过多条路径并行传输。
3. 智能调度:根据网络实时状态,动态选择最优路径,哪条路堵了就走另一条,跟高德地图一个逻辑。
┌──────────────┐
│ Prefill 节点 │
│ │
│ ┌──────┐ │
│ │ 网卡 1│ ──┼──→ 路径 A ──→ ┌────────────┐
│ └──────┘ │ │ │
│ ┌──────┐ │ │ Decode │
│ │ 网卡 2│ ──┼──→ 路径 B ──→ │ 节点 │
│ └──────┘ │ │ │
│ ┌──────┐ │ │ │
│ │ 网卡 3│ ──┼──→ 路径 C ──→ └────────────┘
│ └──────┘ │
└──────────────┘
效果很明显:
| 指标 | 传统方案 | DeepSeek | 提升 |
|---|---|---|---|
| 传输时间 | 0.64 秒 | 0.15 秒 | 4 倍 |
| 硬件成本 | 需要升级 | 零成本 | 100% 节省 |
这波操作叫什么?叫"白嫖"。网卡闲着也是闲着,不用白不用。DeepSeek 这波属于是:花 0 块钱,办 100 块钱的事。
建议其他大厂学习一下,别整天就知道买 H100 堆算力,有时候动动脑子更省钱。黄仁勋:你礼貌吗?
三、技术细节:三个关键优化
优化 1:KV 缓存分块传输
8GB 数据一次性传输,任何一条路径出问题就全挂了。而且接收方得等全部传完才能开始用,浪费时间。
DeepSeek 的解法是把 KV 缓存切成小块,每块独立传输:
# DeepSeek:分块传输
chunks = split(kv_cache, chunk_size=64MB)
for chunk in chunks:
send_async(chunk, decode_node, path=select_best_path())
好处很明显:
- 单块失败不影响整体,某条路堵了换一条就是了
- 可以动态调整每块的路径,高德地图看了都说内行
- 接收端可以边收边用,不用等全部传完
这思路熟不熟?对,就是 BT 下载的逻辑。DeepSeek 属于是把 P2P 那套玩明白了,建议迅雷给工程师打钱。
再解释一下:你看过视频吧?不用等整个视频下载完才能看,看一点缓冲一点。DeepSeek 就是这个思路,Decode 节点收到第一块数据就可以开始生成答案,不用等 8GB 全传完。
优化 2:网络状态实时监控
网络是动态的,刚才最快的路径现在可能堵了。就像你上班走的那条路,平时不堵,今天突然堵车了。
DeepSeek 的做法是实时监控每条路径的延迟和带宽,动态选择:
def select_best_path():
paths = [path_A, path_B, path_C]
scores = []
for path in paths:
latency = measure_latency(path)
bandwidth = measure_bandwidth(path)
score = bandwidth / latency # 简单评分
scores.append(score)
return paths[argmax(scores)]
更新频率是每 100ms 一次。100ms 是什么概念?人眨一次眼大约 300ms,所以这个更新速度比眨眼还快 3 倍。基本可以认为网络状态是实时更新的。
优化 3:Prefill 节点"预热"Decode 节点
Decode 节点收到 KV 缓存后还要初始化,浪费时间。就像你点外卖,骑手到了还得等你开门、找地方放、确认收货,这一套流程下来又浪费几分钟。
DeepSeek 的解法是传输的同时,提前通知 Decode 节点做准备:
时间线:
T0: Prefill 开始
T1: Prefill 完成 50% → 通知 Decode 节点"准备接收"
T2: Prefill 完成 100% → 开始传输 KV 缓存
T3: Decode 节点收到第一块 → 立即开始解码
T4: 传输完成,Decode 已生成部分输出
传统做法:T2 → T3 之间有初始化延迟
DeepSeek:T2 和 T3 几乎同时,无缝衔接
这叫"预热"。就像你冬天开车,提前热车,上车就能走,不用等发动机热起来。
四、性能提升:到底快了多少?
根据论文数据,逐项给你解释一下。
| 指标 | 传统架构 | DeepSeek V4 | 提升 |
|---|---|---|---|
| 首 token 延迟 | 450ms | 180ms | 2.5 倍 |
| 吞吐量 | 85 tokens/s | 210 tokens/s | 2.5 倍 |
| 并发请求数 | 50 | 130 | 2.6 倍 |
| 单位成本 | 1.0x | 0.4x | 60% 下降 |
首 token 延迟:从你问出问题到 AI 吐出第一个字的时间。传统要等接近半秒,DeepSeek 只要不到 1/5 秒。用户体验就是"这 AI 好快"。
吞吐量:原来 AI 一秒说 85 个字,现在能说 210 个字。写长答案的时候差距更明显。
并发请求数:同样的机器,能接 2.6 倍的客户。这省下的钱可不是小数目。
单位成本:原来处理 1 万个请求要花 1 万块,现在只要 4 千块。
不同场景的收益也不一样:
- 延迟敏感场景(实时对话):收益最大,用户终于不用盯着光标发呆了
- 高并发场景(API 服务):吞吐量提升明显,服务器可以说"我还能再战"
- 成本敏感场景(创业公司):可以用更少的机器跑更多的请求,省下的钱够给员工加鸡腿了
说人话版本:做对话机器人的用户体验起飞,做 API 服务的同样机器接更多单,创业公司少买点卡多睡会儿觉。
五、实战建议:谁适合跟进?
这得看你是谁。
云服务商 → 直接上 PD 分离
你有现成的数据中心和网络资源,规模越大收益越明显,还可以当成卖点——"我们的推理速度快 2.5 倍"。
实施步骤:
- 把推理集群分成 Prefill 池和 Decode 池
- 部署网络监控和调度系统
- 逐步迁移流量,验证稳定性
投入产出比:前期投入大概需要 2-3 个月开发,但上线后成本能降 60%,算下来半年就能回本。
中小企业 → 先观望,等开源
PD 分离需要一定的集群规模才能体现优势,你才 3 台机器,分离个寂寞。网络调度系统开发成本高,招个搞这个的工程师,半年工资够买 10 张 4090 了。DeepSeek 可能会开源相关代码,白嫖大法好。
替代方案:
- 用 vLLM、TGI 等成熟推理框架,站在巨人肩膀上不香吗
- 关注 DeepSeek 开源动态,GitHub Star 点起来
- 小规模测试 PD 分离概念验证,玩票性质试试水
翻译一下:别头铁,等大佬们踩完坑你再上。创业公司的命也是命。
什么时候可以考虑? 当你发现机器成本已经占到运营成本的 30% 以上,而且并发请求数稳定在 50+ 的时候,就可以认真考虑了。
研究者 → All in 这个方向
推理优化是刚需,工业界愿意买单。PD 分离还有大量优化空间,缓存管理、调度算法等都可以研究。容易出论文,也容易落地。
研究方向可以考虑:
- 更智能的网络调度算法,可以用强化学习
- KV 缓存压缩技术,能不能传得更少
- Prefill/Decode 资源动态分配,根据负载自动调整
发论文建议:这个方向现在还是蓝海,赶紧投。等大家都做出来了,你再发就晚了。
结尾:架构创新的本质
DeepSeek V4 的 PD 分离架构,核心不是技术多高深,而是想清楚了问题的本质:
计算是免费的,但移动数据是昂贵的。
所以让计算去资源多的地方,让数据少走冤枉路,用闲置资源解决瓶颈问题。这种思路,比具体的技术实现更有价值。
延伸思考一下,这个思路能不能用到其他地方?
当然能。训练任务能不能拆?有人已经在做了。数据存储能不能拆?冷热分离不就是这个思路?甚至你的业务流程能不能拆?微服务不就是这个逻辑?
一个思考题留给你:如果 Prefill 和 Decode 可以拆开,那训练过程中的其他阶段是不是也能拆?欢迎在评论区讨论。