一、总论
在形形色色的系统设计中,无论是嵌入式系统、个人桌面系统、分布式系统还是 LLM 推理引擎系统,通常有一些非常恒定的指标,或者说追求的目标。而且为了达到这些指标,采用的方法论甚至都是类似的。
我想在这篇文章,去记录一下系统中涉及的那些指标,以及常见的方法论,进而分析一下这些指标的本质。
这么多人我不知道还算不算流浪,
可是从沙茶汤上刮起的风只掠过了我。
我急匆匆走过地图上标记的每一个浪漫角落,
自己却永远走不出地图。
我还记得凤凰花别在你耳朵上的样子。
所以现在你的波希米亚长裙去了哪里?
这次出游是实验室组织的团体活动,我有幸担任了旅游的组长。但是因为组长的缘故,在景点和美食的选择上并不能随心所欲,而是更要考虑大家的需求。不过这也并不是什么坏事情,如果由着我的性子,我一定会在宾馆躺三天。
厦门文旅给人的最直观印象就是“浪漫”。宣传里的十里长堤、海上列车、曾厝垵和鼓浪屿,是这座城市的浪漫名片。不过我倒没有明显感觉出很浪漫的地方,这里的浪漫似乎因为旅游开发的缘故,显得有些模式化。更感慨的是,沙坡尾,明明在小红书中被形容成“漫画感”,在我看来,十分萧条落寞:那些本应鲜艳的油漆,在离开了镜头后,显得斑驳和衰老。
但是那又如何呢?我相信它是浪漫的,不是因为那些景点,而是因为它在我的脑海里本来就是浪漫的。我相信那里每个姑娘都穿着各式各样的波西米亚长裙,海风会将裙摆轻轻吹起。凤凰花会像火红的瀑布一样,溢满整个巷子。
Attention Engine 可以被理解成“Attetion 算子库 + Attention 运行时”。有以下设计:
- 可拆分的 Attention 算子:提高了 GPU 内存带宽利用率
- 新的 KV Cache 管理抽象 CBSR:兼具 PagedAttention 和 RadixAttention 的优点,更 general
- 宏观上动态、微观上静态的调度运行时:动态的同时不损害静态抽象和收益
- 可定制的 Attention 算子框架、JIT:一些工程特性
FlashInfer 这篇工作在 2023 年就提出了,据作者所言,那个时候只有 FlashAttention1,还没有 FA2&3,FlashDecode 等工作,但是这些工作论文发得更早。
传统的 Attention 运算需要扫描 3 遍 GPU Memory 中的 Attention Logits 矩阵(len, len),计算密度低。
FlashAttention 提出了 1-pass 的 attention 算法,提高了计算密度,缓解了 GPU Memory 到 GPU Cache 的 IO 瓶颈:
这是一篇记录我配置新电脑,在新电脑上配置系统的过程。
之所以取名叫作“没有银弹”,是因为我被挑选硬件、软件的过程折磨的精疲力竭。“没有银弹”虽然是一个老生常谈的话题,但是发现它出现在非软件工程领域,还是非常让人意外的。
没有一个笔记本、可以兼具 PC 的量大管饱和 Macbook 的高续航和漂亮屏幕;没有一个操作系统,可以兼具 Linux 的开发环境相似性、Windows 的普世和 MacOS 的闭合生态;没有一个发行版,可以兼具 ArchLinux 的高可控性和及时性,NixOS 的可复现性,Ubuntu 的稳定性;没有一个图形服务器兼具 Xorg 的适配性和 Wayland 的高性能;甚至没有一个编辑器,可以兼具 Emacs 的键盘操作和 VSCode 的 Remote 功能!
在我各种权衡利弊下,我得到了一个低续航、很沉、没有独显、甚至还不便宜的笔记本;上面装着的操作系统,无法驱动触摸板、声卡和蓝牙;软件包管理形式依然是 pacman
,只要我开始更新,我就要一直更新;依然是老旧的 Xorg,每使用一天就是在向死亡奔赴一天;都 2025 了,我甚至还要被 Emacs 的沉没成本绑架以至于无法使用 VSCode。
这篇工作比较缝合,它引用了 3 个 idea:
- Flash Attention 和 pass 抽象
- TeAAL 和它使用的 Einsum 规范
- Extended Einsum
TeAAL 提出用 Einsum 的形式去描述算子,并指导加速器的设计。但是 Einsum 只能描述仅包含加法和乘法的算子,对于 Flash-Attension 这种包含指数运算(softmax)和迭代运算的算子无法描述,于是作者借用了 Extended Einsum 的形式描述了 Flash Attension 算子并实现了 FuseMax 加速器,同时论证了 pass 抽象的合理性。
而实际上,TeAAL 提出的用 Einsum 指导加速器设计的思路并没有因为使用了 Extended Einsum 而被拓展;FuseMax 所展现的性能优势,大部分来自于 Flash-Attension 算法本身,而不是其硬件实现。
Flash-Attention 是一种 Attention 算子的实现,相比于传统的实现,它可以降低内存带宽的需求,并且使用更少的片上内存,更适合当前加速器存在的 memory bound。为了达到这个目的,我们需要: