课程/M10 习题答案
附录源文件:exercises/m10-答案.md

M10 习题答案

对应 m10-习题。数值保留 3 位小数,中间步骤保留分数。

A 概念题

  1. 机器精度 是 1 与下一个可表示数的间距, 是尾数位数;单位舍入误差 是一次「就近舍入」的最大相对误差。舍入最坏落在两个刻度正中间,只差半个间距,所以误差界用 。

    fp16(10 位尾数)精度高、范围窄(最大 ,最小正规数 );bf16(7 位尾数)精度低,但指数位与 fp32 相同,范围是 –。训练选 bf16 主要为了范围,推理且范围可控时 fp16 精度更好。

  2. 诱导范数 。对 2-范数:

    即最大拉伸倍数是最大奇异值。Frobenius 范数 把所有权重同等对待,不对应任何「最大拉伸」的变分问题,因此不是诱导范数;但它计算便宜、正交不变,且直接给出低秩近似的误差,适合做正则与误差分析。

  3. Level 1 是向量-向量(axpy、dot),;Level 2 是矩阵-向量(gemv),;Level 3 是矩阵-矩阵(gemm),。Level 3 的运算量按 涨、数据量按 涨,分块后算术强度约 ,容易越过 Roofline 拐点;Level 1/2 的 AI 只有 ,被带宽卡住。

    prefill 一次处理 个 token,矩阵很「胖」,是计算受限的大 GEMM;decode 每步 ,要读完整层权重,AI 约 1,是访存受限的 GEMV。

  4. CG 适用于对称正定(SPD) 的 。Krylov 子空间是

    CG 在 中最小化 -范数误差。收敛界

    说明迭代次数约随 增长。每步只需要一次 、两次内积与向量更新,所以不用形成 ,稀疏时每步 。

  5. COO 存 (row, col, data) 三个等长数组,追加方便、可乱序,适合构造;CSR 存 values、col_indices、indptr,按行连续,适合 SpMV 与行切片。构造阶段用 COO,算之前转 CSR,是常见流水线。

    非结构稀疏的零位置不规则:GPU 需要额外的索引读取、分支判断与负载均衡,同一 warp 内线程可能走不同路径;硬件加速单位是块/向量指令而不是单个元素。所以 90% 非结构稀疏往往得不到 10 倍加速;2:4 或块稀疏才有专用指令支持。

B 计算题

  1. (a) 1 附近间距 ;2048 在 内,,间距 。 (b) 正好是半个间距,落在中点,按「平局取偶」舍入到 2048(尾数为偶); 是一整个间距,得到 。 (c) ,绝对误差 ,相对误差

    (d) 有效十进制位数约 :fp32 约 (7 位),fp16 约 (3 位),bf16 约 (2 位)。

  2. fp32 中 舍入后正好等于 (因为 远小于 1 附近的半个间距 ),所以直接相减得到 ,相对误差 。

    稳定公式用半角:

    时 (实测 )。

    若输入 本身只有 4 位有效数字,绝对误差约 ,与结果同量级,换 fp64 也救不了——误差来自输入,不是来自相减。

  3. 。 (a) 列绝对值和:、,;行绝对值和:、,;。 ,迹 、行列式 ,特征值 ,即 与 。所以 、,。 (b) ,;。 (c) ;;。三个数不同,因为误差的度量尺子不同; 由奇异值比给出, 由列/行和给出。它们都满足同一个误差界,只是常数不同。

  4. (a) 失去 位,剩约 位,即约 11–12 位。 (b) 上界 。 (c) 行列式随整体缩放变化: 的行列式是 ,但 。 的 小是「整体尺度 + 维数」的结果,真正说明病态的是奇异值比值(最大/最小差四个数量级),不是行列式本身。

  5. (a) 。 (b) 字节(约 MB)。 (c) FLOP/byte。拐点是 FLOP/byte,,所以是计算受限。 (d) 算力时间 s ms;带宽时间 s ms。

  6. ,,。,,所以

    验证: ✓。 系统两步收敛,与 CG 的 步上界一致。

