ONNX Runtime WebGPU PR Monitor

Last Updated: 03/17/2026, 07:04 PM | Total: 148 PRs

Showing 1-10 of 24 PRs
Page 1 of 3
👤 edgchen1📅 Created: 03/17/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 修复了 WebGPU 后端中 DequantizeLinear 算子的两个关键问题,提升了算子的鲁棒性和正确性。 **解决的问题:** 1. 修复了当 `component=4` 时,输出张量最后一维无法被 component 整除导致的形状错误。通过在输出定义中添加 `ProgramOutput::Flatten` 来扁平化处理,避免了形状约束冲突。 2. 修复了分块量化(blocked quantization)路径中零点(zero point)的处理错误,确保反量化计算的准确性。 **技术要点:** 主要修改集中在 `quantize_linear.cc` 的实现逻辑和测试用例的完善上,通过更灵活的形状处理和正确的零点应用,增强了 WebGPU 量化算子在各种输入场景下的兼容性。

📁 Changed Files (2 files, 79 changes: +64/-15)
js/web/test/data/ops/dequantizelinear.jsonc
onnxruntime/core/providers/webgpu/quantization/quantize_linear.cc
👤 fs-eire📅 Created: 03/17/2026
🤖 AI 摘要

## PR 总结 ### 主要改动 这是一个针对 ONNX Runtime WebGPU 后端构建配置的修复,修正了 CMake 构建文件中 `DAWN_ENABLE_VULKAN` 和 `DAWN_ENABLE_D3D12` 两个宏定义的条件判断逻辑。 ### 解决的问题 修复了 Dawn(WebGPU 的底层实现)编译时 Vulkan 和 D3D12 后端启用条件的错误配置,确保在正确的平台和配置下启用相应的图形 API 后端。 ### 对 WebGPU 支持的影响 该修复直接影响 WebGPU 在 Windows(D3D12)和 Linux/Android(Vulkan)平台上的正确编译和运行,确保 ONNX Runtime 能够在这些平台上正确使用原生图形 API 加速。 ### 技术要点 改动仅涉及 2 行条件判断逻辑的修正,属于关键的构建配置修复,虽小但对跨平台 WebGPU 支持至关重要。

📁 Changed Files (1 files, 4 changes: +2/-2)
cmake/CMakeLists.txt
👤 qjia7📅 Created: 03/17/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 修复了多会话共享 WebGPU 设备时的性能分析事件归属错误问题。 **解决的问题:** 之前所有会话的 GPU 性能分析事件都累积在单一的共享向量中,导致最后调用 `EndProfiling()` 的会话会收集到所有会话的事件。这在 Whisper 等编码器-解码器模型中表现为:编码器的性能追踪文件中没有 GPU 事件,而解码器的文件却包含了两个会话的所有事件。 **技术实现:** 将共享的 `events_` 向量重构为 `per_session_events_` 映射表,以性能分析器指针为键区分不同会话。`CollectProfilingData()` 现在接受分析器键参数来正确存储事件,`EndProfiling()` 仅返回属于请求会话的事件,实现了会话级别的性能数据隔离。 **影响范围:** 确保在同一 WebGPU 设备上运行多个 ONNX Runtime 会话时,性能分析数据能够正确归属到各自的会话,提升了多模型场景下的调试和性能分析能力。

📁 Changed Files (4 files, 36 changes: +22/-14)
onnxruntime/core/providers/webgpu/webgpu_context.cc
onnxruntime/core/providers/webgpu/webgpu_context.h
onnxruntime/core/providers/webgpu/webgpu_execution_provider.cc
onnxruntime/core/providers/webgpu/webgpu_profiler.cc
🤖 AI 摘要

## PR 主要改动总结 ### 1. 主要功能 为 `QMoE`(量化混合专家模型)算子新增可选输入 `router_weights`(索引14),将专家选择和输出聚合的路由逻辑解耦。当提供该输入时,`router_probs` 仅用于 Top-K 专家选择,而 `router_weights` 用于混合权重计算。 ### 2. 解决的问题 实现了更灵活的路由机制:允许专家选择标准与输出聚合权重分离,支持归一化/非归一化路由权重选项。保持向后兼容性——未提供新输入时沿用原有 softmax 行为。 ### 3. WebGPU 影响 WebGPU 提供者添加了参数检测逻辑,当提供 `router_weights` 输入时会抛出"未实现"错误,表明该特性暂未在 WebGPU 后端实现,但不影响现有功能。 ### 4. 技术要点 CPU 实现支持 MLFloat16/float 类型,新增 86 行单元测试覆盖归一化和非归一化路径;CUDA 和 WebGPU 暂时仅添加防护检查,核心实现集中在 CPU 提供者(+73 行代码)。

📁 Changed Files (7 files, 200 changes: +183/-17)
docs/ContribOperators.md
docs/OperatorKernels.md
onnxruntime/contrib_ops/cpu/moe/moe_quantization_cpu.cc
onnxruntime/contrib_ops/cuda/quantization/moe_quantization.cc
onnxruntime/contrib_ops/webgpu/moe/qmoe.cc
onnxruntime/core/graph/contrib_ops/contrib_defs.cc
onnxruntime/test/contrib_ops/moe_test.cc
👤 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
🤖 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