时间:10 分钟
规则:闭卷,不看笔记,不用 AI。
目的:检查 Unit 1 后半段的核心数字。
Q1(2 分)
batch=2, heads=8, seq=512, head_dim=64。只计 QK 与 PV 的乘加(一次乘加计 2 FLOPs),含对角线、真正跳过上三角,causal attention 的 FLOPs 是多少?如果先算完整矩阵再 mask,计算量是否相同?
Q2(2 分)
32 层、8 个 KV head、head_dim=128、seq_len=4096、batch=4、FP8(1 byte)的 KV cache 多大?
Q3(2 分)
seq_len=5000, page_size=64:
- 需要多少个 page?
- 最后一个 page 浪费多少 slot?
Q4(2 分)
batch=1, heads=8, seq=512, head_dim=64, bf16 的 attention:
- 三阶段 materialized 算法的请求流量多少 bytes?约定 Q/K/V/O 各访问一次,S 写/读、P 写/读各一次。
- 不落地 S/P、Q/K/V/O 各访问一次的理想流量下界多少 bytes?它不等于真实 FlashAttention 的设备流量。
- 差多少?
Q5(2 分)
按 HW1 的对称均匀 INT 规则,bits=3,输入 [0.5,1.5,2.5,3]:
- 求 scale、整数码和最大绝对误差(1 分)。
- 如果固定此 scale 与码范围,再输入 10,clamp 后重建多少?原来的半格误差界还适用吗?说明原因(1 分)。
本题不是 FP8 编码题,使用 Python 最近偶数舍入。
答案(做完再看)
A1
有效配对 = 512 * 513 / 2 = 131,328
FLOPs = 4 * 2 * 8 * 131,328 * 64
= 537,919,488
先做稠密矩阵乘再 mask 的实现仍执行 4*b*h*s*s*d = 1,073,741,824 FLOPs;“除以二”只是在长序列时忽略对角线的近似,不能当本题精确答案。
A2
2 * 32 * 8 * 128 * 4096 * 4 * 1
= 1,073,741,824 bytes = 1 GiB
A3
- pages = ceil(5000 / 64) = 79;
- allocated = 79 * 64 = 5056;
- waste = 56 slots。
A4
- Q/K/V/O =
8 * (2*512 + 2*512) * 64 = 1,048,576元素; - 一个 S 或 P =
8 * 512 * 512 = 2,097,152元素; - materialized 请求流量 =
(1,048,576 + 4*2,097,152) * 2 = 18,874,368bytes; - 理想下界 =
1,048,576 * 2 = 2,097,152bytes; - 差
16,777,216bytes = 16 MiB。容量是要存多少,流量是读写搬了多少;不能只加一次 score 容量代替四次中间读写。
A5
qmax=3,amax=3,因此 scale=1。最近偶数舍入得到 [0,2,2,3],重建相同,最大绝对误差 0.5,正好半格。
固定 scale=1、编码范围 −3 到 3 时,10 被 clamp 成 3,重建为 3,误差 7。原半格界要求输入在覆盖范围内且不发生 clipping;此时条件不满足。不能仍用 0.5 当误差上界。
评分
- 8–10 分:可做 Unit1 综合验收,再进入已发布的第 5–6 周。
- 5–7 分:按错题回看 L6 的 IO 账本、L7 的逐轴容量与分页、L8 的数轴与截断反例。
- 0–4 分:先重做 Lab2/3,再做 HW1 量化与 HW2 对应题。五题各 2 分,仍为 10 分,不新增分母。