跳到主要内容
TileLang 系统教程

tilelang-tutorial.huandu.me

第 17 章 端到端 I:用 HuggingFace 资产从零训练一个 7B 模型

/code/17-e2e-training-7b/

04-verify-numerics/README.md1051 字节
# 04 · 数值一致性验收

## 目的

把「换了一个算子,模型还对不对」变成一个可执行、有门限的检查,而不是靠肉眼看
loss 曲线。对应正文 §7.3 与 §9 的验收标准 M4。

## 运行前提

* NVIDIA GPU,`torch`,可用 `tilelang`。
* 依赖 `../03-tilelang-norm-torch/rmsnorm_tl.py`。若本目录单独复制,把该文件
  也拷进来即可(两个文件相加即可独立运行)。

## 命令

```bash
# 需要先让 Python 找到 03 的模块(脚本已自动加 sys.path)
python3 compare_ref.py
python3 compare_ref.py --n 3584 --e2e
```

## 期望输出

```
[PASS] forward torch.bfloat16  max_abs=... max_rel=... (rtol=0.02, atol=0.02)
[PASS] forward torch.float32   max_abs=... max_rel=... (rtol=1e-05, atol=1e-05)
[PASS] backward relL2          dx=... dw=... (门限 5e-2)
总体: 全部通过
```

## 正确性判据

* 三种检查全部 `PASS`;门限按 dtype 选(bf16 用 1e-2 量级,fp32 才收到 1e-5)。
* `--e2e` 打开后额外比较端到端 loss:同一批 token、同一权重下,
  `|loss_tilelang − loss_torch| / loss_torch < 1e-3`。

## 陷阱

* **不要用 `1e-6` 当 bf16 的门限**:bf16 只有 8 位尾数,本来就有千分级的相对误差。
* 反向梯度按「相对 L2 误差」比较比逐元素更稳:某些元素的参考值接近 0,
  逐元素相对误差会被放大。
* 别只对随机小 shape 测;要覆盖 `hidden=3584`(7B)、`hidden=896`(0.5B)等真实宽度。

## 验证级别

**仅静态核对**:`python3 -m py_compile compare_ref.py` 通过;脚本**未运行**
(写作机器无 GPU)。上面的输出是**期望**格式,具体数字要你在真机上生成。

← 浏览本章全部代码