ONNX Runtime WebGPU PR Monitor

Last Updated: 10/10/2026, 09:19 PM | Total: 607 PRs

Showing 1-10 of 100 PRs
Page 1 of 10
👤 Jiawei-Shao📅 Created: 10/10/2026
🤖 AI 摘要

该改动针对 ONNX Runtime WebGPU 执行提供程序中的 im2col_matmul 内核,在支持 subgroup-size-control 扩展时启用现有的 subgroupShuffle 优化路径。实现涉及 C++ 侧内核配置与 WGSL 着色器模板,通过固定该内核的 subgroup 大小,满足这条优化路径对 subgroup 大小的要求,使其能够安全启用。该优化以扩展支持为前提,不能据此认为所有 WebGPU 设备都会受益;现有信息也未说明具体固定大小及不支持扩展时的回退细节。PR 报告 sd-turbo-vae-decoder-fp16-demo.onnx 和 sd-turbo-unet-fp16-demo.onnx 的性能分别提升 5.2% 和 2.2%,但未提供测试硬件与运行环境,因此这些收益不宜直接推广到其他设备或模型。

📁 Changed Files (2 files, 32 changes: +26/-6)
onnxruntime/core/providers/webgpu/nn/im2col_matmul.cc
onnxruntime/core/providers/webgpu/nn/im2col_matmul.wgsl.template
👤 qjia7📅 Created: 10/10/2026
🤖 AI 摘要

该改动修复了 Python 在 WebGPU 插件宿主中创建执行提供程序(EP)时的工厂选择问题,避免以 `--use_webgpu shared_lib --build_wheel` 构建时引用不可用的内置工厂而导致 Windows 链接失败,并修正按 provider 名称选择时无法进入已注册插件路径的问题。原生修改仅限 WebGPU 分支:仅在内置实现被编译进来时使用内置工厂,否则非最小化宿主改用现有的已注册设备工厂辅助函数,保留原有内置模式行为。插件冒烟测试覆盖从已注册库选择设备、禁用 CPU 回退、验证推理结果和 provider 选项,以及在注销库前释放会话,并配套调整 Windows CI 和使用文档。最低运行时兼容性测试仍使用 `SessionOptions.add_provider_for_devices`,版本下限保持为 1.30.1,另通过环境变量启用按 provider 名称创建的测试;这些改动主要改善插件加载与构建兼容性,未提供 GPU 内核或性能基准变更,不能据此推断推理加速。

📁 Changed Files (4 files, 90 changes: +78/-12)
.github/workflows/windows_webgpu.yml
onnxruntime/python/onnxruntime_pybind_state.cc
plugin-ep-webgpu/python/README.md
plugin-ep-webgpu/python/test/test_webgpu_plugin_ep.py
👤 kunal-vaishnavi📅 Created: 10/09/2026
🤖 AI 摘要

该 PR 面向 MTP 稀疏注意力的索引复用场景,新增 PackedSparseAttentionIndexerMerge,将基础索引与额外索引合并,并为其提供 CUDA、WebGPU 实现及算子文档。接口层同步扩展算子 schema、输入输出槽位和内核注册,支持共享索引以及合并后的索引、计数和状态输出,并支持合并张量的原地操作。现有 CUDA Indexer 新增 indexshare_mode、max_output_entries 和 indexshare_state_policy,分别控制索引共享、统一输出形状与 QSA/CSA 内核容量参数,以及 CSA 状态推进和共享策略,同时校验不兼容的接口用法。WebGPU 侧明确新增了合并算子,但现有信息不足以确认其 Indexer 是否具备与 CUDA 相同的共享能力;索引复用和原地合并有望减少重复计算与内存开销,但缺少性能基准,无法量化收益。

