vLLM 和 TileRT 整合以實現延遲關鍵服務
vLLM 和 TileRT 整合以實現延遲關鍵服務
vLLM 已將 TileRT 0.1.5 作為可插拔的解碼引擎進行整合,使用戶能夠將 vLLM 的預填充能力與 TileRT 的專門解碼速度結合。此整合使得延遲關鍵工作負載(例如實時語音、互動編碼助手和代理循環)能夠在不犧牲 vLLM 生態系統的運營成熟度、API 和排程的情況下,實現每個用戶的最大 token 生成速度。
可插拔解碼架構
通過利用分離服務——將計算受限的預填充階段與內存帶寬受限的解碼階段分離——vLLM 使解碼端變得可插拔。TileRT 的整合是通過 vLLM V1 的公共連接器介面 (KVConnectorBase_V1) 實現的,這意味著 TileRT 解碼池可以在不修改 vLLM 原始程式碼或建立分支的情況下添加到部署中。
整合的關鍵組件
- vLLM 預填充: 負責排程、分塊預填充和前緩存。
- vLLM 服務表面: 維持與 OpenAI 相容的 API、請求格式和現有工具。
- TileRT 解碼: 一種專門的推理運行時,旨在將每個用戶的解碼速度推向硬體極限。
- MultiConnector: 允許單一標準 vLLM 預填充池同時服務於原生 vLLM 解碼池(用於高吞吐量)和 TileRT 解碼池(用於低延遲)。
請求路由與交接
為了維持原生與專門解碼池的共存,系統使用了一個輕量級路由器和特定的聲明過濾機制。
路由機制
對於延遲關鍵流量,路由器將 max_tokens=1 設置為使 vLLM 執行預填充並發出第一個 token。然後,它透過 kv_transfer_params(特別是 tilert_host 和 tilert_ctrl_port)附加目標解碼節點資訊。一般流量繼續透過標準的分離代理不作修改地流動。
資料平面與狀態傳輸
vLLM 預填充到 TileRT 解碼的交接被設計為快速且非阻塞:
- RDMA 轉移: 注意力狀態(壓縮 KV、稀疏注意力索引快取和元數據)通過 RDMA 單向寫入移動到預先註冊的 GPU 緩衝區,使用 Mooncake 或 NIXL。
- 預填充重疊: 狀態提取發生在前向窗口內;狀態被複製到暫存緩衝區,在快取區塊被回收之前,並由背景發送者處理網路傳輸。這確保了綁定到 TileRT 的請求不會阻塞後續的預填充迭代。
- 立即執行: 到達時,狀態被轉換為 TileRT 的原生佈局並注入到正在運行的引擎中,其中多 token 投機解碼立即開始。
效能與使用案例選擇
在解碼池之間的選擇取決於工作負載的具體需求:
- 使用 TileRT 解碼: 當每個用戶的 token 速度是主要限制時(例如互動代理、延遲-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 的權重格式。 - 解碼伺服器啟動: 以特定的 MTP (Multi-Token Prediction) 和 KV 快取資料類型配置啟動
decode_server。 - vLLM 預填充配置: 在
--kv-transfer-config中指定TileRTConnector插件來運行vllm serve,並確保speculative-config設置為mtp,以便預填充節點填充用於解碼端投機的草稿層 KV。