ONNX Runtime WebGPU PR Monitor

Last Updated: 10/01/2026, 10:30 PM | Total: 568 PRs

Showing 1-10 of 110 PRs
Page 1 of 11
👤 raun6k📅 Created: 10/01/2026
🤖 AI 摘要

该改动修复 ONNX Runtime 图优化器中 LayerNorm 融合的语义错误,避免将非平方归一化误融合,或将运行时 epsilon 替换为默认的 1e-5,导致 CPU 推理结果变化。实现上要求 Pow 指数为常量 2 且不因广播扩展张量秩;epsilon 则必须是不会扩展秩、可由融合算子的 float 属性表示的单元素常量,同时支持从方差 Add 的任一输入读取,并保留浮点初始化器转为 float32 后的常量识别能力。epsilon 校验同时覆盖普通和简化 LayerNorm 融合,防止后续优化绕过限制,回归测试涵盖动态参数、可覆盖初始化器、异常形状、双精度 epsilon 及合法融合场景。此次修改属于通用图优化而非 WebGPU 内核调整,主要提升推理正确性与模型兼容性;不满足条件的子图将保留未融合形式,可能减少融合机会,但现有信息未提供 WebGPU 执行验证或性能基准,无法量化其性能影响。

📁 Changed Files (2 files, 365 changes: +303/-62)
onnxruntime/core/optimizer/layer_norm_fusion.cc
onnxruntime/test/optimizer/graph_transform_test_layernorm.cc
👤 raun6k📅 Created: 10/01/2026
🤖 AI 摘要

该 PR 修复 ONNX Runtime 的 FastGeluFusion 在融合 GELU 时误删共享的 X * 0.5(half_x)生产节点、导致外部消费者输入失去生产者并使会话初始化失败的问题。关键调整是在 half_x 输出被 GELU 子图之外的节点使用时保留其 Mul 节点,否则仍将其随融合节点一起移除,GELU 主计算继续融合为 FastGelu。新增回归测试覆盖两种受支持的 GELU 公式、Cast 路径、零至两个 half_x 外部消费者及 GELU 最终输出的多个消费者,并检查融合结果、保留的生产节点与连接关系,以及所有输出与未优化推理的一致性。改动位于通用图优化器而非 WebGPU 专属实现,主要提升共享中间结果场景下的图合法性与兼容性;现有测试信息仅涉及 macOS ARM64 上的 CPUExecutionProvider,未提供 WebGPU 验证或性能基准,因此不能据此断言 WebGPU 性能收益。

📁 Changed Files (2 files, 100 changes: +99/-1)
onnxruntime/core/optimizer/fast_gelu_fusion.cc
onnxruntime/test/optimizer/graph_transform_test.cc
👤 sayanshaw24📅 Created: 10/01/2026
🤖 AI 摘要

该 PR 在已有 SparseAttentionIndexer 实现基础上,仅优化 WebGPU 的 QSA 选择路径,旨在减少可见性扫描和块评分的重复计算。实现上将每个查询的可见 token 位置与块分数缓存到有界工作组共享内存,并在单个块评分过程中复用 query/key 的 RMS 归一化结果;两类缓存及计数共占 15,364 字节,低于 WebGPU 保证支持的 16 KiB 上限。超出缓存范围时仍使用原有的精确可见性扫描和分数重算路径,保持按分数降序、索引升序的 TopK 语义及对非前缀掩码的支持。测试新增了 FP32/FP16 非前缀掩码的一致性用例,文档同步说明优化与回退路径,但提供的验证描述不完整且缺少性能测量数据,无法确认本次改动的完整验证结果或量化加速收益。

📁 Changed Files (3 files, 130 changes: +94/-36)
docs/contrib_ops/webgpu/sparse_attention_indexer.md
onnxruntime/contrib_ops/webgpu/bert/sparse_attention_indexer.cc
onnxruntime/test/contrib_ops/sparse_attention_indexer_op_test.cc
👤 prathikr📅 Created: 09/30/2026
🤖 AI 摘要

该 PR 优化了 ONNX Runtime WebGPU EP 中 GatedDeltaNet 的归约路径,重点降低 Apple GPU 上 Qwen 128 通道 Q/K 归一化和循环状态投影的同步开销。WGSL 着色器改用 subgroupAdd 完成子组内归约,每个子组写入一个部分结果,再由 lane 0 合并,使两个归约阶段合计的工作组屏障从每 token 16 次降至 4 次。配套 C++ 逻辑仅在支持子组的 Apple 适配器上启用该路径,并将这一选择纳入着色器缓存特化;其他设备保留原有树形归约,同时提升 FP16 decay/beta 输入的计算精度,以适配 Qwen 的 FP32 门控运算。该优化保持原有数学运算和循环状态更新逻辑,预期通过减少全工作组同步改善性能,但所给信息未包含优化前后的耗时或加速比,无法量化实际收益。

