ONNX Runtime WebGPU PR Monitor

Last Updated: 10/06/2026, 10:28 PM | Total: 582 PRs

Showing 1-10 of 101 PRs
Page 1 of 11
👤 prathikr📅 Created: 10/06/2026
🤖 AI 摘要

该 PR 针对 ONNX Runtime WebGPU 执行提供程序中的 GatedDeltaNet 预填充阶段进行优化,旨在缓解逐 token 串行递推导致的 GPU 利用率不足和首 token 延迟(TTFT)瓶颈。实现上将 token 按 16 个一组分块,把块内交互组织为下三角系统,通过前向替代求解并转化为可并行的矩阵运算,仅在块间保留状态传递,同时利用工作组共享内存协作缓存 Q、K、W 和 Q_g 数据块以提高片上数据复用。结合新增的 chunk_prepare、chunk_scan 和 normalize WGSL 模板,以及算子实现、头文件和测试的扩展,可判断该改动为现有 WebGPU 算子引入了分块预填充计算路径,而非仅调整单个着色器。预期收益主要集中于长提示词的预填充吞吐和 TTFT,但所给信息未包含性能实测、路径启用条件及数值误差测试结果,因此无法确认具体加速幅度或不同输入配置、设备上的兼容性。

📁 Changed Files (6 files, 541 changes: +541/-0)
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.cc
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.h
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net_chunk_prepare.wgsl.template
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net_chunk_scan.wgsl.template
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net_normalize.wgsl.template
onnxruntime/test/contrib_ops/gated_delta_net_op_test.cc
🤖 AI 摘要

该 PR 修复了外部 Dawn 宿主注入原生 instance 和 device 时的 WebGPU 流校验:改为使用会话分配器实际的 memory-device ID,不再将其与 ORT 自定义 context ID 混淆,从而避免正数自定义 context ID 导致会话初始化失败。外部宿主测试通过现有 provider options 注入具备 ImplicitDeviceSynchronization 特性和宿主管理缓存回调的设备,在禁用 CPU 回退的情况下,使用三个新建设备验证冷缓存写入、热缓存数据复用及隔离键不匹配时的缓存未命中。测试还检查释放 ORT 会话、会话选项和环境后宿主设备仍可使用,并验证缺少该同步特性的设备会被拒绝且返回预期诊断。配套改动涵盖宿主直接 WebGPU 调用与其 Dawn 分发表的链接、文档和 Windows CI 配置,重点提升外部设备集成的正确性与兼容性;缓存复用得到功能验证,但未提供可量化的性能收益数据。

📁 Changed Files (18 files, 637 changes: +519/-118)
.github/workflows/windows_webgpu.yml
cmake/onnxruntime_unittests.cmake
docs/WebGPU_External_Dawn.md
onnxruntime/core/providers/webgpu/allocator.cc
onnxruntime/core/providers/webgpu/allocator.h
onnxruntime/core/providers/webgpu/data_transfer.cc
onnxruntime/core/providers/webgpu/data_transfer.h
onnxruntime/core/providers/webgpu/ep/ep.cc
onnxruntime/core/providers/webgpu/ep/ep.h
onnxruntime/core/providers/webgpu/ep/factory.cc
onnxruntime/core/providers/webgpu/webgpu_execution_provider.cc
onnxruntime/core/providers/webgpu/webgpu_provider_factory.cc
onnxruntime/core/session/plugin_ep/ep_plugin_provider_interfaces.cc
onnxruntime/test/framework/ep_plugin_provider_test.cc
onnxruntime/test/providers/webgpu/data_transfer_test.cc
onnxruntime/test/providers/webgpu/webgpu_context_test.cc
onnxruntime/test/providers/webgpu/webgpu_stream_regression_test.cc
onnxruntime/test/webgpu/external_dawn/main.cc
👤 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 (21 files, 1376 changes: +1357/-19)
cmake/onnxruntime_providers_webgpu.cmake
cmake/onnxruntime_unittests.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.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/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
👤 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 (4 files, 341 changes: +334/-7)
onnxruntime/contrib_ops/webgpu/moe/block_fp8_expert_matmul.h
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 (10 files, 738 changes: +735/-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/core/providers/webgpu/shader_helper.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
👤 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 (4 files, 412 changes: +363/-49)
onnxruntime/contrib_ops/webgpu/moe/gate_1token.h
onnxruntime/contrib_ops/webgpu/moe/gate_1token.wgsl.template
onnxruntime/contrib_ops/webgpu/moe/qmoe.cc
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 (10 files, 442 changes: +381/-61)
onnxruntime/core/providers/webgpu/math/gemm.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_packed.cc
onnxruntime/core/providers/webgpu/nn/conv2d_mm.cc
onnxruntime/test/providers/webgpu/math/gemm_test.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, 4752 changes: +4686/-66)
.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/js/external_data_loader.cc
onnxruntime/core/providers/js/external_data_loader.h
onnxruntime/core/providers/webgpu/allocator.cc
onnxruntime/core/providers/webgpu/d3d12_external_data_loader.cc
onnxruntime/core/providers/webgpu/d3d12_external_data_loader.h
onnxruntime/core/providers/webgpu/data_transfer.cc
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