📁 Changed Files (21 files, 1286 changes: +1246/-40)
docs/ContribOperators.md
docs/OperatorKernels.md
docs/contrib_ops/PackedSparseAttentionIndexerMerge.md
onnxruntime/contrib_ops/cpu/sparse/packed_sparse_attention_indexer_common.h
onnxruntime/contrib_ops/cpu/sparse/packed_sparse_attention_indexer_merge_common.h
onnxruntime/contrib_ops/cuda/cuda_contrib_kernels.cc
onnxruntime/contrib_ops/cuda/sparse/packed_sparse_attention_indexer.cc
onnxruntime/contrib_ops/cuda/sparse/packed_sparse_attention_indexer.h
onnxruntime/contrib_ops/cuda/sparse/packed_sparse_attention_indexer_impl.cu
onnxruntime/contrib_ops/cuda/sparse/packed_sparse_attention_indexer_impl.h
onnxruntime/contrib_ops/cuda/sparse/packed_sparse_attention_indexer_merge.cc
onnxruntime/contrib_ops/cuda/sparse/packed_sparse_attention_indexer_merge_impl.cu
onnxruntime/contrib_ops/cuda/sparse/packed_sparse_attention_indexer_merge_impl.h
onnxruntime/contrib_ops/webgpu/bert/packed_sparse_attention_indexer.cc
onnxruntime/contrib_ops/webgpu/bert/packed_sparse_attention_indexer_merge.cc
onnxruntime/contrib_ops/webgpu/bert/packed_sparse_attention_indexer_merge.h
onnxruntime/contrib_ops/webgpu/webgpu_contrib_kernels.cc
onnxruntime/core/graph/contrib_ops/bert_defs.cc
onnxruntime/core/graph/contrib_ops/ms_opset.h
onnxruntime/test/contrib_ops/packed_sparse_attention_indexer_merge_op_test.cc
onnxruntime/test/contrib_ops/packed_sparse_attention_indexer_op_test.cc
👤 aciddelgado📅 Created: 10/08/2026
🤖 AI 摘要

该 PR 为 ONNX Runtime 新增 com.microsoft::GatedDeltaNetStateReplay v1 contrib 算子,可直接在 WebGPU 上回放已捕获的 GatedDeltaNet 状态转移,为部分接受场景重建循环状态,无需将状态下载到 CPU。实现采用每个状态元素一个调用、每个工作组 128 个线程,按保留的前缀长度依次执行衰减和 key×delta 累加,并通过头索引映射支持不同的 key/value 头数。算子复用 ProgramBase、ComputeContext 和 BufferView,支持无需满足存储缓冲区绑定对齐要求的逻辑偏移;当前范围限定为单请求、单描述符及 FP32 状态和 capsule 底层张量,由 CPU 元数据提供偏移、头几何、原始捕获容量和保留步数。改动还补齐了算子 schema、opset 与 WebGPU 内核注册、文档及相关测试;避免状态回传有望降低传输和同步开销,但现有信息未提供性能基准或测试运行结果,无法确认具体加速幅度。

📁 Changed Files (11 files, 1034 changes: +1034/-0)
docs/ContribOperators.md
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net_state_replay.cc
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net_state_replay.h
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net_state_replay.wgsl.template
onnxruntime/contrib_ops/webgpu/webgpu_contrib_kernels.cc
onnxruntime/core/graph/contrib_ops/bert_defs.cc
onnxruntime/core/graph/contrib_ops/ms_opset.h
onnxruntime/core/providers/webgpu/compute_context.h
onnxruntime/core/providers/webgpu/ep/README.md
onnxruntime/test/contrib_ops/gated_delta_net_op_test.cc
onnxruntime/test/contrib_ops/gated_delta_net_state_replay_op_test.cc
👤 prathikr📅 Created: 10/08/2026
🤖 AI 摘要

该 PR 旨在减少 Qwen GatedDeltaNet 在 WebGPU 上执行 A/B 门控投影时的算子与调度开销;从修改路径看,核心涉及算子接口、WebGPU 实现、着色器和测试,并非通用 LayerNorm 融合。实现通过新增可选 gate_projections 输入接收打包的 FP16 A/B 投影结果,在着色器内转换为 FP32,门控计算和循环状态仍保持 FP32,同时保留现有分块预填充与循环解码内核。PR 描述称配套 ONNX 重写可移除 48 个 MatMul 和 96 个 Cast 节点且不引入 Split 调度,并通过避免不必要的 QKV 拷贝,使满足条件的路径继续使用向量化循环读写。原有模型保持兼容,融合后的模型需要更新 ORT 主机运行时和 WebGPU 执行提供程序,无需修改 GenAI;验证中 24 项测试全部通过,首层投影在 1 行和 256 行输入下逐位一致,但缺少具体延迟、吞吐量及对照基线,无法量化实际性能收益。

📁 Changed Files (7 files, 184 changes: +165/-19)
docs/ContribOperators.md
docs/OperatorKernels.md
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_params.wgsl.template
onnxruntime/core/graph/contrib_ops/bert_defs.cc
onnxruntime/test/contrib_ops/gated_delta_net_op_test.cc
👤 gyagp📅 Created: 10/08/2026
🤖 AI 摘要

