浑浑噩噩的 2026 上半年
转眼 2026 上半年就过去了,在这里记录一下流水账,回顾总结一下这半年吧。
1 月:写本子和初到京东
1 月份前半个月主要在给导师写一些项目申请材料,写了两周。到了第三周,本子基本写完了,我没什么事情了,就于 1 月 18 日踏上了前往北京的火车,开始了在京东的实习生活。
我没有提前租房,到北京的时候临时顶着 -20°C 的低温去看房,即使穿的很厚,也是冻得瑟瑟发抖,看了很多房子都不是很满意,最后在 1 月 23 日从别人那收了一个青橙公寓的转租,也算在北京安顿下来了。
2 月:加入 SOSP 工作、过年和开题
刚到京东的时候,还没有明确的方向,刚好此时有一位北大的人才计划哥入职,带着一群北大的同事开展一项准备投稿 SOSP 的工作,我就加入了这个工作。
2 月 9 日学院发布了博士生开题通知,3 月 10 日 - 3 月 31 日举行开题答辩,到 3 月份我就博士入学 18 个月了,按照学校的规定,我必须在这一批次完成开题,否则就要被分流退出了。
2 月中旬回家过了个年,然后又回到公司继续准备开题事宜,期间提了好几个初步 idea 都被否了,于是先继续准备 SOSP 的工作。
3 月:开题答辩、SOSP 和参加婚礼
整个 3 月份我都在准备开题,扯了一些方向攒了篇开题报告,反复修修改改,不甚满意。与此同时 SOSP 工作也被提上日程,我负责实现一些 baseline 和画图。
到了 3 月中旬,我来到上海参加了一个硕士同门的婚礼,还有好多同门也都来了,大家聚在一起聊了很多。婚礼结束后,我回学校旁听了几场开题答辩,并完成了初版开题报告。回到北京后,略感智齿疼痛,于是去拔了智齿。现在想想这个决定真是大胆,万一开题安排突然出来,我可能就要口齿不清地去答辩了。
回北京后继续搞 SOSP 和开题,交错进行。我的开题答辩安排在 3 月 31 日,前一天我还在制作 PPT,答辩的时候我是第一个,感觉老师们都还很精神,被集火怼了,好在开题还是通过了。
此外,由于 OpenClaw 爆火,学校决定举办龙虾节,需要一个访问平台,我快速糊了一个龙虾工坊,用 sshmux 实现了 SSH 反向代理,用 Lua 和 Nginx 实现了动态 HTTP 反向代理,也算一个比较优雅,同时保持了较好的用户体验的方案。
4 月:投稿 SOSP、项目结题、大模型公共服务平台建设和社团年审
4 月初,到 SOSP 投稿前夕,整个项目组鸡飞狗跳,总算在 DDL 前把实验做完,论文写完投出去了。非常刺激的是,直到截止前 30 分钟我们的论文还超了 2 页,于是我们疯狂拷打 Claude,在 15 分钟内把论文压缩到规定页数,最终在截止前 10 分钟提交了论文。
SOSP 结束后就是清明假期,去玉渊潭公园和北海/什刹海/后海各玩了一天。
清明结束后是一个项目的结题工作,这个项目主要包含两个部分,一个是封装 MPI,主要难点是封装带前处理和后处理的非阻塞调用,因为甲方提供了接口,这个接口没有可以传递上下文的地方,因此处理异步比较麻烦,最后我是用 C++ 20 的 Coroutine 来解决的,我认为我的这个设计还是比较优雅精妙的;另一个部分提了很多要求,需要在 CUDA/HIP 上实现一些并行原语和类 STL 容器,我看了半天才看出来甲方是想要复刻一个 thrust ,因此我从 thrust 抄了一些设计,实现了主机和设备端的统一接口,基本满足了甲方要求。
与此同时,学校 NIC 的老师也找我加入大模型公共服务平台的建设工作。其实这个平台去年 10 月就开始建设了,我设计了数据平面的主要架构,采用了业务网关(LiteLLM) - 性能网关(SGLang Model Gateway) - 推理引擎(vLLM/SGLang)的三层架构。现在需要对这个平台进行一些改进和优化,以支撑更大的用户量。这次我沿用了之前的架构设计,但把性能网关换成了 NVIDIA Dynamo,以支撑 KV 感知路由和统一完成 tokenization 和 parsing。
此外,我还创新性地把 vllm-ascend 和 Dynamo 接了起来(把华为和 NVIDIA 的技术结合起来,这何尝不是一种 NTR),在基于昇腾的平台上实现了实例自动发现/KV 感知路由和 Dynamo 驱动的 P-D 分离。
这个月 DeepSeek V4 发布了,我折腾了一天,Day-0 实现了 DeepSeek V4 模型的上线和接入大模型公共服务平台。
4 月底,团委发了社团年审的通知,我作为 LUG 的会长,需要准备年审材料,整理了 LUG 过去一年的工作和财务情况,完成了年审材料。
5 月:科研开端
来到 5 月份,mentor 让我研究混合线性注意力模型的前缀缓存问题,作为我的科研方向。这个问题看似直观,解决起来却很难。问题简单来说就是 Qwen 3.5 这类模型是全注意力层和线性注意力层交错的,全注意力层的上下文是传统的 KV 缓存,每个 Token 都是依赖前缀但独立的 KV,很方便回滚和分叉,但大小随上下文长度线性增长;而线性注意力层的上下文是 GDN 状态,每个状态独立有效,原地更新,大小是固定的,与上下文长度无关,但无法回滚。因此,如何在混合注意力模型中分配缓存容量和决定在何处对 GDN 状态产生检查点,就是个很有挑战的问题。我用 Codex Vibe 了很多算法,但都没有很好的效果。
与此同时,我作为大模型公共服务平台的主要维护人员,修了一些 bug 并实现了一些优化。
从这个月开始,我感觉每周只有周末能有一些自己的时间。工作日白天要上班,晚上处理大模型公共服务平台、实验室和 LUG 的事情,而且工作日时常收到一些运行监控告警和故障反馈,就需要及时处理,只有到了周末,不需要上班,平台负载也比较低,基本收不到告警,我才有一些自己的时间,因此可以有一些自己的时间。我觉得自己变成了「三姓家奴」。一般周末我会躺尸或者自己去北京各种公园逛逛,一个人去各种地方 citywalk(呜呜,才不是因为没人找我玩🥹)。不过出去玩的时候还得带着电脑,负重 citywalk,因为我怕突然来个告警我没法处理。
6 月:科研转向和第一个 vLLM PR
混合线性注意力模型的前缀缓存试了很多策略都没有很好的效果后,我决定先实现一些系统机制,比如统一容量池设计,调研发现 vLLM 实现了某种意义上的统一容量池,不过是通过增大全注意力层的 Block Size 直到一个 Block 能放下一个 GDN State,这造成了一些空间浪费和 Block Size 过大的问题,而 SGLang 博客了提到了弹性容量池但实际上根本没有实现,只有一个固定分池的设计。于是我决定利用 GPU VMM 实现一个真正的统一容量池。在调研的过程中,我发现通过修改显卡驱动可以实现非常低开销的 GPU 虚拟内存映射,于是我快速指挥 Codex 完成了驱动修改,实现了一套异步批量的 VMM 管理原语。同时,我测量了一些 Attention Kernel 在 non-paged 的情况下的性能,发现 prefill 性能普遍比 paged 情况下有 5%-20% 的提升。于是我就想能不能用我实现的异步批量 VMM 管理原语,重新探索 VMM-based KV Cache 管理。然而,经过一些更多的测量,我发现前人探索的 VMM-based KV Cache 管理中,VMM 管理开销只占很小一部分,而且能被较好地 hide,我又陷入了迷茫。
在这段时间 Vibe Coding 的过程中,我深切体会到了 AI 能力的边界,它能快速帮我实现我已经想清楚的东西,但对于我没想通的部分,它没法帮我 infill 出来。我觉得 AI 还是很难帮我做科研,从 AI 那没法拷打出 insight 和 idea。Insight 还得自己多做实验,多分析数据才能获得。
这个月智谱发布了支持 1M 上下文的 GLM-5.2 ,我也是在学校大模型公共服务平台上完成了 Day-0 部署。然而,我们使用 16xH100 进行部署,仅权重就每卡占用 44G,因此只能支撑 200K(TP=16)~500K(TP=8,PP=2) 的上下文。然而,这里存在一个机会,GLM-5.2 采用的是 MLA,其 Latent Cache 只有一个等效 KV 头,TP 模式下多个 Rank 存储重复内容,导致有效显存被浪费,因此,我在想能不能使用 DCP(Decode Context Parallel) 将 KV Cache 分布在多个 Rank 上,减少冗余,从而支撑更长的上下文。然而,vLLM 所有 DeepSeek Sparse Attention 的后端都不支持 DCP,经过分析代码,我发现 FlashMLA 是支持引出 log-sum-exp 输出的,因此注意力计算可以合并,从而可以实现 DCP,这就只剩下一个问题:全局 Top-2048 选择。DCP 下每个 Rank 没有全局视角,因此无法选择全局 Top-2048。经过分析,我通过每个 Rank 选择 Top-2048 后,使用 AllGather 将所有 Rank 的 Top-2048 聚合到一起,然后再选择全局 Top-2048,这样就可以实现 DCP 下的全局 Top-2048 选择了。我写了几个 Triton Kernel 实现了一些 GPU 端的处理。
同时,我发现 FlashMLA 的 FP8 KV 只是 KV 存储使用 FP8,Q 和输出都是 BF16,没有 FP8 moving part,因此实现 FP8 的 DCP 也比较 trivial,我也就一并实现了。一番折腾后我成功在 16xH100 上实现了 GLM-5.2 的 DCP 部署,支撑了 1M 上下文,并且在 vLLM 上提交了第一个 PR(虽然并没有人理我)。
此外,这个月我还在大模型公共服务平台上部署了 LMCache,实现了前缀缓存 P2P 传输和多级存储,有效提升了前缀缓存的容量和命中率(Eviction by Capacity 少了)。
这个月感觉时间更不够用了,恨不得一天有 48 小时。每天都在忙着处理各种事情,科研、平台维护、LUG 事务,时不时来个运行监控告警,又或者来个人问我能不能给点数据支撑一下 PPT。越来越感觉自己像「三姓家奴」了。
总结
这半年感觉过得浑浑噩噩,很快就过去了,科研没什么进展,倒是做了不少工程。从很早的时候我就发现我不适合做科研,还是更适合做工程,但我又需要一个博士学位。可能我的一些工程经历给我的科研带来了 debuff,我可能更能发现 idea 中的潜在问题,进而可能过早否定 idea,导致思维僵化,科研进展缓慢。希望下半年能在科研上有一些突破吧。
这半年来感觉自己的时间越来越少,我应该尽快把各种设施的自动化运维搭建起来,减少自己在运维工作上的时间消耗,腾出更多时间做科研和自己的事,希望之后的工作和生活能越来越好吧。