ONNX Runtime WebGPU PR Monitor

Last Updated: 03/16/2026, 07:02 PM | Total: 144 PRs

Showing 1-10 of 21 PRs
Page 1 of 3
👤 Jiawei-Shao📅 Created: 03/16/2026
🤖 AI 摘要

## PR 主要改动总结 **1. 主要功能改动:** 将 `is_channels_last` 参数从必需参数改为 `std::optional` 可选参数,涉及 MatMul、GEMM、Attention 和 Conv 等算子的实现。 **2. 解决的问题:** 解决了当 `bias` 参数未使用时,仍需为 `is_channels_last` 传递无意义值的问题,消除了代码中的歧义和冗余。使用 `std::optional` 后,在不需要该参数时可以安全地忽略它,提高了代码可读性和维护性。 **3. 对 WebGPU 的影响:** 此 PR 启用了 MatMul 算子的 Split-K 优化路径,可能提升 WebGPU 后端的矩阵乘法性能。 **4. 技术要点:** 修改涵盖 13 个文件(净增 19 行代码),主要集中在数学运算相关模块(matmul、gemm)和神经网络算子(attention、conv),通过类型系统改进简化了参数传递逻辑。

📁 Changed Files (13 files, 129 changes: +74/-55)
onnxruntime/contrib_ops/webgpu/bert/attention.cc
onnxruntime/core/providers/webgpu/math/gemm_packed.cc
onnxruntime/core/providers/webgpu/math/gemm_utils.cc
onnxruntime/core/providers/webgpu/math/gemm_utils.h
onnxruntime/core/providers/webgpu/math/matmul.cc
onnxruntime/core/providers/webgpu/math/matmul.h
onnxruntime/core/providers/webgpu/math/matmul_packed.cc
onnxruntime/core/providers/webgpu/math/matmul_packed.h
onnxruntime/core/providers/webgpu/nn/conv.cc
onnxruntime/core/providers/webgpu/vendor/intel/math/matmul.cc
onnxruntime/core/providers/webgpu/vendor/intel/math/matmul.h
onnxruntime/core/providers/webgpu/webgpu_utils.cc
onnxruntime/core/providers/webgpu/webgpu_utils.h
ep:WebGPU
🤖 AI 摘要

## PR 主要改动总结 **1. 主要功能:** 为 `com.microsoft.MoE` 和 `com.microsoft.QMoE` 算子添加了 ReLU² (relu_squared) 激活函数支持,涉及 CPU 和 WebGPU 两个后端的实现。 **2. 解决问题:** 支持使用 relu² 激活函数的 Nemotron 系列模型(如 NVIDIA-Nemotron-3-Nano-30B),使这些模型能够在 ONNX Runtime 中正确运行 MoE (Mixture of Experts) 层。 **3. WebGPU 影响:** 新增了 `activation.wgsl.template` 着色器模板文件,实现了 WebGPU 版本的 relu² 激活函数计算;更新了 `qmoe.cc` 中的 WebGPU kernel 以支持新的激活类型。 **4. 技术要点:** 修改涵盖算子定义、CPU/WebGPU 实现、工具函数和测试用例;代码新增 139 行,删除 8 行;PR 中还提到需要进一步确定命名规范(relu2 vs relu_squared)并添加 CUDA 支持。

📁 Changed Files (9 files, 147 changes: +139/-8)
docs/ContribOperators.md
onnxruntime/contrib_ops/cpu/moe/moe_base_cpu.h
onnxruntime/contrib_ops/cpu/moe/moe_utils.cc
onnxruntime/contrib_ops/webgpu/moe/activation.wgsl.template
onnxruntime/contrib_ops/webgpu/moe/moe.h
onnxruntime/contrib_ops/webgpu/moe/moe_base.h
onnxruntime/contrib_ops/webgpu/moe/qmoe.cc
onnxruntime/core/graph/contrib_ops/contrib_defs.cc
onnxruntime/test/contrib_ops/moe_test.cc
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 引入了融合的 `DivCeil` 算子来解决 WebGPU 中 Div(除法)和 Ceil(向上取整)组合操作的精度问题。 **解决问题:** 修复了 issue #27661 中报告的除法精度问题。与之前的 PR #27662 不同,此方案通过新增融合算子而非修改现有 Div 算子来解决问题,避免了对现有功能的影响。 **技术实现:** 添加了图优化转换器 `DivCeilFusion`,能够自动识别 Div+Ceil 的模式并将其融合为单一的 `DivCeil` 算子;同时在 WebGPU 后端实现了该融合算子的执行逻辑,通过一次计算完成除法和向上取整,消除中间精度损失。 **WebGPU 影响:** 提升了 WebGPU 执行提供程序的数值计算精度和性能,特别是在涉及除法后需要向上取整的场景(如张量维度计算)中更加可靠。

