ONNX Runtime WebGPU PR Monitor

Last Updated: 10/03/2026, 08:47 PM | Total: 578 PRs

Showing 1-10 of 110 PRs
Page 1 of 11
👤 xiaofeihan1📅 Created: 10/03/2026
🤖 AI 摘要

该 PR 通过调整 WebGPU 插件的版本检查、执行上下文及分配器和同步路径,将最低支持的 ONNX Runtime 版本恢复至 1.24.4,无需修改 ORT 核心或依赖其流转发修复。对于 1.31 之前的宿主,插件采用共享的串行命令录制,维持分配清零、数据上传、计算和回读的顺序;同一设备上的分配、绑定、复制及 Run 等 WebGPU 操作必须串行执行,且不支持回调重入。ORT 1.31 及以上仍保留 Session 独立拥有的命令录制及不同 Session 间的并发能力,两种模式均保留 dispatch 批处理,避免逐内核提交或统一刷新所有 Session。验证涵盖 Windows x64 的 40 项旧版模式测试、54 项现代模式测试(另跳过一项仅适用于旧版模式的测试),以及真实 ORT 1.24.4 上的 14 项兼容性用例;这些结果支持兼容性恢复,但未提供性能基准,无法量化旧版串行模式对吞吐量的影响。

📁 Changed Files (19 files, 1119 changes: +1100/-19)
cmake/onnxruntime_providers_webgpu.cmake
onnxruntime/core/providers/webgpu/allocator.cc
onnxruntime/core/providers/webgpu/allocator.h
onnxruntime/core/providers/webgpu/buffer_manager.cc
onnxruntime/core/providers/webgpu/compute_context.cc
onnxruntime/core/providers/webgpu/ep/README.md
onnxruntime/core/providers/webgpu/ep/allocator.h
onnxruntime/core/providers/webgpu/ep/api.cc
onnxruntime/core/providers/webgpu/ep/factory.cc
onnxruntime/core/providers/webgpu/ep/sync_stream.cc
onnxruntime/core/providers/webgpu/ep/sync_stream.h
onnxruntime/core/providers/webgpu/webgpu_context.h
onnxruntime/core/providers/webgpu/webgpu_execution_provider.cc
onnxruntime/core/providers/webgpu/webgpu_execution_provider.h
onnxruntime/core/providers/webgpu/webgpu_provider_factory.cc
onnxruntime/test/providers/webgpu/plugin/test_webgpu_allocators.cc
onnxruntime/test/providers/webgpu/plugin/test_webgpu_concurrency.cc
plugin-ep-webgpu/MIN_ONNXRUNTIME_VERSION
plugin-ep-webgpu/README.md
👤 mustjab📅 Created: 10/03/2026
🤖 AI 摘要

此次改动补齐外部 Dawn API 包模式下 WebGPU 共享插件的 CI 覆盖,重点验证此前内置 WebGPU 执行提供程序测试未覆盖的插件注册与参数传递路径。原生宿主测试新增插件注册、显式设备选择,并通过 AppendExecutionProvider_V2 传入宿主的 dawnProcTable;同时禁用 CPU 回退执行 GPU Abs 推理,验证缺失过程表时会被拒绝,且无关的插件加载失败不会导致负向测试误通过。Windows CI 复用现有包模式运行器及配套宿主和包产物,在不配置原生 Dawn 的情况下构建核心 DLL 与 WebGPU 插件,并保留内置执行提供程序测试及配置阶段对无效 API 包的拒绝检查。这主要增强了外部 Dawn 包与共享插件集成路径的兼容性回归保障,不涉及已证实的性能优化;所给验证记录末尾不完整,无法确认全部插件验证的最终结果。

📁 Changed Files (2 files, 66 changes: +57/-9)
.github/workflows/windows_webgpu.yml
onnxruntime/test/webgpu/external_dawn/main.cc
👤 sayanshaw24📅 Created: 10/02/2026
🤖 AI 摘要

