G5 计算算子建模方法分层设计规格
版本:1.0.0 状态:Accepted 创建日期:2026-06-21 作者:xiang.li 前置:G5-计算建模设计规格
版本号规则 (SemVer):
- major (X.0.0):方法分层体系重构、保真度一致性规则变更
- minor (1.X.0):新增算子瓶颈类别、扩展一致性规则(向后兼容)
- patch (1.0.X):修正笔误、补充说明
变更历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 1.0.0 | 2026-06-21 | 初版:算子建模方法分层(瓶颈→方法)+ 保真度一致性规则 + 顺序约束 + G5-vs-TPUPerf 定位 |
@tbl-spec-gcml-01 文档变更历史
概述
本 spec 冻结 G5 计算侧建模的方法分层决策:对不同计算算子按其性能瓶颈选不同建模方法,并定义多保真度档之间的一致性规则。本 spec 是方法论规格,不是算子清单——它定义「给一个算子,如何判定用哪种建模方法」的可核对规则,以及「低保真 roofline 与未来行为级模型如何不冲突」的一致性契约。
G5 已对 matmul 用指令级翻译(前置 spec)。本 spec 把方法选择推广到全部计算算子,并冻结为什么不同算子用不同方法、不同方法如何共存。
背景
G5 目标是厂商中立、生成式、多芯片、端到端的 LLM 部署性能仿真器(设计空间扫描)。计算侧现状只建了 matmul(指令级翻译,已 Accepted),向量类(softmax / 归一化 / 激活 / RoPE / 逐元素 / 量化)整块空白,排序选择类(topk / sort)占位。
驱动力:要给稀疏 attention(DSA)与大 KV 的 MHA 等算子做可信的上下文并行(CP)验证,需要这些算子的计算时间。但对所有算子统一上指令级不可行——指令级需要「LLM 算子 → 硬件指令序列」的 lowering 层,该层是芯片厂商编译器专属,既不在厂商参照仿真器里(它读编译产物不生成)、也不在 G5 里。盲目对所有算子建指令级会撞上这个不存在的 lowering 层,且对访存受限算子无精度增益。
需要一个按瓶颈分层的方法论:把昂贵的指令级用在它真能加精度的地方,访存受限算子用 roofline(绕开 lowering),不规则算子用专用模型,并保证各保真度档共存时不冲突。
名词定义
下表钉死本 spec 用到的核心名词。
| 名词 | 定义 | 与易混淆概念的区分 |
|---|---|---|
| 算子瓶颈 | 决定算子执行时间的主导资源:算力受限 / 访存受限 / 不规则数据依赖 | 瓶颈分类是方法选择的判据 |
| 指令级建模 | 翻译厂商每指令闭式 cycle 公式 + 算子的指令分解(lowering) | 与 roofline 区别:下到硬件指令粒度 |
| roofline 建模 | 算子级 max(算力时间, 访存时间) × η | 不下到指令,算子级解析 |
| lowering 层 | 「LLM 算子 → 硬件指令序列 + descriptor」的编译/降级映射 | 芯片厂商编译器专属,规则算子(matmul)可复刻、不规则算子难复刻 |
| 保真度档 | 同一资源域的不同建模精度(roofline 静态 / 行为级争用 / cycle 级) | 升降档替换,不并行叠加 |
| 内存域 / 带宽域 | 一条访存边占用的物理资源类别(LMEM / NoC / HBM / C2C) | 一域一真理源 |
| 行为级模型 | 建模争用 / 队列 / 背压的事件级模型(如 NoC / SRAM bank 冲突 / HBM 队列) | 与 roofline 静态估计区分 |
| 拐点 | 通信与计算相当、通信不再被计算掩盖的临界点 | 决定哪些算子的精度对 CP 结论有影响 |
| 拐点地图 | comm/compute 比值在 (算子 × 区间) 网格上的分布,标出比值≈1(有拐点)的格子 | 用现有解析评估器扫,决定建模优先级 |
| 生成式仿真 | 从模型 + 配置生成 workload | 与 trace-driven(回放编译产物)区分 |
| trace-driven 仿真 | 回放编译器产出的指令 descriptor | 不能从配置生成、不能 sweep |
目标与非目标
目标 / 需求清单(逐条可核对):
- 需求:定义算子瓶颈分类规则(算力受限 / 访存受限 / 不规则),且给定一个算子能逐条判定它属哪类、用哪种方法。
- 需求:访存受限算子用 roofline 建模,不依赖 lowering 层;算力受限 + tiling 规则的算子用指令级;不规则算子用专用模型 + 厂商 trace 关键点校验。
- 需求:保真度一致性——同一内存域同一时刻只有一个真理源;行为级模型存在时该域访存时间由行为级给出,roofline 静态估计被替换而非叠加。
- 需求:算子时长可分离为「计算估计 ⊕ 带『带宽域』标签的访存流量」,使 roofline → 行为级是换数据源而非重建。
- 需求:每条访存边显式归属一个内存域(LMEM / NoC / HBM / C2C)。
- 需求:建模顺序——先用现有解析评估器扫拐点地图圈定有拐点的算子区间,先修跨芯片错带宽域,再按拐点圈定的最小算子子集补建模。
- 需求:冻结 G5 与厂商参照仿真器(TPUPerf)的定位——为什么 G5 是端到端平台、厂商仿真器是标定源。
非目标(明确不做):
- 非目标:列具体算子清单。哪些算子需要建模由拐点地图数据决定,是 inventory 不是设计决策。
- 非目标:写 lowering 层实现。本 spec 的结论之一恰是访存受限算子绕开 lowering。
- 非目标:CP 多芯片桥(A1)的详细设计,单独 spec。
- 非目标:绝对精度。无真机锚点,产出相对可信、绝对门控(继承前置 spec)。
- 非目标:单个算子的 cycle 公式(matmul 见前置 spec;其余算子的具体模型待拐点地图圈定后逐篇定)。
用例说明
假设本方法论已落地,一个开发者要给 DSA 稀疏 attention 估计计算时间:
- 算子分解:DSA = index 投影(matmul)+ lightning indexer top-k(不规则)+ 稀疏 KV gather(不规则)+ sparse score/output(matmul)+ softmax(访存受限)。
- 逐算子判瓶颈选方法:
- matmul → 算力受限 + tiling 规则 → 指令级(前置 spec 已建)
- top-k / gather → 不规则 → 专用模型 + 厂商 trace 关键点校验
- softmax → 访存受限 → roofline(
max(算力, bytes/带宽) × η)
- 访存边归域:softmax 的访存边归 LMEM 域,带
bandwidth_domain="lmem"标签;KV gather 的访存边可能归 HBM 域。 - 合成:DSA 计算时间 = 各算子时间按依赖串,每个算子时间 = 计算估计 ⊕ 带域访存流量。
- 未来升档:若日后建了行为级 HBM 模型,KV gather 的 HBM 访存流量路由到行为级模型,roofline 那块被替换——softmax 的 LMEM 估计不动。
- 优先级:开发者先跑拐点地图,确认 DSA 在目标 (cp, S, BW) 区间是否真有拐点;有,才精修上述算子;无(如稠密 MLA),则现有 matmul 近似已够。
详细设计
方法分层(瓶颈 → 方法)
核心规则:建模方法匹配算子瓶颈。给定算子,按瓶颈三分类,每类一种方法:
| 瓶颈类别 | 算子例 | 方法 | 为什么 |
|---|---|---|---|
| 算力受限 + tiling 规则 | GEMM / BMM / Grouped GEMM / conv | 指令级翻译厂商闭式公式 | 时间由阵列利用率 / tiling 决定,roofline 的扁平 η 抓不住近拐点的 underfill;lowering 规则可复刻,值得自建 mapper |
| 访存受限 | softmax / LayerNorm / RMSNorm / 激活 / RoPE / 逐元素 / 量化 | roofline max(算力, 访存) × η | 时间 ≈ bytes/带宽,指令怎么拆不影响总时间;指令级无精度增益但需不存在的 lowering 层;精度天花板由带宽效率决定,roofline 已摸到 |
| 不规则 / 数据依赖 | top-k / sort / gather / scatter | 小专用模型 + 厂商 trace 关键点校验 | 非简单 FLOPs/bytes,roofline 不适用;指令级需不规则 lowering;专用模型 + trace 校验绕开 lowering |
@tbl-gcml-method-layer 算子建模方法分层规则
可前置判定的判据(陌生工程师拿到新算子按此独立判类,不依赖查表):
- 含数据依赖的 gather / scatter / 排序 / 选择 → 不规则。
- 否则比较算术强度(FLOPs / 访存字节)与硬件 ridge point(峰值算力 / 峰值带宽):算术强度 ≥ ridge point 且 tiling 规则 → 算力受限;算术强度 < ridge point → 访存受限。
例:softmax / 归一化 / RoPE / 逐元素 算术强度低(每元素少量运算、读写一遍)→ 访存受限;GEMM 算术强度随 M/N/K 增大超过 ridge point → 算力受限;top-k / gather 含数据依赖 → 不规则。
设计原理:统一精度是反模式。对所有算子用 roofline 会丢 matmul 近拐点精度;对所有算子用指令级需要对不规则算子不存在的 lowering 层、且对访存受限算子无增益。混合精度——精的方法用在它真加精度的地方——是项目既定原则(01-总览 升降档判据「关键路径精细,其余粗放」)和业界标准(gem5:CPU cycle-approx + DRAM queue-based + NoC flit;ASTRA-sim:roofline compute + 事件驱动时序)。
访存受限算子用 roofline 的可证伪依据:访存受限算子单遍读写张量,时间被访存流量主导,指令调度被访存掩盖。其精度上界 = 带宽效率不确定性(约 ±10-15%),指令级即使建出也压不到带宽地板以下(瓶颈不在指令)。
保真度一致性规则
防止 roofline 静态估计与未来行为级模型对同一访存产生两个时间值:
-
一域一真理源:每个内存域同一时刻只有一个权威时间来源。无行为级模型时,roofline 静态
bytes/峰值带宽是该域默认档;该域建了行为级模型(SRAM bank 冲突 / HBM 队列 / NoC 争用)后,该域访存时间由行为级模型给出,roofline 那块被替换。禁止两档对同一访存并行计算(=双重计算)。 -
访存边可分离 + 带域标签:算子时长分离为两部分:
每条访存边 $e$ 携带 bandwidth_domain 标签。升档 = 把该边的访存流量请求路由到其域的行为级模型换数据源,计算估计部分不变。
- 域归属:每条访存边显式归属一个内存域(LMEM / NoC / HBM / C2C)。本 spec 在前置 spec 的带宽域(LMEM 总线 / HBM / D2D / C2C)基础上显式增列 NoC 域(core 间),口径扩展而非漂移。错域会导致带宽口径错误(同跨芯片通信错走片内带宽的同构错误)。
设计原理:这是升降档原则在内存域上的应用——高保真档替换低保真档,不并存。带域标签使替换是「换数据源」而非「重建模型」。matmul 访存边的 bandwidth_domain 标签(前置 spec)是此机制的雏形,向量 roofline 访存边沿用同一机制。
顺序约束
建模工作的执行顺序,防止在错误前提上叠加未验证层:
- 拐点地图先行:先用现有解析评估器扫 comm/compute 比值,圈定哪些 (算子 × 区间) 比值≈1(有拐点、精度对结论有影响)。稠密注意力 compute ∝ $S^2$、通信 ∝ $S$,大 $S$ 区间多无拐点;稀疏注意力 compute ∝ $S \cdot k$($k$ 为 top-k 截断),comm/compute 不随 $S$ 缩小,拐点持续存在。拐点地图的目标算子集为全部常用 attention 算子(MLA / MHA / GQA / MQA / DSA);具体扫描区间(cp / seq_len / 带宽网格)作为执行参数在实现 plan 阶段界定,不影响本 spec 的方法分层与一致性规则。
- 修错带宽域先于加算子:跨芯片通信错走片内带宽是已知未修缺陷。在其上叠加新的未验证算子层会导致归因坍塌(分不清偏差来自计算还是带宽域)。
- 最小子集:只补拐点地图证明对结论有影响的算子,不先验建全套。
集成点
- 上游:mapping 层产出算子的指令 / 解析参数(shape / 精度 / 访存字节)。
- 下游:各算子时间按依赖串成 attention / FFN 等复合算子的计算图,喂事件驱动时序层。
- 与行为级内存模型:访存边带域标签是与未来行为级 NoC / SRAM / HBM 模型的契约边界——行为级模型按域接管访存时间。
引用
- 前置:G5-计算建模设计规格(matmul 指令级翻译)。
- 混合精度原则:01-总览 升降档判据。
- 建模方法对标:02-计算建模、08-标定与验证。
备选方案
| 维度 | G5 + 方法分层(选定) | 直接用 TPUPerf | 自造 trace 喂 TPUPerf |
|---|---|---|---|
| 厂商中立 | 是(参数化) | 否(编译期硬绑 ISA) | 否(trace 是厂商 ISA) |
| 生成式 / sweep | 是 | 否(trace-driven,每点重编译) | 半(造 trace = 建 lowering) |
| 多芯片端到端 | 是 | 否(单芯片,c2c 远端是内存桩无计算) | 否(仍单芯片) |
| 改动量级 | 加模块(补算子方法) | 推翻范式重建地基 | 建厂商 lowering + 仍缺多芯片 |
选择理由:最终需求的四属性(厂商中立 / 生成式 / 多芯片 / sweep),厂商参照仿真器满足 0/4、G5 满足 4/4(仅计算精度待补)。「生成式」「厂商中立」是范式属性不是功能开关——厂商仿真器的数据流(编译产物 → 指令解码 → cycle 仿真)与编译期硬件特化为「精确回放某颗厂商芯片」设计,改成「任意厂商任意配置 sweep」是换工具类别,不是加功能。自造 trace 只啃下生成式半样,造完仍单芯片(远端内存桩)、仍厂商锁定,且对计算 cycle 而言翻译闭式公式等价更省。厂商仿真器的正确角色是 G5 的计算标定 / 参照源(翻译公式 + 关键点 trace 校验),不是平台。根因:范式不匹配——厂商仿真器是芯片验证工具(trace-driven / cycle-accurate / 单芯片 / 厂商专属),G5 是部署探索工具(生成式 / 事件驱动 / 多芯片 / 厂商中立),两类工具不能廉价互转。完整四建模路径对比见附录 A。
非功能性需求
| 维度 | 本 spec 的考虑 |
|---|---|
| 性能(仿真速度) | 访存受限算子 roofline 为 O(1) 解析,不进事件驱动瓶颈;指令级仅用于算力受限算子 |
| 性能(精度) | 相对可信;绝对门控(无真机锚点,继承前置 spec)。访存受限算子精度上界 = 带宽效率(±10-15%) |
| 兼容性 | 访存边带域标签是与未来行为级内存模型的前向兼容契约;新增算子瓶颈类别不破坏既有分层 |
| 可靠性 | 一域一真理源规则防止双重计算这一失败模式 |
| 安全性 / 隐私 | N/A——内部仿真器 |
局限与后续工作
局限(本设计的代价)
| 风险 / 局限 | 影响 | 缓解措施 |
|---|---|---|
| roofline 访存受限算子绝对值不可信 | 继承无锚点 | 门控;相对可信;待真机锚点 |
| 不规则算子(topk/sort)建模形态未定 | 待拐点地图证明 DSA 需要后再定 | NEEDS CLARIFICATION;先做拐点地图 |
| 行为级内存模型尚未建 | roofline 访存边暂用峰值带宽占位 | 带域标签预留升档;行为级来了按域替换 |
| lowering 层对不规则算子始终缺失 | topk/gather 难指令级 | 专用模型 + 厂商 trace 关键点校验,不自建不规则 lowering |
后续工作
- 拐点地图扫描(高优先级,前置:无,用现有解析评估器)——圈定有拐点的算子区间。
- 跨芯片错带宽域修复 / CP 多芯片桥(A1)(高优先级,独立 spec)——加算子前先修。
- 向量算子 roofline 建模(中优先级,前置:拐点地图圈定)——softmax / 归一化 / 激活等。
- 不规则算子专用模型(中优先级,前置:拐点地图证明 DSA 需要)——topk / gather。
- 行为级内存模型(中优先级,独立 spec)——SRAM bank / HBM 队列 / NoC 争用,按域替换 roofline。
验收标准
| 场景 | 指标 | 目标值 | 测试方法 |
|---|---|---|---|
| 瓶颈分类可判定 | 给定算子能逐条判出瓶颈类别 + 方法 | 三类全覆盖、无歧义 | 对算子集(GEMM/softmax/RMSNorm/RoPE/topk/gather)逐个判类 |
| 访存边可分离 | 算子时长能分解为计算估计 + 带域访存流量 | 每访存边有域标签 | 检查算子输出含 bandwidth_domain |
| 一域一真理源(契约验收,行为级模型落地后生效) | 同一域不会被 roofline 与行为级同时计时 | 无双重计算 | 行为级模型接入后,该域 roofline 估计被替换(非叠加) |
| 升档换源(契约验收,行为级模型落地后生效) | roofline → 行为级是换数据源 | 计算估计不变,访存时间来源变 | 注入行为级模型,验证访存时间路由 |
| 顺序合规 | 拐点地图先于算子建模、修带宽域先于加算子 | 顺序可核对 | 检查后续 plan 的 Task 顺序 |
单元测试关键 case:
- softmax 判为访存受限 → roofline;GEMM 判为算力受限 → 指令级;topk 判为不规则 → 专用模型。
- 一个 roofline 算子的访存边携带
bandwidth_domain标签;注入该域行为级模型后,访存时间从行为级取、计算估计不变。
附录
附录 A:业界调研
LLM 推理仿真器建模算子计算时间的四条路径,按「是否需要自建 lowering / 是否厂商中立 / 是否生成式」对比:
| 路径 | 代表 | 自建 lowering | 厂商中立 | 生成式(任意 shape) | 精度 | 需要 |
|---|---|---|---|---|---|---|
| Roofline / 解析 | ASTRA-sim、Calculon、GenZ | 否 | 是 | 是 | ±10-15% | datasheet + η |
| Profile 实测 | Vidur | 否(实测含 lowering) | 否 | 否(只测过的 shape) | 高 | 真机 |
| Trace-driven(消费编译输出) | ASTRA-sim 2.0 (Chakra)、厂商仿真器 | 否(消费现成 trace) | 否 | 否(只编译过的配置) | 高 | 厂商编译器输出 |
| 自建 mapper | LLMCompass、SCALE-Sim | 是(仅规则算子) | 部分 | 是 | 高 | 大工程,规则算子限定 |
@tbl-gcml-survey 算子计算时间建模四路径对比
本 spec 差异化:按瓶颈混合——算力受限算子走自建 mapper(路径四,已对 matmul 做),访存受限算子走 roofline 生成式(路径一,唯一既厂商中立又生成式,适配 sweep),不规则算子走专用模型 + trace-driven 关键点校验(路径三在关键点)。混合而非单选,对标 gem5 / ASTRA-sim 的混合精度。对访存受限算子选 roofline 而非 profile / trace,因为 CP 拐点扫描需要生成式任意 shape,profile(需真机)与 trace(需重编译)都不生成式。
引用(DOI 优先):
- ASTRA-sim 2.0 — Rashidi et al., ISPASS 2023. https://arxiv.org/abs/2303.14006
- Calculon — Isaev et al., SC 2023. https://dl.acm.org/doi/10.1145/3581784.3607102
- GenZ — Bambhaniya et al., 2024. https://arxiv.org/abs/2406.01698
- LLMCompass — Zhang et al., ISCA 2024. https://doi.org/10.1109/ISCA59077.2024.00082
- SCALE-Sim — Samajdar et al., 2018. https://arxiv.org/abs/1811.02883
- Vidur — Agrawal et al., MLSys 2024. https://arxiv.org/abs/2405.05465
- 项目内:02-计算建模、08-标定与验证
附录 B:实现说明
实现后补充,记录 spec 与实现的偏差。
附录 C:完整接口签名 / 数据结构
算子瓶颈分类的判定输入、访存边的带域标签数据结构在实现 plan 阶段细化。本 spec 正文只冻结概念模型与规则。