该改动在 ONNX Runtime 算子测试框架中增加显式启用的 FP16 能力跳过机制,使设备缺少 ShaderF16 时可跳过 WebGPU 执行,同时继续测试其他执行提供程序,仅当没有任何提供程序能够执行时才将整个测试标记为跳过。实现覆盖会话初始化、权重预打包和执行阶段,且只识别预期成功的 WebGPU 测试中由共享着色器生成器报告的能力错误,不改变预期失败、无关错误或未启用该机制的测试行为。现有 FP16 Conv 和 ConvTranspose 测试辅助函数已接入该机制,输入、容差和排除的执行提供程序列表保持不变,并新增六个回归用例,其中包含禁用 ShaderF16 的真实原生 WebGPU 设备,且为该设备启用了上游原生 ORT 所需的 ImplicitDeviceSynchronization。该 PR 将 FP16 测试能力处理从 ConvTranspose3D 支持工作中独立出来,改善无 ShaderF16 设备上的测试兼容性;所提供信息未涉及算子计算实现或性能测量,不能据此推断推理性能提升。

📁 Changed Files (5 files, 232 changes: +232/-0)
onnxruntime/test/providers/cpu/nn/conv_fp16_test.cc
onnxruntime/test/providers/cpu/nn/conv_transpose_op_test.cc
onnxruntime/test/providers/webgpu/fp16_capability_test.cc
onnxruntime/test/unittest_util/base_tester.cc
onnxruntime/test/unittest_util/base_tester.h
👤 danielsongmicrosoft📅 Created: 10/07/2026
🤖 AI 摘要

该改动修复了 ONNX Runtime WebGPU GEMM 在调度网格归一化后,额外工作组可能超出逻辑批次范围并继续执行的问题。在 GEMM 公共实现中,重建逻辑工作组 z 索引后增加边界检查,当索引超出 `logical_dispatch_z` 的有效范围时立即返回,阻止无效工作组继续参与计算。新增的 70,000 批次 MatMul 回归用例专门覆盖归一化调度产生多余工作组的场景,以验证不会访问超出批次范围的数据。验证包括 WebGPU provider 的 RelWithDebInfo 构建、该回归测试及格式检查;改动主要提升大批量推理的正确性,现有信息未提供性能基准或跨设备兼容性测试结果。

📁 Changed Files (2 files, 5 changes: +5/-0)
onnxruntime/core/providers/webgpu/math/gemm_utils.cc
onnxruntime/test/providers/webgpu/matmul_large_test.cc
👤 mustjab📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 为可选 LoRA 增加默认关闭的图融合优化,通过 optimization.enable_matmul_nbits_lora_fusion=1 启用,将符合条件的量化投影与 LoRA 子图融合为 com.microsoft.MatMulNBitsLora,避免空秩适配器仍执行额外的 MatMul 和 Add。实现涵盖算子定义、图优化器及 CPU/WebGPU 内核:秩为零时仅运行基础量化投影,启用适配器时仍保留两次低秩 MatMul 和独立的增量加法,因此并非将活跃 LoRA 的全部计算合并成单个 GPU 内核。支持范围为 CPU FP32 和原生 WebGPU FP32/FP16,融合要求执行提供程序与数据类型兼容、可覆盖的默认适配器张量为空且中间结果仅被单处使用,同时保留适配器输入名称和模型元数据,不修改量化权重,也不引入 ONNX 控制流。新增回归测试覆盖执行、向量输入、融合限制与显式启用行为;预期收益主要是减少无适配器时的冗余计算和调度,但所给验证描述不完整且缺少性能数据,无法确认具体加速幅度或完整验证范围。

📁 Changed Files (18 files, 1228 changes: +1222/-6)
docs/ContribOperators.md
docs/OperatorKernels.md
docs/design/optional_quantized_lora_mul_add.md
include/onnxruntime/core/session/onnxruntime_session_options_config_keys.h
onnxruntime/contrib_ops/cpu/cpu_contrib_kernels.cc
onnxruntime/contrib_ops/cpu/quantization/lora_mul_add_helper.h
onnxruntime/contrib_ops/cpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits.h
onnxruntime/contrib_ops/webgpu/webgpu_contrib_kernels.cc
onnxruntime/core/graph/contrib_ops/contrib_defs.cc
onnxruntime/core/optimizer/graph_transformer_utils.cc
onnxruntime/core/optimizer/matmul_nbits_fusion.cc
onnxruntime/core/optimizer/matmul_nbits_fusion.h
onnxruntime/core/providers/webgpu/quantization/quantize_linear.cc
onnxruntime/test/contrib_ops/lora_mul_add_test.cc
onnxruntime/test/optimizer/lora_mul_add_fusion_test.cc
onnxruntime/test/providers/webgpu/tensor/quantize_linear_test.cc
👤 mustjab📅 Created: 10/07/2026
🤖 AI 摘要

