计算算术强度

问题描述 投票:0回答:1

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,我得到:

  • Flops = 2 个操作 * 1024 个输入 * 每个 4096 个权重
  • 内存 = 2 字节 *(1024 个输入读取 + 1024*4096 个权重读取 + 4096 个写入输出)
  • --> 浮点运算/内存 ~= 1 浮点运算/B

剩下的操作呢?

performance machine-learning gpu artificial-intelligence nvidia
1个回答
0
投票

每个输出激活需要 1024x2 = 2048 个 MAC。(忽略加法)即 1024 个权重需要乘以 1024 个输入激活才能产生一个输出激活。有 4096 个输出激活,即 2048*4096 = 8388608 个 MAC,批量大小为 512,即 4294967296 个 MAC

对于内存访问,对于批量大小为 1 的情况,我们需要访问 1024 个输入激活(读取)和 4096 个输出激活(写入),但我们的批量大小为 512,每个操作数都假设为 FP16。因此,对于输入和输出激活,我们有

  • 输入访问 = 1024 * 512 * 2 = 1048576
  • 输出访问 = 4096 * 512 * 2 = 4194304
  • 权重 = 1024 * 4096 * 2 = 8388608
    总计 13631488 和
    4294967296 个 MAC / 13631488 字节的比率 = 315
© www.soinside.com 2019 - 2024. All rights reserved.