KaiSpace

Personal blog

Share interesting technologies or academic thoughts

What I learn and write for a living.

tech

我应该怎么做科研?

Background 我已经换了三个方向了,从communication(感觉没戏,因为测试小模型发现communication并不是瓶颈) aot kernel调度,有点像aot版本的mpk megakernel版本的pd mux。我什么结果都没做出来,没能给何老师汇报。我能看出来何老师对我有些失望。另外因为我和vllm社区的人有一些互动,我想增加一些社区的connection,何老师可能以为我的时间全部投入给了vllm。 Motivation 我觉得他出现这些误解是很正常的事情,我的方向一直是不和他在一条线上的。我的思维太过于发散了,并且太好高骛远了,想做一些难度比较高的工作出来。但是以我的水平应该先把一个东西做到最精通,打好这根柱子然后再去做其他东西。我觉得是这样的,我目前对于各个模型各个component都有粗浅的了解了。从FA3的实现到DiT到MLA到RL,我每个都能扯一点,但是我没办法说一个模型我能从上到下把所有细节说透。 Design 对于这一个gptoss的项目。我要通过profile手段将其性能完全摸透,从调度一直到SASS我要解释里面的每一个细节。在此基础上,我要对这个模型进行优化。从kernel优化开始,然后做scheduling的优化。这是一个很好的机会,终于不给我派那些非常苦难的活了,相当于给了我另外一个机会去做一个真正属于自己的东西,让我能够证明自己的能力。 软实力 做科研不是你做出什么来,而是让别人知道你做出什么来。即便你什么都没有做出来,你说服别人你做出来了,这也是一种实力。我则是反方向的,我做出来了别人也以为我没有做出来。在科研圈,你不说话、不去争取,就没人会帮你说话。

Read note
0 comments0 likes
tech

CS4261笔记

Nash Equilibrium Step 0:删 strictly dominated 只要一个 strategy 被 strictly dominated: \[ \boxed{\text{它在 NE 中概率一定为 }0} \] 删完之后再检查一次,因为可能出现新的 dominated strategy。 Case 1:Pure–Pure 这个最简单。 直接找双方的 best response,两个 best response 相交的格子就是 pure NE。 口诀: 横着看 Row player 最大值,竖着看 Column player 最大值。 双方同时最大 → Nash equilibrium。 Case 2:Pure–Mixed 这是你这两道题最重要的情况。 假设: Player 2 纯选一个

Read note
0 comments0 likes
tech

Gate GEMM 中的L2复用优化和小batch矩阵transpose优化

Gate GEMM L2 复用优化 场景:FFN 将 gate/up 合并为 X[M,K]×W[K,N],再融合 SwiGLU。取 M=16384、K=4096、N=24576;这里 N 是激活前宽度。以下假设 FP16/BF16,每元素2字节。 X 共128 MiB,W 共192 MiB。tile=(128,192,64),输出网格为128×128,每个 CTA 沿 K 迭代64轮。 改变哪一维,就复用另一侧的数据 沿 token/M 遍历(AlongM):换 X,复用 W。沿输出通道/N 遍历(AlongN):换 W,复用 X。不要把“沿 X 方向切”和“复用 X”混为一谈。 | 项目 | AlongM:复用 W | AlongN:复用 X | | | : | : |

Read note
0 comments0 likes
tech

从self参数名看懂cuteDSL的类型策略

问题描述 CuTe DSL 允许使用 Python 对象保存 kernel 的静态配置,例如 tile shape、pipeline stage 数量、寄存器分配,以及不同 warp role 对应的 device function。 以 FlashAttention 的 warp specialization 为例,一个 CTA 中: producer warps 执行 load(); consumer warps 执行 mma(); 具体角色由运行期的 warpidx 决定; FlashAttention 实例本身则是编译期构造的策略对象。 实际代码可以抽象为: 这里有两种完全不同的值: 1. warpidx、tensor 和 storage 中的地址是运行期值,需要 lower 为 MLIR; 2. fa

Read note
0 comments0 likes
life

往事回忆

突然想起了幼儿园的时候,忘了在哪个教室里面,我坐在一个小板凳上,窗外的阳光非常好看,窗外还有树。这大概是春夏之交,那种阳光带一点绿色,又有微风的感觉让我难忘。我记得在这个教室里拨毛豆,拨出了一只毛毛虫。我记得幼儿园还是小学,也有可能是梦中,

Read note
0 comments0 likes
life

对AI时代CS skill set的思考

近期遇见了很多人,了解了很多事情,也是时候想想AI时代下,CS学生的出路了。我这几个星期遇到了一群做开源的伙伴,我也开始想在开源社区做一些贡献,虽然我很大程度上是功利的,只是为了把这些写进简历。多的就不说了,我就讲一些结论性的东西吧。 connection是非常重要的,现在AI帮人丰富简历,各种虚的经验,各种包装让面试的人已经无法区分真正有实力的人和纸上谈兵的人了。因此在自身实力硬之外,需要多多找人合作。这有几个主要途径:1)开源社区 2)做research assistant 3)做intern。只有真正做过人家才认识你,现在最厉害的公司最厉害的组很多都是看熟人推荐的,如果没有合作经历要找一个好工作确实越来越难了。 读代码的能力越来越重要。现在大家都不需要写代码了,但是读代码的工作任务越来越大。对于优秀的工程师而言,不仅要读自己AI生成的屎,还要读别人pr交上来的屎,现在的开源社区技术强的读代码专家太少了,但是能产生屎的人太多了。如何识别出好的代码和垃圾代码已经不是看语法的事情了。因为AI写的代码语法都很准确格式都很对,我们需要去真正读一行一行的逻辑。因此开源社区现在基本都是要认识的人帮忙找人merge,自己交上去已经几乎没有人理你了。 我想,后续我的发展可能应该朝着下面几个方向: 1. 每天至少读两个小时代码。 2. 多参加各种技术社群,增加connection的同时了解一些行业内部的新动态。 实验室给了我打下了很好的基础,zhuobin师兄带着我从CUDA一直学到最前沿的LLM框架,在我接触社区前有了一定的积累。当我第一次接触到社区的时候,我的实力已经比一些乌合之众强了。然而我的实操经验是缺失的,必须要静下心来对着一些事情仔细研究才行。

Read note
0 comments0 likes
tech

多种Attention对比

假设hiddenstate为4096维 h(1\4096)变成Q(1\4096)之后会被切成Q(32\128),然后每个Q后续只需要和自己匹配的KV进行运算,优点是我们能够对Q的每个地方特化expression。这里自己匹配的KV也可以分成很多份。共享KV会有损失。 | 结构 | Attention 表达能力 | 单个token KV Cache | | | | | | MHA | 32 套权重,KV也独立 | 32\128\2 | | GQA | 32 套权重,部分共享KV (例如共享四套KV Cache) | 4\128\2 | | MQA | 32 套权重,完全共享KV | 1128\2 | | MLA | 32 套权重,完全共享KV,且KV可以由同一个L变出来 | 1\128 |

Read note
0 comments0 likes