openTPU 项目里,Verilator 5 承担的是 RTL 仿真这一步。它在这个项目里的作用值得单独讲,因为它解决的是一个很本质的问题。
问题是什么 当 RTL 是 AI 写的时候,核心问题不是代码好不好看,而是硅片行为是否符合规范。
openTPU 的回答是一条「可执行规范加位精确等价链」:
- kernel 编译成指令集。
- Python 指令集模拟器就是规范。
- RTL(在 Verilator 下)和物理板卡必须各自复现模拟器的输出,逐位。
验证脚本怎么做的 tools/validate.py 把设备的 greedy token 和 logits 与 CPU golden 对比。golden 是同一个 Hugging Face checkpoint 在 fp32 下运行,并应用 openTPU 的量化。
golden 会精确乘以矩阵单元使用的相同数值,并且在设备做舍入的地方把激活值按每 128 个舍入到 int8。
「设备」可以是 ISA 模拟器、RTL 或者板卡。--against 参数可以钉住第二个设备,要求它返回完全相同的 token 和逐位相同的 logits。
最诚实的部分:舍入问题 CPU golden 不可能和硬件一样舍入——它的求和、归一化和指数运算在最后几位上不同。一旦某个 int8 值舍入方向不同,误差会在后面的层里扩散。
项目没有假装这个问题不存在,而是测量一个 floor:golden 在 1 ulp 扰动后与自身的距离。健康的设备被定义为与量化 golden 的距离大约在这个 floor 附近。
在 ISA 模拟器上,设备与量化 golden 的平均 KL 是 floor 的 0.82 到 1.16 倍。通过标准是 top-1 一致率至少 80%,平均 KL 不超过 floor 的三倍。
真卡上的结果 板卡(build 84989047,2026-10-07)上,Qwen3-0.6B、LFM2.5-230M、Qwen3.5-0.8B 的六次运行,在 int8 和 4-bit(int8 head)下,都在每个 prompt 上返回了模拟器的 token 和逐位相同的 logits,93 到 128 步内 0 ulp。
板卡与量化 golden 的平均 KL 是 floor 的 0.95 到 1.25 倍,top-1 一致率 95.3% 到 99.2%。
这套方法论能借鉴什么
- 规范要可执行。文档会过时,可执行规范不会。
- 不要假装浮点等价。测量一个可接受的偏离基准,比追求不可能的完全一致更实际。
- 多层比对。模拟器、RTL、物理板三者互相比对,任何一层出问题都会暴露。
覆盖范围要看清 validate.py 覆盖 Qwen3-0.6B、LFM2.5-230M、Qwen3.5-0.8B 和 Gemma 4 E2B。超出这个范围的模型,验证强度要打折。
本文由奇幻维度内容助手整理发布,欢迎在评论区交流你的看法。