该改动针对 WebGPU 上块缩放 FP8 QMoE 的路由专家矩阵乘法增加分块优化,覆盖着色器实现、QMoE 分派逻辑和相关测试,与普通稠密 MatMul 内核优化独立。新路径将选中专家的 E4M3 权重解码为 FP16,并与 FP16 激活暂存到共享内存分块,再使用受支持的 16×16×16 子组矩阵指令进行 FP32 累加,并非原生 FP8 矩阵硬件计算。实现同时处理每 128×128 块的缩放、带符号 FP8 编码、FC1/FC2 偏置、专家权重的奇数字节边界以及不完整的矩阵和缩放分块。矩阵路径仅面向具备所需子组配置、至少 128 行且输入和输出通道均至少为 256 的直接专家批次;单 token 解码、较小路由分组和其他适配器保留标量路径,已出现性能回退的 16 行合成用例也被排除。该策略旨在加速较大的专家计算并避免小规模负载回退,但提供的验证描述不完整,且缺少具体性能数据,无法据此量化收益或确认完整验证范围。

📁 Changed Files (3 files, 143 changes: +137/-6)
onnxruntime/contrib_ops/webgpu/moe/block_fp8_expert_matmul.wgsl.template
onnxruntime/contrib_ops/webgpu/moe/qmoe.cc
onnxruntime/test/providers/webgpu/contrib_ops/moe_test.cc
👤 sayanshaw24📅 Created: 10/02/2026
🤖 AI 摘要

该 PR 为 ONNX Runtime WebGPU 新增并注册 com.microsoft::MatMulBlockQuantizedFp8Weight 算子内核,用于官方 FP8 Qwen3.8-Flash-Next 导出模型的稠密投影,与 QMoE 支持相互独立。内核直接读取行主序 FP8 E4M3FN 权重及 FP32 分块缩放因子,处理不完整 K 分块和非字对齐权重行,并支持可选的激活 FP8 量化/反量化以实现 W8A8 数值行为,以及偏置、一维或批量输入、空归约或空输出和显式形状校验。针对 prefill,计算路径使用 H200 支持的 16×16×16 FP16 子组矩阵运算、工作组共享的解码 FP16 瓦片和 FP32 累加;小 M 或缺少该矩阵配置的设备则使用并行 FP32 归约回退,因此这不是原生 FP8 矩阵硬件计算,且未提供性能基准来量化收益。兼容性方面,该 WebGPU 内核仅支持 FP16 激活,不支持算子模式中定义的 BF16;配套修改了 InsertCast 转换逻辑并新增内核及转换测试,以保护尚未分配执行提供器的 FP16 专用算子,但描述末句截断,无法确认具体阻止了哪种改写。

📁 Changed Files (9 files, 615 changes: +612/-3)
onnxruntime/contrib_ops/webgpu/quantization/matmul_block_quantized_fp8_activation.wgsl.template
onnxruntime/contrib_ops/webgpu/quantization/matmul_block_quantized_fp8_weight.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_block_quantized_fp8_weight.h
onnxruntime/contrib_ops/webgpu/quantization/matmul_block_quantized_fp8_weight.wgsl.template
onnxruntime/contrib_ops/webgpu/webgpu_contrib_kernels.cc
onnxruntime/core/optimizer/insert_cast_transformer.cc
onnxruntime/python/onnxruntime_pybind_state.cc
onnxruntime/test/framework/insert_cast_transformer_test.cc
onnxruntime/test/providers/webgpu/contrib_ops/matmul_block_quantized_fp8_weight_test.cc
👤 aciddelgado📅 Created: 10/02/2026
🤖 AI 摘要

该 PR 在 ONNX Runtime 的 WebGPU MatMul 路径中新增 FP16 GEMV 专用内核,面向单行 decode 的长归约、小输出宽度投影,仅在有效 M=1、batch=1、2048≤K≤8192、16≤N≤64 且 N 为 4 的倍数、输入输出均为 FP16、无偏置或融合激活时启用。实现通过新增 WGSL 模板及 MatMul 分派逻辑,每个工作组用 128 个线程计算四个输出列,沿 K 分摊计算、以 FP32 累加并在工作组内执行树形归约,最终转为 FP16,仅使用 2 KiB 共享内存和一次 dispatch。该路径不依赖厂商专有能力、原子操作、subgroup 操作或外部临时缓冲区,保留现有优化路径的优先级及门控范围外的分派行为,旨在改善特定 decode 投影的执行效率,但所给信息没有性能基准,无法量化加速收益。新增 Python 正确性测试覆盖 K=5120、N=48 下 M=1、8、66 的 decode、推测式多行及 prefill 形状,并同步更新 WGSL 生成头文件和 golden 测试产物;PR 描述的测试部分被截断,无法确认其余边界与排除条件的覆盖情况。

