ONNX Runtime WebGPU PR Monitor

Last Updated: 03/19/2026, 07:01 PM | Total: 152 PRs

Showing 1-10 of 25 PRs
Page 1 of 3
👤 kunal-vaishnavi📅 Created: 03/19/2026
🤖 AI 摘要

## PR 主要改动总结 **主要功能:** 此 PR 为 ONNX Runtime 添加了新的图优化融合 pass,将 `Add + SkipLayerNormalization` 子图融合为单个 `SkipLayerNormalization` 节点,支持将偏置(bias)作为第五个输入直接整合进去。 **解决的问题:** 针对 MatMul 后接 bias 加法再进行 SkipLayerNormalization 的常见模式进行优化,通过消除独立的 Add 节点简化计算图结构,提升推理性能,并扩展了更多执行提供器(execution providers)的支持范围。 **技术要点:** 实现了 `BiasSkipLayerNormFusion` 类来检测和融合特定模式(支持可选的 Cast 节点),在优化管道中注册并确保在标准 SkipLayerNorm 融合之后执行。新增 336 行融合逻辑代码和 312 行单元测试,确保优化的正确性。 **WebGPU 影响:** 虽然 PR 标题提到 WebGPU,但从描述和代码改动来看,这是一个通用的图优化改进,可以让包括 WebGPU 在内的多个执行提供器受益于更简洁的计算图。

📁 Changed Files (4 files, 694 changes: +693/-1)
onnxruntime/core/optimizer/bias_skip_layer_norm_fusion.cc
onnxruntime/core/optimizer/bias_skip_layer_norm_fusion.h
onnxruntime/core/optimizer/graph_transformer_utils.cc
onnxruntime/test/optimizer/graph_transform_test_layernorm.cc
👤 guschmue📅 Created: 03/18/2026
🤖 AI 摘要

## PR 主要改动总结 **核心功能:** 此 PR 为 ONNX Runtime 的 WebGPU 执行提供程序(EP)新增了两个关键的大语言模型(LLM)算子支持,并升级了现有算子的 ONNX opset 版本。 **新增特性:** 1. 实现了 **Rotary Embedding**(旋转位置编码)算子,这是 Transformer 模型中常用的位置编码方式 2. 实现了 **RMSNorm**(Root Mean Square Normalization)算子,这是现代 LLM(如 LLaMA)中广泛使用的归一化层 3. 将 **Reshape** 算子升级至 opset-25,**Transpose** 算子升级至 opset-24,以支持最新的 ONNX 标准 **技术影响:** 这些改动显著增强了 WebGPU 后端对大语言模型的支持能力,使得更多现代 Transformer 架构(尤其是开源 LLM)能够在 WebGPU 上高效运行,推进了浏览器端 AI 推理的发展。代码新增 354 行,主要集中在算子实现的核心逻辑上。

📁 Changed Files (7 files, 360 changes: +354/-6)
onnxruntime/core/providers/webgpu/llm/rotary_embedding.cc
onnxruntime/core/providers/webgpu/llm/rotary_embedding.h
onnxruntime/core/providers/webgpu/nn/rms_norm.cc
onnxruntime/core/providers/webgpu/nn/rms_norm.h
onnxruntime/core/providers/webgpu/tensor/reshape.cc
onnxruntime/core/providers/webgpu/tensor/transpose.cc
onnxruntime/core/providers/webgpu/webgpu_execution_provider.cc
ep:WebGPU
👤 Copilot📅 Created: 03/18/2026
🤖 AI 摘要

## PR 主要改动总结 ### 核心改动 此 PR 更新了 CUDA 后端的 TopK 算子注册机制,将原本仅支持 opset 11 的开放式注册拆分为两部分:opset 11-23 的版本化注册和 opset 24 的新开放式注册。 ### 解决的问题 修复了 CUDA TopK 算子版本不匹配导致的性能问题。之前当模型使用 opset 11 以上的 TopK 节点时,`VerifyVersion` 会拒绝非版本化的内核注册,导致算子静默回退到 CPU 执行,产生不必要的主机与设备间数据拷贝开销。 ### WebGPU 关联 此改动使 CUDA EP 与 CPU 和 WebGPU provider 的 TopK 算子注册模式保持一致,遵循了 PR #27728 建立的统一版本管理规范。 ### 技术要点 无内核逻辑变更,仅调整注册宏(`ONNX_OPERATOR_VERSIONED_KERNEL_EX` 和 `ONNX_OPERATOR_KERNEL_EX`),因为 opset 24 的 schema 与现有 `TopK<true>` 实现完全兼容。

📁 Changed Files (2 files, 23 changes: +20/-3)
onnxruntime/core/providers/cuda/cuda_execution_provider.cc
onnxruntime/core/providers/cuda/math/topk.cc
👤 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 (3 files, 201 changes: +182/-19)
js/web/lib/wasm/jsep/webgpu/ops/quantize-linear.ts
js/web/test/data/ops/dequantizelinear.jsonc
onnxruntime/core/providers/webgpu/quantization/quantize_linear.cc
👤 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
ep:WebGPU
👤 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
ep:WebGPU
👤 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
ep:WebGPU
🤖 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