ONNX Runtime WebGPU PR Monitor

Last Updated: 02/27/2026, 06:43 PM | Total: 131 PRs

Showing 1-10 of 18 PRs
Page 1 of 2
👤 xhcao📅 Created: 02/27/2026
🤖 AI 摘要

## PR 主要改动总结 ### 核心改动 为 ONNX Runtime 的 WebGPU 后端的 **Unsqueeze** 和 **Expand** 算子添加了 **int64 数据类型支持**,扩展了这两个张量操作算子的类型覆盖范围。 ### 解决的问题 解决了 WebGPU 执行提供程序中这两个算子无法处理 int64 类型数据的限制,使其能够支持更广泛的模型和用例场景,特别是涉及大整数索引或形状操作的情况。 ### 技术实现要点 1. 重构了类型支持架构,新增 `webgpu_supported_types.h` 头文件统一管理支持的数据类型定义 2. 对 `unsqueeze.cc` 和 `expand.cc` 进行了大幅重构(分别修改 61/-51 和 49/-16 行),优化了类型处理逻辑 3. 简化了 `cast.cc` 的实现(删除 25 行冗余代码),复用新的类型定义体系 4. 添加了相应的单元测试用例以验证 int64 支持

📁 Changed Files (9 files, 359 changes: +257/-102)
onnxruntime/core/providers/webgpu/tensor/cast.cc
onnxruntime/core/providers/webgpu/tensor/expand.cc
onnxruntime/core/providers/webgpu/tensor/expand.h
onnxruntime/core/providers/webgpu/tensor/unsqueeze.cc
onnxruntime/core/providers/webgpu/tensor/unsqueeze.h
onnxruntime/core/providers/webgpu/webgpu_execution_provider.cc
onnxruntime/core/providers/webgpu/webgpu_supported_types.h
onnxruntime/test/providers/cpu/tensor/expand_test.cc
onnxruntime/test/providers/cpu/tensor/unsqueeze_op_test.cc
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 将 `WebGpuContextFactory::contexts_` 从栈分配的静态变量改为堆分配,以避免程序退出时的静态析构崩溃问题。 **解决的问题:** 修复了当依赖的 DLL(如 dxcompiler.dll)在静态析构阶段已经卸载时,访问 contexts_ 导致的崩溃。通过堆分配,在 `Cleanup()` 中显式删除该映射表;如果异常终止,则允许安全泄漏而不会崩溃。 **技术要点:** 这是一个经典的静态析构顺序问题(static deinitialization order fiasco)的解决方案。通过堆分配和手动生命周期管理,避免了 C++ 静态对象析构顺序不确定性带来的风险,提高了 WebGPU provider 在 Windows 平台上的稳定性。 **影响范围:** 提升了 WebGPU 后端的鲁棒性,特别是在程序退出场景下的可靠性。

📁 Changed Files (2 files, 37 changes: +26/-11)
onnxruntime/core/providers/webgpu/webgpu_context.cc
onnxruntime/core/providers/webgpu/webgpu_context.h
👤 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: 02/25/2026
🤖 AI 摘要

## PR 改动总结 **主要改动:** 将 `MatMulWriteFnSource()` 函数重构为三个更小的独立函数,减少了参数数量并简化了逻辑结构。这是一次代码重构优化,涉及 7 个文件,净增加 20 行代码。 **目的与价值:** 此次重构是为实现矩阵乘法(MatMul)算子的 `Split-K` 优化做准备。通过拆分函数降低了代码复杂度,提高了可维护性,为后续性能优化奠定基础。 **技术要点:** 主要修改集中在 `gemm_utils.cc/h`,将原本职责较重的单一函数拆解为更符合单一职责原则的多个函数。同时更新了所有调用方(matmul、gemm 及 Intel vendor 实现)以适配新的函数签名。 **WebGPU 影响:** 优化了 WebGPU 后端的矩阵运算代码结构,为未来在 WebGPU 上实现高性能的 Split-K 矩阵乘法算法创造了条件,有助于提升浏览器端深度学习推理性能。

📁 Changed Files (8 files, 152 changes: +84/-68)
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/vendor/intel/math/gemm.cc
onnxruntime/core/providers/webgpu/vendor/intel/math/matmul.cc
👤 praneshgo📅 Created: 02/06/2026
🤖 AI 摘要