📁 Changed Files (8 files, 163 changes: +163/-0)
onnxruntime/contrib_ops/webgpu/div_ceil.cc
onnxruntime/contrib_ops/webgpu/div_ceil.h
onnxruntime/contrib_ops/webgpu/webgpu_contrib_kernels.cc
onnxruntime/core/graph/contrib_ops/contrib_defs.cc
onnxruntime/core/graph/contrib_ops/ms_opset.h
onnxruntime/core/optimizer/div_ceil_fusion.cc
onnxruntime/core/optimizer/div_ceil_fusion.h
onnxruntime/core/optimizer/graph_transformer_utils.cc
👤 xenova📅 Created: 03/15/2026
🤖 AI 摘要

## ONNX Runtime WebGPU 除法精度修复 **主要改动:** 修复了 WebGPU 后端中浮点数除法的精度问题。当 GPU 执行 f32 类型除法时,即使是精确的整数商也可能产生微小的 ULP(最小精度单位)误差,例如 165.0/15.0 可能得到 11.000001 而非 11.0。 **解决的问题:** 这种精度偏差在后续使用 Ceil 等运算时会导致错误结果(如 Granite Speech 模型中出现的问题)。通过在操作数可被精确整除时对结果进行舍入处理来修正此问题。 **技术实现:** 在 `binary_elementwise_ops.cc` 文件中添加了 17 行代码,对除法运算结果进行条件舍入,确保整数除法的精确性,从而避免后续数学运算的误差累积。 **影响范围:** 修复了 issue #27661,提升了 WebGPU 后端在处理需要精确除法结果的模型(如语音处理模型)时的计算准确性。

📁 Changed Files (1 files, 16 changes: +15/-1)
onnxruntime/core/providers/webgpu/math/binary_elementwise_ops.cc
👤 fs-eire📅 Created: 03/13/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 修复了 ONNX Runtime 在使用 WebGPU 后端(通过 emdawnwebgpu)时的设备丢失处理器(device lost handler)bug。 **解决的问题:** 当 WebGPU 设备丢失时,原有的异步处理器会导致程序意外退出。这是因为设备丢失回调是异步执行的,但没有正确的运行时保活机制,导致在回调执行前程序可能已经终止。 **技术实现:** 通过添加 Dawn 补丁文件(`dawn_device_lost_keepalive.patch`),为设备丢失处理器添加 `runtimeKeepalive` 支持,确保在异步回调执行期间保持运行时环境存活。这个补丁会在编译时自动应用到 Dawn 依赖库。 **WebGPU 影响:** 提升了 WebGPU 后端的稳定性和可靠性,防止在设备丢失等异常情况下出现非预期的程序崩溃,改善了用户体验。

📁 Changed Files (3 files, 79 changes: +79/-0)
cmake/external/onnxruntime_external_deps.cmake
cmake/patches/dawn/dawn_buffer_fix_injection.patch
cmake/patches/dawn/dawn_device_lost_keepalive.patch
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 修复了 WebGPU 会话释放后无法重新创建会话的问题。 **问题根源:** 当调用 `InferenceSession.release()` 释放 WebGPU 会话时,C++ 端会销毁 WebGPU 设备(当 `preserveDevice=false` 时),但 JavaScript 端的 `env.webgpu.device` 引用未被清除,导致持有已销毁设备的"僵尸引用",使得后续创建新会话失败并报错"Device was destroyed"。 **解决方案:** 在 `backend-webgpu.ts` 中添加设备丢失(device lost)事件监听,当设备被销毁时自动清除 JavaScript 端的陈旧设备引用,确保"创建→释放→再创建"的会话使用模式能够正常工作。 **技术要点:** 修改仅涉及 9 行代码添加,通过设备生命周期管理修复了 JavaScript 和 C++ 层之间的状态同步问题,对 Transformers.js V4 等需要动态加载/卸载模型的应用场景至关重要。

📁 Changed Files (1 files, 10 changes: +9/-1)
js/web/lib/wasm/jsep/backend-webgpu.ts
ep:WebGPU
🤖 AI 摘要

