一句话定义:算子(Operator)是深度学习框架里最小的、可被独立调度执行的计算单元——一次矩阵乘法、一次加法、一次 AI 词典:Softmax">Softmax,各自都是一个算子。
它是怎么来的
一个神经网络在代码里描述的是“数据怎么流”:张量从这层流到那层,做这做那。但机器不认这些,它只认具体动作。框架会把这份描述组织成一张计算图(Computational Graph),再把图上的节点逐个“降”成算子实例。一个 Transformer 层里就同时有矩阵乘、LayerNorm、Softmax、残差相加、GELU 激活等好几种算子。
打个厨房的比方:菜谱上写“红烧肉”,但灶台上真正发生的是切块、焯水、下锅、翻面、收汁这些原子动作。菜谱写给人看,原子动作才是真正被执行的。算子就是模型的原子动作。
为什么它决定推理速度
在每个算子单独执行时,数据要先从显存搬到计算单元附近,算完再搬回去;这趟搬运的开销经常比计算本身还大。于是有了算子融合(Operator Fusion,也叫 Kernel Fusion):把“乘完就加、加完就激活”这串连续动作合并成一个核函数(Kernel),中间结果留在寄存器或共享内存里,不写回显存。搬运次数一少,同样的算力就能跑出更高吞吐。
反过来,如果图被切得很碎,几百个小算子轮流上阵,GPU 大部分时间在等数据,算力利用率就上不去。所以同一个模型换个推理引擎,速度可能差出一大截;差距不一定来自硬件,而来自积木拼得好不好。
容易混的几个词
| 概念 | 是什么 | 关系 |
|---|---|---|
| 层(Layer) | 语义单位,如“注意力层” | 一层通常包含多个算子 |
| 算子(Operator) | 计算图中的最小执行节点 | 模型被拆成它 |
| 核函数(Kernel) | 算子在特定硬件上的实现 | 一个算子可有多个 kernel |
| 计算图(Graph) | 算子加数据依赖的组织方式 | 融合就发生在这一层 |
对从业者意味着什么
调性能时,第一步通常不是改结构,而是做算子级别的性能剖析(Profiling),看哪几个算子花掉了大部分时间。适配新硬件、新编译器,第一件事往往是把算子库补齐;研究里出现框架不支持的新运算,就得写自定义算子(Custom Operator)。这些工作看起来不起眼,却决定模型能不能真正跑起来。
对不写底层代码的人,也有一个可用的判断:评估推理加速方案时,可以问一句“它做算子融合吗,融合后剩下多少个核函数”。这不是唯一指标,具体效果以官方文档和实测为准;但问题问对了,答案就有信息量。