📁 Changed Files (17 files, 3439 changes: +2064/-1375)
.github/workflows/macos-ci-build-and-test-workflow.yml
onnxruntime/core/providers/webgpu/math/matmul.cc
onnxruntime/core/providers/webgpu/math/matmul_gemv.wgsl.template
onnxruntime/test/python/transformers/test_webgpu_matmul.py
tools/python/wgsl_template/test/in_tree_golden/static-cpp-literal/generated/math/matmul_gemv.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp-literal/index.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp-literal/index_impl.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/math/matmul_gemv.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/math/subgroup_matrix_gemm_8x16x16.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/math/subgroup_matrix_matmul_8x16x16.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/math/subgroup_matrix_matmul_pad_b.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/nn/im2col_matmul.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/tensor/oihw_to_ohwi.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/generated/tensor/pad.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/index.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/index_impl.h
tools/python/wgsl_template/test/in_tree_golden/static-cpp/string_table.h
👤 sayanshaw24📅 Created: 10/01/2026
🤖 AI 摘要

该改动优化 ONNX Runtime WebGPU 后端 QMoE 的单 token 路由,在路由权重需要归一化时,以稳定的并行 TopK 归约替代对全部专家的冒泡排序,减少专家数量较大时的门控开销。实现保留按 logit 降序、相同 logit 按专家索引升序的选择规则及 softmax 权重顺序;对于不归一化的路由权重,由于分母仍需覆盖全部专家,继续使用原有全排序路径。测试新增了三专家和 512 专家场景,覆盖 TopK 边界并列值及非零专家输出,基于主分支的静态 WebGPU 构建和全部 11 项专项测试均在 H200 上通过。指定的 512 专家、k=10、FP16 输入输出模型以单 token 分块运行时,16-token prefill 从 11.64 秒降至 0.90 秒,稳定解码从约 0.674 秒降至约 0.045 秒/token,且优化前后 248,320 个 logits 逐位一致、前五个生成 token ID 相同;但该整模对比使用了包含同一门控改动的 QSA 实验构建,因为模型还依赖尚未合入的 SparseAtten,因此这些性能数据不能直接视为主分支构建或其他硬件上的通用收益。

📁 Changed Files (2 files, 172 changes: +171/-1)
onnxruntime/contrib_ops/webgpu/moe/gate_1token.wgsl.template
onnxruntime/test/providers/webgpu/contrib_ops/moe_test.cc
👤 prathikr📅 Created: 10/01/2026
🤖 AI 摘要

该改动主要修复 WebGPU EP 通用 packed ONNX MatMul 的 FP16 累加精度问题:在 Qwen 2.5 0.5B 的 M=3、K=896、N=4864 场景中,原先逐次以 FP16 舍入的累加方式导致相对 FP32 参考结果的单节点最大误差达到 0.7760754。实现上保留 FP16 输入和工作组存储,将缓存操作数提升为 FP32 后执行乘法与累加,并在写回时转换为输出类型,覆盖 vec4 和标量路径。该实现同时禁用 FP16 原子 Split-K,避免部分和在最终归约前发生舍入或溢出,但缺少性能基准,无法量化 FP32 运算及禁用该路径对吞吐量的影响。测试侧新增了 MatMul 和 FP16 卷积用例;尽管标题提及 gemm kernel,描述明确将修复范围限定为通用 packed MatMul,不能据此认定 ONNX Gemm 算子也获得相同修复。

📁 Changed Files (7 files, 227 changes: +180/-47)
cmake/external/onnx
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_packed.cc
onnxruntime/test/providers/webgpu/math/matmul_test.cc
onnxruntime/test/providers/webgpu/nn/conv_fp16_test.cc
👤 sushraja-msft📅 Created: 10/01/2026
🤖 AI 摘要

该改动针对 Windows 原生 WebGPU 加载大型 ONNX 外部权重时的 CPU 内存压力和会话创建开销,将原先按完整张量分配 CPU 可访问暂存内存的路径改为分块流式上传。核心实现使用由 12 个可复用的 16 MiB D3D12 上传缓冲区组成的固定池,让文件读取、GPU 拷贝和缓冲区复用重叠执行,再将权重写入最终的 GPU 本地张量资源,并通过 Dawn 共享缓冲区导入供 WebGPU 使用。修改还涉及外部数据加载器接口与管理、会话初始化及 WebGPU 上下文和执行提供程序,说明这是贯穿权重加载与 GPU 资源接入的集成,而非单独优化文件读取。该路径将上传暂存缓冲区容量限制在约 192 MiB,避免其随单个张量大小增长,但这并非总内存占用上限;现有信息未提供性能实测、具体启用条件及不支持 D3D12/Dawn 共享导入时的回退行为,因此无法量化加速幅度或确认完整兼容性边界。

