Skip to content

【2026夏季训练营】Hadamard CUDA 加速与 INT4 融合 - #69

Open
a962695448-rgb wants to merge 12 commits into
InfiniTensor:2026-summer-projectfrom
a962695448-rgb:submit-hadamard-cuda-20260916
Open

a962695448-rgb wants to merge 12 commits into
InfiniTensor:2026-summer-projectfrom
a962695448-rgb:submit-hadamard-cuda-20260916

Conversation

@a962695448-rgb

@a962695448-rgb a962695448-rgb commented Sep 16, 2026

Copy link
Copy Markdown

提交 2026 夏季训练营第三题 Hadamard 变换加速项目,代码位于 03_hadamard_tc/a962695448-rgb/

实现

CUDA 普通基线、warp 寄存器实现、WMMA Tensor Core 对照及分步/融合 INT4;支持 FP16/BF16、dim=1~256 二次幂、PyTorch 前向接口及显式线程/布局选项。天数、沐曦、壁仞、昇腾、摩尔的独立构建和验证入口保留。

本轮:复用输出缓冲区降低普通调用开销

基于 bce004e,新增 hadamard_outhadamard_int4_outquantize_int4_out。调用者提供精确形状/dtype、同设备、连续且活动字节互不重叠的输出;接口写入并返回 None,不自动 resize。原分配接口、默认参数、设备核函数源码和路由规则保持不变。

写入维护 PyTorch 版本计数,能识别其他计算为反向传播保存的数据已经被修改;接口本身遵守前向约束。inference tensor 只能在 inference_mode 内更新,跨流同步及缓冲区生命周期由调用者管理。

正确性

  • 372 组正常配置,每组更换两份输入,与独立 NumPy 参考逐位一致;输出地址、哨兵和版本检查通过。
  • 63 项异常在写入及版本修改前拒绝,包含 DLPack/部分/输出间重叠及错误元数据。
  • 修改记录、inference_mode、无额外输出张量显存分配和同存储不重叠视图检查通过。
  • 24 组流/Graph 配置通过,含 96 次变更输入重放和 48 个错误对照。

首次负例工具漏捕获非法布局对应的 ValueError,修正工具后完整通过。实现当时已正确拒绝该参数;首次日志及修正过程保留,没有修改 C++ 实现来解决工具问题。

普通 Python 调用配对

RTX 4090 D、目标 rows=1/17/256、dim=8/64/256、FP16/BF16,另有 rows=65536 对照。72 个配置 × 三轮共 216 组;每组九次交替计时基线分配、候选分配和候选 out,每个样本 2000 次调用、前后 CUDA 同步。

方法 三轮目标几何平均加速比
Hadamard 1.747 / 1.756 / 1.751×
Hadamard + INT4 2.008 / 2.023 / 2.006×
INT4 2.030 / 2.046 / 2.035×

每方法每轮平均至少快 10%、每配置及旧接口回退不超过 5% 的门槛全部通过;旧接口最大观测回退在 2.765%以内。out 的一次性预分配位于计时之外,收益要求实际复用缓冲区。这里是普通调用墙钟时间,不是内核、初次分配或模型端到端加速。

使用及验收说明固定原始证据包含每次计时、异常记录、源码指纹和准备脚本。

已归档的其他验证

  • 4090 D 限定 auto:dim 1/2/4/8/16、rows 4096~65536 使用 packed 256;180 配置 × 三轮的 Graph 设备执行加速为 1.312~7.528×,其他范围回退。固定记录。其计时口径与本轮不同,两个比值不相乘。
  • NVIDIA 历史 A100/4090:1,876 组 CLI 输入的多种模式、1,800 组 Dao 对照及接口/流/偏移检查,保留各自版本范围。
  • 先前 4090 D 执行上下文:120 配置、480 次变更输入重放和 240 个错误对照通过。
  • 摩尔:1,504 组完整输入、192 项 API、14 项 CLI;2,074,568 项量化原语对照零差异。三轮 6,750 条同设备配对中默认融合相对上一版为 2.012~2.898×,详见原平台报告。
  • 较早的主机查询减少候选未达到预设收益门槛,未采用;原始负例档案保留。

原 2,586 份历史 results 仍以固定完整档案链接引用。原 51 份源码/构建文件中,48 份字节不变;row_policy、Makefile 和 PyTorch binding 的新旧指纹均记录在清单。新测试单独登记。

本轮只新增上述 NVIDIA 单卡实测,不将旧 A100 或国产平台证据作为新输出接口已经在那些设备验证的证明。

保留核心实现、必要测试、五种国产平台入口、报告及摩尔可再生成的复现材料。
将 2586 份历史 results 记录改为固定归档链接,新增快速开始、证据索引与源码清单。
保留的 51 份源码和构建文件与完整归档字节一致。

CPU reference 检查通过;摩尔 6750 条计时复算及 6 项数据完整性检查通过。
本次仅做提交整理,没有修改 GPU 计算源码或重新运行 GPU 实验。
增加 quantize_int4_packed 与 quantize_int4_packed_out,支持 N≤16;保留现有量化接口签名和默认路径。

RTX4090D 的 700 组新正确性检查及三轮 240 条设备、240 条普通调用记录通过。保留初版参数开销实验,更新中文说明、验证来源和文件哈希清单。
保留生产内核,新增 FP16/BF16 单元素验证:覆盖 131072 种存储编码、128768 个有限值的独立参考。
记录符号简化候选的 132 条设备及 132 条主机计时。其目标几何平均未达预设 1.10 倍门槛,因此不采用该内核变更。
在显式 N2/4/8/16 独立量化中每线程处理相邻两值,新分派局限于 quantize-only;保留通用 Hadamard 启动定义。
最终版本通过完整分量编码、偏移与旧接口回归,以及 288 条设备、288 条普通调用和 9 组 A/A 长采样记录。

RTX4090 目标设备几何平均约 1.36–1.43 倍;普通 allocating/out 目标约 1.07/1.12 倍。保留此前未通过版本及其原始判定。
固定三轮确认仍有一项波动未达预登记门槛,记录完整范围和未采用原因,链接不可变原始证据。停止重复确认该候选,计算源码和构建入口保持原样。
完整678设备与1356主机记录均保留,三轮出现210项门槛失败;记录已通过的数值回归、真实二进制静态资源对照与复核入口。本次仅更新报告和清单,生产计算保持b49fff4。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant