一句话定义:算子融合(Kernel Fusion)就是把模型里原本分开执行的多个算子(Operator),合并成一个内核(Kernel)来跑,减少中间结果的来回搬运和重复启动。
它为什么能快:在深度学习框架里,矩阵乘、加法、ReLU 都是独立算子。落到图形处理器(GPU)上,每个算子往往对应一个内核,也就是一段真正并行执行的程序。假设要算 y = ReLU(xW + b)。不融合时:矩阵乘内核先算 xW,把中间结果写回显存;加法内核再把它读出来加 b,又写回显存;ReLU 内核再读一遍,最后写出 y。三次启动,中间结果来回搬两趟。融合后,矩阵乘算出的数先留在寄存器(Register)或共享内存(Shared Memory)里,顺手加 b、过 ReLU,只把最终结果写回显存。计算量没变,搬运次数大减。
打个比方:做一道菜,每切一步都把半成品装盘放进冰箱,下一步再取出,厨房再快也耗在开关冰箱和端盘子上。融合就是同一块案板连续切配、下锅,中间不反复进冰箱。
关键原因是“内存墙”(Memory Wall):加速器算力增长快,显存带宽相对稀缺。很多算子属于访存瓶颈,时间花在读写数据,而不是乘加运算。融合让中间数据留在片上存储,省掉大量显存读写,也省掉内核启动开销。在访存瓶颈明显的算子里,这可能带来数倍级提升,但它不是万能加速键。
| 对比项 | 不融合 | 融合 |
|---|---|---|
| 中间结果 | 写回显存再读出 | 留在片上 |
| 内核启动 | 每个算子一次 | 尽量合成一个 |
| 显存带宽 | 压力大 | 压力小 |
| 典型收益 | 算子链越长越吃亏 | 逐元素链、矩阵乘+偏置+激活更明显 |
和相邻概念的区别:融合属于图优化、编译优化的一种,常和算子调优、量化、内存复用一起出现。它不改数学结果,主要改执行方式;量化、剪枝是减少计算量或模型大小;分布式并行是把计算分到多卡。三者不是一回事。
实际意义:对从业者,融合是训练和推理提速的常规手段,大模型推理尤其受显存带宽限制,融合往往能降低延迟和成本;部署时可优先选支持自动融合的推理引擎,手写高性能内核时也可手动融合。对普通人,它让手机和云端 AI 响应更快、更省电,但不等于模型更聪明。要注意,融合不是万能:可能增加寄存器压力、降低并行度,动态形状和复杂控制流也更难融合。具体支持范围和效果,以官方文档和实测为准。
