Prhub

#28392 [AMD] Annotate ATOM source for imported v4 unified attention kernels

原始 PR 作者 1am9trash 合并时间 2026-06-16 13:12 文件变更 4 提交数 1 评论 1 代码增减 +10 / -0

执行摘要

为 AMD V4 内核添加 ATOM 来源注释

PR body 明确指出 "The unified kv attention kernel is porting from ATOM's sparse attention kernels",添加来源注释以明确 ATOM 的原始出处,提高代码溯源性和合规性。

可作为合规性参考,无精读必要,但体现了 AMD 团队对上游代码归属的重视。

讨论亮点

无 review 争议;一份自动评论达到日配额,与 PR 无关。

实现拆解

在以下 4 个文件开头添加注释行,标注内核来源为 ATOM 项目:

  1. paged_decode.py:添加 # The following kernel is imported from ATOM.# Source: atom/model_ops/v4_kernels/paged_decode.py
  2. paged_decode_indices.py:添加类似注释,指向 ATOM 的对应索引内核。
  3. paged_prefill.py:添加类似注释,指向 ATOM 的预填充内核。
  4. deepseek_v4_memory_pool.py:在 DeepSeekV4UnifiedKVPool 类定义前添加注释 # The following kv pool follows ATOM's unified_kv kernel layout.
    所有变更均为纯注释添加,不影响运行时逻辑。
文件 模块 状态 重要度
python/sglang/srt/layers/attention/dsv4/unified_kv_kernels/paged_decode.py 解码内核 modified 3.94
python/sglang/srt/layers/attention/dsv4/unified_kv_kernels/paged_decode_indices.py 解码内核 modified 3.94
python/sglang/srt/layers/attention/dsv4/unified_kv_kernels/paged_prefill.py 预填充内核 modified 3.94
python/sglang/srt/mem_cache/deepseek_v4_memory_pool.py 内存池 modified 3.38

关键源码片段

python/sglang/srt/layers/attention/dsv4/unified_kv_kernels/paged_decode.py core-logic

核心 V4 解码注意力内核,添加 ATOM 来源注释

# SPDX-License-Identifier: MIT
# Copyright (C) 2024-2026, Advanced Micro Devices, Inc. All rights reserved.# 以下内核从 ATOM 项目导入
# 来源 : atom/model_ops/v4_kernels/paged_decode.py"""稀疏解码注意力,基于 unified KV pool 和 per-token 分页索引。为 V4 decode + CUDAGraph 设计:替代每次前向生成 kv_flat_sa(其形状依赖 n_committed_per_seq,变化会阻止 CUDAGraph 捕获),
使用统一 KV pool 通过分页索引访问,类似 aiter.mla.mla_decode_fwd 的 API 风格。调用者约定:
  unified_kv:       [total_pages, D] BF16 (page_size=1)
    概念上合并了 SWA 环形缓冲区和单层 V4 的压缩器分页缓存。
    槽位 [0, swa_pages) 引用 SWA 条目 (state_slot * win + ring);
    槽位 [swa_pages, ...) 引用压缩 K 条目 (block_id * K_PER_BLOCK + slot_in_block)。
  kv_indices: [total_indices] int32 — 每个 token 的扁平槽位列表。
    每个 token 的条目位于 kv_indices[kv_indptr[t] : kv_indptr[t+1]]。
    **所有条目必须为 unified_kv.shape[0] 内的有效槽位 ID。**
    生产环境中的 decode 索引构建器 (write_v4_paged_decode_indices) 输出 ragged-packed 索引(无哨兵值);
    CG 填充的 token 通过 indptr[t+1] == indptr[t] 获得零长度切片。内核不再进行 per-iter slot >= 0 哨兵检查。
  kv_indptr:  [N+1] int32 — 真实前缀和 (每个 token 长度可变)。
  attn_sink:  [H] per-head 可学习 softmax 分母偏置 (V4 特有)。
  softmax_scale: float。返回:
  out: [N, H, D],与 q 相同数据类型。数值:使用 log2 域内的 online-softmax (qk_scale = softmax_scale * LOG2E),
注意力吸收作为虚拟 K 合并。在 fp32 累加容差范围内与 PyTorch 参考实现 (_sparse_attn_ragged_torch) 位接近。
"""

评论区精华

没有提炼出高价值讨论线程

当前评论区没有形成足够清晰的争议点或结论,后续有更多讨论时会体现在这里。

风险与影响

无技术风险。仅添加注释,不涉及逻辑变更。

影响极小:改善了代码可维护性和溯源透明度,对用户无感知。

关联 Issue

未识别关联 Issue

当前没有检测到明确关联的 Issue 链接,后续同步到相关引用后会出现在这里。

完整报告

参与讨论