📁 Changed Files (3 files, 83 changes: +77/-6)
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.cc
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.h
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.wgsl.template
👤 prathikr📅 Created: 09/30/2026
🤖 AI 摘要

该改动针对 ONNX Runtime WebGPU 执行提供程序中 Apple GPU 的 MatMulNBits 单 token 解码场景(M=1、FP16、INT4 block-32),通过调整计算布局改善工作组利用率。通用、融合 MLP 和融合 QKV 路径均将输出分块从 8 列扩大至 32 列,并将工作组线程数从 128 增至 256,同时把分块大小纳入着色器缓存键,其他厂商及工作负载保持原有配置。此外,GatedDeltaNet 着色器将 FP16 decay/beta 读取值转换为 FP32 以改善兼容性,并新增 N=130 用例覆盖输出尾部不足一个分块的情况。报告中的解码速度由 8.5448 提升至 8.8959 tok/s,增幅为 4.11%,且通过了 13 项融合 MLP/QKV 结果一致性测试及 1,077-token 提示词、256-token 生成验证;由于未提供具体 Apple GPU 型号和模型信息,该收益尚不能直接推广到其他设备或模型。

📁 Changed Files (7 files, 325 changes: +314/-11)
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits_mlp.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits_qkv.cc
onnxruntime/test/contrib_ops/matmul_4bits_test.cc
onnxruntime/test/optimizer/matmul_nbits_mlp_fusion_test.cc
onnxruntime/test/optimizer/matmul_nbits_qkv_fusion_test.cc
onnxruntime/test/optimizer/webgpu_fusion_test_util.h
👤 mustjab📅 Created: 09/30/2026
🤖 AI 摘要

该改动面向运行时由宿主提供 Dawn 的原生 WebGPU 场景,使 ONNX Runtime 无需配置完整 Dawn 源码,即可使用自身工具链编译与宿主版本匹配的 API 分发层。新增的 onnxruntime_DAWN_PREBUILT_DIR 接收公共及生成头文件和独立 proc 源码,并校验输入与选项组合;包模式跳过原生 Dawn 配置和捆绑 DXC 打包,同时保留现有源码构建路径,并记录包布局及宿主版本匹配约定。测试侧在禁用 CPU 回退的条件下验证 Abs 推理,共享库构建改为测试实际 ORT DLL,新增 Windows CI 则复用匹配的 API 包与原生宿主,重新构建 ORT DLL,并覆盖推理、缺失 proc 表和无效包场景。其主要收益是解除外部 Dawn 集成对捆绑构建及打包目标的依赖,改善原生宿主的集成兼容性;现有信息未提供性能基准或完整本地验证结果,无法据此判断 GPU 推理速度是否变化。

📁 Changed Files (9 files, 380 changes: +366/-14)
.github/workflows/windows_webgpu.yml
cmake/CMakeLists.txt
cmake/external/onnxruntime_external_deps.cmake
cmake/onnxruntime_providers_webgpu.cmake
cmake/onnxruntime_unittests.cmake
docs/WebGPU_External_Dawn.md
onnxruntime/test/webgpu/external_dawn/main.cc
tools/ci_build/github/windows/package_external_dawn.py
tools/ci_build/github/windows/package_external_dawn_test.py
🤖 AI 摘要

此改动修复 CUDA GroupQueryAttention 在启用旋转位置编码并传入显式位置时,融合 FlashDecoding 路径仍按缓存偏移推导旋转表索引、未使用显式位置的问题。实现上在快速解码的临时缓冲区大小计算和序列长度准备之前排除这类输入,改走已有的支持显式位置的 PrepareQKV 加 FlashAttention 路径,同时保留隐式位置和未启用旋转编码输入的原有快速路径资格,不新增位置比较所需的设备到主机传输。新增确定性算子回归测试,通过独立标量参考、共享缓存别名检查和 K/V 缓存逐位精确断言,覆盖位置偏移、不同批大小、部分及完整旋转维度、两种旋转配对布局和多 token 对照场景。实际修改仅涉及 CUDA 实现及算子测试,不直接改变 WebGPU 后端;受影响输入不再使用融合快速解码路径,但缺少性能基准,无法量化其性能影响。

📁 Changed Files (2 files, 416 changes: +415/-1)
onnxruntime/contrib_ops/cuda/bert/group_query_attention.cc
onnxruntime/test/contrib_ops/group_query_attention_position_test.cc
👤 GopalakrishnanN📅 Created: 09/29/2026
🤖 AI 摘要

