42 posts
训练 · 表征 · 工程落地
从损失和归一化到过拟合与部署,训练模型时真正会卡住的那些点。
KV cache 分页与前缀复用:吞吐上去后正确性怎么验
沿 block table、前缀哈希与抢占回收拆开缓存一致性风险,说明错页复用为何表现为「偶发胡话」;用确定性前缀集、强制抢占和逐 token 对照验收。
混合精度下的梯度累积:loss 缩放、裁剪与 step 顺序
沿 autocast、GradScaler、unscale_、裁剪与 optimizer.step 的数据流说明静默错误;区分 micro-batch 平均与求和,并用等价性测试验收。
torch.compile 图断裂:先定位重编译,再谈模式选择
从 Dynamo guard、graph break 与动态形状入手,建立可复现的编译诊断和冷启动、稳态验收方法。
PyTorch SDPA 的两个静默坑:布尔 mask 与 eval dropout
拆清 scaled_dot_product_attention 的 keep-mask 语义、广播维度和 dropout_p 行为,用最小张量测试阻止注意力泄漏。
Grad-CAM 与 shortcut 排查
Grad-CAM 和 activation map 不严谨,但能暴露模型盯背景、水印等捷径——当 debug 线索,不当因果解释证据。
peft target_modules 与 merge
LoRA 只训低秩增量矩阵,省显存防 catastrophic——rank 和 target modules 决定 capacity,全量微调仍可能在数据足时更强。
Temperature scaling 与 ECE
Softmax 分数不是概率——高置信度仍可能常错时,threshold 和 risk 决策会误导;ECE、温度缩放和 isotonic 要在部署域上评。
DANN 梯度反转与 AdaBN
源域训、目标域测掉点是常态——纯 finetune、DA 方法或采目标域数据,取舍看标注成本和失败 slice 有多痛。
GradNorm 与 manual loss 权重
检测+分割+深度多任务共享 backbone 时,某一 loss 量级大会主导梯度——uncertainty weighting 或 grad norm 平衡比 hand-tune 0.1/0.9 更可持续。
Shadow deploy 与 p99 latency SLA
离线涨点不上线,多半是 val 分布与生产不一致、latency 超标或 operating threshold 未重调——A/B 要看业务指标和 slice,不只看 mAP。
grad_norm spike 与 misclass grid
只看 train loss 不够——要 log lr、grad norm、val slice、GPU 利用率和样例可视化,异常通常是 loss 曲线先以外的信号。
Replay buffer 与 EWC Fisher
新任务微调旧模型,旧能力 catastrophic forgetting 常见——EWC、replay 和 multi-head 是工程选项,没有 silver bullet。
KL 蒸馏温度 T 与 feature MSE
大教师教小学生,学生会在教师也错的区域过度自信——温度 T、loss 权重和 hard label 仍要保留,蒸馏不是复制 logits 就完事。
SimCLR NT-XEnt 与 linear probe
预训练任务准确率不是目标——看 downstream finetune 的 sample efficiency 和 slice,对比 random init 和 supervised pretrain 才有意义。
FixMatch 伪标签 conf 阈值
无标数据用模型伪标签自训练能涨点,但错误标签会以高置信度固化——confidence threshold、EMA teacher 和 curated ratio 是防 collapse 的关键。
CE target long dtype 断言
PyTorch 广播让错误 shape 的 loss 能跑起来——silent bug 产生错误梯度;写 forward 时 assert shape 或用 torchdim 习惯。
fbgemm PTQ 与 per-channel scale
PTQ 校准数据不代表部署分布时 INT8 掉点惨烈——校准集、per-channel 和 sensitive layer fp16 保留要一起调。
onnxruntime assert_allclose 验收
PyTorch 能跑不代表 ONNX 能导出——dynamic axes、unsupported op 和 train/eval 差异要在 target runtime 上数值对齐验证。
cudnn deterministic 全链路
固定 seed 只能控制部分随机性——DataLoader shuffle、cudnn benchmark、多线程和硬件仍会带来 run-to-run 差异,要 log 环境并报告 variance。
beta=0.999 与 eval 权重
训练时对参数做指数滑动平均,验证和部署常用 EMA 权重——曲线更顺,有时泛化更好,但要与 optimizer 步和 checkpoint 策略一致。
use_reentrant=False 粒度
Gradient checkpointing 用重算 forward 换显存——训练大模型或高分辨率输入时 OOM 的常用解法,wall-clock 涨 20–40% 要算进预算。
SDPA backend 与 FlashAttention
Self-attention 的 O(n²) 内存和算力随序列长度平方涨——长序列要算 FLOPs/activation 预算,FlashAttention 和线性近似是工程选项不是免费 lunch。
Attention gate 与 deep supervision
语义分割边界糊往往是 decoder 弱或 skip 连接不对——encoder 下采样丢掉的 spatial detail 要靠 skip fusion 补,不是单靠加深 encoder。
ArcFace margin 与 deploy 阈值
嵌入空间训好 cosine similarity 仍要选 operating threshold——验证集上按 recall@FP 目标定阈,部署域 drift 时阈值要重标。
标签平滑
Label smoothing 把 one-hot 变成 soft target,减轻 overconfident logits——有时改善校准和泛化,过大 smoothing 会 hurt top-1 acc。
freeze_bn 与 target 域 stats
小 batch 微调时 BatchNorm 统计量噪声大——freeze backbone BN、换 SyncBN 或 GroupNorm 往往比盲目加大 batch 更实际。
RetinaNet stride 与小目标
网络 stride 和大感受野会把小目标压成几个 activation——小目标检测要更高分辨率特征层或 FPN,别只换更大 backbone。
增广与标签一致
几何增广必须同步变换 bbox、mask 和 keypoints——框没跟着旋转,等于制造错标;albumentations 的 bbox_params 不是可选配置。
微调:冻哪些层
数据少时一次解冻全网易过拟合+毁 pretrained 特征——先训 head、再逐层解冻是稳妥默认,LR 分组随解冻调整。
不均衡:采样还是加权
长尾类 CE 训练会被 head 类主导——class-weight、focal loss 和 oversampling 要一起看 per-class recall,别只盯 overall acc。
早停:盯验证集
Early stopping 防过拟合,但没有独立验证集或 val 泄漏时,早停只是在随机时刻停——split 诚实比 patience 数值更重要。
梯度裁剪:爆炸刹车
clip_grad_norm 能止住 NaN 连锁,但根因常是 LR 过大、loss scale 或 bad batch——裁剪是买时间,不是根治。
混合精度:溢出与缩放
AMP fp16/bf16 加速训练,但 gradient underflow 会 NaN——GradScaler 动态缩放是标配,bf16 在 A100+ 上 often 更省心。
初始化:训不动时
换激活函数却不改初始化,或最后一层 init 过大,会导致 loss 不降或梯度爆炸——Kaiming/Xavier 和 zero init head 是基本配对方案。
Dropout:推理要关掉
Dropout 训练时随机丢弃激活、推理时必须 eval 关闭——train mode 部署会让输出随机抖动,和 BatchNorm 一样要 model.eval()。
数据泄漏:分数太完美时
train 和 val 共享场景、相邻帧或 duplicate 图像时,指标会虚高——怀疑 99% accuracy 先查 split 策略和 near-duplicate。
先过拟合一小撮
连 50 张训练子集都学不会,加数据和大模型没用——先 overfit tiny set 验证实现、标签和 loss 正确。
学习率与 warmup
训练初期 LR 过大容易 loss spike——linear/cosine warmup 让优化稳定;peak LR 和 total steps 要匹配 batch size 和 optimizer。
Adam 与 SGD
AdamW 收敛快、对 LR 不敏感;不少视觉任务里调好的 SGD+momentum 泛化更好——按数据规模和预算选,别迷信默认 optimizer。
Pre-LN 与 RMSNorm eps
LayerNorm 在 channel/ token 维归一化,不依赖 batch 统计——Transformer 和小 batch 场景比 BatchNorm 稳,但和 BN 的 inductive bias 不同。
BatchNorm:训练推理模式
model.train() 与 model.eval() 切换 BatchNorm 的统计量来源——忘了 eval 或 batch=1 时 running stats 与当前 batch 混用,推理结果会随机飘。
交叉熵和 Focal
类别极不均衡或 easy negative 淹没时,CE 梯度被 head 样本主导——Focal loss 下调 easy 样本权重,检测常用但 γ 过大也会伤 recall。