C 大模型题

  1. (a) fp16:符号 1、指数 5、尾数 10,,最大 ,最小正规数 。bf16:符号 1、指数 8、尾数 7,,范围约 –。 (b) fp16 的指数只有 5 位:小于 的梯度下溢为 0,大于 的值上溢为 inf。loss scaling 先把 loss 乘 (如 ),梯度整体放大,避开下溢;更新前再除回。bf16 的指数范围与 fp32 相同,梯度不会因范围越界而归零,所以通常不需要 loss scaling;它的问题是 7 位尾数带来的相对误差。 (c) 设 、更新量 。fp16 在 1 附近的间距是 ,半个间距 , 仍舍入成 1;bf16 的半个间距是 ,更会吃掉更新;fp32 的间距是 ,能保留。因此必须用 fp32 存主权重并在 fp32 里更新,再把结果舍入到低精度用于前向。

  2. (a) ,即最坏约 的输出相对误差。 (b) 这个界要求 的奇异向量恰好对齐 的最敏感方向(最大与最小奇异值方向)。实际 bf16 舍入误差在元素上近似独立、方向分散,投影到最敏感方向的成分很小;逐通道缩放还会进一步压低误差。因此实测常比界小两三个数量级。 (c) 方案一:逐通道/逐组缩放,让每个小块的动态范围接近 1,代价是额外的 scale 元数据与反量化计算。方案二:对 大的敏感层保留 fp16/fp32 或做混合精度,代价是显存与带宽上升。也可用谱归一化压 ,但会改变前向数值、需要重新校准。

  3. (a) 单个专家: FLOPs/token。 (b) top-2 激活两个专家: FLOPs/token。稠密 FFN 是 ,所以 MoE 是稠密的 倍计算(不是 倍)。 (c) 单个专家参数量 ; 个共 个参数,是单专家的 倍。bf16 至少 字节 GB(不含门控、激活与优化器状态)。 (d) 路由由门控分数决定,不同专家收到的 token 数可能差很多;热门专家成为瓶颈,冷门专家闲置。工程上用 capacity factor(每专家容量上限)、负载均衡辅助损失、token 丢弃/溢出到下一层、专家并行与 all-to-all 重排来缓解。

D 开放题

  1. 数据与基线:选一个固定 checkpoint(如 1B–7B 的模型),在相同校准集上剪枝;基线是稠密模型、非结构 50% 剪枝、2:4 50% 剪枝三条曲线。控制变量:同一校准数据、同一微调步数与学习率、同一 batch/序列长度、同一硬件与推理框架。

    流程:对每个线性层按权重绝对值选保留项。非结构剪枝保留全局最大的 50%;2:4 在每 4 个连续权重中保留绝对值最大的 2 个。剪枝后做相同预算的蒸馏/微调,再在验证集上测 perplexity 或下游任务准确率。

    度量指标:

    • 精度:验证集 loss/perplexity、任务准确率;
    • 速度:固定 batch/seq len 下的 tokens/s 或每层 latency,需 warmup 并多次取中位数;
    • 显存:权重、优化器状态、激活峰值;
    • 可实现性:目标 GPU 是否有对应的稀疏 kernel/张量核支持。

    预期:50% 稀疏率下,非结构剪枝的精度可能略好,但在 GPU 上通常没有加速甚至更慢(索引与不规则访存);2:4 借助稀疏张量核可获得约 2 倍矩阵乘吞吐,精度通过微调接近稠密,但压缩率固定为 50%,且需要额外元数据。

    何时选非结构:需要 80%–90% 以上的极高压缩率、且部署环境有自定义稀疏 kernel 或 CPU 推理;或者当前目标是「省显存/省存储」而非「降延迟」,可以接受不加速。若目标是 GPU 上的吞吐与可预测延迟,优先 2:4 或块稀疏。

输入关键词开始搜索