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_host 和 tilert_ctrl_port)附加目标解码节点信息。一般流量继续通过标准的分离代理未经修改地流动。
数据平面和状态传输
从 vLLM 预填充到 TileRT 解码的交接被设计为快速且非阻塞的:
- RDMA 转移: 注意力状态(压缩的 KV、稀疏注意力索引缓存和元数据)通过 RDMA 单向写入预注册的 GPU 缓冲区,使用 Mooncake 或 NIXL 进行移动。
- 预填充重叠: 状态提取发生在前向窗口内;状态在缓存块被回收之前被复制到暂存缓冲区,并且后台发送者处理网络传输。这确保了绑定到 TileRT 的请求不会阻塞后续的预填充迭代。
- 立即执行: 到达时,状态将被转换为 TileRT 的原始布局并注入到正在运行的引擎中,其中多令牌推测解码立即开始。
性能和用例选择
在解码池之间的选择取决于工作负载的具体需求:
- 使用 TileRT 解码: 当每用户令牌速度是主要约束时(例如交互式代理、延迟 SLO 推理)并且模型受支持。
- 使用原生 vLLM 解码: 当需要最大化的总体吞吐量、高并发批处理以及广泛的模型/功能支持时。
当前限制和支持
截至 TileRT 0.1.5,一个 TileRT 解码节点一次只处理一个正在进行的请求,路由器管理有调度的分发和背压。目前支持的模型包括 GLM-5/5.1 和 DeepSeek-V3.2。
实施和设置
部署 TileRT 池需要通过 PyPI 或 GitHub 安装 TileRT 0.1.5。该过程包括三个主要步骤:
- 权重转换: 使用
weight_converter模块将 Hugging Face 检查点转换为 TileRT 的权重格式。 - 解码服务器启动: 启动
decode_server,使用特定的 MTP(多令牌预测)和 KV 缓存数据类型配置。 - vLLM 预填充配置: 运行
vllm serve,在--kv-transfer-config中指定TileRTConnector插件,确保speculative-config设置为mtp,以便预填充节点为解码端的推测填充草稿层 KV。