Nvidia 的 GPU 性能背景用户指南 (https://docs.nvidia.com/deeplearning/performance/dl-performance-gpu-background/index.html) 列出了以下 fp16 数据操作的算术强度。
我正在尝试推导它们背后的人工智能数学。
# | 操作 | 算术强度 | 通常受限于 |
---|---|---|---|
1 | 线性层(4096 个输出,1024 个输入,批量大小 512) | 315 次浮点运算/B | 算术 |
2 | 线性层(4096 个输出,1024 个输入,批量大小 1) | 1 次浮点运算/B | 记忆 |
3 | 具有 3x3 窗口和单位步长的最大池化 | 2.25 FLOPS/B | 记忆 |
4 | ReLU激活 | 0.25 FLOPS/B | 记忆 |
5 | 层归一化 | < 10 FLOPS/B | 记忆 |
对于#2,我得到:
剩下的操作呢?
每个输出激活需要 1024x2 = 2048 个 MAC。(忽略加法)即 1024 个权重需要乘以 1024 个输入激活才能产生一个输出激活。有 4096 个输出激活,即 2048*4096 = 8388608 个 MAC,批量大小为 512,即 4294967296 个 MAC
对于内存访问,对于批量大小为 1 的情况,我们需要访问 1024 个输入激活(读取)和 4096 个输出激活(写入),但我们的批量大小为 512,每个操作数都假设为 FP16。因此,对于输入和输出激活,我们有