## PR 主要改动总结 **1. 主要功能改动:** 在 OrtFactory 中添加了 CIG(Chromium Interop Graphics)上下文的创建和管理能力,新增了 Init 和 Deinit API,应用程序需在调用任何互操作或 ORT API 之前调用这些初始化接口。 **2. 解决的问题:** 解决了 Web 应用无法直接访问 D3D Command Queue 或 ORT 对象的限制问题。由于 Web 环境只能使用 WebNN 和 WebGPU 暴露的接口,此 PR 将互操作上下文的创建逻辑移到了 ORT EP(Execution Provider)代码层,避免了对底层图形 API 的直接依赖。 **3. 对 WebGPU 支持的影响:** 通过在 Chromium 层或 ORT 代码中创建互操作上下文,为 WebGPU 与其他执行提供器(如 TensorRT)的协同工作提供了性能优化基础,使得 Web 应用能够更好地利用硬件加速能力。 **4. 技术要点:** 主要修改集中在 C API 层(新增 99 行 API 定义)和 NV TensorRT RTX 提供器实现(新增测试代码 479 行),通过插件式 EP 工厂模式实现了跨平台的互操作上下文管理。

📁 Changed Files (15 files, 957 changes: +955/-2)
cmake/CMakeLists.txt
include/onnxruntime/core/session/onnxruntime_c_api.h
include/onnxruntime/core/session/onnxruntime_ep_c_api.h
onnxruntime/core/providers/nv_tensorrt_rtx/nv_provider_factory.cc
onnxruntime/core/session/interop_api.cc
onnxruntime/core/session/interop_api.h
onnxruntime/core/session/ort_apis.h
onnxruntime/core/session/plugin_ep/ep_factory_internal.cc
onnxruntime/core/session/plugin_ep/ep_factory_internal.h
onnxruntime/core/session/plugin_ep/ep_factory_internal_impl.h
onnxruntime/core/session/plugin_ep/ep_factory_provider_bridge.h
onnxruntime/core/session/plugin_ep/forward_to_factory_impl.h
onnxruntime/test/providers/nv_tensorrt_rtx/nv_basic_ort_interop_test.cc
tools/ci_build/build.py
tools/ci_build/build_args.py
👤 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
👤 jarrelscy📅 Created: 01/16/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 修复了 ONNX Runtime WebGPU 执行提供程序中 Split 算子对动态输出形状的处理错误。 **解决的问题:** - 当 Split 算子的输出形状在运行时动态计算时,C++ 层错误地向 JavaScript 层传递了零值的 splitSizes 数组 - 这导致下游算子(如 Conv)因接收到错误的输入形状(如 [1,0,22])而失败,报告通道数不匹配错误 **技术要点:** - C++ 侧在 `split.h` 中添加了 `has_dim_value()` 检查,避免在动态形状场景下错误使用 `dim_value()` 的零返回值 - 当检测到动态形状时,跳过传递 splitSizes 参数,让 JavaScript 层在运行时自行计算正确的分割尺寸 - TypeScript 侧(split.ts)增强了运行时形状计算逻辑,能够处理未预定义的分割尺寸情况 **对 WebGPU 的影响:** 显著提升了 WebGPU 后端对动态模型的支持能力,使包含动态 Split 操作的神经网络模型能够正确执行。

📁 Changed Files (3 files, 149 changes: +131/-18)
js/web/lib/wasm/jsep/webgpu/ops/split.ts
js/web/test/data/ops/split.jsonc
onnxruntime/core/providers/js/operators/split.h
ep:WebGPU
👤 wenqinI📅 Created: 01/16/2026
🤖 AI 摘要

## PR 主要改动总结 **1. 核心功能:** 此 PR 为 ONNX Runtime 的 WebGPU 后端中的 `im2col` 核心添加了对任意 `input_channel` 大小的支持,通过引入 `vec1` 类型处理非 4 的倍数的输入通道数。 **2. 性能提升:** 解决了之前仅支持输入通道数为 4 的倍数的限制,使更多模型受益。在 YOLOv8n_pose 模型上,整体性能提升约 7%,对于输入通道数非 4 倍数的 Conv2D 算子性能提升达 50%。 **3. 技术实现:** 修改了 WGSL 着色器模板和 C++ 实现代码,通过动态选择向量化类型(vec1/vec2/vec4)来适配不同的输入通道配置,移除了之前对通道数必须是 4 的倍数的硬性限制。 **4. WebGPU 影响:** 增强了 WebGPU 后端对各种 CNN 模型的兼容性和性能表现,特别是对通道数配置不规则的模型提供了更好的支持。

