1. 从KV-Cache瓶颈到DualPath架构的演进
在大型语言模型(LLM)推理过程中,KV-Cache(键值缓存)的管理一直是影响性能的关键因素。传统系统中,KV-Cache的加载路径存在明显的带宽瓶颈,特别是在预填充(prefill)阶段。当模型需要处理长上下文或大批量请求时,存储带宽的利用率不均衡会导致GPU计算资源闲置,严重影响整体推理效率。
北大提出的DualPath系统通过双路径KV-Cache加载机制,创新性地解决了这一瓶颈问题。其核心思想是将原本集中在预填充引擎的存储I/O压力,动态分配到预填充和解码两个路径上。这种设计充分利用了解码引擎的闲置带宽,使得系统整体存储网络带宽得到最大化利用。
在实际测试中,DualPath系统在DeepSeek-V3.2 660B模型上实现了最高1.87倍的吞吐量提升。这种性能提升主要来自于对存储网络带宽利用率的优化,将原本仅能利用预填充侧SNIC带宽的单一路径,转变为可以聚合所有引擎SNIC带宽的双路径架构。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. DualPath系统的核心设计原理
2.1 双路径加载机制详解
DualPath系统的创新之处在于引入了两种并行的KV-Cache加载路径:
-
预填充引擎直接读取路径(PE Read Path):
- KV-Cache从持久化存储直接加载到预填充引擎的缓冲区
- 在注意力层计算前,将对应层的KV-Cache传输到预填充引擎的HBM
- 计算完成后,所有KV-Cache(包括命中和未命中的token)传输到解码引擎缓冲区
-
解码引擎辅助读取路径(DE Read Path):
- KV-Cache首先被读取到解码引擎缓冲区
- 在预填充阶段,对应层的KV-Cache从解码引擎缓冲区读取
- 仅将未命中token的KV-Cache传输回解码引擎缓冲区合并
这两种路径的动态分配由系统的流量调度器实时决定,基于各节点的存储NIC队列长度、GPU计算负载等指标进行智能调度。这种设计使得系统能够根据实时负载情况,自动选择最优的KV-Cache加载路径。
2.2 层流式预填充执行
DualPath采用了层流式(layerwise)预填充执行策略,这是实现高效KV-Cache管理的关键技术之一。传统方法会一次性加载整个上下文的KV-Cache,这会导致HBM容量压力过大。而层流式执行将KV-Cache的加载和计算分解到各个注意力层:
- 每个注意力层计算前,仅加载该层所需的KV-Cache块
- 计算完成后立即释放HBM中的KV-Cache空间
- 下一层的KV-Cache以流式方式加载,与计算重叠进行
这种精细化的内存管理策略,使得系统能够处理远超单GPU HBM容量的超长上下文。在我们的实测中,层流式预填充单独就能带来约17.21%的性能提升。
3. 系统实现中的关键技术挑战
3.1 流量隔离与QoS保障
双路径架构引入了额外的KV-Cache传输流量,这些流量可能干扰模型推理中关键的集体通信操作(如专家并行中的AllToAll)。DualPath通过CNIC(Compute NIC)中心的流量管理方法解决了这一问题:
- 虚拟通道隔离:在InfiniBand网络中,为模型推理通信分配专用高优先级虚拟通道(VL),KV-Cache传输使用独立的低优先级通道
- 带宽预留机制:网络交换机和NIC的VL仲裁器配置为99%带宽保留给高优先级流量,1%给低优先级
- CNIC辅助的数据拷贝:所有进出GPU的数据传输都通过配对的CNIC进行,利用RDMA Write请求执行本地H2D/D2H拷贝
这种设计确保了KV-Cache传输不会影响模型推理的关键通信,同时又能充分利用计算网络的空闲带宽。实测表明,CNIC辅助的拷贝方式比传统CUDA拷贝引擎在处理大量小块数据时效率更高,单次操作延迟从5-7μs降低到约1μs。
3.2 动态负载均衡算法
双路径架构的成功运行依赖于精细的负载均衡策略。DualPath的调度器采用两级调度机制:
引擎间调度(Inter-Engine Scheduling):
- 将引擎划分为预填充组和解码组
- 每个引擎定期报告:未完成请求数、总token数和磁盘读取队列长度
- 根据负载情况将请求动态分配给最合适的引擎
- 选择KV-Cache读取路径时,优先选择读取队列较短的节点
引擎内调度(Intra-Engine Scheduling):
- 使用FIFO打包策略决定每个前向批次包含的请求数
- 为每个请求预估注意力层执行时间
- 动态调整批次大小,确保各GPU的注意力层执行时间均衡
- 引入"计算配额"机制防止单个批次占用过多资源
这种调度算法在实际部署中表现出色,将存储NIC的负载均衡比从1.53提升到1.18,注意力层执行的Max/Avg比最低可达1.06,显著减少了GPU空闲等待时间。
4. 性能评估与实际应用效果
4.1 离线批量推理性能
在DeepSeek-V3.2 660B模型上的测试显示,DualPath相比基础系统(Basic)实现了显著的性能提升:
| 测试场景 | 性能提升 | 上下文长度 | 代理数量 |
|---|---|---|---|
| 32K上下文 | 1.82× | 32K | 1024 |
| 64K上下文 | 1.87× | 64K | 1024 |
| 短追加长度(100token) | 1.99× | 64K | 1024 |
性能提升主要来自三个方面:
- 层流式预填充贡献约17.21%加速
- 双路径加载贡献约38.19%加速
- 智能调度算法贡献约45.62%加速
值得注意的是,性能提升在短追加长度场景更为明显,因为此时KV-Cache加载压力相对计算压力更为突出。随着追加长度增加,GPU计算逐渐成为瓶颈,双路径的优势会相对减小。
4.2 在线服务能力
在线服务场景下,DualPath表现出更高的代理吞吐量(APS)和稳定的延迟特性:
| 模型 | 最大APS(基础系统) | 最大APS(DualPath) | 提升倍数 | TTFT SLO达标率 |
|---|---|---|---|---|
| DS 27B | 0.6 | 1.0 | 1.67× | 99.8% |
| DS 660B | 0.4 | 0.9 | 2.25× | 99.5% |
| Qwen 32B | 0.7 | 1.3 | 1.86× | 99.7% |
在线服务的延迟指标也得到显著改善:
- TTFT(首token时间)保持在2秒以内
- TPOT(每token时间)稳定在50ms SLO以内
- 系统在90%负载下仍能保持稳定的服务质量
4.3 大规模扩展性验证
在超大规模集群(1152个GPU)上的测试验证了DualPath的良好扩展性:
| 配置 | 代理数量 | 作业完成时间 | TTFT | TPOT |
|---|---|---|---|---|
| 2P4D | 2K | 3,167s | 1.739s | 0.039s |
| 48P96D | 48K | 3,201s | 1.847s | 0.036s |
测试结果显示,从16个GPU扩展到1152个GPU,系统保持了近乎线性的扩展能力,作业完成时间基本持平,同时处理能力提升了24倍。调度器CPU使用率始终低于10核,证明中心调度器不会成为瓶颈。
5. 实际部署中的经验与优化建议
在实际生产环境中部署DualPath系统时,我们积累了一些宝贵经验:
硬件配置建议:
- 每个节点配置8个GPU时,预填充与解码引擎比例建议在1:7到7:2之间
- 确保每个GPU-NIC对位于同一PCIe交换机下,避免跨交换机通信
- 计算网络和存储网络物理隔离,防止带宽争用
参数调优技巧:
- 短读取队列阈值α设置为平均token数的1.5倍
- 未完成token上限β设置为GPU能同时处理的最大token数的80%
- 计算配额根据注意力层执行时间动态调整,初始值设为单GPU计算能力的70%
常见问题排查:
- 如果TTFT异常升高,首先检查存储NIC带宽是否饱和
- 解码延迟增加时,验证解码引擎的HBM使用情况
- 吞吐量不达标时,检查调度器的路径选择策略是否失衡
一个特别有用的调试技巧是监控存储NIC的流量分布。理想情况下,双路径应使各节点的存储NIC利用率均衡。如果发现明显不均衡,可能需要调整调度器的负载均衡参数。
