在 Qwen3 这样规模的 MoE 大模型推理场景中,实现万亿 token 级别的吞吐量,不能仅依赖硬件堆砌或分布式架构的横向扩展,token 调度算法的精细化设计同样是决定性因素。批处理策略决定了 GPU 计算单元的饱和度,内存带宽利用率决定了数据搬运的效率,两者共同构成了高吞吐推理的核心瓶颈点。本文从 token 调度算法层面出发,剖析批处理调度机制与内存带宽优化策略,为工程实践提供可落地的参数建议。
连续批处理机制与飞行中批处理原理
传统静态批处理在推理系统中存在显著的资源浪费问题。当一个批次中的某个序列因长度较长而延迟完成时,其他短序列必须等待整个批次结束才能释放资源,导致 GPU 在相当长的时间窗口内处于低利用率状态。连续批处理(Continuous Batching)通过在 token 级别而非请求级别进行调度,从根本上改变了这一局面。具体而言,当批次中的某个序列完成推理并输出 EOS 标记时,系统立即释放该序列占用的计算资源,同时将等待队列中的新请求动态插入到正在执行的批次中,从而保持 GPU 计算单元的持续饱和。
飞行中批处理(In-Flight Batching)是连续批处理的一种高效实现方式,其核心在于调度器维护一个全局请求队列,并根据当前 GPU 显存状态和预估的内存需求,动态决定每个推理步骤中哪些请求可以进入批次。vLLM 引擎对这一机制进行了深度优化,其调度器会实时追踪每个序列的 KV 缓存块使用情况,计算新请求加入后的显存占用阈值,只有当总显存需求低于预设的安全边界时,才会准许新请求加入当前批次。这种贪婪式的调度策略在大多数负载场景下能够实现接近硬件理论峰值的 GPU 利用率。
对于 Qwen3 这类大规模 MoE 模型,飞行中批处理的调度周期需要特别关注。由于 MoE 模型的 FFN 层存在多个专家网络的动态路由,每个 token 的计算量并非恒定,这给精确的显存预估带来了挑战。实践中建议将调度周期设置为 1 到 2 个 token 生成步长,并在调度决策中预留 5% 到 10% 的显存冗余,以应对路由决策带来的计算量波动。对于峰值显存利用率,安全生产阈值应控制在 92% 以下,预留空间用于突发流量和 KV 缓存的临时扩展。
PagedAttention 与内存碎片控制
PagedAttention 是 vLLM 架构中用于管理 KV 缓存的核心技术,其设计灵感源自操作系统中的分页内存管理机制。在传统的推理系统中,KV 缓存采用连续内存分配策略,每个序列的上下文需要预先申请一块足够容纳最大上下文长度的连续显存区域。这种方式在长序列场景下会造成严重的内存碎片化 —— 当序列实际使用的上下文长度远小于预分配长度时,大量显存被浪费;而当多个序列的上下文长度差异较大时,碎片无法整合利用,导致显存利用率低下。
PagedAttention 将 KV 缓存划分为固定大小的块(通常为 16KB 或 32KB),每个块可以独立分配和释放,块与块之间无需物理连续。这种分块管理策略将内部碎片率从传统的 20% 到 40% 降低到 5% 以下,外部碎片则几乎完全消除。以 Qwen3-235B-A22B 模型为例,在典型负载下使用 PagedAttention 可以将单卡并发数提升 2.3 倍以上,这一提升直接转化为吞吐量的线性增长。
分块大小的选择需要在内存效率与碎片控制之间寻求平衡。较小的块大小能够更精细地适配不同长度的序列,但会增加块级元数据的管理开销;较大的块大小则能降低元数据开销,但可能导致更严重的内部碎片。实验数据表明,对于 Qwen3 系列的 30B 到 235B 参数模型,16KB 的块大小在大多数场景下能够取得最佳的内存效率与调度性能的平衡。对于超长上下文(超过 32K token)的场景,建议将块大小调整为 32KB 以减少元数据开销。
内存带宽利用率优化策略
在万亿 token 吞吐量的目标下,内存带宽往往成为比计算能力更早触及的瓶颈。Qwen3 模型的每一次前向传播都需要读取完整的 KV 缓存,其读取数据量与模型参数量、批次大小和序列长度的乘积成正比。当批次规模较大时,内存带宽的饱和程度直接决定了推理吞吐量的上限。
量化是缓解内存带宽压力的首选手段。INT8 量化可以将 KV 缓存的数据量减半,FP8 量化则可以在保持更高精度的情况下实现近似的压缩率。在 vLLM 引擎中启用 FP8 量化后,Qwen3-30B 模型的 KV 缓存显存占用从约 48GB 降低到约 24GB,使得在单张 H100 GPU 上可以承载更大的并发批次。量化带来的精度损失在大多数文本生成任务中是可以接受的,但对于需要严格数值精度的场景,建议在上线前进行基准测试以验证生成质量。
除了量化之外,内存访问模式的优化同样关键。PagedAttention 的分块设计天然地改善了内存访问的局部性 —— 每个推理步骤只需要读取当前 token 位置对应的少数几个 KV 缓存块,而非整个序列的完整缓存。进一步地,可以通过调整注意力机制的闪光显存访问(Flash Attention)参数来优化带宽利用。启用 Flash Attention 后,注意力计算过程中的中间结果可以直接在 SRAM 中完成聚合,减少了与全局显存的交互次数,建议将 SRAM 预算比例设置为 0.25 到 0.35,以在多数硬件配置下获得最佳的带宽效率。
调度策略的工程参数配置
基于上述原理,将调度策略落地到工程实践需要关注以下核心参数。第一,最大批次 token 数(max_num_seqs)控制了每个推理步骤中处理的 token 总量上限。较高的值可以提升吞吐量但会增加延迟,较低的值则相反。对于 Qwen3-235B-A22B 在 H100 上的部署,建议将该参数设置为 8192 到 16384 之间,具体数值需要根据目标延迟要求调整。如果业务场景对首 token 延迟(TTFT)有严格要求,应将上限降低到 4096 以内,并通过增加调度频率来弥补吞吐量损失。
第二,KV 缓存内存占比(kv_cache_fraction)决定了用于缓存的显存比例。该参数需要与最大批次 token 数协同调优 —— 过高的缓存占比会挤压批处理的空间,过低的缓存占比则会导致频繁的缓存淘汰。生产环境推荐将该参数设置为 0.85 到 0.90,在保障缓存效率的同时为突发流量预留 10% 到 15% 的冗余显存。
第三,预填充与解码分离策略(prefix caching enabled)是提升长上下文场景吞吐量的关键。当多个请求共享相同的前缀(例如系统提示词)时,相同前缀的 KV 缓存可以复用,避免重复计算。启用前缀缓存后,相同前缀的请求可以快速跳过预填充阶段,直接进入解码阶段,首 token 延迟可以降低 60% 到 80%。对于 Qwen3 这类支持长上下文的模型,强烈建议在调度器中实现基于哈希的 prefix 匹配机制。
监控指标与性能回归检测
高吞吐系统的持续稳定运行离不开完善的监控体系。核心监控指标应包括:GPU 利用率(目标值应稳定在 95% 以上)、显存带宽利用率(目标值应稳定在 85% 以上)、批次队列长度(用于判断是否需要扩容或优化调度策略)、首 token 延迟与 token 间延迟(用于检测调度策略是否导致延迟劣化)、以及 KV 缓存命中率(用于评估 prefix caching 的效果)。
当监控指标出现异常时,调度策略的动态调整能力是系统韧性的保障。建议在调度器中实现基于阈值的自动降级机制 —— 当显存利用率连续 30 秒超过 90% 时,自动降低最大批次 token 数;当队列等待时间超过 200ms 时,触发紧急的请求优先级提升。这些自动化机制可以在无需人工干预的情况下应对流量突增和资源争用场景。
综上所述,Qwen3 万亿 token 级别的吞吐优化需要在批处理调度和内存带宽两个维度上协同发力。连续批处理与飞行中批处理保障了 GPU 计算单元的高利用率,PagedAttention 解决了内存碎片化难题,量化与访问模式优化释放了内存带宽的潜力,而合理的工程参数配置和监控体系则确保了系统在实际部署中的稳定性和可维护性。
参考资料
- vLLM 官方文档与 PagedAttention 论文(arXiv:2309.06180)
- GPStack Qwen3 性能调优实验室数据