文章目录
-
- 第17题:KV Cache 计算
- 第18题:RoPE 旋转位置编码
- 第19题:Transformer Block 的 Post-norm 和 Pre-norm
- 第20题:Gated Attention 的 Output 计算
- 第21题:GPT-OSS 20B 架构分析
- 第22题:Roofline Model 分析
- 第23题:Operation Intensity 计算
- 第24题:A100 Operation Intensity 分析
第17题:KV Cache 计算
假设我们要在一台服务器上对一个采用多头注意力(MHA)的 Transformer 模型进行推理。模型参数如下:隐藏层维度
d
=
4096
d=4096
d=4096,层数
L
=
32
L=32
L=32,注意力头数
h
=
32
h=32
h=32,采用 FP16 半精度存储(每个元素占 2 Bytes)。
N
N
N个 token 时,KV Cache 新增存储占用的计算公式。
B
=
1
B=1
B=1,序列长度达到
N
=
1024
N=1024
N=1024时,请计算该请求在显存中占用的 KV Cache 总量(单位:MB)。
解:
T
o
t
a
l
K
V
C
a
c
h
e
=
B
×
N
×
L
×
2
×
d
×
2
Bytes
=
4
B
L
d
Bytes
Total KV Cache=B×N×L×2×d×2\\text{Bytes}= 4BLd \\text{Bytes}
TotalKVCache=B×N×L×2×d×2Bytes=4BLdBytes 第一个2是k、v各一份
1
MB
=
1024
×
1024
Bytes
1 \\text{ MB} = 1024 \\times 1024 \\text{ Bytes}
1 MB=1024×1024 Bytes
Total
=
B
×
N
×
L
×
2
×
(
d
h
×
h
)
×
2
Bytes
=
1
×
1024
×
32
×
(
2
×
4096
×
2
)
Bytes
=
512
M
B
\\begin{aligned} \\text{Total}&=B×N×L×2×(\\frac{d}{h}×h)×2\\text{Bytes} \\\\ &= 1\\times 1024 \\times 32 \\times (2 \\times 4096 \\times 2) \\text{ Bytes} \\\\ &= 512MB \\end{aligned}
Total=B×N×L×2×(hd×h)×2Bytes=1×1024×32×(2×4096×2) Bytes=512MB
第18题:RoPE 旋转位置编码
对于位置
m
m
m的查询向量
q
m
q_m
qm和位置
n
n
n的键向量
k
n
k_n
kn:
q
~
m
\\tilde{q}_m
q~m 和
k
~
n
\\tilde{k}_n
k~n的点积仅和
q
m
q_m
qm、
k
n
k_n
kn及相对位置
m
−
n
m-n
m−n相关;
提示:RoPE 通过旋转矩阵
R
p
o
s
R_{pos}
Rpos将位置信息注入向量。
解: 在 RoPE(Rotary Position Embedding)中,对位于位置
m
m
m的向量做旋转编码:
q
~
m
=
R
(
m
)
q
m
,
k
~
n
=
R
(
n
)
k
n
\\tilde q_m = R(m)q_m, \\quad \\tilde k_n = R(n)k_n
q~m=R(m)qm,k~n=R(n)kn
计算 RoPE 后的点积
q
~
m
⊤
k
~
n
=
(
R
(
m
)
q
m
)
⊤
(
R
(
n
)
k
n
)
=
q
m
⊤
R
(
m
)
⊤
R
(
n
)
k
n
=
q
m
⊤
R
(
n
−
m
)
k
n
\\tilde q_m^\\top \\tilde k_n = (R(m) q_m)^\\top (R(n) k_n) = q_m^\\top R(m)^\\top R(n) k_n=q_m^\\top R(n-m) k_n
q~m⊤k~n=(R(m)qm)⊤(R(n)kn)=qm⊤R(m)⊤R(n)kn=qm⊤R(n−m)kn
q
~
m
⊤
k
~
n
仅依赖于
q
m
,
k
n
和相对位置
(
m
−
n
)
\\tilde q_m^\\top \\tilde k_n\\text{ 仅依赖于 } q_m, k_n \\text{ 和相对位置 } (m-n)
q~m⊤k~n 仅依赖于 qm,kn 和相对位置 (m−n),不依赖绝对位置 (m) 或 (n),只编码了相对位置信息。如果在更高维度的情况下,RoPE 将向量分成多个二维子空间,每个子空间独立应用旋转,结论同样成立。
RoPE 只作用于
Q
u
e
r
y
和
K
e
y
,不对
V
a
l
u
e
向量进行编码
\\text{RoPE 只作用于 } Query \\text{ 和 } Key,不对Value向量进行编码
RoPE 只作用于 Query 和 Key,不对Value向量进行编码 即:
q
→
q
~
=
R
(
p
o
s
)
,
q
q \\rightarrow \\tilde q = R(pos), q
q→q~=R(pos),q,
k
→
k
~
=
R
(
p
o
s
)
,
k
k \\rightarrow \\tilde k = R(pos), k
k→k~=R(pos),k 而:
v
不进行 RoPE 旋转
v \\text{ 不进行 RoPE 旋转}
v 不进行 RoPE 旋转 why:
- Attention 权重由
softmax
(
q
⊤
k
d
)
\\text{softmax}\\left(\\frac{q^\\top k}{\\sqrt{d}}\\right)
softmax(dq⊤k)决定,位置关系只需影响 q·k 相似度 -
Attention
(
i
)
=
∑
j
=
1
L
α
i
j
v
j
\\text{Attention}(i) = \\sum_{j=1}^{L} \\alpha_{ij} v_j
Attention(i)=∑j=1Lαijvj加权求和输出,此时v
v
v只负责进行内容聚合,不需要显式位置编码
第19题:Transformer Block 的 Post-norm 和 Pre-norm
对于 Transformer Block 的 Post-norm 有:
x
l
+
1
=
x
l
+
Sublayer
(
x
l
)
y
l
+
1
=
LN
(
x
l
+
1
)
x_{l+1}=x_l + \\text{Sublayer}(x_l)\\\\ y_{l+1}=\\text{LN}(x_{l+1})
xl+1=xl+Sublayer(xl)yl+1=LN(xl+1)
解: Pre-Norm将LayerNorm应用在Sublayer之前
y
l
=
LN
(
x
l
)
x
l
+
1
=
x
l
+
Sublayer
(
y
l
)
y_l = \\text{LN}(x_l)\\\\x_{l+1} = x_l + \\text{Sublayer}(y_l)
yl=LN(xl)xl+1=xl+Sublayer(yl)
Pre-norm 由于存在梯度恒等映射通路(residual connection 在 LayerNorm 之后),梯度更稳定;Post-norm 的梯度需要先经过 LayerNorm,更容易出现梯度消失或放大。 Pre-norm 的梯度通路
x
l
+
1
=
x
l
+
Sublayer
(
LN
(
x
l
)
)
x_{l+1} = x_l + \\text{Sublayer}(\\text{LN}(x_l))
xl+1=xl+Sublayer(LN(xl)) 反向传播:
∂
L
∂
x
l
=
∂
L
∂
x
l
+
1
(
I
+
∂
Sublayer
∂
x
^
l
∂
LN
∂
x
l
)
\\frac{\\partial \\mathcal{L}}{\\partial x_l}=\\frac{\\partial \\mathcal{L}}{\\partial x_{l+1}}\\Big(I+\\frac{\\partial \\text{Sublayer}}{\\partial \\hat x_l}\\frac{\\partial \\text{LN}}{\\partial x_l}\\Big)
∂xl∂L=∂xl+1∂L(I+∂x^l∂Sublayer∂xl∂LN)
- 存在一条恒等映射梯度通路
I
I
I - 无论子层或 LN 如何变化,梯度都能直接传回
Post-norm 的梯度通路
y
l
+
1
=
LN
(
x
l
+
Sublayer
(
x
l
)
)
y_{l+1} = \\text{LN}(x_l + \\text{Sublayer}(x_l))
yl+1=LN(xl+Sublayer(xl)) 反向传播:
∂
L
∂
x
l
=
∂
L
∂
y
l
+
1
⋅
∂
LN
∂
x
l
+
1
⋅
(
I
+
∂
Sublayer
∂
x
l
)
\\frac{\\partial \\mathcal{L}}{\\partial x_l}=\\frac{\\partial \\mathcal{L}}{\\partial y_{l+1}}\\cdot\\frac{\\partial \\text{LN}}{\\partial x_{l+1}}\\cdot\\Big(I+\\frac{\\partial \\text{Sublayer}}{\\partial x_l}\\Big)
∂xl∂L=∂yl+1∂L⋅∂xl+1∂LN⋅(I+∂xl∂Sublayer)
- 梯度必须经过 LN 的 Jacobian Jacobian(雅可比矩阵)是一个多元函数的一阶导数矩阵
- 不存在“纯恒等”的梯度直通路径
LayerNorm梯度放缩效应:
LN
(
x
)
=
x
−
μ
σ
,
于是
∣
∂
LN
∂
x
∣
≈
O
(
1
σ
)
\\text{LN}(x) = \\frac{x – \\mu}{\\sigma} ,于是\\left| \\frac{\\partial \\text{LN}}{\\partial x} \\right| \\approx \\mathcal{O}\\left(\\frac{1}{\\sigma}\\right)
LN(x)=σx−μ,于是
∂x∂LN
≈O(σ1)
当堆叠
L
L
L层 Post-norm block:
∏
l
=
1
L
∂
LN
∂
x
l
\\prod_{l=1}^{L} \\frac{\\partial \\text{LN}}{\\partial x_l}
∏l=1L∂xl∂LN
- 若
σ
>
1
\\sigma > 1
σ>1 → 梯度 指数衰减 - 若
σ
<
1
\\sigma < 1
σ<1 → 梯度 指数放大
梯度消失 / 爆炸更容易出现 Pre-norm 梯度中始终含有:
∏
l
=
1
L
I
=
I
\\prod_{l=1}^{L} I = I
∏l=1LI=I
- 梯度不会被 LN 连乘放缩
- 深层 Transformer 更稳定
第20题:Gated Attention 的 Output 计算
已知 MHA 中第 k 层第 i 位置 token 的 output 表征计算如下:
请相应给出下图 Gated Attention 中 G1/G2/G3 对应的 output
o
i
k
o_i^k
oik计算方法。 注意:可用
Non-Linearity-Map
\\text{Non-Linearity-Map}
Non-Linearity-Map算子表示 element-wise gatting 机制,即
Y
′
=
Y
⊙
σ
(
X
W
θ
)
=
Non-Linearity-Map(Y)
Y' = Y \\odot \\sigma(X W_\\theta) = \\text{Non-Linearity-Map(Y)}
Y′=Y⊙σ(XWθ)=Non-Linearity-Map(Y)。
解: G1:Output / Dense Gating 在 Concat 之后、Dense Layer 之前应用门控 它对 Attention 聚合后的上下文向量进行门控处理。即对公式中括号内的加权求和结果进行 Gating。
H
i
k
=
∑
j
=
0
i
S
i
j
k
⋅
X
j
W
V
k
H_i^k=\\sum_{j=0}^i S_{ij}^k \\cdot X_j W_V^k
Hik=∑j=0iSijk⋅XjWVk 对聚合结果应用门控后再进行输出投影
o
i
,
G
1
k
=
Non-Linearity-Map
(
H
i
k
)
⋅
W
O
k
=
Non-Linearity-Map
(
∑
j
=
0
i
S
i
j
k
⋅
X
j
W
V
k
)
⋅
W
O
k
o_{i,G_1}^k = \\text{Non-Linearity-Map}\\left( H_i^k\\right)\\cdot W_O^k=\\text{Non-Linearity-Map}\\left( \\sum_{j=0}^i S_{ij}^k \\cdot X_j W_V^k \\right)\\cdot W_O^k
oi,G1k=Non-Linearity-Map(Hik)⋅WOk=Non-Linearity-Map(j=0∑iSijk⋅XjWVk)⋅WOk
G2:Value Gating
o
i
,
G2
k
=
(
∑
j
=
0
i
S
i
j
k
⋅
Non-Linearity-Map
(
X
j
W
V
k
)
Z
)
W
O
k
o_{i,\\text{G2}}^k = \\left(\\sum_{j=0}^i S_{ij}^k \\cdot \\text{Non-Linearity-Map}(X_j W_V^k)Z\\right)W_O^k
oi,G2k=(j=0∑iSijk⋅Non-Linearity-Map(XjWVk)Z)WOk
G3:Key Gating(影响 attention score)
K
~
j
k
=
Non-Linearity-Map
(
X
j
W
K
k
)
\\tilde K_j^k = \\text{Non-Linearity-Map} (X_jW_K^k)
K~jk=Non-Linearity-Map(XjWKk) Attention score:
S
i
j
k
=
Softmax
j
(
(
X
i
W
Q
k
)
T
(
K
~
j
k
)
d
k
)
S_{ij}^k = \\text{Softmax}_j \\left( \\frac{(X_i W_Q^k)^T(\\tilde K_j^k)}{\\sqrt{d_k}} \\right)
Sijk=Softmaxj(dk
(XiWQk)T(K~jk))
o
i
,
G3
k
=
(
∑
j
=
0
i
S
i
j
k
⋅
X
j
W
V
k
)
W
O
k
o_{i,\\text{G3}}^k = (\\sum_{j=0}^i S_{ij}^k \\cdot X_j W_V^k) W_O^k
oi,G3k=(j=0∑iSijk⋅XjWVk)WOk
⚠️ Gate 不直接出现在求和式中,而是通过改变
S
i
j
k
S_{ij}^k
Sijk 间接影响输出
第21题:GPT-OSS 20B 架构分析
GPT-OSS 20B 架构相比标准 Transformer 有多处改动,请依次文字分析各个改动的具体内容与意义:
解:
- 问题:原始 Transformer 使用绝对位置编码
- 位置是“加到 embedding 上”的,而不是参与注意力计算
- 对超长上下文泛化能力差
- 对相对顺序建模不自然
- 优点:RoPE 将位置信息直接旋转到 Q / K 向量空间中,不再是 x + pos,而是
Q
′
=
Q
⋅
R
(
θ
)
,
K
′
=
K
⋅
R
(
θ
)
Q' = Q \\cdot R(\\theta), \\quad K' = K \\cdot R(\\theta)
Q′=Q⋅R(θ),K′=K⋅R(θ),其中旋转角度与 token 的相对位置有关。- 天然建模相对位置
- 长上下文泛化能力更强
- 与注意力机制深度耦合
- 问题:LayerNorm 计算公式
LN
(
x
)
=
x
−
μ
σ
\\text{LN}(x) = \\frac{x – \\mu}{\\sigma}
LN(x)=σx−μ- 需要计算均值 + 方差(代价大)
- 均值会破坏尺度信息
- 在大模型中数值不稳定
- RMSNorm 去掉均值,具体计算公式
RMSNorm
(
x
)
=
x
mean
(
x
2
)
\\text{RMSNorm}(x) = \\frac{x}{\\sqrt{\\text{mean}(x^2)}}
RMSNorm(x)=mean(x2)x- 计算更快(少一次 reduce)
- 训练更稳定
- 保留向量方向,只缩放幅值
- 更适合 Pre-Norm Transformer RMSNorm + PreNorm 几乎是当前大模型默认配置
- 问题:MHA存在的问题
- 每个 head 都有独立 Q / K / V
- K / V 在推理阶段占用大量显存
- 在长上下文下成本爆炸
- GQA的做法是多个 Query Head 共享一组 Key / Value,结构介于MHA(完全独立)和MQA(所有 head 共享 KV)之间 GQA的核心逻辑是因为 Key / Value 表示的是“被关注的内容”,而 Query 表示的是“关注的视角”,多个视角完全可以共享同一份“被看的东西”。
- KV cache 显存大幅降低
- 长上下文推理成本显著下降
- 性能几乎不损失
- 标准的FFN问题
- 每个 token 都走同一个 FFN
- 参数利用率低
- 规模一大 → 计算直接爆炸
- 改成MoE FFN,使用路由器(Router)动态选择激活的专家(FFN),每个 token 只激活部分专家。
- 增加模型容量:总参数量大幅增加(20B 模型容量)
- 计算效率:每次前向只激活少量参数(实际激活 3.6B)
- 专家分工,在不同的方向表现更优
- 问题:
FFN
(
x
)
=
W
2
⋅
GELU
(
W
1
x
)
\\text{FFN}(x) = W_2 \\cdot \\text{GELU}(W_1 x)
FFN(x)=W2⋅GELU(W1x)- 单通道
- 非线性表达能力有限
- SwiGLU 形式的形式
FFN
(
x
)
=
W
2
⋅
(
SiLU
(
W
1
x
)
⊙
W
3
x
)
\\text{FFN}(x) = W_2 \\cdot (\\text{SiLU}(W_1 x) \\odot W_3 x)
FFN(x)=W2⋅(SiLU(W1x)⊙W3x)- 门控机制
- 两个线性投影
- 一个作为 gate
- 表达能力显著增强,更好的梯度流,并且与前面的MoE相契合
总结
| RoPE | 长上下文泛化 |
| RMSNorm | 稳定 + 高效 |
| GQA | 推理显存压缩 |
| MoE | 参数效率最大化 |
| SwiGLU | 专家表达能力 |
第22题:Roofline Model 分析
结合下列代码和结果,设 repeat=32 时,f 函数在 GPU 上执行时用于数据移动和计算的时间分别为
T
m
o
v
e
T_{move}
Tmove和
T
c
o
m
p
T_{comp}
Tcomp ,并假设此时恰处于 Memory 和计算的平衡点,依次分析:
def f(x: Tensor[N]):
for _ in range(repeat):
x = x * 2
return x
解:
x
x
x只从显存加载一次、写回一次,与 repeat 无关,而计算时间与repeat成正相关 当repeat = 16时,
T
m
o
v
e
(
16
)
=
T
m
o
v
e
(
32
)
,
T
c
o
m
p
(
16
)
=
T
c
o
m
p
(
32
)
/
32
×
16
=
1
/
2
T
c
o
m
p
(
32
)
T_{move}(16)= T_{move}(32),\\\\T_{comp}(16) = T_{comp}(32)/32×16=1/2 T_{comp}(32)
Tmove(16)=Tmove(32),Tcomp(16)=Tcomp(32)/32×16=1/2Tcomp(32) 此时处于Memory-bounded
x
x
x只从显存加载一次、写回一次,与 repeat 无关,而计算时间与repeat成正相关 当repeat = 64时,
T
m
o
v
e
(
64
)
=
T
m
o
v
e
(
32
)
,
T
c
o
m
p
(
64
)
=
T
c
o
m
p
(
32
)
/
32
×
64
=
2
T
c
o
m
p
(
32
)
T_{move}(64)= T_{move}(32),\\\\T_{comp}(64) = T_{comp}(32)/32×64=2 T_{comp}(32)
Tmove(64)=Tmove(32),Tcomp(64)=Tcomp(32)/32×64=2Tcomp(32) 此时处于Compute-bounded
第23题:Operation Intensity 计算
GPU 的 Operation Intensity 定义为 浮点操作数 FLOPS 与 数据移动(Bytes)的比值,请计算并对比 LayerNorm 和 RMSNorm 的 Operation Intensity。 注意:d=8192,dtype=bf16,所有数据初始存于全局 DRAM,结果需写回全局 DRAM,且 SRAM 足够存放所有中间计算结果。
解:
Operation Intensity
=
Total FLOP
Total Bytes Moved
\\text{Operation Intensity} = \\frac{\\text{Total FLOP}}{\\text{Total Bytes Moved}}
Operation Intensity=Total Bytes MovedTotal FLOP
对于LayerNorm:
y
=
x
−
E
[
x
]
V
a
r
[
x
]
+
ϵ
∗
γ
+
β
y = \\frac{x – E[x]}{\\sqrt{Var[x] + \\epsilon}} * \\gamma + \\beta
y=Var[x]+ϵ
x−E[x]∗γ+β 具体的FLOPS计算:
E
[
x
]
E[x]
E[x]):需要求和 (
d
d
d次加法)和1次除法。
≈
d
\\approx d
≈dFLOPS
V
a
r
[
x
]
Var[x]
Var[x]):减均值
x
−
E
(
x
)
x – E(x)
x−E(x)(
d
d
d次减法),平方的时候d次乘法,求和d次加法,1次除法
≈
3
d
\\approx 3d
≈3dFLOPS
(
x
−
E
(
x
)
)
×
1
V
a
r
[
x
]
+
ϵ
(x-E(x)) \\times \\frac{1}{\\sqrt{Var[x]+\\epsilon}}
(x−E(x))×Var[x]+ϵ1):
d
d
d次乘法 (这里复用了第2步计算的
x
−
E
(
x
)
x-E(x)
x−E(x)),缩放 (
×
γ
\\times \\gamma
×γ):
d
d
d次乘法。平移 (
+
β
+ \\beta
+β):
d
d
d 次加法。
≈
3
d
\\approx 3d
≈3dFLOPS
LayerNorm 总 FLOPs:
d
+
3
d
+
3
d
=
7
d
FLOPs
d + 3d + 3d = 7d \\text{FLOPs}
d+3d+3d=7dFLOPs
DRAM 数据移动(Bytes)
- 输入向量
x
x
x:1
×
d
1 \\times d
1×d 个元素 - 参数
γ
\\gamma
γ:1
×
d
1 \\times d
1×d 个元素 - 参数
β
\\beta
β:1
×
d
1 \\times d
1×d 个元素 - 输出向量
y
y
y:1
×
d
1 \\times d
1×d 个元素
LayerNorm 总 Bytes =
(
3
d
+
1
d
)
×
2
Bytes/element
=
8
d
Bytes
(3d + 1d) \\times 2 \\text{ Bytes/element} = \\mathbf{8d \\text{ Bytes}}
(3d+1d)×2 Bytes/element=8d Bytes LayerNorm Operation Intensity:
O
I
L
N
=
7
d
8
d
=
7
8
=
0.875
FLOP/Byte
OI_{LN} = \\frac{7d}{8d} = \\frac{7}{8} = \\mathbf{0.875 \\text{ FLOP/Byte}}
OILN=8d7d=87=0.875 FLOP/Byte
对于RMSNorm:
y
=
x
∣
∣
x
∣
∣
2
2
+
ϵ
∗
γ
y = \\frac{x}{\\sqrt{||x||_2^2 + \\epsilon}} * \\gamma
y=∣∣x∣∣22+ϵ
x∗γ 具体的FLOPS计算:
x
2
x^2
x2):
d
d
d次乘法,求和:
d
d
d次加法(开根号与除法忽略不计)
≈
2
d
\\approx 2d
≈2d FLOPS
x
×
1
∣
∣
x
∣
∣
2
2
+
ϵ
x \\times \\frac{1}{\\sqrt{||x||_2^2 + \\epsilon}}
x×∣∣x∣∣22+ϵ1):
d
d
d 次乘法;缩放 (
×
γ
\\times \\gamma
×γ):
d
d
d次乘法
=
2
d
FLOPs
= 2d\\ \\text{FLOPs}
=2d FLOPs
RMSNorm 总 FLOPs:
2
d
+
2
d
=
4
d
FLOPs
2d + 2d = 4d \\ \\text{FLOPs}
2d+2d=4d FLOPs DRAM 数据移动(Bytes)
- 输入向量
x
x
x:1
×
d
1 \\times d
1×d 个元素 - 参数
γ
\\gamma
γ:1
×
d
1 \\times d
1×d 个元素 - 输出向量
y
y
y:1
×
d
1 \\times d
1×d 个元素
RMSNorm 总 Bytes =
(
2
d
+
1
d
)
×
2
Bytes/element
=
6
d
Bytes
(2d + 1d) \\times 2 \\text{ Bytes/element} = \\mathbf{6d \\text{ Bytes}}
(2d+1d)×2 Bytes/element=6d Bytes RMSNorm Operation Intensity:
O
I
R
M
S
=
4
d
6
d
=
2
3
≈
0.667
FLOP/Byte
OI_{RMS} = \\frac{4d}{6d} = \\frac{2}{3} \\approx \\mathbf{0.667 \\text{ FLOP/Byte}}
OIRMS=6d4d=32≈0.667 FLOP/Byte
对比:LayerNorm 的 OI 为 0.875 FLOP/Byte,RMSNorm 的 OI 为 0.667 FLOP/Byte。两者都很低,属于 Memory-bounded 操作。RMSNorm 虽然计算量更少,但由于数据移动占主导,实际加速效果有限。
第24题:A100 Operation Intensity 分析
以 A100 为例,分析 FP32 和 BF16(TensorCore,考虑dense 即左边列的 FLOPS) 类型在进入 Compute-bounded 时需要的Operation Intensity 分别是多少。Bandwidth 统一简化为 2TB/s。
解: 由表可得: FP32:19.5 TFLOPS BF16(TensorCore):312 TFLOPS Memory Bandwidth:2TB/s = 2000 GB/s 当计算时间等于数据传输时间时,达到平衡点:
Intensity
FP32
=
19.5
TFLOPS
2
TB/s
=
9.75
FLOP/Byte
Intensity
BF16
=
312
TFLOPS
2
TB/s
=
156
FLOP/Byte
\\text{Intensity}_{\\text{FP32}} = \\frac{19.5 \\text{ TFLOPS}}{2 \\text{ TB/s}} = 9.75 \\text{ FLOP/Byte}\\\\ \\text{Intensity}_{\\text{BF16}} = \\frac{312 \\text{ TFLOPS}}{2 \\text{ TB/s}} = 156 \\text{ FLOP/Byte}
IntensityFP32=2 TB/s19.5 TFLOPS=9.75 FLOP/ByteIntensityBF16=2 TB/s312 TFLOPS=156 FLOP/Byte
- 要让 FP32 计算进入 Compute-bounded,Operation Intensity 需要 ≥ 9.75 FLOP/Byte
- 要让 BF16(TensorCore) 计算进入 Compute-bounded,Operation Intensity 需要 ≥ 156 FLOP/Byte