该改动修复 ONNX MatMul 内维度 K 为零但输出非空时,WebGPU 因绑定空 A/B 张量的空 GPU 缓冲区而触发验证错误或生成无效绑定组的问题,覆盖可选零秩 LoRA 默认值等场景。实现上在矩阵乘算法选择前处理 K=0:输出为空时跳过 GPU 调度,输出非空时直接写入零,或计算已有偏置及融合激活的结果,避免绑定空输入,非零 K 的执行路径保持不变。回归测试覆盖 FP32/FP16、批量广播、向量与标量、空输出及图捕获重放;transpose 路径也有配套修改,但现有信息不足以确定其具体处理逻辑。该修复提升了边界形状下的兼容性,并已在 Windows RTX 4070 上启用完整 WebGPU 验证和图捕获通过 FP16 集成检查,但未提供性能基准,不能据此判断常规矩阵乘的性能变化。

📁 Changed Files (9 files, 548 changes: +534/-14)
onnxruntime/core/providers/cpu/math/matmul.cc
onnxruntime/core/providers/cpu/math/matmul_helper.h
onnxruntime/core/providers/webgpu/math/matmul.cc
onnxruntime/core/providers/webgpu/quantization/quantize_linear.cc
onnxruntime/core/providers/webgpu/tensor/transpose.cc
onnxruntime/test/providers/cpu/math/matmul_test.cc
onnxruntime/test/providers/webgpu/graph_capture_test_utils.h
onnxruntime/test/providers/webgpu/matmul_large_test.cc
onnxruntime/test/providers/webgpu/tensor/quantize_linear_test.cc
👤 gyagp📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 重构 ONNX Runtime 原生 WebGPU 的着色器缓存键生成机制,将特化配置与缓存标识统一为声明式配置,并自动纳入张量和流水线元数据,避免不兼容的调用错误复用同一流水线,迁移范围覆盖全部 187 类原生程序生成器,包括多种注意力与有状态算子。实现上移除手工缓存提示和 Type/Rank 选择接口,为静态生成器提供受限辅助接口,并通过编译期约束标识不可变静态代码片段,同时保留现有 ready/pending 缓存和静态形状特化,不引入第二套流水线缓存。缓存命中时不生成 WGSL,Min/Max/Pow 辅助代码及 Einsum 符号推导也仅在未命中时执行,旨在提高缓存正确性并避免热路径上的代码生成开销,但未提供性能基准来量化收益。此外,该 PR 修复 BiasSplitGelu 中独立的 FP16 除法类型错误,补充编译与源码检查、框架及 GPU 回归测试,并让生成器变更触发 CMake 增量构建失效;已报告 Windows 原生 Release 测试程序和 Python 绑定构建成功,5,440 个唯一测试用例通过、280 个跳过,但未提供跨平台或不同 GPU 的验证结果。

📁 Changed Files (30 files, 14059 changes: +7895/-6164)
.github/workflows/wgsl_template_tests.yml
cmake/onnxruntime_providers_webgpu.cmake
docs/design/webgpu_shader_cache.md
onnxruntime/contrib_ops/webgpu/bert/attention.cc
onnxruntime/contrib_ops/webgpu/bert/attention.h
onnxruntime/contrib_ops/webgpu/bert/bias_add.cc
onnxruntime/contrib_ops/webgpu/bert/bias_add.h
onnxruntime/contrib_ops/webgpu/bert/bias_gelu.cc
onnxruntime/contrib_ops/webgpu/bert/bias_gelu.h
onnxruntime/contrib_ops/webgpu/bert/bias_split_gelu.cc
onnxruntime/contrib_ops/webgpu/bert/bias_split_gelu.h
onnxruntime/contrib_ops/webgpu/bert/branchwise_rms_norm.cc
onnxruntime/contrib_ops/webgpu/bert/branchwise_rms_norm.h
onnxruntime/contrib_ops/webgpu/bert/causal_conv_with_state.cc
onnxruntime/contrib_ops/webgpu/bert/causal_conv_with_state.h
onnxruntime/contrib_ops/webgpu/bert/dynamic_sparse_attention.cc
onnxruntime/contrib_ops/webgpu/bert/dynamic_sparse_attention.h
onnxruntime/contrib_ops/webgpu/bert/engram_gate.cc
onnxruntime/contrib_ops/webgpu/bert/engram_gate.h
onnxruntime/contrib_ops/webgpu/bert/fast_gelu.cc
onnxruntime/contrib_ops/webgpu/bert/fast_gelu.h
onnxruntime/contrib_ops/webgpu/bert/flash_attention.cc
onnxruntime/contrib_ops/webgpu/bert/flash_attention.h
onnxruntime/contrib_ops/webgpu/bert/gated_add.cc
onnxruntime/contrib_ops/webgpu/bert/gated_add.h
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.cc
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.h
onnxruntime/contrib_ops/webgpu/bert/group_query_attention.cc
onnxruntime/contrib_ops/webgpu/bert/group_query_attention.h
onnxruntime/contrib_ops/webgpu/bert/hadamard_transform.cc