TokenSpeed事件循环设计全解:控制面与数据面分离的微秒级调度艺术
TokenSpeed事件循环设计全解控制面与数据面分离的微秒级调度艺术【免费下载链接】tokenspeedTokenSpeed is a speed-of-light LLM inference engine.项目地址: https://gitcode.com/gh_mirrors/to/tokenspeedTokenSpeed 是一款面向 Agentic 工作负载的光速级 LLM 推理引擎其核心秘密之一就是事件循环Event Loop设计把做决策的控制面与跑 GPU 的数据面彻底分离让每一个调度轮次round只消耗微秒级时间。本文将带你读懂这套控制面与数据面分离的调度架构——它如何让 CPU 决策永远不被 GPU 拖慢最终换来与 TensorRT-LLM 同级的推理性能。为什么分离一道微秒 vs 毫秒的选择题传统推理引擎的调度循环里决策与 GPU 提交常常混在一起一轮调度里既要排队、分缓存、又要等 CUDA 操作。结果是 CPU 循环被 GPU 的在途工作拖住多卡间的一致性同步collectives也开始互相等待吞吐和延迟双双受损。TokenSpeed 的答案很直接控制面只做决策一微秒级别跑完数据面专跑 CUDA一个线程按 FIFO 顺序消化所有 GPU 工作。这样即使 GPU 的队列已经堆了几百个 kernel控制面的跨 rank 同步也总能立刻找到所有人。上图是这套调度架构带来的直接回报在 Kimi K2.5 的 Agentic 负载上TokenSpeed蓝线在多种并行配置下全面贴近或超过 TensorRT-LLM。控制面EventLoop 只做协调不做执行控制面的主角是 event_loop.py 中的EventLoop.event_loop方法它负责四件事ZMQ 请求输入、gloo 跨 rank 集合通信、驱动 C 写成的调度器tokenspeed-scheduler/以及对提交结果的提交后处理commit。设计上有一条铁律事件循环不运行任何 GPU 工作也碰不到任何 GPU 对象。它只是编排者——所有领域逻辑暂停/恢复、EPD 准入、PD 传输、L2/L3 缓存都住在独立模块里以单行 hook 调用的形式进入循环。循环体从上往下读就是一轮完整调度的日程表没有任何一个功能的内部实现混在里面。一轮调度Round的 5 步解剖设计文档 docs/design/event-loop.md 中给出了标准流程接收并准入新请求_process_new_requests暂停与 EPD 准入各是一行 hook轮询已完成的 L2 缓存操作并在这一步就推进调度器头部推进点保证本轮计划能立即看到缓存释放的容量规划本轮scheduler.next_execution_plan()生成执行计划推导 forward 操作、记录指标、做 DP 同步每轮只调用一次DeviceHandle.execute(plan, planned)——这一行的调用顺序本身就是正确性契约先回写 host 缓存、再页面清零、再加载回写、再远端 PD 传输流、最后才是模型 batch尾部推进调度器把本轮所有request_changesforward 结果、PD 传输事件、L3 恢复回撤一次性反馈给调度器并只发布一次 KV 事件。值得注意的是第 2、5 步整个引擎里scheduler.advance只有这两个显式调用点。辅助函数和 hook 只返回事件从不自己推进调度器——只读循环体就能看清调度器状态在哪些点、为什么被推进这是可读性与可维护性的硬约束。数据面一个线程、一条 FIFO吃掉所有 CUDA 工作数据面的实现极简forward_thread.py 中的ForwardThread——每个 rank 一个线程、一条队列、严格 FIFO。所有触碰 CUDA 的工作都在这里提交模型 forwardeager 启动或 CUDA graph 重放、pipeline 的 NCCL 收发、KV 页面清零、PD 传输的远端落盘、RL 权重更新……为什么用线程而不是进程因为 forward 工作要就地读取 executor 的 device buffer、CUDA graph 和 NCCL 通信子起一个进程就得复制一整套 CUDA 上下文等于维护第二个引擎。而 GIL 在这里不构成瓶颈——线程的时间都花在会释放 GIL 的 CUDA 启动和 NCCL 等待上。单线程 FIFO 还有一个隐藏红利每个 rank 入队的工作序列完全相同冗余调度器做出相同的计划所以共享 NCCL 通信子上的集合操作在所有 rank 上天然保持同样的发起顺序。某个 stage 的启动队列背压只会卡住自己的 forward 线程绝不会阻塞控制面。数据面同样有对称的铁律每轮路径上永不与设备同步。任何.cpu()、.item()、stream.synchronize()都会等整条 stream 完成让下一轮的前置准备滑到当前步骤完成之后in_flight_depth的流水线深度直接退化为 0。CI 甚至用TOKENSPEED_DATA_PLANE_SYNC_DEBUGerror把每一次违规同步直接变成报错。DeviceHandle用可见性而不是纪律做隔离控制面与数据面之间不是靠口头约定隔离而是靠对象形状隔离。device.py 的build_device_side在启动时构建出模型 runner、attention 后端、KV 池和 executor但事件循环拿到的只是一个DeviceHandle——它对外只暴露命名的操作named operations从不交出底层对象循环无法命名任何模型 runner、后端或 KV 池因此无法隐式传递或误改正在被 forward 使用的对象每个 handle 方法都是一个明确命名的操作改动这个表面必须同步更新架构测试中的操作白名单test/runtime/test_device_handle.py结果回程只有一条通道PendingExecution.result()——先 join forward 线程的 future确认 kernel 已发起再等它的拷贝事件确认 D2H 已落地。配合捕获契约信息只通过提交的闭包进入数据面且一经提交即冻结——不许改属性、不许原地编辑、不许释放闭包捕获的资源结果只通过 future 回来。这样即使将来把线程换成进程接口也已经就是全部接口。重叠调度in_flight_depth 这个只影响性能的旋钮事件循环由一个参数in_flight_depth参数化深度行为场景0本轮提交、本轮提交结果commit经典同步行为兼容性1先提交本轮 forward 再 commit 上一轮——CPU 处理第 N-1 步时 GPU 在跑第 N 步默认重叠调度pp_size连续 prefill chunk 占据不同流水线级commit 队头提供背压chunked prefill 流水线关键设计是正确性永远不依赖深度。任何输入依赖未完成 commit 的副作用的派发都会先排空在途队列——这些规则集中在_dispatch_depends_on_pending_commit这一个注册表里而不是散落进循环体。深度只决定一个结果 future 可以被挂多久不决定工作在哪里执行。钩子模式子系统进入循环的唯一入口新功能如何不污染循环体答案是钩子类hooks pattern子系统与循环的集成是一个小类循环只调用它的几个固定方法子系统只返回事件和决策从不推进调度器。当前库存包括钩子职责循环入口_pause_hooks暂停/恢复、显存驻留控制apply_transitions、paused_idle_step_epd_hooks多模态 EPD 异步嵌入准入try_stage、drain_ready_embeddings_pd_hooksPD 分离部署的 KV 传输事件poll_transfer_events_cache_hooksL2 主机缓存操作跟踪count_plan_ops、poll_ready_events_l3_hooksL3 分布式存储准入与恢复submit_requests、prepare_forward_eplb_hooks在线专家重平衡note_round循环里仅此一行以在线专家重平衡为例循环体里只有一行note_round(forwarded...)完全不知道重平衡的存在布局计算甚至被丢到一个独立的 CPU worker 进程里做避免与 forward 线程抢 GIL 数秒。这套设计值多少性能微秒级的控制面意味着调度本身免费GPU 越忙分离的收益越大因为决策线程永远不会为 GPU 的在途队列排队。配合单线程 FIFO 的确定性执行顺序、深度可调的重叠流水线TokenSpeed 在 Blackwell 和 MI300X/MI355X 上都拿到了顶级吞吐。上图展示的是数据面另一端的功夫在 AMD MI355X 上GPT-OSS 的 attention prefill 在不同序列长度与 batch 下的吞吐对比。控制面负责在正确的时机提交正确的 batch而像 Gluon 这样的后端 kernel 负责让这个 batch 跑得飞快——控制面/数据面分离正是让两者各自独立优化、互不拖累的架构前提。给想深入读者的路线图 设计原则全文五条原则 一轮解剖 扩展检查清单docs/design/event-loop.md事件循环实现python/tokenspeed/runtime/engine/event_loop.pyforward 线程与捕获契约python/tokenspeed/runtime/execution/forward_thread.pyC 调度器准入、回撤、恢复协议tokenspeed-scheduler/ 及其设计文档 docs/design/scheduler.md一句话总结把想和做放进不同的线程、不同的时间尺度用对象形状而非代码纪律来强制隔离——这就是 TokenSpeed 事件循环的微秒级调度艺术也是它敢于自称光速的底气。【免费下载链接】tokenspeedTokenSpeed is a speed-of-light LLM inference engine.项目地址: https://gitcode.com/gh_mirrors/to/tokenspeed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

