平均 时 延 卡 在 20 毫秒: 美 团 用 完整 请求 测 有 界 生成
美团技术团队 2026-10-15 的文章把搜推 SLM 分成只做一次 prefill 和固定步数 beam search。单卡容量取平均时延低于 20 毫秒且 P99 低于 80 毫秒的最高 QPS。Prefill-Only 有效 MFU 约 67%,大约是 SGLang 的 10 倍。

本文目录
平均时延卡在 20 毫秒:美团用完整请求测有界生成
美团技术团队《SLM 生成式高并发推理引擎:延迟约束下的有效吞吐优化》发布于 2026-10-15,作者是搜索和推荐平台。SLM 在这里指 0.5B 到 1B 的小语言模型。文章测的不是开放式聊天,而是搜索推荐里两类有上界的请求:只做一次 prefill 就出类别或分值,或者 prefill 之后再做固定次数的 beam search。
有界的意思是:控制流、状态容量和 decode 次数在部署前就能定下来。Prefill-Only 被当成 decode 次数为 0。同一个模型如果拿去做开放式生成,就不算这篇文章的负载。文中覆盖的请求,平均输入不超过 500 个 token。Beam 配置不超过 400 条 beam、5 个生成 token。代表实验里 beam 宽约 100,decode 4 次。
容量怎么取
早期用 Triton 的 Python Backend 加 SGLang。批量样本会被拆成多条独立生成请求,20 毫秒的端到端预算里,拆分、建对象和逐步调度摊不掉。后来改成一张静态 DAG:完整业务请求是调度、测量和容量规划的边界。Prefill-Only 里的多条样本一次进模型节点。Beam Search 从 prefill 到候选只调度一次。
排队用 G/G/1 的 Kingman 近似来解释。ρ 是 1000 毫秒里 GPU 在算的时间占比,c_a 是到达间隔的变异系数,c_s 是服务时间的变异系数,τ 是单次 forward 的平均耗时。搜推里序列分批,到达会偏离泊松分布;序列长度和 batch 比较稳,所以 c_s 小,单次推理一般低于 20 毫秒。他们拿掉 SGLang、vLLM 为无界生成准备的调度,专门压 τ。
正确性分三层。同一台机器、同一输入、同一部署产物下,Python Artifact Runtime 和 C++ DAG Runtime 的输出张量逐字节一致。Packed GQA、shared-prefix attention、FP8 线性层先和 Torch 对照;Beam Search 逐步比候选 token、分数、parent index、累计分数和 suffix K/V。低精度版本不要求跟原始 BF16 逐元素相同,但要用同一套数据集、样本处理、评估代码和指标,业务指标变化必须落在事先定好的范围内。文章没有写出这个范围的数字。
性能测试用固定在途请求数的闭环:一个请求完成立刻发下一个,客户端不加等待。QPS 按每秒完成的完整 RPC 算。端到端时延从发出到返回。单卡容量取同时满足平均时延低于 20 毫秒、P99 低于 80 毫秒的最高 QPS。再往上加并发,短 prompt 的 Beam Search 只多几个百分点 QPS,平均时延却涨 30% 以上,并越过 20 毫秒。线上不取无约束的最高 QPS。
对照和有效 MFU
卡型没有点名,只说是业务常用的相近算力档、单卡、请求不跨卡。混合精度有效 MFU 把每个请求里 BF16 和 FP8 的逻辑矩阵 FLOPs,分别除以约 150 TFLOPS 和 300 TFLOPS 的 dense 峰值,再乘以同一口径的完成 QPS。FMA 按 2 FLOPs 计。分子只含 linear、LM head 和 attention 的逻辑矩阵计算。冗余对齐、动态量化、逐元素、softmax、Top-K、Beam 状态、tokenizer、编码、调度、传输和同步都不进分子。
代表结果写在正文里,不是我补的表。约 0.6B 的 Prefill-Only,每个请求大约 15 条样本,大约 100 request QPS,也就是大约 1500 sample/s。约 0.5B 的短 prompt 和长 prompt Beam Search,大约 300 和 120 request QPS。三类平均时延都低于 20 毫秒,P99 大约 70 毫秒。Prefill-Only 有效 MFU 约 67%,大约是 SGLang 的 10 倍。短 prompt Beam Search 约 41%,大约是 SGLang 的 6 倍。
分层对照:shared-prefix 让长 prompt Beam Search 的完整 DAG 吞吐提高约 20%。FlashInfer 的共享 page table 曾经让完整 DAG 提高约 3%,但和 FlashAttention 一样,进 AOTI 之后不稳定,没有采用。选择性 FP8 让 Prefill-Only 的完整 DAG 吞吐提高约 24%。长 prompt 只对 MLP 用 FP8;短 prompt 的 LM head 占比更高,过了数值和业务验收才纳入。tokenizer 从毫秒级降到十微秒级。固定 1024 token、不含 RPC 的诊断里,完整 DAG 和只跑 AOTI 的吞吐差大约 1%。
跨请求 prefix cache 没开。模板很快进入 query 和候选文本,公共前缀短,命中率低,平均输入又不到 500 token。同一条 Beam Search 请求内部仍共享一份 prompt K/V。
限制
这组数字只覆盖文中的模型、输入分布和单卡环境。开放式长文本、decode 长度乱变、序列不断进出、强依赖 continuous batching、跨请求前缀又长又容易命中、KV 需要动态分页时,文章说 vLLM 和 SGLang 更合适。业务验收区间没有写出上下界。容量表在页面上,正文没有逐格抄出每个并发档的 QPS。GPU 型号没有写。有效 MFU 不是整卡利用率。
美团,搜索和推荐平台,SLM 生成式高并发推理引擎:延迟约束下的有效吞吐优化,2026-10-15,https://tech.meituan.com/2026/10/15/Small-Language-Model-in-meituan.html
觉得有用,转给同事
微信扫码
用微信扫一扫,在手机上打开后即可转发。