置身AI内: 从推理infra到RL infra

💡 原文中文,约7800字,阅读约需19分钟。
📝

内容提要

作者回顾两年AI经历:先从事LLM推理,在百炼实现PD分离,从blade-kvt到vLLM HybridConnector,主张引擎主链路与KV传输解耦,用事件通知替代轮询,并以简单RPC取代ZMQ。后转千问RL后训练infra,用Mooncake优化数据中转,设计R3引用传递方案,开发零开销内存profile。他强调在AI时代保持独立思考与工程品味。

🔎

延伸解读

PD分离的架构哲学:内核与驱动

作者用Linux内核与驱动类比vLLM与PD分离的关系,强调引擎主链路应保持稳定克制,将KV传输等复杂逻辑收敛在connector和backend中。这种分层设计避免了scheduler被硬件细节污染,使系统更易维护。HybridConnector作为异步KV搬迁runtime,正是这一思想的落地,让请求生命周期与KV生命周期解耦,为后续复用奠定基础。

从轮询到事件:数据面驱动的工程审美

早期PD分离依赖busy polling,上层反复查询传输状态,语义别扭且效率低。作者推动改为事件通知:worker记录CUDA event,传输线程等待event ready后按层发送,完成时通过RPC主动通知scheduler。这使PD分离从外部轮询逻辑变为跟随模型计算时序的数据面流水线,体现了“让数据面关键状态变化成为明确事件”的设计原则。

RL数据中转:Mooncake与引用传递的优化

在RL后训练中,作者发现Ray object store作为高性能数据中转站存在序列化、复制和生命周期开销。接入Mooncake后,第一版即获得显著提升。类似地,在Qwen QSA indexer R3中,将GB级top-k数据改为KB级引用清单,避免中间环节搬运大张量,最终完整开启录制回放后step额外耗时不足7%。这些优化源于对数据流每一跳需求的仔细审视。

AI时代的独立思考与工程品味

作者强调在AI辅助编码时代,保持独立思考和工程品味至关重要。品味体现在:愿意为哪些能力保留空间、认为哪些复杂性值得承担、对现成方案是否有理由接受或改掉。在PD分离、Mooncake和R3中,作者都先追问问题本质,再借助AI快速实现。速度不应让人满足于“能跑”,而应能解释设计取舍,对结果负责。

❓

Q&A

作者在AI领域的两年经历了哪两次转型?

第一次是从数据库内核转向LLM推理,在百炼实现PD分离,从blade-kvt做到vLLM HybridConnector;第二次是今年上半年从推理转向千问RL后训练infra。

blade-kvt的设计有哪些核心特点?

blade-kvt采用四层架构:接入层、ParseBlock层、控制层、数据面。通过30字节的IpcBlock连接数据面和接入层,使数据面无需理解模型,只需知道源端字节到目标端字节的映射。该抽象跨越BladeLLM和vLLM两套框架,从MHA到GQA、MLA、DSA再到GDN/KDA一直未变。

HybridConnector如何解决PD分离中KV Cache生命周期与请求生命周期不一致的问题?

HybridConnector复用vLLM的block refcnt:传输开始前保护block,传输真正结束后再释放。这样请求结束不会立即释放KV Cache,避免远端还在读或P节点还在写时被误回收,同时scheduler无需维护额外状态。

为什么作者将轮询改为事件通知?

早期BladeLLM链路需要上层在每个step调用check_transfer_done等接口反复查询传输是否完成,语义别扭且效率低。改为事件通知后,worker在每层attention结束后记录CUDA event,底层传输线程等待event ready再推进发送,发送完成后通过SEND_DONE RPC主动通知scheduler。系统从“我一直问你好了没”变成“你真好了再叫我”,使PD分离成为跟随模型计算时序自然推进的数据面流水线。

R3方案如何优化RL训练中的数据传输?

R3让中间组件只携带引用,真正的大张量数据放在共享存储里,等训练确定最终位置后再读回。这样控制链路中流转的内容从GB级payload变成KB级引用清单,避免大张量在中间环节来回搬运。完整开启录制、存储、读取和回放后,step额外耗时不足7%。

zero overhead memory profile是如何实现的?

平时不持续维护调用栈,只在抽中内存分配时抓取当时的Python栈;采样、释放记账和快照导出复用jemalloc已有能力。这样在RL任务中开启后,端到端step耗时基本没增加,甚至略降,因为jemalloc的分配性能收益抵消了采样成本。

作者认为在AI时代保持独立思考与工程品味体现在哪些方面?

作者认为品味体现在:愿意为哪些能力保留空间,认为哪些复杂性值得承担,遇到现成方案时有没有理由接受或改掉。例如PD分离中希望计算和调度各自有空间;Mooncake中希望存储围绕RL生命周期工作;R3中先问大张量为什么必须经过中间环节。他强调要能解释为什么这样做,知道取舍,并对结果负责。

🏷️

标签

➡️

继续阅读