📁 Changed Files (3 files, 59 changes: +38/-21)
onnxruntime/core/providers/webgpu/nn/im2col_matmul.cc
onnxruntime/core/providers/webgpu/nn/im2col_matmul.h
onnxruntime/core/providers/webgpu/nn/im2col_matmul.wgsl.template
👤 Copilot📅 Created: 01/16/2026
🤖 AI 摘要

## PR 主要改动总结 **核心改动:** 该 PR 通过在 `setup.py` 中添加自定义 Distribution 类,为所有 ONNX Runtime 变体包(包括 onnxruntime-webgpu)的 wheel 元数据注入 `Provides-Dist: onnxruntime` 字段,解决了现代 Python 依赖解析器(pip ≥20.3、uv、poetry 等)将变体包与基础包视为无关包而同时安装的问题。 **解决的问题:** 修复了依赖冲突问题 - 当项目同时依赖 `onnxruntime-gpu`(或其他变体)和间接依赖 `onnxruntime` 的包时,之前会错误地同时安装两个包,现在依赖解析器能正确识别变体包已提供基础包功能。 **对 WebGPU 的影响:** onnxruntime-webgpu 包现在会正确声明它提供了 onnxruntime 的功能,避免与基础包或其他变体包产生安装冲突。 **技术要点:** 通过 monkey-patch `setuptools.Distribution.write_pkg_file` 方法,在构建 wheel 时自动注入符合 PEP 566 规范的元数据,仅对非基础包生效,无需修改各变体包的单独配置。

📁 Changed Files (1 files, 67 changes: +67/-0)
setup.py
👤 qjia7📅 Created: 01/14/2026
🤖 AI 摘要

## PR 主要改动总结 ### 核心功能 此 PR 为 ONNX Runtime 添加了**支持偏移量的张量拷贝功能**,允许在源和目标张量之间进行部分数据拷贝,而不仅限于完整张量拷贝。主要在 C API 层面新增了 `CopyTensorWithOffsets` 等方法,并在数据传输框架层进行了相应扩展。 ### 解决的问题 解决了原有张量拷贝机制无法精细控制拷贝范围的限制,新增了指定源/目标偏移量和拷贝大小的能力,使得内存操作更加灵活高效,避免了不必要的全量数据传输。 ### WebGPU 影响 针对 WebGPU Provider 进行了适配性改造,更新了 `buffer_manager` 和 `data_transfer` 模块,使其支持带偏移量的 GPU 缓冲区操作,增强了 WebGPU 后端在处理大型张量时的内存管理效率。 ### 技术要点 涉及 18 个文件的修改(新增 220 行,删除 40 行),核心改动集中在数据传输抽象层(`data_transfer.h/cc`)和 WebGPU 缓冲区管理模块,同时扩展了公开 C API 接口以支持外部调用。

📁 Changed Files (18 files, 260 changes: +220/-40)
include/onnxruntime/core/session/onnxruntime_c_api.h
include/onnxruntime/core/session/onnxruntime_ep_c_api.h
onnxruntime/core/framework/data_transfer.cc
onnxruntime/core/framework/data_transfer.h
onnxruntime/core/framework/plugin_data_transfer.cc
onnxruntime/core/providers/webgpu/buffer_manager.cc
onnxruntime/core/providers/webgpu/buffer_manager.h
onnxruntime/core/providers/webgpu/data_transfer.cc
onnxruntime/core/providers/webgpu/data_transfer.h
onnxruntime/core/providers/webgpu/webgpu_provider_factory.cc
onnxruntime/core/session/onnxruntime_c_api.cc
onnxruntime/core/session/ort_apis.h
onnxruntime/test/autoep/library/example_plugin_ep/ep_data_transfer.cc
onnxruntime/test/autoep/library/example_plugin_ep/ep_data_transfer.h
onnxruntime/test/autoep/library/example_plugin_ep_kernel_registry/ep_data_transfer.cc
onnxruntime/test/autoep/library/example_plugin_ep_kernel_registry/ep_data_transfer.h
onnxruntime/test/autoep/library/example_plugin_ep_kernel_registry/kernels/utils.h
onnxruntime/test/shared_lib/test_data_copy.cc