G5 DSA compute 补全建模设计规格
版本:1.0.0 状态:Accepted 创建日期:2026-06-22 最后更新:2026-06-22 作者:xiang.li 前置:G5-计算算子建模方法分层设计规格、G5-计算建模设计规格、G5-softmax算子建模设计规格
版本号规则 (SemVer):
- major (X.0.0):DSA 算子分解体系重构、合成语义变更
- minor (1.X.0):新增稀疏算子复用本契约、扩展访存边/域规则(向后兼容)
- patch (1.0.X):修正笔误、补充说明
变更历史
| 版本 | 日期 | 变更说明 |
|---|---|---|
| 1.0.0 | 2026-06-22 | 初版:补全 DSA compute 缺失项(indexer 全 N 评分 + topk 选择 + 稀疏 KV gather + softmax),含访存边不双算与带宽域分阶段契约 |
@tbl-spec-gdsa-01 文档变更历史
概述
本 spec 定义 G5 对 DSA(Deep Sparse Attention)稀疏注意力的算子分解补全:把当前「只发 5 个 matmul、用 topk 截断的 N 直接做稀疏注意力」补成「lightning indexer 全 N 评分 + topk 选择 + 稀疏 KV gather + 稀疏注意力(含 softmax)」的完整链。这是正确性补全——当前分解漏掉了 DSA 的主导计算项,与 DSA 是否有上下文并行拐点无关。
本 spec 是父 spec 方法分层在 DSA 稀疏注意力上的落地:indexer 评分走 matmul(算力受限)+ 向量算子(访存受限),topk 选择与 gather 走不规则算子方法(专用模型)。
背景
G5 当前的 DSA 算子分解漏掉 DSA 的主导计算。DSA 层只产出 5 个 matmul,稀疏注意力直接用 effective_kv = min(kv_seq_len, topk) 作收缩维,假设 topk 的 KV 已选好,跳过选择前的评分。三个量化缺口:
- lightning indexer 全 N 评分整块缺失,且是长上下文主导项:DSA 选 topk 前要对全部 N 个 key 算 index score,是 $O(N^2)$ 全量扫描。indexer 评分与稀疏注意力的算力比为
比值随 $N$ 线性增长(topk 固定),故长上下文下 indexer 评分主导 DSA 注意力计算。当前 G5 完全不算它——稀疏注意力($O(N \cdot \text{topk})$)独占 DSA 注意力计算,漏掉随 $N$ 增长的 indexer 主导项。
- DSA 注意力无 softmax:DSA 走裸 matmul 发射路径,稀疏注意力的 softmax 未建模(其他 attention 的 softmax 已在前置 spec 建模,但 DSA 未接入)。
- 稀疏 KV gather 无模型:按 topk 索引从 KV cache 收集 KV 是数据依赖的散列访存(token 级、不连续),当前无任何访存边表达。
驱动力:正确性。G5 的目标是可信的部署性能仿真,DSA 注意力漏掉主导计算使 DSA 的 compute 数字系统性偏低。补全与"DSA 有无拐点"无关——后者是另一个口径问题(拐点地图用同一不完整 compute 口径,其 DSA 结论需单独复核,不在本 spec)。
名词定义
下表钉死本 spec 用到的核心名词。
| 名词 | 定义 | 与易混淆概念的区分 |
|---|---|---|
| lightning indexer | DSA 的轻量打分器:低秩 query + 多头 ReLU 加权和,头数/头维/精度远小于主注意力 | 与主注意力区分:indexer 只算选择用的 index score,不产出注意力输出 |
| index score | indexer 给每个 (query, key) 算的相关性标量 $I_{t,s}$ | 与注意力 score(QK^T)区分:低维、ReLU 加权、仅用于选 topk |
| 全 N 评分 | 对全部 N 个 key 算 index score 的 $O(N^2)$ 计算 | DSA 长上下文主导计算项 |
| topk 选择 | 按 index score 选分最高的 topk 个 key | 全局 argmax,需全 N 视野、不能提前剪枝 |
| 稀疏 KV gather | 按 topk 索引从 KV cache 收集对应 KV 的数据依赖访存 | token 级、不连续(散列),区别于块级连续 gather |
| 稀疏注意力 | 在选中的 topk 个 KV 上做标准 softmax 注意力 | $O(N \cdot \text{topk})$,区别于稠密 $O(N^2)$ |
| 访存边带域 | 一条访存边占用的物理带宽资源类别(LMEM / NoC / HBM / C2C) | gather 域随 prefill/decode 分,不固定 |
| 选择成本 | topk 选择的算子级成本模型(全 N 扫描量级,厂商中立) | 不复用厂商排序引擎专用公式 |
| 串行链 | 评分 → 选择 → gather → 稀疏注意力 的依赖顺序 | 必须连依赖边,否则 wall-clock 被并行算子掩盖 |
| unvalidated 门控 | 底层未标定时绝对计算时长不对外承诺、只支持相对比较 | 继承父 spec |
目标与非目标
目标 / 需求清单(逐条可核对):
- 需求:DSA 算子分解补入 lightning indexer 全 N 评分——index score 计算分解为 q·K 点积(matmul 形,主导,复用 matmul 模型)+ ReLU + per-head 加权和(向量算子),收缩到全 N 维(非 topk)。
- 需求:indexer 全 N 评分与现有稀疏注意力评分不双算(前者收缩维 = 全 N、低维 index head;后者 = topk、主注意力维,两个不同算子)。
- 需求:DSA 稀疏注意力接入 softmax(复用前置 softmax 算子建模),使 softmax 串行计入 DSA 注意力时长。
- 需求:稀疏 KV gather 建为数据依赖的散列访存边——按 topk 索引收集 KV,建模"散列收集 → 连续 buffer"的搬运量;稀疏注意力的 KV 访存边改为从该连续 buffer 读,与 gather 不双算 KV。
- 需求:gather 访存边带宽域随阶段分——prefill 的 KV 驻留片上、decode 的 KV 在 HBM cache,不固定单一带宽域;带域标签作升档钩子。
- 需求:topk 选择建为厂商中立的选择成本(全 N 扫描量级),不复用厂商专用排序引擎公式;选择需全 N 视野、不能提前剪枝。
- 需求:评分 → 选择 → gather → 稀疏注意力 串行链的依赖边连对,使各项串行计入 wall-clock、不被并行算子掩盖。
- 需求:绝对计算时长在底层未标定时门控 unvalidated(继承父 spec),相对/趋势可信。
非目标(明确不做):
- 非目标:A2(向量∥矩阵真重叠 + 带宽争用 + compute↔comm 真依赖)。
- 非目标:KV 变放置 + 缓存命中率(hit rate)建模。变放置/hit-rate 是服务系统层概念,defer 请求级 DES(父 spec 已 defer KV-HBM 带宽共享);gather 访存边带域标签作其升档钩子。
- 非目标:既有计算引擎的厂商命名(TIU/HAU 等)改功能名——独立架构议题,本 spec 只确保不新增厂商排序引擎依赖。
- 非目标:DSA 训练(indexer 两阶段训练、梯度 detach)——本 spec 只建推理计算时长。
- 非目标:indexer 评分的近似/分块优化(radix-select 等具体算法)——本 spec 建全 N 评分的算子成本,不建具体选择算法实现。
- 非目标:绝对精度。无真机锚点,继承父 spec 相对可信 / 绝对门控。
- 非目标:拐点地图 DSA 结论的复核。其 compute 口径缺主导项致结论可能错,属单独修正,不由本 spec 驱动。
用例说明
假设本设计已实现,一个开发者评估 DSA 层 prefill 的计算时长:
- 输入:DSA 层描述——序列长 $S$、KV 长 $N$、index head 数 $n_h^I$、index head 维 $d^I$、topk、主注意力维。
- 投影(已有):q_proj / k_proj / weights_proj 三个 matmul。
- indexer 全 N 评分(补入):对全 N 个 key 算 index score——q·K 点积(matmul 形:$n_h^I$ 个 $[S, d^I] \times [d^I, N]$,FP8)+ ReLU + per-head 加权和(向量算子)。这是长上下文主导项。
- topk 选择(补入):在 N 个 index score 上选 topk——厂商中立选择成本(全 N 扫描量级)。
- 稀疏 KV gather(补入):按 topk 索引从 KV cache 散列收集 topk 个 KV → 连续 buffer。访存边带域:prefill 片上、decode HBM。
- 稀疏注意力(已有 matmul + 补 softmax):在 buffer 里的 topk KV 上做 attn_score + softmax + attn_out。KV 访存边从 buffer 读,不与 gather 双算。
- 合成:DSA 计算时长 = 投影 + indexer 评分 + 选择 + gather + 稀疏注意力,各项按串行链依赖计入。
- 输出:含全部缺失项的 DSA 计算时长(ns)。长上下文下 indexer 评分主导,不再被漏算;绝对值 unvalidated 门控。
详细设计
概念模型
DSA 计算时长由分解链各算子时长按依赖串成,每算子按其瓶颈选方法(父 spec 方法分层):
| 算子 | 瓶颈/方法 | 收缩维 / 量级 |
|---|---|---|
| q/k/weights 投影 | 算力 / matmul | 已有 |
| indexer 全 N 评分(q·K) | 算力 / matmul(FP8,低维 index head) | 全 N,$O(N^2 \cdot n_h^I \cdot d^I)$,主导 |
| indexer ReLU + 加权和 | 访存 / 向量算子 | 全 N,小 |
| topk 选择 | 不规则 / 厂商中立选择成本 | 全 N 扫描量级,小 |
| 稀疏 KV gather | 访存 / 数据依赖散列 DMA | topk 个 KV bytes |
| 稀疏注意力 score + softmax + out | 算力 + 访存 / matmul + 向量 | topk |
@tbl-gdsa-decomp DSA 算子分解与方法
合成:各算子时长按 的串行链依赖相加(A1 边界,不建真重叠)。
$$\begin{equation} t_{\text{DSA}} = t_{\text{proj}} + t_{\text{indexer}} + t_{\text{topk}} + t_{\text{gather}} + t_{\text{sparse-attn}} \label{eq:gdsa-serial} \end{equation}$$其中 $t_{\text{indexer}} = t_{\text{qK}} + t_{\text{relu-wsum}}$,$t_{\text{sparse-attn}} = t_{\text{score}} + t_{\text{softmax}} + t_{\text{out}}$。
indexer 全 N 评分
index score 对全部 N 个 key 计算(非 topk),是 DSA 长上下文主导计算:
$$\begin{equation} I_{t,s} = \sum_{h=1}^{n_h^I} w_{t,h}^I \cdot \mathrm{ReLU}\!\left(\mathbf{q}_{t,h}^I \cdot \mathbf{K}_s^I\right) \label{eq:gdsa-index-score} \end{equation}$$分解为:
- q·K 点积(主导):$n_h^I$ 个头的 $[S, d^I] \times [d^I, N]$ 批量 matmul(MQA 共享 key),FP8 精度。复用 matmul 模型,收缩维 = 全 N。
- ReLU + per-head 加权和:逐元素 ReLU + 跨头加权归约,访存受限向量算子。
- indexer query 投影(小项):V4 indexer 用低秩 query(先降维到 latent 再上投影出 indexer head),V3.2 直接投影。该投影是 $\propto S$ 的小 matmul(远小于 $O(N^2)$ 评分),归到投影项建模(复用 matmul),不作主导项、也不忽略。
与稀疏注意力评分不双算:indexer 评分收缩维 = 全 N、维度 = 低维 index head($d^I$);稀疏注意力 score 收缩维 = topk、维度 = 主注意力维。两个不同 matmul,口径不重叠。
设计原理:indexer 是 $O(N^2)$ 全量扫描,常数小(低头维 + FP8)但长上下文下绝对量级主导。漏掉它使 DSA 注意力计算系统性偏低——这是本 spec 要补的核心缺口。
topk 选择
topk 选择在 N 个 index score 上选分最高的 topk 个,是全局 argmax:需对全 N 算完 score 才能选、不能提前剪枝、不能按块近似。
建为厂商中立的选择成本(全 N 扫描量级的参数化成本),不复用厂商专用排序引擎公式——厂商排序引擎的 cycle 模型不可得(参照源为占位),且选择非 DSA 主导成本。选择成本作小项,gated unvalidated。
设计原理:父 spec 把不规则算子归"专用模型 + trace 校验",但 DSA 的 topk 选择在主导成本(评分 matmul + gather)之外是小项,且无厂商 cycle 参照,故建轻量厂商中立选择成本即可,不投入精确排序网络建模。
稀疏 KV gather
gather 按 topk 索引从 KV cache 收集对应 KV,是 token 级、不连续的数据依赖散列访存。建为 DMA 访存边:
$$\begin{equation} t_{\text{gather}} = \frac{\text{bytes}_{\text{topk-KV}}}{\text{BW}_{\text{domain}(\text{stage})}} \label{eq:gdsa-gather-edge} \end{equation}$$不双算约束:gather 建模"按 topk 索引散列收集 KV → 写入连续 buffer"的搬运量(topk 个 KV 的 bytes)。稀疏注意力的 KV 访存边改为从该连续 buffer 读,不再独立穿 KV cache——否则同一批 topk KV 被 gather 边与稀疏注意力 matmul 访存边各算一次。
带宽域随阶段分:
- prefill:KV 刚由 k_proj 算出、驻留片上(LMEM / 片内段),gather 走片内带宽域;
- decode:KV 在 HBM cache,gather 走 HBM 带宽域。
不固定单一带宽域——prefill 按 HBM 算是错域(KV 在片上却按片外带宽,同跨芯片通信错走片内带宽的同构错误)。带域标签作升档钩子:未来请求级 DES / 缓存层级模型(变放置 + hit rate)可按域接管 gather 访存时间,不改本模型。
数据依赖性的处理:gather 散列访问的随机性代价本 spec 不建模(按搬运 bytes / 带宽的顺序口径占位,gated unvalidated),与父 spec「不规则算子专用模型 + 关键点校验」一致,随机访问惩罚待真机/trace 校验后补。
DSA 稀疏注意力与 softmax
DSA 稀疏注意力在 gather 得到的 topk KV 上做标准注意力:attn_score(topk 收缩)+ softmax + attn_out。softmax 复用前置 G5-softmax算子建模设计规格 的向量吞吐模型,串行计入。
DSA 稀疏注意力的 score/softmax/out 三项须走支持 softmax 串行计入的发射路径(当前 DSA 走裸 matmul 路径、不含 softmax)——使 softmax 在 DSA 注意力中不被漏算。
串行链与合成
评分 → 选择 → gather → 稀疏注意力 是数据依赖串行链(选择依赖全 N 评分、gather 依赖选择结果索引、稀疏注意力依赖 gather 的 KV)。各算子时长按依赖串行计入 。
依赖边必须连对:串行链各跨引擎依赖(matmul→向量→DMA→matmul)的依赖边须显式建立,否则后继算子被并行算子掩盖、wall-clock 零贡献(前置 softmax 已验证:发射算子但不连依赖边会被并行算子完全掩盖)。
A1 边界:串行计入,不建向量∥矩阵真重叠 + 带宽争用(A2)。
标定边界与门控
- 结构正确性(本 spec 可证伪):DSA 分解含全部缺失项(indexer 评分 + 选择 + gather + softmax),各算子时长非零且按串行链计入;indexer 评分收缩维 = 全 N。
- 绝对正确性(不承诺):各算子常数未对硅验证,绝对计算时长 unvalidated 门控(继承父 spec)。
集成点
- 上游:DSA 层产出算子分解(投影 + indexer 评分 + 选择 + gather + 稀疏注意力)。
- 下游:DSA 计算时长喂 G5 事件驱动时序层。
- 与 matmul / softmax 模型:indexer q·K 复用 matmul 模型(FP8)、稀疏注意力 softmax 复用 softmax 模型。
- 与请求级 DES:gather 访存边带域标签是与未来变放置 / hit-rate 模型的契约边界。
引用
- 父 spec 方法分层:G5-计算算子建模方法分层设计规格。
- matmul / 访存边 / overlap:G5-计算建模设计规格。
- softmax 向量算子:G5-softmax算子建模设计规格。
- DSA / lightning indexer 机制:动态稀疏选择(indexer $O(N^2)$ ReLU 加权评分 + topk 全局选择 + 散列 gather)。
备选方案
| 维度 | 补全分解(选定) | 维持现状(topk 截断) | topk 复用厂商排序引擎 |
|---|---|---|---|
| indexer 全 N 评分 | 补入(matmul + 向量),主导项不漏 | 跳过,DSA compute 系统性偏低 | 不涉及评分 |
| topk 选择成本 | 厂商中立选择成本(小项) | 不算 | 厂商排序引擎 cycle 公式 |
| 厂商中立 | 是 | 是 | 否(绑厂商排序引擎) |
| KV gather | 散列 DMA 访存边 + 分域 + 不双算 | 不算 | 不涉及 |
选择理由:补全分解在正确性上胜出——indexer 全 N 评分是 DSA 长上下文主导计算,维持现状漏掉它使 DSA 数字系统性偏低(违 No Simplify)。topk 选择不复用厂商排序引擎:其参照 cycle 模型不可得(占位)、且选择非主导成本,厂商中立轻量选择成本即可,避免新增厂商引擎依赖。否决"维持现状"=漏主导项;否决"复用厂商排序引擎"=无参照 + 绑厂商 + 非主导。父 spec 附录 A 已有完整建模路径对比,本篇为其在 DSA 上的落地,不重做业界调研。
非功能性需求
| 维度 | 本 spec 的考虑 |
|---|---|
| 性能(仿真精度) | 结构正确性:分解含全部缺失项。绝对精度:不承诺(无真机锚点),相对可信 |
| 性能(仿真速度) | 各算子闭式 / 解析成本,indexer 评分复用 matmul 模型,不进事件驱动热循环瓶颈 |
| 兼容性 | indexer / 选择 / gather 参数下沉芯片或模型配置,需同步 _template;新增不破坏既有算子。gather 带宽域字段用 _gb_per_s 后缀(项目命名规则) |
| 可靠性 | 串行链依赖边连对防 wall-clock 掩盖;gather 不双算 / 分域防口径错误 |
| 安全性 / 隐私 | N/A——内部仿真器 |
局限与后续工作
局限(本设计的代价)
| 风险 / 局限 | 影响 | 缓解措施 |
|---|---|---|
| 各算子常数未对硅验证 | DSA 绝对计算时长精度未知 | 门控 unvalidated;结构正确性可证伪;待真机锚点 |
| gather 散列随机访问惩罚不建模 | gather 时长按顺序 bytes/带宽偏乐观;DSA token 级散列 gather 相对 NSA 块级连续 gather 的访存劣势在本模型暂不体现,DSA-vs-NSA 访存对比不可据此下结论 | 顺序口径占位;带域标签预留升档;待 trace/真机校验 |
| topk 选择成本厂商中立、非精确 | 小项,选择绝对成本不精确 | 作小项 gated;非主导,影响有限 |
| KV 变放置 + hit-rate 不建模 | prefill/decode 二分外的缓存层级不表达 | defer 请求级 DES;带域标签作升档钩子 |
| A1 串行、不建真重叠 | 串行链各项相加偏保守 | A1 边界;真重叠留 A2 |
后续工作
- 请求级 DES 层(高优先级,独立 spec)——KV 变放置 + hit-rate + 带宽域共享,按 gather 带域标签接管。
- gather 随机访问惩罚标定(中优先级,前置:trace / 真机)——散列访问的随机性代价。
- 真机标定锚点(高优先级,前置:真机渠道)——升相对到绝对。
- 拐点地图 DSA 结论复核(中优先级,独立)——用补全后的 compute 口径重算 DSA ratio,复核拐点存活性。
- 真重叠建模(中优先级,A2)——向量∥矩阵 + 带宽争用。
验收标准
单元测试关键 case:
- DSA 层分解含 indexer 全 N 评分(收缩维 = N)+ 选择 + gather + softmax,缺一即红。
- 扫 S(128K→1M)验 indexer 评分占 DSA 注意力比随 S 增($O(N^2)$ 签名),证补全改变了 DSA compute 口径。
- gather 与稀疏注意力 KV 访存边不双算(比对覆盖张量)。
- 删 indexer 评分发射 / 串行依赖边 → 对应 case 变红(变异有效)。
附录
附录 A:业界调研
本篇是父 spec 方法分层在 DSA 上的落地,完整建模路径对比见父 spec 附录 A。DSA 机制参照:
| 参照 | 机制 | 与本篇关系 |
|---|---|---|
| DeepSeek DSA (V3.2) / CSA (V4) | lightning indexer(低秩 query + ReLU 加权 + FP8)$O(N^2)$ 全 N 评分 → topk 选择 → 稀疏注意力 | 算子分解三段的来源;indexer 主导性依据 |
| NSA (Native Sparse Attention) | 压缩/选择/滑窗三分支,块级连续 gather | 对比:NSA 块级 gather 连续,DSA token 级散列 |
| MoBA | 块级 gating,$O(N/B)$ 选择 | 对比:粒度粗、gather 连续 |
| TPUPerf | HAU 排序 cal_cycle 占位、gather 当 GDMA bytes 搬运无随机访问惩罚 | 参照点:topk 无厂商 cycle 参照、gather 按 bytes 口径 |
@tbl-gdsa-survey DSA 机制与建模参照
本篇差异化:补全 G5 的 DSA 算子分解,把当前漏掉的 indexer 全 N 评分(主导)+ topk 选择 + 散列 gather + softmax 建出来,使 DSA compute 口径完整。indexer 评分复用 matmul、softmax 复用前置 spec、topk/gather 走不规则算子轻量模型。
引用(DOI 优先):
- DeepSeek-V3.2 — DeepSeek-AI, arXiv:2512.02556, 2025. https://arxiv.org/abs/2512.02556
- Native Sparse Attention — Yuan et al., arXiv:2502.11089, 2025. https://arxiv.org/abs/2502.11089
- MoBA — Lu et al., arXiv:2502.13189, 2025. https://arxiv.org/abs/2502.13189
- 项目内:动态稀疏选择
附录 B:实现说明
- gather 带宽域复用既有引擎、零新增常数:prefill 域路由到既有片内 SDMA 引擎带宽、decode 域路由到既有 GDMA(HBM)引擎带宽,不硬编新带宽常数。未知域 panic。独立 KV-cache 带宽段待请求级 DES 加专门字段。
- op_count 为代码固化常量、与 workload 层对齐:softmax / ReLU-wsum / topk-select 的子步骤 op_count 是跨厂商算法常数,固化在 Rust(VectorConfig),与 workload 层算子的
compute_ops同口径(如 ReLU-wsum op_count=3)防两侧漂移,非 YAML 字段。 - indexer 评分批量维 G 折进 M:indexer 全 N 评分是 batch matmul(G=batch·n_index_heads),时序上 G 折进 M 维计(等价),避免少算 G 倍。
- 串行链跨引擎依赖:评分(matmul)→ReLU-wsum(vec 等 tiu)→topk(vec 等 vec)→gather(sdma 等 vec)→稀疏注意力(dma 等 sdma) 用三类引擎依赖边(vec dep_engine / vec_dep / sdma_dep)逐跳连,防 wall-clock 掩盖。
附录 C:参数实例
DSA / indexer 参数(来源:DeepSeek DSA/V4 参照),落地配置:
| 参数 | 含义 | 参照值(V4 CSA) |
|---|---|---|
| $n_h^I$ | index head 数 | 64 |
| $d^I$(权威源记 $c^I$) | index head 维 | 128 |
| indexer 精度 | index score 计算精度 | FP8 |
| topk | 选择的 KV 数 | 2048 |
| MQA | indexer head 共享 key | 是 |
@tbl-gdsa-params DSA / indexer 参数实例
indexer 评分精度 FP8 影响其 matmul 成本;topk / $n_h^I$ / $d^I$ 影响 $O(N^2)$ 主导项常数。具体取值随模型配置,V4 CSA 作参照实例。indexer / 选择 / gather 参数缺字段时 raise 带字段名(继承父 spec 与 softmax spec 的配置加载契约,不取默认)。