📁 Changed Files (30 files, 4132 changes: +4070/-62)
.github/workflows/windows_webgpu.yml
cmake/CMakeLists.txt
cmake/onnxruntime_d3d12_file_loader.cmake
cmake/onnxruntime_providers_webgpu.cmake
js/common/lib/inference-session.ts
js/node/src/session_options_helper.cc
js/node/test/api/simple-api-tests.ts
onnxruntime/core/framework/external_data_loader.h
onnxruntime/core/framework/external_data_loader_manager.cc
onnxruntime/core/framework/external_data_loader_manager.h
onnxruntime/core/framework/session_state_utils.cc
onnxruntime/core/framework/tensorprotoutils.cc
onnxruntime/core/framework/tensorprotoutils.h
onnxruntime/core/platform/windows/d3d12_file_loader/d3d12_file_buffer_loader.cc
onnxruntime/core/platform/windows/d3d12_file_loader/d3d12_file_buffer_loader.h
onnxruntime/core/providers/cuda/cuda_external_data_loader.cc
onnxruntime/core/providers/cuda/cuda_external_data_loader.h
onnxruntime/core/providers/js/external_data_loader.cc
onnxruntime/core/providers/js/external_data_loader.h
onnxruntime/core/providers/webgpu/d3d12_external_data_loader.cc
onnxruntime/core/providers/webgpu/d3d12_external_data_loader.h
onnxruntime/core/providers/webgpu/external_data_loader.cc
onnxruntime/core/providers/webgpu/external_data_loader.h
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_execution_provider.h
onnxruntime/core/providers/webgpu/webgpu_provider_factory.cc
onnxruntime/core/providers/webgpu/webgpu_provider_options.h
onnxruntime/test/framework/external_data_loader_test.cc
👤 raun6k📅 Created: 10/01/2026
🤖 AI 摘要

该改动修复 ONNX Runtime 图优化器中 LayerNorm 融合的语义错误,避免将非平方归一化误融合,或将运行时 epsilon 替换为默认的 1e-5,导致 CPU 推理结果变化。实现上要求 Pow 指数为常量 2 且不因广播扩展张量秩;epsilon 则必须是不会扩展秩、可由融合算子的 float 属性表示的单元素常量,同时支持从方差 Add 的任一输入读取,并保留浮点初始化器转为 float32 后的常量识别能力。epsilon 校验同时覆盖普通和简化 LayerNorm 融合,防止后续优化绕过限制,回归测试涵盖动态参数、可覆盖初始化器、异常形状、双精度 epsilon 及合法融合场景。此次修改属于通用图优化而非 WebGPU 内核调整,主要提升推理正确性与模型兼容性;不满足条件的子图将保留未融合形式,可能减少融合机会,但现有信息未提供 WebGPU 执行验证或性能基准,无法量化其性能影响。

📁 Changed Files (2 files, 365 changes: +303/-62)
onnxruntime/core/optimizer/layer_norm_fusion.cc
onnxruntime/test/optimizer/graph_transform_test_layernorm.cc
👤 raun6k📅 Created: 10/01/2026
🤖 AI 摘要

该 PR 修复 ONNX Runtime 的 FastGeluFusion 在融合 GELU 时误删共享的 X * 0.5(half_x)生产节点、导致外部消费者输入失去生产者并使会话初始化失败的问题。关键调整是在 half_x 输出被 GELU 子图之外的节点使用时保留其 Mul 节点,否则仍将其随融合节点一起移除,GELU 主计算继续融合为 FastGelu。新增回归测试覆盖两种受支持的 GELU 公式、Cast 路径、零至两个 half_x 外部消费者及 GELU 最终输出的多个消费者,并检查融合结果、保留的生产节点与连接关系,以及所有输出与未优化推理的一致性。改动位于通用图优化器而非 WebGPU 专属实现,主要提升共享中间结果场景下的图合法性与兼容性;现有测试信息仅涉及 macOS ARM64 上的 CPUExecutionProvider,未提供 WebGPU 验证或性能基准,因此不能据此断言 WebGPU 性能收益。

📁 Changed Files (2 files, 100 changes: +99/-1)
onnxruntime/core/optimizer/fast_gelu_fusion.cc
onnxruntime/test/optimizer/graph_transform_test.cc