vLLM 和 TileRT 集成用于低延迟关键服务

vLLM 和 TileRT 集成用于低延迟关键服务

vLLM 已将 TileRT 0.1.5 集成为可插拔的解码引擎,使用户能够将 vLLM 的预填充能力与 TileRT 的专用解码速度相结合。此集成使得低延迟关键工作负载(例如实时语音、交互式编码助手和智能体循环)能够在不牺牲 vLLM 生态系统的运营成熟度、API 和调度的情况下,实现每用户令牌生成速度的最大化。

可插拔解码架构

通过利用分离式服务——即将计算密集型的预填充阶段与内存带宽密集型的解码阶段分离——vLLM 使解码端可成为可插拔的。TileRT 的集成是通过 vLLM V1 的公共连接器接口 (KVConnectorBase_V1) 实现的,这意味着可以在不修改 vLLM 源代码或创建分支的情况下,将 TileRT 解码池添加到部署中。

集成的关键组件

  • vLLM Prefill: 负责调度、分块预填充和前缀缓存。
  • vLLM Serving Surface: 保持 OpenAI 兼容的 API、请求格式和现有工具。
  • TileRT Decode: 一个专门的推理运行时,旨在将每用户解码速度推向硬件极限。
  • MultiConnector: 允许单个标准 vLLM 预填充池同时服务于原生 vLLM 解码池(用于高吞吐)和 TileRT 解码池(用于低延迟)。

请求路由和交接

为了保持原生解码池与专用解码池之间的共存,系统使用了一个轻量级路由器和一个特定的声明过滤机制。

路由机制

对于低延迟关键流量,路由器将 max_tokens=1 设置为使 vLLM 执行预填充并发出第一个令牌。然后,它通过 kv_transfer_params(具体为 tilert_hosttilert_ctrl_port)附加目标解码节点信息。一般流量继续通过标准的分离代理未经修改地流动。

数据平面和状态传输

从 vLLM 预填充到 TileRT 解码的交接被设计为快速且非阻塞的:

  • RDMA 转移: 注意力状态(压缩的 KV、稀疏注意力索引缓存和元数据)通过 RDMA 单向写入预注册的 GPU 缓冲区,使用 Mooncake 或 NIXL 进行移动。
  • 预填充重叠: 状态提取发生在前向窗口内;状态在缓存块被回收之前被复制到暂存缓冲区,并且后台发送者处理网络传输。这确保了绑定到 TileRT 的请求不会阻塞后续的预填充迭代。
  • 立即执行: 到达时,状态将被转换为 TileRT 的原始布局并注入到正在运行的引擎中,其中多令牌推测解码立即开始。

性能和用例选择

在解码池之间的选择取决于工作负载的具体需求:

  • 使用 TileRT 解码: 当每用户令牌速度是主要约束时(例如交互式代理、延迟 SLO 推理)并且模型受支持。
  • 使用原生 vLLM 解码: 当需要最大化的总体吞吐量、高并发批处理以及广泛的模型/功能支持时。

当前限制和支持

截至 TileRT 0.1.5,一个 TileRT 解码节点一次只处理一个正在进行的请求,路由器管理有调度的分发和背压。目前支持的模型包括 GLM-5/5.1DeepSeek-V3.2

实施和设置

部署 TileRT 池需要通过 PyPI 或 GitHub 安装 TileRT 0.1.5。该过程包括三个主要步骤:

  1. 权重转换: 使用 weight_converter 模块将 Hugging Face 检查点转换为 TileRT 的权重格式。
  2. 解码服务器启动: 启动 decode_server,使用特定的 MTP(多令牌预测)和 KV 缓存数据类型配置。
  3. vLLM 预填充配置: 运行 vllm serve,在 --kv-transfer-config 中指定 TileRTConnector 插件,确保 speculative-config 设置为 mtp,以便预填充节点为解码端的推测填充草稿层 KV。

Sources