海光 DCU 长上下文 Attention:从 page784 到 page832
摘要在大模型推理中,Attention 的公式通常不是最难的部分,真正决定性能的往往是数据如何落在显存里,以及硬件一次能够以什么粒度把这些数据取出来。 本文以 Qwen3.5 的官方 prefix-off 长上下文路径为例,讨论一个看似很小、实际上贯穿 vLLM 配置、KV Cache、paged attention 和 DCU kernel dispatch 的问题:该路径的默认物理 KV Cache page 是 784 tokens,而海光 DCU gfx936 上的 vendor paged-attention 路径要求 page 长度满足 64-token 对齐。最终我们没有把...
海光 DCU 上 Qwen3.5 推理性能工程:从 Prefill/Decode 热点到端到端收益
摘要在大模型推理优化中,最容易被误读的一件事,是把某个 kernel 的局部加速比直接当成服务吞吐的提升。一个 kernel 即使在独立测试中快了 1.08 倍,完整服务也可能只快几个百分点,甚至几乎没有变化。 本文以海光 DCU gfx936 路径上的 Qwen3.5-27B BF16 推理为例,使用本地已经完成的 profile、kernel microbench 和同容器端点 A/B 数据,回答三个问题: Prefill 和 Decode 分别被什么算子限制; 为什么 BF16 的 M=1 GEMM/GEMV 会成为 Decode 的主要性能墙; 一...
海光 DCU Profile 实战:如何从六万个 GPU kernel 还原一枚 Token
开场在海光 DCU 上给大模型做 profile,最难的通常不是“能不能生成 trace”,而是 trace 生成以后该怎么看。 一次 Qwen3.5-27B BF16 本地采样共产生: 1234总事件: 235,964GPU 事件: 61,804kernel 事件: 60,124GPU event 总时长: 5773.493 ms 直接按 kernel 总耗时排序,只能看到一长串 Tensile、Triton、Attention 和自定义 kernel 名称。它不会主动告诉你: 哪些属于 Prefill; 哪些属于 Decode; 一个 kernel 每 ...
编译成功不等于生效:海光 DCU vLLM 增量编译验真
我在海光 DCU 上修改 vLLM kernel 时,最浪费时间的一次并不是编译报错。 那次编译正常结束,服务能够启动,接口也能返回结果,性能测试甚至给出了一个看起来可以解释的变化。后来重新核对运行环境,我才发现一个更麻烦的问题:源码、构建产物和服务实际加载的文件并不是同一套状态。此前围绕性能做出的判断,只能全部作废。 这件事改变了我的调试顺序。现在每次改完 ROCm kernel,我不会立刻看吞吐,而是先回答一个更基础的问题: 正在海光 DCU 上执行的,究竟是不是我刚刚修改、编译并准备测试的那份代码? 本文记录的是我在 gfx936 架构海光 DCU 上实际使用过的一套 vLLM...
THU-BDC2026 技术路线:从 Transformer 到 LightGBM 排序
为什么单独写一篇技术路线上一篇更像比赛复盘,这一篇就专门把 THU-BDC2026 的技术路线理一遍。 这个项目从最早的深度模型,到后面的 LightGBM LambdaRank,中间不是简单的“换模型”,而是我对这个题目的理解发生了变化:股票排序任务不只是预测收益率,更像是在同一天的 300 只股票里做横截面比较。 所以后面我越来越关注三件事: 每天的横截面排序; 训练和预测的时间隔离; 特征是否真的能穿过不同年份。 第一阶段:Transformer + 横截面建模最早的设计是 StockTransformer。 输入用过去 30 个交易日的数据,每只股票有 72 个技术指标,整体...
小米 MIMO Token 申请:我用 AI/Agent 写项目的真实体感
起因最近整理项目的时候,我顺手把小米 MIMO 开发者 Token 申请材料也翻出来了。 这份材料本来是为了说明我用 AI/Agent 做过什么,但写完之后发现,它其实也挺适合当一篇复盘:AI 到底帮了我什么?又有哪些地方不能全交给它? AI 参与了哪些项目主要是两类: 第一类是完整业务系统。 我用 AI 辅助做了校园宿舍管理系统和电商平台。前者是 Spring Boot + MyBatis + MySQL,后者是 Servlet + JSP + DBUtils 的传统 Java Web 项目。 第二类是技术实验。 比如 Spring AOP、JdbcTemplate + 声明...
用 Servlet 和 JSP 写电商平台:有点古早,但真的练基本功
起因现在再写 Servlet + JSP,好像有点复古。 前端早就 React、Vue 满天飞,后端也基本都是 Spring Boot 起步。但我还是觉得,亲手用 Servlet 和 JSP 写一个电商 demo,很适合补 Web 基本功。 因为它没有那么多框架帮你藏细节。请求怎么进来,Session 怎么存,页面怎么跳,DAO 怎么查数据库,都得自己写。 项目在这里:yfgug/project 功能大概长这样这个电商平台不是玩具页面,基本购物流程是完整的: 用户模块:注册、登录、注销、改密、修改收货地址。 商品模块:分类浏览、分页查询、关键词搜索、商品详情。 推荐模块:滚动...
校园宿舍管理系统:一个 CRUD 项目也能写出很多坑
起因校园宿舍管理系统听起来很像课程设计。 学生信息、宿舍号、报修工单、公告管理,这些功能都很常见。刚开始我也觉得它就是一个 CRUD 项目,写几个接口、连个数据库、页面能点就行。 但真正写完之后才发现,CRUD 只是最外面那层壳。只要你稍微把功能做完整一点,就会遇到很多实际问题。 项目在这个仓库里:yfgug/project 做了哪些功能这个系统主要有几个模块: 学生管理:增删改查、多条件搜索、批量删除、头像上传。 报修工单:提交、处理中、已解决、删除。 公告管理:发布、编辑、删除。 登录保护:连续输错密码后短时间锁定账号。 文件上传:限制后缀、限制大小、UUID 重命名。 ...
把 Java 项目堆起来之后,我终于看懂了 Spring
起因之前学 Java 的时候,我总有一种很奇怪的感觉:语法能看懂,视频也能跟着敲,但真要自己做一个东西,就不知道从哪开始。 所以后来我干脆把一堆练习和小项目放到一个仓库里,从 Java 基础、JDBC、Servlet/JSP,一直堆到 Spring、Spring MVC、Spring Boot。看起来有点乱,但它刚好记录了我从”会写代码”到”能把一个业务系统跑起来”的过程。 项目地址:yfgug/project 这个仓库里有什么仓库主要分成四块: 目录 内容 技术栈 java-basics/ Java 基础和 JDBC 练习 JDBC、PreparedSt...
用 Rust 重写了 QQFlow,从 188MB 到 10MB
起因事情是这样的。 我有个习惯,每隔一段时间会把 QQ 聊天记录导出来备份。不是为了什么,就是怕哪天号没了,聊天记录也没了。 之前一直用一个叫 QQFlow 的工具,Electron + Python 写的,能用。但有两个问题:一是软件太大了,安装包 188MB;二是打开大数据库的时候卡得要命,190MB 的数据库要等好几分钟。 有天晚上我又在等它加载,看着进度条一动不动,突然想:要不用 Rust 重写一个? 其实没那么难说”重写”有点高估我了。 我做的事情更像是”整合”。核心的思路是参考了 WeFlow 这个微信聊天记录导出工具的架构——用一个内存缓存把所有消息一次性加载进来,后续查询...