从后端到AI大模型:小白程序员也能轻松掌握的Agent开发

从后端到AI大模型:小白程序员也能轻松掌握的Agent开发

作者分享从6年Java后端工程师转型Agent开发的心路历程,指出传统编程基础仍是优势,但大模型原理不应是首要学习目标。建议先建立Agent开发思维,掌握LLM、RAG、Tool Calling等核心能力,再逐步补充数学原理。 我本科是双非一本的软件…

2026/11/9 15:33:12 阅读更多 →
Skills不是长Prompt:AI助手技能封装的原理与实战

Skills不是长Prompt:AI助手技能封装的原理与实战

上周有个同事拿着他刚调好的"AI 周报机器人"来找我,说模型动不动就把三条记录合并成一句废话,问我是不是 prompt 写得太短。我打开他所谓的 skill 看了一眼:没有目录结构,触发描述一团浆糊,所有逻辑全堆在提…

2026/11/1 4:12:45 阅读更多 →
DeepSeek放出150个HC:研究员锐减工程师猛增,2到10年资深成即战力

DeepSeek放出150个HC:研究员锐减工程师猛增,2到10年资深成即战力

DeepSeek放出150个HC:研究员锐减工程师猛增,2到10年资深成即战力 150个HC一次性放出,但几乎没有AI研究员的位置,工程师需求反而猛增。这一极具反差的招聘动作,在脉脉上引发了大量用户讨论。原帖用户讨论称,…

2026/10/19 2:12:57 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/9 14:01:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/9 14:56:39 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/9 1:59:56 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/9 14:01:10 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/9 7:45:06 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/9 14:01:11 阅读更多 →

日新闻

周新闻

月新闻