M10 习题:数值线性代数
对应模块:M10 数值线性代数 先独立完成,再对 答案。计算题保留中间步骤,数值保留 3 位小数。 配套实验:lab10 数值误差与 GEMM
A 概念题
- 机器精度 与单位舍入误差 的定义分别是什么?为什么误差界里用 而不是 ?fp16 与 bf16 的精度、动态范围各有什么取舍?
- 写出诱导范数 的定义,并解释为什么 。为什么 Frobenius 范数不是诱导范数,却仍然有用?
- BLAS 的 Level 1/2/3 各是什么运算?为什么 Level 3 最容易跑满 GPU 峰值?用算术强度与 Roofline 解释 prefill 与 decode 的瓶颈差异。
- 共轭梯度适用于什么矩阵?Krylov 子空间 是什么?CG 的收敛率与条件数是什么关系?为什么它只需要矩阵乘向量?
- COO 与 CSR 的存储结构有什么区别?各自适合什么操作?为什么「非结构稀疏」在 GPU 上很难获得与稀疏率成正比的加速?
B 计算题
- fp32 的尾数有 23 位。求: (a) 1 附近与 2048 附近的相邻间距; (b) 与 存进 fp32 后分别是多少(说明舍入规则); (c) 把 存成 fp32 后的绝对误差与相对误差; (d) fp32、fp16、bf16 各有几位十进制有效数字(用 估算)。
- 在 fp32 下直接计算 会得到什么?为什么?写出数值稳定的替代公式,并估算它的值。若输入 本身只有 4 位有效数字,换 fp64 能解决问题吗?
- 对 : (a) 求 ; (b) 求 及 ; (c) 求 ,并解释为什么三个条件数不同。
- Hilbert 矩阵 的 。双精度约有 16 位有效数字: (a) 解大约还剩几位? (b) 若右端相对扰动 ,用 给出解的相对误差上界; (c) 为什么 的行列式很小,却不能只用行列式判断病态?
- 一个 GEMM:、、,fp32。 (a) 求 FLOPs; (b) 求把 各读写一遍的最小访存字节数; (c) 求算术强度,并判断在 TFLOPS、 TB/s 的机器上是计算受限还是访存受限; (d) 求两种瓶颈对应的理论时间。
- 对 、,从 出发跑两步 CG:写出 ,并验证 。
C 大模型题
- 某模型用 fp16 训练,另一团队建议换 bf16。 (a) 两种格式的尾数、指数位与机器精度各是多少? (b) 为什么 fp16 需要 loss scaling,而 bf16 通常不需要? (c) 为什么两种格式都要保留 fp32 主权重?用 、更新量 举例说明。
- 某层权重 的 ,用 bf16 存储,元素相对误差约 。 (a) 用 §10.2 的误差界估计最坏输出相对误差; (b) 解释为什么实测通常远小于这个上界; (c) 给出两种降低风险的做法,并说明各自的代价。
- 一个 MoE 层:, 个专家,每个专家是 的 FFN,每 token 激活 top-2。 (a) 单个专家每 token 的 FLOPs; (b) MoE 每 token 的 FLOPs,与稠密 FFN 相比是多少倍? (c) 参数量是单个专家的几倍?bf16 下这些专家至少占多少显存? (d) 为什么 MoE 可能出现「负载不均」,工程上怎么缓解?
D 开放题
- 你要在 50% 稀疏率下压缩一个 的权重矩阵,候选方案是「非结构幅度剪枝」与「2:4 结构化剪枝」。设计一个对比实验:写清楚数据、基线、度量指标、控制变量,以及你预期的精度与速度结果。最后说明在什么场景下你会选非结构剪枝。