RTP-LLM: High-Performance Alibaba LLM Inference Engine

framework 2605.29639
inference-enginepd-disaggregationkv-cache-managementspeculative-decodingmultimodal-servingmodel-loading

RTP-LLM: High-Performance Alibaba LLM Inference Engine — L2 #

§1 TL;DR #

RTP-LLM: Alibaba 生产级推理引擎(100M+ 用户)。集成 PD 解离、4 层 KV cache 层级、cache 感知调度、模块化推测解码、文件序加载,对比 vLLM/SGLang 实现 6.3x 加载加速、37% TTFT P95 降低、2.52x 多模态吞吐提升。

§2 Q1 / Q2 / Q3 #

Q1 痛点 #

生产级 LLM serving 面临四重叠加瓶颈:

  1. 动态负载下 GPU 利用率低 — 请求模式变异极大(短 query 到 128K+ context),静态 batching 无法适应。Prefill 计算密集、decode 带宽密集,资源需求天然错配。
  2. KV cache 增长导致内存耗尽 — KV cache 随 sequence length × batch size 线性增长,主导 GPU 内存。传统分配器受碎片和缺乏跨请求共享困扰。
  3. 架构异构性 — MoE(600B+)、dense、多模态(ViT + LLM)的计算 profile 根本不同,单一模式系统无法高效服务。
  4. 运维脆弱性 — 企业部署要求分钟级加载 600B+ 模型以支持持续更新,但现有系统需数小时且缺乏生产级容错。
  5. Q2 方法 #

    RTP-LLM 通过集成系统设计同时解决四个挑战:

    • 文件序驱动模型加载(挑战 IV):将加载范式从模型结构驱动重构为文件顺序 I/O,通过单进程读取 + 分布式 broadcast 消除冗余读取,复用共享内存 buffer,并将 I/O 与通信 overlap。
    • PD 解离 + 层级 KV cache(挑战 I & II):物理解耦 prefill 和 decode 到专用节点,后端为 4 层 cache 层级 — GPU 显存 → 本地 CPU 内存 → 远程 CPU(RDMA)→ 分布式存储(3FS)。统一 hash map 实现 $O(B)$ 前缀匹配替代 $O(B \times W)$ 逐 worker 查找。
    • Cache 感知流量调度(挑战 I & II):Master 并行查询本地 + 远程 cache,为每个候选 worker 计算多因子评分:

    $$score(w) = \alpha \cdot \frac{local\_match\_len(w)}{total\_seq\_len} + \beta \cdot \frac{remote\_match\_len}{total\_seq\_len} - \gamma \cdot \frac{predicted\_latency(w)}{max\_latency}$$

    平衡 cache 复用收益与延迟代价。Decode 路由使用 chat-ID 亲和保持 KV cache locality。

    • 模块化推测解码(挑战 I):分解为四个无状态 C++ 组件(ProposeExecutor, ScoreExecutor, SpeculativeSampler, SpeculativeUpdater),支持 Naive / MTP / Eagle / Prompt Lookup 四种算法。
    • 自适应 KV cache 量化(挑战 II):运行时量化(FP16/BF16 → INT8/INT4/FP8),per-tensor 或 per-block 动态 scaling。
    • 解耦 EPD 多模态处理(挑战 III):ViT 和 LLM 独立部署在不同 GPU stream 上,实现计算 overlap 和非对称内存分布。

    核心技术壁垒:统一 hash map 前缀匹配 + 多层 cache 层级 + cache 感知评分函数构成紧耦合协同优化系统。统一 map 将前缀匹配从 $O(B \times W)$ 降至 $O(B)$;4 层层级(GPU/CPU/RDMA/3FS)保证 cache 跨驱逐级别持久化;评分函数($\alpha, \beta, \gamma$ 权重、20ms 状态轮询、50ms cache 同步)联合优化 cache 复用与延迟。复现单个组件不难,但调度决策、cache 放置、请求路由的协同设计 — 在生产流量下联合自适应 — 需要大量运营调优,仅凭论文无法获得。

    Q3 结果 #

    对比 vLLM 和 SGLang,在真实生产流量和受控基准上(8B–480B 模型):

    维度关键结果
    模型加载(235B, TP=8)6.27x 加速(33s vs 204–207s)
    流量调度(生产环境)35–37% TTFT P95 降低,215% cache 复用提升,75% prefill 机器缩减
    PD 解离(480B MoE)4.72x–5.33x TTFT 加速,45% cache 命中(vs 19–29%)
    推测解码(DeepSeek-V3)1.12x–2.48x 吞吐提升
    量化推理(Qwen3-32B)35–40% batch 延迟降低,1.9x–3.0x TTFT 提升
    多模态 EPD(Qwen2.5-VL-7B)1.86x–2.52x 吞吐,2.12x–2.36x TTFT 降低

    §3 架构 / 方法图 #

    Figure 1: RTP-LLM System Architecture

    Paper Figure 1: RTP-LLM System Architecture。 系统由 Frontend Application(tokenization / 预处理)、Master(全局协调 / 调度 / 前缀匹配)、Prefill Node 和 Decode Node(PD-Disaggregation 模式下物理分离)、Multi-Tiered Cache(4 层)、Name Service(心跳 / 发现)、DP-Controller(节点内 batch 执行)组成。每个推理节点配备 Carbon 服务实现自动故障恢复。

    请求生命周期遵循 Algorithm 1:

    1. FrontApp tokenize 输入并生成 block hash ID
    2. Master 生成前缀 hash key,通过统一 hash map 执行 $O(B)$ cache 匹配,为每个候选 worker 计算 cache 复用评分
    3. 层级 cache 解析:GPU block_cache(引用计数更新)→ 本地 CPU 内存(加载到 GPU)→ 远程 CPU via RDMA → 3FS 分布式存储
    4. 在调度到的节点上执行 ExecuteInference
    5. CacheReturnAndUpdate 归还 KV cache block 并更新 LRU 元数据
    6. 支持两种部署模式:

      • PD-Fusion:prefill 和 decode 共享同一节点
      • PD-Disaggregation:物理分离 prefill 和 decode 节点,支持独立扩缩

      Figure 2: Model Loading Optimizations

      Paper Figure 2: Model Load Optimizations。 展示从模型结构驱动加载(冗余读取、非顺序访问)到文件序驱动加载(顺序 I/O、单读取者 + 分布式 broadcast)的转变。右侧展示 I/O–通信 overlap pipeline,文件读取与 tensor broadcasting 并行执行。

      文件序加载的关键洞察:传统方式按模型层结构遍历 — 每个 TP 进程独立读取同一文件中分散的 tensor,导致 FUSE 预取失效和文件缓存浪费。RTP-LLM 反转遍历顺序:按文件顺序读取所有 tensor,每个文件仅由一个进程读取后 broadcast 给其他进程。

      Figure 3: EPD Disaggregation

      Paper Figure 3: EPD Disaggregation。 ViT(视觉编码器)和 LLM 解耦部署在独立 GPU stream 上。GPU0 仅处理 ViT 编码(9,280 MB 显存),GPU1 承载语言生成(89,088 MB 显存)。这种非对称布局在高并发下实现计算 overlap,并释放 GPU0 内存用于更高 ViT batch 并发。

      调度与 cache 架构细节 #

      Master 的调度决策集成三个数据源,分别有不同的轮询频率:

      • Worker 状态(20ms 轮询):运行中 / 等待中请求数、GPU 内存、KV cache 占用
      • Cache key 同步(50ms 轮询):基于版本号的 delta 更新
      • 前缀匹配:单遍统一 hash map 查找,产出每 worker 匹配长度

      对于 prefill,Master 按相似 sequence length 分组(窗口 $w = \max(DP\_size, |R|)$),当所有 DP-Controller 忙时使用预测调度:

      $$t_{available}(d_i) = \max_{r \in running(d_i)} t_{start}(r) + \hat{t}_{prefill}(r)$$

      对于 decode,chat-ID 亲和将回访用户路由到同一 worker 以复用 KV cache,配合准入控制和反压防止 cache thrashing。

      §4 作者证明 #

      无形式化理论证明 — 仅实证,但包含三个工程模型方程。

      记号表 #

      SymbolDefinitionSource
      $w$调度窗口大小§5.1
      $DP\_size$数据并行组大小§5.1
      $\R\$队列深度(待处理请求数)§5.1
      $t_{available}(d_i)$DP-Controller $d_i$ 的预测可用时间§5.1
      $t_{start}(r)$请求 $r$ 开始执行的时间§5.1
      $\hat{t}_{prefill}(r)$请求 $r$ 的预测 prefill 时间§5.1
      $\alpha, \beta, \gamma$Cache 复用 vs. 延迟权重因子§5.2.5
      $local\_match\_len(w)$Worker $w$ 的本地 cache 前缀匹配长度§5.2.5
      $remote\_match\_len$远程 cache 前缀匹配长度§5.2.5
      $total\_seq\_len$请求的总序列长度§5.2.5
      $predicted\_latency(w)$Worker $w$ 的预测延迟§5.2.5
      $B$请求中的 block 数§5.2.2
      $W$Worker 数量§5.2.1

      方程物理意义 #

      Eq. 1 — $w = \max(DP\_size, |R|)$:调度窗口动态扩展。队列浅时($|R| < DP\_size$)默认填满所有并行槽;积压时窗口增长至队列深度,实现更好的长度分组以减少 padding 浪费。

      Eq. 2 — $t_{available}(d_i) = \max_{r \in running(d_i)} t_{start}(r) + \hat{t}_{prefill}(r)$:预测调度通过取所有运行请求中最大剩余时间估计各 DP-Controller 何时释放。用 max 而非 sum 因为 batch 内 prefill 并发执行 — controller 在最长请求完成时释放,而非按顺序逐个完成。

      评分函数 — $score(w) = \alpha \cdot \frac{local\_match\_len(w)}{total\_seq\_len} + \beta \cdot \frac{remote\_match\_len}{total\_seq\_len} - \gamma \cdot \frac{predicted\_latency(w)}{max\_latency}$:平衡 cache 复用收益(正项)与延迟代价(负项)。本地 cache 权重更高($\alpha > \beta$)因 GPU 驻留 cache 免去传输。函数对所有因子线性 — 无凸性结构 — 易于调优但对非线性 cache-延迟权衡可能次优。

      6 项检查 #

      1. 推导链完整性:三个方程均为独立工程启发式,无推导链,非从理论模型推导。
      2. 假设边界:Eq. 2 假设 prefill 时间可从 sequence length 预测 — 当 MoE expert routing 导致计算量变异时失效(§8.2 中 MoE 使用不同配置隐含承认此问题)。
      3. 单调性/凸性:评分函数线性 — cache 匹配单调递增、延迟单调递减。无内点最优;最优 worker 总是最高评分者。
      4. 量纲一致性:评分函数三项均为无量纲比(长度/长度、时间/时间)。✓
      5. 参数可验证性:$\alpha, \beta, \gamma$ 描述为"基于负载特征调优"但未提供数值或调优方法论 — 可复现性缺口。
      6. 数值带入验证:论文未将具体负载数据代入方程验证中间预测。方程作为系统设计描述而非预测模型存在。
      7. 缺失:一个形式化排队模型(M/G/k 或类似)关联请求到达率、cache 命中率和服务速率,本可澄清:(a) 为何淘宝商家负载 cache 复用提升 <1% 而机器人 Q&A 为 215%;(b) PD 解离停止获益的吞吐天花板(Table 4 显示三框架吞吐一致 ~1100 tok/s);(c) 作为负载特征函数的最优 prefill:decode 节点比。

        §5 实验与数据 #

        生产流量调度 #

        Table 2: Traffic scheduling performance

        Paper Table 2: 两个真实生产负载的流量调度性能对比。 开启流量调度(TS)后:内部机器人 Q&A 实现 37.2% TTFT P95 降低(83.3ms → 52.3ms),淘宝商家客服实现 35.4% TTFT P95 降低(350ms → 226ms)。

        Cache 复用提升高度不对称:机器人 Q&A 从 26.6 跳至 83.8 tokens(215%),而淘宝商家几乎不变(833 → 840 tokens,<1%)。这种差异反映了商家服务已有高系统提示级 cache 复用(2500 token 输入中大量共享前缀),调度优化空间有限。机器人 Q&A 的短且多样 query(300–1000 tokens)从统一 hash map 的跨 worker 匹配中获益更多。

        75% prefill 机器缩减(80 → 20 台)是运营层面最具冲击力的结果 — cache 感知调度直接带来的成本节约。

        PD 解离(480B MoE) #

        Table 4: PD Disaggregation performance for Qwen3-Coder-480B-FP8

        Paper Table 4: Qwen3-Coder-480B-A35B-Instruct-FP8 性能对比。 RTP-LLM 达到 45.09% cache 命中率(vs SGLang 28.70%、vLLM 19.10%)和 1338ms TTFT(vs SGLang 6323ms、vLLM 7135ms)— 4.72x–5.33x TTFT 加速。

        关键发现:三个框架的吞吐本质相同(~1082–1153 tok/s)。这揭示 TTFT 优势完全来自 cache 调度而非 decode 侧改进。Decode 路径不是差异化因素 — 价值在于 prefill 侧的 cache 复用和调度智能。

        部署:5 节点 × 8 GPU,4 节点 prefill / 1 节点 decode,TP=8,EP=8,使用 DeepEP 做 All2All 通信,NCCL IBRC 做 KV 传输。

        推测解码 #

        Table 5: Speculative decoding throughput for DeepSeek-V3-0324

        Paper Table 5: DeepSeek-V3-0324 推测采样吞吐对比。 RTP-LLM 达到 187.53 tok/s vs vLLM 167.95(1.12x)和 SGLang 75.785(2.48x)。对 vLLM 的优势归因于 C++ 算子直接启动消除 Python-to-C++ 调用开销。

        论文使用 step size = 1(每步仅预测一个 token),这异常保守 — 多数推测解码工作使用 k=3–7。真实部署 MTP 数据(Table 6)显示 ~1.9 tokens/step 接受率,KV cache 利用率 >90%,SM 利用率 ~60%,说明生产负载特征限制了推测深度。

        真实部署指导(235B MoE + MTP):1TP8DP 适合延迟敏感在线服务(128–512 并发下最优 TPOT);2TP4DP 离线吞吐导向场景最优(峰值 599.8 TPS);4TP×4 仅在极低并发(64 请求)下最优;2TP8DP 因跨 GPU TP 通信瓶颈退化最快。

        模型加载 #

        Table 7: Model loading time for Qwen3-235B-A22B

        Paper Table 7: Qwen3-235B-A22B 模型加载时间对比。 RTP-LLM 在 TP=8 下 33.0s vs SGLang 206.7s 和 vLLM 204.0s — 6.18x–6.27x 加速。SGLang 和 vLLM 展现负扩展性(TP=4→8 加载时间增加 16.5–17%),而 RTP-LLM 改善(37.1s → 33.0s)。原因:RTP-LLM 文件序驱动方式在更多 GPU 间分布 I/O 负载,而 vLLM/SGLang 模型结构驱动方式在更高 TP 下产生更多冗余读取和串行化。

        量化推理 #

        Qwen3-32B 单 GPU:FP8 KV Cache 配置下 35–40% batch 延迟降低;所有配置下 1.9x–3.0x TTFT 降低。精度影响极小(PPL 7.59–8.09 vs 基线 7.59–7.67)。

        多模态 EPD #

        Qwen2.5-VL-7B 在 GQA benchmark:6288.48 tok/s 吞吐(1.86x SGLang,2.52x vLLM);1737ms TTFT(2.36x 和 2.12x 降低)。EPD 架构造成极端内存非对称:GPU0 使用 9,280 MB(仅 ViT)而 GPU1 使用 89,088 MB(LLM),这是有意的权衡 — 释放的 GPU0 内存允许更高 ViT batch 并发。

        §6 论证链 #

        StepClaimEvidenceValidity
        1文件序 I/O 消除冗余读取并启用 FUSE 预取Fig. 2 机制 + Table 7(TP=8 下 6.27x 加速)+ 基线负扩展性强 — vLLM/SGLang 在更高 TP 下负扩展佐证冗余读取诊断
        2统一 hash map + cache 亲和调度提升 KV cache 复用Table 2 + Table 3(机器人 Q&A 215% 提升)+ 75% prefill 机器缩减部分强 — 机器人 Q&A 215% 有说服力,但淘宝商家 <1% 提升表明机制依赖负载特征
        34 层 cache 层级实现跨级别持久化和恢复Algorithm 1(4 层解析)+ Table 4(45% cache 命中 vs 19–29%)中等 — cache 命中提升已证实,但论文未隔离各层贡献
        4PD 解离 + cache 感知调度降低 TTFT 而不牺牲吞吐Table 4(4.72x–5.33x TTFT 加速,吞吐一致)强 — 吞吐平价实际上强化了论点:TTFT 增益是"免费的"
        5C++ 推测解码消除 Python-to-C++ 开销Table 5(vs vLLM 1.12x)弱到中等 — 1.12x 改进modest,归因缺乏 profiling 数据支持
        6EPD 解离解耦 ViT 和 LLM 提升吞吐Fig. 7(1.86x–2.52x 吞吐,非对称内存)强 — 内存非对称数据(9.3 GB vs 89 GB)直接确认解耦,吞吐增益显著

        论证弱点 #

        • 缺少消融实验:未隔离各优化的单独贡献(cache 调度 vs 层级 cache vs PD 解离)。结果展示组合系统但未给出各组件独立 delta。
        • 吞吐未分化:PD 解离下三框架吞吐一致(Table 4),意味 decode 路径相对基线未优化 — 全部优势在 prefill/调度侧。
        • 推测解码保守:step size = 1 限制了推测解码潜力;论文未探索更大 step size 下的吞吐-接受率权衡。

        §7 实现 cross-reference #

        开源仓库 #

        RTP-LLM 已开源:alibaba/rtp-llm(Alibaba, 2025)。

        核心组件到实现的映射:

        ComponentDescriptionImplementation note
        文件序加载集成 IBM fastsafetensors + 共享内存复用基于 Yoshimura et al., 2025;自定义共享内存 buffer 池消除 600ms/2GB 分配开销
        统一 hash map$O(B)$ 跨 worker 前缀匹配Master 调度逻辑核心
        4 层 KV cacheGPU → 本地 CPU → RDMA → 3FS 层级Algorithm 1;3FS 为阿里内部基础设施
        推测解码框架4 个模块化 C++ 组件ProposeExecutor / ScoreExecutor / SpeculativeSampler / SpeculativeUpdater
        EPD 解离ViT/LLM 解耦部署独立 GPU stream 分配
        DeepEP 集成MoE EP 的 All2All 通信Zhao et al., 2025a;480B 模型部署中使用
        NCCL IBRCPD 解离中 KV cache 传输InfiniBand Reliable Connection 模式

        关键实现细节 #

        1. 模型加载共享内存 buffer 复用:原始 fastsafetensors 库每个文件分配并注册 pinned memory(每 2GB 600ms 开销)。RTP-LLM 将加载接口封装在复用单个 buffer 的类中,消除重复分配。这个简单但高收益优化是加载加速的重要组成。
          1. 带 watermark 的采样前缀哈希:对 ≥208 token 的 block,在位置 208, 212, 216, 220, ... 创建 hash entry(步长 4)。满块使用引用计数允许多请求并发访问,部分填充块为独占模式并允许在 watermark 后追加 token。双模式访问控制在读密集满块上避免锁开销而不牺牲正确性。
          2. 核心技术壁垒(展开) #

            最难复现的是调度、缓存和路由在生产环境下的紧耦合协同设计:

            • 评分函数的 $\alpha, \beta, \gamma$ 权重按负载调优但未公布数值
            • 20ms 状态轮询和 50ms cache 同步频率是生产校准的新鲜度 vs 开销权衡
            • 4 层 cache 层级依赖阿里内部基础设施(3FS 分布式存储、RDMA fabric),论文未提供去除这些层级后的退化模式性能
            • 75% prefill 机器缩减依赖负载特征(高系统提示 cache 复用),不一定推广到所有部署场景

            部署上下文 #

            • Serving 阶段:覆盖 prefill 和 decode(可选解离)
            • 并发区间:优化目标为中高并发(64–512,已评测);延迟敏感在线服务推荐 1TP8DP(128–512 并发)
            • 硬件亲和:评测在 NVIDIA GPU + NVLink 节点内;使用 DeepEP 做 MoE 通信、NCCL IBRC 做节点间 KV 传输。未讨论 AMD/TPU 支持。
            • 迁移路径:开源可替换;假设 OpenAI 兼容 API;模型存储依赖阿里内部 FUSE 系统