ONNX Runtime WebGPU PR Monitor

Last Updated: 03/21/2026, 06:38 PM | Total: 159 PRs

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

## ONNX Runtime WebGPU MultiHeadAttention 修复总结 **主要改动:** 修复了 WebGPU 后端中 MultiHeadAttention 算子的 flash attention 路径在处理 past KV 缓存时的错误逻辑。当 `present_key/present_value` 输出未被请求时,flash attention 路径错误地仍然使用了 `past_key/past_value` 输入,而非 flash 路径则正确地忽略了这些输入。 **解决的问题:** 修复了在支持 subgroup 的 GPU 上(会选择 flash attention 路径)产生错误结果的问题。通过在 `ApplyFlashAttention` 中添加与 `ApplyAttention` 相同的检查逻辑:当 present 输出都为空时,将 past 输入置空并相应调整序列长度参数。 **技术要点:** 将函数参数签名从 const 引用改为按值传递,以允许在函数内部调整 past_key/past_value 和相关序列长度参数,确保两种 attention 实现路径的行为一致性。

📁 Changed Files (2 files, 14 changes: +12/-2)
onnxruntime/contrib_ops/webgpu/bert/flash_attention.cc
onnxruntime/contrib_ops/webgpu/bert/flash_attention.h
👤 xenova📅 Created: 03/20/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 修复了 WebGPU 中 Einsum 算子对 5D 及更高维度张量的支持问题。 **解决的问题:** 原代码使用手动字符串拼接 `uniforms.inputN_shape[idx]` 访问 uniform 形状数据,这在处理高维张量时存在缺陷。现已替换为 `GetElementAt(...)` 方法,该方法能正确处理所有张量秩的 uniform 形状访问。 **测试覆盖:** 新增了约 100 行测试代码,专门针对多维张量的 Einsum 操作进行验证,确保修复的有效性。 **技术要点:** 这是一个针对 WebGPU shader 代码生成的修复,通过使用统一的形状访问辅助函数替代硬编码字符串,提升了代码的健壮性和可扩展性。此修复关闭了 issue #27762。

📁 Changed Files (2 files, 107 changes: +105/-2)
onnxruntime/core/providers/webgpu/math/einsum.cc
onnxruntime/test/providers/cpu/math/einsum_test.cc
👤 guschmue📅 Created: 03/20/2026
🤖 AI 摘要

## PR 主要改动总结 **1. 主要功能改动** 此 PR 修复了 WebGPU 执行提供程序(EP)中 DequantizeLinear 算子的实现问题,使其能够通过 WebNN 的合规性测试。 **2. 解决的问题** - 修复了 DequantizeLinear 算子在 WebGPU 后端的剩余兼容性问题 - 大幅扩展了测试用例(新增 173 行测试数据),覆盖更多边界场景 - 重构了量化相关的 C++ 实现代码(120 行新增),提升了代码质量和健壮性 **3. 对 WebGPU 支持的影响** 现在所有 WebNN DequantizeLinear 合规性测试都能在 WebGPU EP 上通过,显著增强了 ONNX Runtime 在 Web 平台上的量化模型支持能力。 **4. 技术要点** 主要改动集中在 `quantize_linear.cc/h` 的核心逻辑重构,同时清理了 TypeScript 层的冗余代码(删除 3 行),整体提升了量化/反量化操作的正确性和可维护性。

📁 Changed Files (4 files, 366 changes: +304/-62)
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
onnxruntime/core/providers/webgpu/quantization/quantize_linear.h
ep:WebGPU
👤 guschmue📅 Created: 03/19/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 这是一个针对 WebGPU 后端 Where 算子的小型修复,仅修改了 1 行代码。 **解决的问题:** 修复了 WebNN/Where 操作符的合规性测试问题,使 WebGPU 执行提供程序(EP)能够通过 Web 平台测试(WPT)中的 where 算子测试用例。 **对 WebGPU 支持的影响:** 提升了 ONNX Runtime WebGPU 后端的标准兼容性,确保 Where 算子在 WebGPU 环境下的行为符合 WebNN 规范要求。 **技术特点:** 改动非常精准(仅 1 行代码变更),属于针对性的合规性问题修复,反映了在 Web 标准化测试中发现的边界情况处理问题。

📁 Changed Files (1 files, 2 changes: +1/-1)
onnxruntime/core/providers/webgpu/tensor/where.cc
ep:WebGPU
🤖 AI 摘要

## PR 改动总结 **主要改动:** 修复了 WebGPU EP(Execution Provider)中针对 transpose 算子处理一维常量张量的问题,涉及对 `transpose.cc` 文件的优化。 **解决的问题:** 修复了若干 WebNN 测试用例在 WebGPU EP 下的失败问题,特别是针对 `float32` 类型的一维常量张量的 transpose 默认操作。修复后,WebNN conformance 测试中的 transpose 测试可以达到 100% 通过率。 **技术要点:** 改动集中在 transpose 算子的实现逻辑上,通过 13 行新增代码和 6 行删除代码的重构,改进了对特殊情况(一维常量张量)的处理方式,增强了算子的鲁棒性和标准兼容性。 **对 WebGPU 的影响:** 这是 WebGPU EP 质量改进的一部分,提升了 ONNX Runtime 在 WebGPU 后端上与 WebNN 标准的兼容性和测试覆盖率。

📁 Changed Files (1 files, 19 changes: +13/-6)
onnxruntime/core/providers/webgpu/tensor/transpose.cc
ep:WebGPU
👤 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
👤 sagarbhure-msft📅 Created: 03/17/2026
🤖 AI 摘要

## PR 主要改动总结 **主要功能:** 新增运行时执行提供器(Execution Provider)可用性检测 API,区别于现有的编译时 `get_available_providers()`,新 API 能在运行时验证所需的共享库文件是否实际存在于磁盘上。 **解决的问题:** 解决了编译时可用但运行时缺少依赖(如 CUDA、cuDNN 库文件)导致的执行失败问题。通过 `get_usable_providers()` 和 `is_provider_usable()` API,用户可以在加载模型前预先判断特定 EP(如 CUDAExecutionProvider)是否真正可用。 **WebGPU 影响:** 虽然 PR 标题提及 WebGPU,但改动主要针对通用 EP 检测机制。该机制同样适用于 WebGPU EP,可在运行时检测 WebGPU 相关依赖库是否存在。 **技术要点:** 扩展了 `ProviderInfo` 结构体添加 `library_base_name` 字段作为单一数据源,使用 `std::filesystem::exists()` 进行文件系统级别的库文件检查,同时提供 Python 和 C++ 双语言接口支持。

📁 Changed Files (5 files, 207 changes: +206/-1)
onnxruntime/__init__.py
onnxruntime/core/providers/get_execution_providers.cc
onnxruntime/core/providers/get_execution_providers.h
onnxruntime/python/onnxruntime_pybind_module.cc
onnxruntime/test/providers/get_execution_providers_test.cc
👤 qjia7📅 Created: 03/17/2026
🤖 AI 摘要

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

📁 Changed Files (5 files, 51 changes: +43/-8)
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
onnxruntime/core/providers/webgpu/webgpu_profiler.h
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