一、算子优化概述

1.1 什么是算子

先说说算子是什么。说白了,算子就是深度学习网络里的一个基本计算单元。比如卷积、矩阵乘法、ReLU激活函数、Softmax,这些都是算子。

我刚开始接触深度学习时,总觉得算子这词挺唬人的。后来做多了才发现,它就是「一个函数」——输入数据,经过计算,输出结果。只不过在GPU上,这个「函数」需要被极度优化才能跑得快。

举个例子,一个卷积算子:

// 伪代码示意
Tensor conv2d(Tensor input, Tensor weight) {
    // input: [N, C, H, W]
    // weight: [K, C, R, S]
    // output: [N, K, H_out, W_out]
    return output;
}

嗯,就是这么个东西。但你别小看它,一个ResNet-50里就有几十个卷积算子,每个算子的性能直接决定了整个模型的训练速度。

1.2 算子优化的目标与意义

算子优化要达成什么?三个核心目标:

  • 更快——减少计算时间,让模型训练从几天缩短到几小时
  • 更省——降低显存占用,让大模型能在有限的GPU上跑起来
  • 更稳——避免数值溢出、精度损失等问题

我有个亲身经历。之前做BERT训练,一个Attention算子的实现没优化好,导致单卡显存爆了。后来改用了FlashAttention的思路,显存直接降了60%。你说这优化重不重要?

核心观点:算子优化不是锦上添花,而是刚需。没有好的算子实现,再牛的模型也跑不动。

1.3 算子优化的核心挑战

做算子优化,你首先得搞清楚瓶颈在哪。我把它分成两类:

计算瓶颈

计算瓶颈,就是GPU的计算单元在「等数据」。你想想看,GPU有几千个CUDA核心,如果每个核心都在空转等数据,那计算效率能高吗?

典型的计算密集型算子:

  • 大矩阵乘法(M, N, K都很大)
  • 深度卷积(通道数多、卷积核大)
  • LayerNorm(需要对整个特征维度做统计)

访存瓶颈

访存瓶颈,说白了就是「数据搬运太慢」。GPU的计算速度远快于显存带宽,很多时候算子跑得慢不是因为算不过来,而是因为数据没到位。

典型的访存密集型算子:

  • Element-wise操作(ReLU、加法、乘法)
  • Reshape、Transpose
  • 小卷积(比如1x1卷积,但输入输出通道数少)

避坑指南:我曾经犯过一个错误——看到一个算子跑得慢,二话不说就去优化计算逻辑。结果折腾了两天,性能提升不到5%。后来一分析,发现是访存瓶颈,改了一下数据排布方式,性能直接翻倍。所以,先分析瓶颈再动手,别盲目优化。

1.4 性能分析基础

要量化算子性能,你得懂两个指标:

FLOPs(浮点运算次数)

FLOPs衡量的是计算量。比如一个矩阵乘法 C = A × B,其中A是[M×K],B是[K×N],那FLOPs就是 2 × M × N × K(乘法和加法各算一次)。

但注意,FLOPs高不代表算子慢。我见过一个算子FLOPs只有1G,但跑了10ms;另一个算子FLOPs有100G,只跑了5ms。为什么?因为前者是访存瓶颈,后者是计算瓶颈且充分利用了GPU。

带宽利用率

带宽利用率 = 实际吞吐 / 理论带宽。这个指标能告诉你访存效率如何。

指标 计算公式 理想值
FLOPs利用率 实际FLOPs / 峰值FLOPs > 80%
带宽利用率 实际带宽 / 理论带宽 > 70%
计算密度 FLOPs / 访存量 越高越好

注意:计算密度(Arithmetic Intensity)是关键。如果计算密度低(比如小于1),那基本就是访存瓶颈,你再优化计算也没用。我习惯用Roofline模型来分析,一眼就能看出瓶颈在哪。

1.5 知识体系总览

下面这张图是我自己总结的算子优化知识体系,你可以对照着看:

算子优化 优化目标 核心挑战 性能分析 更快 更省 更稳 计算瓶颈 访存瓶颈 FLOPs 带宽利用率 计算密度 卷积 / 矩阵乘 ReLU / Add LayerNorm Softmax 核心:先分析瓶颈,再针对性优化 计算瓶颈 → 优化计算逻辑 | 访存瓶颈 → 优化数据排布

这张图把算子优化的核心脉络串起来了。你从「优化目标」出发,搞清楚要什么;然后识别「核心挑战」,判断瓶颈在哪;最后用「性能分析」工具量化效果。这三步走完,一个算子的优化思路就清晰了。

个人建议:刚开始学算子优化,别贪多。先拿一个简单的算子(比如ReLU)练手,把访存优化搞明白。我当年就是从一个Element-wise算子入门的,虽然简单,但把GPU的访存模型摸透了,后面做复杂算子就顺手多了。

好了,第一章就聊到这。记住一句话:算子优化的本质,就是让GPU的每一滴算力都用在刀刃上。


想要更多资料,联系可可