该 PR 将 Attention 的 Q/K/V、权重形状、投影尺寸及缓存长度校验统一到预打包与执行路径,减少初始化阶段与动态执行阶段的校验差异,并在算子文档中明确投影维度要求。实现上为打包和 GEMM 尺寸计算增加边界检查,保留剪枝及 V 投影维度不等于 Q/K 的布局支持,同时使 CPU 投影路径支持省略 bias。改动主要集中在 CPU Attention、共享校验逻辑和 MLAS,CUDA 与 WebGPU 仅有少量配套调整;现有信息不足以确认 WebGPU 的具体行为变化,也没有性能基准支持吞吐或延迟改善的结论。测试覆盖初始化校验、动态未打包执行、共享预打包和维度边界,并在 Windows CPU Release 及禁用异常的最小构建中通过相关验证,增强了非法维度处理与不同构建配置下的可靠性。

📁 Changed Files (13 files, 699 changes: +575/-124)
cmake/onnxruntime_unittests.cmake
docs/ContribOperators.md
onnxruntime/contrib_ops/cpu/bert/attention.cc
onnxruntime/contrib_ops/cpu/bert/attention_base.h
onnxruntime/contrib_ops/cpu/bert/attention_validation.h
onnxruntime/contrib_ops/cuda/bert/attention.cc
onnxruntime/contrib_ops/webgpu/bert/attention.cc
onnxruntime/core/graph/contrib_ops/bert_defs.cc
onnxruntime/core/mlas/lib/sgemm.cpp
onnxruntime/test/contrib_ops/attention_op_test.cc
onnxruntime/test/contrib_ops/attention_validation_test.cc
onnxruntime/test/contrib_ops/quantize_attention_op_test.cc
onnxruntime/test/mlas/unittest/test_fgemm.cpp
👤 Mrmaxmeier📅 Created: 09/29/2026
🤖 AI 摘要

该改动修复 ONNX Runtime WebGPU 后端在复用 GPU 缓冲区时的执行顺序问题:CPU EP 输出通过 queue.writeBuffer 上传时,可能先于尚未提交的 GPU 指令生效,覆盖这些指令仍需读取的输入。实现上在 WebGpuBackend.upload() 写入前调用 flush(),与 download() 的处理保持一致,确保已记录的指令先提交;该操作不以 pendingDispatchNumber 为条件,因为 memcpy() 也会向编码器记录命令,却不计入 dispatch 数量。没有打开的命令编码器时 flush() 会直接返回,因此会话创建阶段的上传不受影响,推理期间每次 CPU EP 输出上传最多增加一次 queue.submit,但具体性能影响尚无基准数据支持。配套新增了 CPU 输出上传场景的浏览器端到端测试脚本和 ONNX 模型,并接入测试配置,用于回归验证这一 CPU/WebGPU 混合执行场景。

📁 Changed Files (5 files, 37 changes: +37/-0)
js/web/lib/wasm/jsep/backend-webgpu.ts
js/web/test/e2e/browser-test-webgpu-cpu-output-upload.js
js/web/test/e2e/karma.conf.js
js/web/test/e2e/model_cpu_output_upload.onnx
js/web/test/e2e/run-data.js
👤 SharmaRithik📅 Created: 09/29/2026
🤖 AI 摘要

该改动为 ONNX Runtime WebGPU 的 FP16 MatMul 增加 16×16×16 subgroup matrix 配置,使支持该配置的 NVIDIA 和 AMD GPU 能使用矩阵硬件,而不再回退到较慢的通用内核,同时保留 Intel 的 8×16×16 路径。实现上复用现有 subgroup matrix 内核并调整 WGSL 模板,对新配置将 B 矩阵列数补齐至 8 的倍数,以满足 Vulkan 协作矩阵加载所需的 16 字节行对齐,并同步更新 MatMul 测试和模板生成结果。在 Linux Vulkan 环境下,Qwen3-0.6B FP16 模型处理 512-token 提示词的 prefill 测试中,RTX 5080 的延迟从 121.7 ms 降至 103.3 ms,RX 7900 XT 从 305.0 ms 降至 283.3 ms,对应加速比分别约为 1.179 倍和 1.077 倍。收益依赖设备支持相应的 subgroup matrix 配置,现有数据不足以推断其他模型、输入规模或图形后端上的表现。

📁 Changed Files (10 files, 145 changes: +79/-66)
onnxruntime/core/providers/webgpu/math/subgroup_matrix_matmul.cc
onnxruntime/core/providers/webgpu/math/subgroup_matrix_matmul_8x16x16.wgsl.template
onnxruntime/core/providers/webgpu/math/subgroup_matrix_matmul_pad_b.wgsl.template
onnxruntime/test/providers/webgpu/math/matmul_test.cc
tools/python/wgsl_template/test/in_tree_golden/static-cpp-literal/generated/math/subgroup_matrix_matmul_8x16x16.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp-literal/generated/math/subgroup_matrix_matmul_pad_b.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp-literal/index_impl.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/math/subgroup_matrix_matmul_8x16x16.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/math/subgroup_matrix_matmul_pad_b.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/index_impl.h