简介:本文从底层机制出发,拆解大模型推理框架的核心组成与运行流程,分析连续批处理、分页注意力、前缀缓存、调度与并行策略的实现逻辑与边界,并给出框架选型的评估维度与常见误区,帮助读者理解“为什么快、为什么慢、如何选择”。
大模型推理框架本质上是一套“把模型权重变成可控计算服务”的系统软件。它接收用户请求(prompt),完成 tokenize、调度、前向计算、采样、detokenize,最终流式或整体返回结果。表面上看,它只是“跑模型”,但真正决定吞吐、延迟、成本与稳定性的,是框架内部的调度策略、显存管理、计算内核与并行方案如何协同。
要理解各框架的差异,先要建立一个共识:推理框架的核心矛盾是显存容量、计算效率与请求并发度之间的三角制约。模型权重占固定显存,KV Cache 随并发与序列长度线性增长,而 GPU 算力在 decode 阶段又因逐 token 生成而难以吃满。框架的所有优化,几乎都在这个三角中寻找更优解。
从发展阶段看,早期框架解决的是“能跑起来”,随后进入“跑得更快”,如今则迈向“在广泛模型、广泛硬件上稳定地跑得快”。这个演进过程也解释了为什么不同框架呈现出明显不同的成熟度与侧重点。
推理框架的复杂度来自两个维度的叠加:
难点在于,写论文的人只需在自己的设想上做 demo,而框架开发者必须让新优化与已有模块不冲突。例如一个针对 decode 的内核优化,可能与连续批处理的动态 shape 冲突;一个显存复用策略,可能与前缀缓存的命中逻辑冲突。因此,“兼容实现”才是推理框架真正的工程门槛,这也是评估一个框架成熟度的关键视角。
一个完整的推理框架通常可拆为以下几层:
| 层次 | 关键职责 | 主要机制 |
|---|---|---|
| 接入层 | 请求接收、鉴权、限流、协议适配 | 队列、背压、超时控制 |
| 调度层 | 决定每个 iteration 计算哪些请求 | 连续批处理、优先级、抢占 |
| 内存管理层 | KV Cache 分配、复用、回收 | 分页、块分配、前缀共享 |
| 计算层 | 模型前向、采样 | 融合内核、量化、并行 |
| 服务层 | 流式输出、指标、健康检查 | 异步返回、监控告警 |
理解这个分层后,就能把各框架的差异定位到“哪一层做得更深、哪一层还有短板”。
以单请求为例,其状态流转大致如下:
伪代码示意(通用逻辑):
loop each iteration:ready = scheduler.select(running, waiting)for req in ready:if req.is_prefill: kv_alloc(req)logits = model.forward(req, kv_blocks[req])token = sampler.sample(logits)req.append(token); stream_out(req, token)kv_free(finished_requests)
关键点在于:调度与内存管理是耦合的——调度决定谁能进入本 iteration,内存管理决定它是否有块可用。两者失衡就会导致“算力空闲”或“显存溢出”。
传统静态批处理要等一个 batch 全部结束才释放资源,短请求被长请求拖住,GPU 出现“气泡”。连续批处理以 iteration 为单位重组 batch,使新请求可以随时插入、完成请求立刻退出。其收益来自减少空闲等待、提高每轮计算的 token 产出密度。代价是调度复杂度上升,且需要与分页 KV 配合,否则动态 shape 会拖累内核效率。
需要特别澄清一个常见误区:只在 decode 阶段调用一个名为分页注意力的内核,并不等于实现了分页 KV 管理。真正的分页机制包含三部分:块分配器、逻辑到物理的块映射表、以及基于映射的注意力计算。只有三者齐备,才能获得显存碎片降低、前缀共享、按需扩容的收益。若仅在内核层借用名字而无块级管理,长序列与高并发下吞吐会明显受限。这也是评估框架时“看机制而非看宣传”的典型例子。
多轮对话、系统提示词、few-shot 模板会带来大量重复前缀。前缀缓存通过记录已计算序列的块哈希,在新请求命中相同前缀时直接复用对应 KV 块,跳过重复 prefill。它节省的是计算时间与显存写入,对首 token 延迟改善显著。边界在于:命中依赖前缀完全一致,缓存淘汰策略与显存预算需要权衡,过长缓存会挤占并发空间。
生产环境往往需要区分交互式请求与批处理请求。调度层通常支持优先级队列、最大并发限制与抢占。抢占的代价是可能需要丢弃部分 KV 或重算,因此设计上要尽量让“被抢占的代价”可预期。好的调度不是追求单指标最优,而是在延迟 SLO 与吞吐之间取得可控平衡。
张量并行把单层计算切到多卡,流水并行按层切分,二者用于模型放不下或追求更低延迟的场景,代价是卡间通信开销。量化(权重或 KV 量化)通过降低精度减少显存与带宽压力,提升 decode 吞吐,但需关注精度损失与内核支持度。这些机制的落地高度依赖框架与硬件的适配深度。
选型应围绕自身业务画像展开,建议按以下维度打分:
总体原则是:先明确瓶颈在显存、算力还是调度,再选择在该层机制最完整的框架;对处于快速演进期的框架,优先选择机制清晰、可验证、可回退的方案,而非追逐单项指标。
大模型推理框架的差异,本质是调度、内存、计算三层机制在“显存—算力—并发”三角中的不同取舍。理解连续批处理如何减少气泡、分页管理如何降低碎片、前缀缓存如何复用计算、并行与量化如何放大算力,才能真正判断一个框架“为什么快、为什么慢、适不适合自己”。在技术快速迭代的阶段,选型的核心不是找到最强框架,而是找到机制与业务负载最匹配、且工程上可验证可运维的那一个。