-
Notifications
You must be signed in to change notification settings - Fork 37
Expand file tree
/
Copy pathquiz.json
More file actions
78 lines (78 loc) · 3.27 KB
/
Copy pathquiz.json
File metadata and controls
78 lines (78 loc) · 3.27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
"lesson": "45-gradient-clipping-amp",
"title": "顶点课 45 —— Gradient Clipping 与混合精度训练",
"questions": [
{
"stage": "pre",
"question": "全局 L2 gradient clipping 解决了什么问题?",
"options": [
"训练太慢。",
"一个 bad batch 就能让 gradient norm 飙升好几个数量级;clipping 限制了最坏情况下的优化器步长,防止一个 batch 抹掉几小时的训练成果。",
"词表漂移。",
"随机重启。"
],
"correct": 1,
"explanation": "Clipping 是安全带,防止一个噪声 batch 把 loss 曲线搞崩。"
},
{
"stage": "check",
"question": "GradScaler 各操作的正确顺序是?",
"options": [
"step, scale, unscale, backward, update",
"scaler.scale(loss).backward(); scaler.unscale_(optimizer); clip_grad_norm_; scaler.step(optimizer); scaler.update()",
"backward, step, scale, update",
"任意顺序;scaler 内部会重排。"
],
"correct": 1,
"explanation": "在 unscale_ 和 step 之间对未缩放的梯度做 clip;update 必须始终调用。"
},
{
"stage": "check",
"question": "在跳过的步上 scaler.update() 做了什么?",
"options": [
"什么都不做。",
"把 scaling factor 减半并重置 no-inf 计数器;如果跳过路径上忘记调它,就会出现 'scaling factor 一直没变' 的 bug。",
"把 scaling factor 翻倍。",
"关闭整个 run。"
],
"correct": 1,
"explanation": "Scaler 根据最近若干步的 skip/clean 比例来调整自己的 factor。"
},
{
"stage": "check",
"question": "即使有 GradScaler,为什么还需要检查 loss 是否有限?",
"options": [
"因为 GradScaler 很慢。",
"GradScaler 处理的是反向传播的溢出,而非有限的 loss 根本产生不了有用的梯度;在 backward 之前跳过能省计算、避免污染 scaler 状态。",
"纯装饰性的。",
"PyTorch 强制要求。"
],
"correct": 1,
"explanation": "Loss 检查覆盖前向传播的故障;scaler 覆盖反向传播的故障。"
},
{
"stage": "post",
"question": "滚动 skip rate 的生产信号是什么?",
"options": [
"任何一次 skip 都应该报警。",
"一轮训练里偶尔几次 skip 是正常的;每个 epoch 上百次 skip(滚动率超过约 5%)就是硬告警,说明模型处在 FP16 扛不住的区间。",
"Skip rate 无所谓。",
"只有连续 skip 才报警。"
],
"correct": 1,
"explanation": "基于比率的告警能捕捉到偶发式告警抓不到的静默失败模式。"
},
{
"stage": "post",
"question": "skip 频繁时,为什么从 FP16 切换到 BF16 autocast?",
"options": [
"BF16 更新。",
"BF16 的指数范围比 FP16 宽,几乎不需要 loss scaling;同一模型上 skip rate 通常直接降到零。",
"BF16 更慢所以 skip 更少。",
"随意的传统。"
],
"correct": 1,
"explanation": "FP16 在尾数精度和范围之间偏向精度;BF16 反过来,从根本上消除了溢出这一类问题。"
}
]
}