场景:单卡 A100 80GB,bf16,batch=1,8 个注意力头,head_dim=64(d_model=512),每层都算 full attention。现在要把长文档分类的序列长度从 4096 提到 32768。请算:attention score 矩阵 S=QK^T 的显存从多少变成多少?只换 FlashAttention 能解决到哪一步?要真正跑得动,你还会改什么?
面试官在考什么
判断候选人是否真正理解 attention 的 O(L²) 显存来自 S/P 矩阵、FlashAttention 省的是显存而非计算量,并能给出复杂度降级的具体方案和质量代价。
回答框架 · 前两步
- S 矩阵显存 = B×H×L×L×2 bytes:4k 时约 8×4096²×2 ≈ 256MB/层,32k 时约 8×32768²×2 ≈ 16GB/层,涨 64 倍;多层叠上去直接 OOM。
- FlashAttention 用分块 + online softmax + 反向重算,不物化 S/P,显存降到 O(L)(随长度线性),但 FLOPs 仍是 O(L²),只是 IO 更优、常数更小。
还有 3 条答案要点、 3 层追问、 5 个常见坑, 以及针对你简历的追问路径,在定制报告里。
延伸阅读
想看这个方向的整体准备路线? 进入「深度学习基础」方向页
同一能力域的其他题
- 手写版:请推导一下自注意力的计算过程,并说明为什么要除以 sqrt(d_k)?如果不除会出什么问题?
- 你用单层 LSTM(hidden=128)做一个长度 512 的序列分类任务,只取最后一个时间步的 h 接一层线性分类头。训练集 loss 能降到 0.05,验证集 loss 停在 0.6 左右;更奇怪的是,你把验证集里每条样本的时间步随机打乱后再测,指标几乎不变。请给出你的根因判断、一个能证伪它的实验,以及你接下来会怎么改。
- 场景:线上实时风控,每条请求是一条长度 300 的行为序列(每步 64 维),要求单条推理 P99 < 20ms,只能部署一张 T4,线上 batch=1(请求串行到达但必须低延迟)。候选方案:(A) 2 层 LSTM,hidden=256;(B) 2 层 GRU,hidden=256;(C) 因果膨胀卷积(dilation=1,2,4,...,128,kernel=3,约 8 层)。请给出你的选型,并估算 A/B 在这个延迟预算下能不能达标、为什么。如果实际必须用 RNN,你会怎么改?
- 某实时风控场景,用户行为序列平均长度 2000,QPS 1000,要求单次推理 P99 ≤ 50ms(单卡 T4)。当前用 2 层 LSTM,hidden=256,延迟 120ms,且长序列尾部信息衰减明显。团队有人提议直接换 Transformer,但 GPU 预算只允许推理成本增加 20%。作为技术负责人,你如何做技术决策?请给出你对 RNN/LSTM/GRU 能力边界的判断、可能的中间方案、以及如何验证和推动落地。
- 单层 LSTM,输入维度 64,隐层维度 128,batch=32、序列长度 50。请算出这一层 LSTM 有多少个可学习参数(含 bias,写出计算式);如果把同样的输入维度、隐层维度换成单层 GRU,参数量是多少?并说明这个比例从两者的门结构上看是怎么来的,LSTM 每个门各控制什么。
- 在 d_k=512 的点积注意力里,假设 q 和 k 的每一维近似独立、均值 0 方差 1。请估算 q·k 的量级,说明为什么必须除以 sqrt(d_k),以及如果不除,在 fp16 训练时会具体出现什么现象。另外,如果你把 padding 位置的 score 设成 -1e9 而不是 -inf,可能踩什么坑?