## PR 主要改动总结 **核心功能:** 此 PR 实现了允许 ONNX Runtime WebGPU 后端复用外部已有的 `GPUDevice` 实例,通过 `env.webgpu.device` 配置项传入。 **解决的问题:** 当 Web 应用已经拥有用于渲染的 `GPUDevice` 时,之前 ONNX Runtime 会创建第二个设备实例。由于两个 `GPUDevice` 无法共享 GPU 纹理,每次推理需要进行完整的 GPU→CPU→GPU 数据回传,造成同步阻塞和严重的帧率抖动。现在可以共享同一设备,避免昂贵的数据拷贝。 **技术实现:** 在会话创建时读取 `env.webgpu.device` 配置,验证其符合 ORT 所需的限制和特性要求,跳过内部的 `adapter.requestDevice()` 调用,并采用链式调用而非覆盖的方式处理 `onuncapturederror` 事件,确保与外部设备的错误处理兼容。 **影响:** 显著提升了 WebGPU 渲染场景下的推理性能,消除了设备隔离导致的性能瓶颈,使 ONNX Runtime 更适合集成到实时图形应用中。

📁 Changed Files (4 files, 101 changes: +78/-23)
js/common/lib/env.ts
js/web/lib/wasm/jsep/backend-webgpu.ts
js/web/lib/wasm/jsep/init.ts
js/web/lib/wasm/wasm-core-impl.ts
ep:WebGPU
👤 fs-eire📅 Created: 03/04/2026
🤖 AI 摘要

## PR 总结 **主要改动:** 此 PR 将 uint4 和 int4 数据类型重新添加回 ONNX Runtime 的 WebAssembly WebGPU 构建配置中。 **解决的问题:** 恢复了之前被移除的 4 位整数类型支持,确保 WebGPU 构建能够处理使用这些低精度数据类型的模型,这对于量化模型的推理至关重要。 **对 WebGPU 的影响:** 使 WebGPU 后端能够支持 4 位量化模型,这类模型在保持较好精度的同时大幅减少内存占用和提升推理速度,对于在浏览器端运行大型 AI 模型具有重要意义。 **技术要点:** 仅修改了一个配置文件(`reduced_types.config`),通过简单的一行改动即完成了类型支持的恢复,改动轻量且风险可控。

📁 Changed Files (1 files, 2 changes: +1/-1)
onnxruntime/wasm/reduced_types.config
👤 fs-eire📅 Created: 02/25/2026
🤖 AI 摘要

## PR 改动总结 **主要功能:** 为 ONNX Runtime 的 WebGPU 后端添加了 GQA (Grouped Query Attention) 的 softcap 支持。 **解决的问题:** 实现了注意力机制中的 softcap 功能,这是一种限制注意力分数数值范围的技术,通常用于稳定训练和提升模型性能。此次更新完成了 TODO 项,使得相关的 jsonc 测试用例得以启用。 **技术实现:** 主要修改集中在 Flash Attention 相关代码,包括在 WGSL 着色器模板中添加 softcap 计算逻辑,并在 C++ 层面扩展了参数传递和配置接口(如 `FlashAttentionParameters` 和 `FlashAttentionDecodeParams` 结构)。改动涉及注意力核心计算流程,确保 softcap 机制在 GPU 着色器中正确应用。 **影响:** 增强了 WebGPU 后端对现代 Transformer 模型优化技术的支持,提升了模型兼容性和推理质量。

📁 Changed Files (6 files, 90 changes: +65/-25)
onnxruntime/contrib_ops/webgpu/bert/attention.cc
onnxruntime/contrib_ops/webgpu/bert/attention.h
onnxruntime/contrib_ops/webgpu/bert/flash_attention.cc
onnxruntime/contrib_ops/webgpu/bert/flash_attention.h
onnxruntime/contrib_ops/webgpu/bert/flash_attention.wgsl.template
onnxruntime/contrib_ops/webgpu/bert/flash_attention_decode_qkt.wgsl.template
👤 Jiawei-Shao📅 Created: 01/30/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 这个 PR 从 WebGPU 执行提供程序(EP)的 `MatMul::ComputeInternal()` 函数中移除了所有处理 `bias`(偏置)相关的逻辑代码。 **解决的问题:** 由于 ONNX 的 `MatMul` 算子本身不支持 `bias` 作为输入参数,因此在实现中处理偏置的逻辑是冗余和不必要的。这次清理移除了 18 行代码,仅添加 3 行,简化了实现。 **对 WebGPU 支持的影响:** 这是一次代码清理优化,不影响功能正确性,反而使 WebGPU 后端的矩阵乘法实现更加精简和符合 ONNX 规范。 **技术要点:** 移除了 `has_bias` 相关的条件判断和处理分支,使代码逻辑更清晰,减少了不必要的复杂度。

📁 Changed Files (1 files, 21 changes: +3/-18)
onnxruntime/core/providers/webgpu/math/matmul.cc