ONNX Runtime WebGPU PR Monitor

Last Updated: 10/07/2026, 10:52 PM | Total: 591 PRs

Showing 1-10 of 109 PRs
Page 1 of 11
👤 aciddelgado📅 Created: 10/07/2026
🤖 AI 摘要

该改动为 ONNX Runtime 的 WebGPU 执行上下文新增可选的内部方法 WebGpuContext::FlushAndWaitChecked(),让调用方能够提交待执行命令,并在主机端等待 GPU 队列完成、检查错误,而不只是完成提交。实现复用上下文已有的命令记录、队列及 Dawn Instance/WaitAny 机制,通过 OnSubmittedWorkDone 等待完成,即使命令记录为空,也会等待此前已提交的工作。该方法将提交、等待、完成回调以及 WebGPU 验证、内存不足和内部错误转为失败 Status,并显式检查 Device::GetLostFuture(),避免设备已丢失却被队列完成结果误判为成功;同时保留外部设备回调,并为 ORT 创建的设备记录首个未捕获错误。改动还补充了上下文测试和执行提供程序文档,不新增公共 API 或 ABI,也不改变普通 Flush、Session Run 和流同步的既有行为;显式调用该方法会引入主机等待,但所给信息未提供性能测量或具体平台兼容性结果。

📁 Changed Files (4 files, 427 changes: +411/-16)
onnxruntime/core/providers/webgpu/ep/README.md
onnxruntime/core/providers/webgpu/webgpu_context.cc
onnxruntime/core/providers/webgpu/webgpu_context.h
onnxruntime/test/providers/webgpu/webgpu_context_test.cc
👤 hanbitmyths📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 为 ONNX Runtime 的 CUDA GQA 解码路径新增 FP16/BF16、头维度为 512 的 XQA 内核,面向 Gemma 4 等模型的宽头分组注意力需求。实现采用 FP32 在线 softmax 和部分结果合并,支持 BNSH/BSNH 两种 KV 缓存布局、正整数 GQA 分组比、局部窗口及 attention sinks,并统一运行时临时缓冲区布局、工作区估算、边界与调度资格检查。在满足条件时优先使用原生 H512 分组注意力,避免将 KV 缓存扩展至查询头数量所带来的大额工作区开销,同时保留既有较小头维度的调度路径,并新增内核、工作区、资格判断及缓存不被意外修改的回归测试。所列改动集中于 CUDA 后端,没有直接涉及 WebGPU;预期收益主要是降低工作区需求并扩展模型支持,但未提供性能基准或完整测试结果,无法量化加速效果或确认全部验证情况。

📁 Changed Files (17 files, 1058 changes: +884/-174)
onnxruntime/contrib_ops/cuda/bert/attention_kernel_options.h
onnxruntime/contrib_ops/cuda/bert/group_query_attention.cc
onnxruntime/contrib_ops/cuda/bert/group_query_attention_eligibility.h
onnxruntime/contrib_ops/cuda/bert/group_query_attention_workspace.cc
onnxruntime/contrib_ops/cuda/bert/group_query_attention_workspace.h
onnxruntime/contrib_ops/cuda/bert/group_query_attention_workspace_bounds.cc
onnxruntime/contrib_ops/cuda/bert/group_query_attention_workspace_estimate.cc
onnxruntime/contrib_ops/cuda/bert/group_query_attention_workspace_routes.cc
onnxruntime/contrib_ops/cuda/bert/group_query_attention_workspace_xqa_flash.cc
onnxruntime/contrib_ops/cuda/bert/xqa/xqa_loader_bf16.cu
onnxruntime/contrib_ops/cuda/bert/xqa/xqa_loader_fp16.cu
onnxruntime/contrib_ops/cuda/bert/xqa/xqa_loader_fp16_512.cu
onnxruntime/test/contrib_ops/cuda_kernels/xqa_h512_test.cc
onnxruntime/test/contrib_ops/group_query_attention_op_test.cc
onnxruntime/test/providers/cuda/test_cases/group_query_attention_eligibility_test.cc
onnxruntime/test/providers/cuda/test_cases/group_query_attention_workspace_estimate_test.cc
onnxruntime/test/providers/cuda/test_cases/group_query_attention_workspace_xqa_flash_test.cc
👤 hanbitmyths📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 主要优化 CPU/CUDA 的分组查询注意力(GQA),让 Gemma 4 的共享 KV 层在新增 K/V 为空、且两个未使用的 present-cache 输出均被省略时,直接借用未量化的历史 K/V 缓存,避免冗余分配和复制,同时校验缓存容量并保持借用缓冲区不变。CUDA 非融合实现修正了滑动窗口边界,使其包含当前 token;CPU 路径则改进按注意力头优先的任务调度,并跳过被掩码前缀对应的 QK/SV 计算,以减少无效工作,但未提供性能基准来量化收益。现有生成缓存输出的路径和量化缓存路径保持不变,并新增带数值参考说明及缓存不可变性检查的回归测试。验证覆盖 Linux 上的 AMD EPYC 7V12 与 A100(SM80),90 项原生算子测试和 34 项专项 Python GQA 测试通过;本次未直接修改 WebGPU 实现,且 12 项 WebGPU 测试被跳过,因此无法确认其 WebGPU 影响,也未验证完整测试套件、Windows、ROCm 或其他 GPU 架构。

📁 Changed Files (7 files, 451 changes: +421/-30)
onnxruntime/contrib_ops/cpu/bert/gqa_attention_base.h
onnxruntime/contrib_ops/cpu/bert/group_query_attention.cc
onnxruntime/contrib_ops/cuda/bert/group_query_attention.cc
onnxruntime/contrib_ops/cuda/bert/group_query_attention_impl.cu
onnxruntime/core/mlas/lib/flashattn_gqa.cpp
onnxruntime/test/contrib_ops/group_query_attention_op_test.cc
onnxruntime/test/python/transformers/test_gqa.py
👤 danielsongmicrosoft📅 Created: 10/07/2026
🤖 AI 摘要

该改动修复了 ONNX Runtime WebGPU GEMM 在调度网格归一化后,额外工作组可能超出逻辑批次范围并继续执行的问题。在 GEMM 公共实现中,重建逻辑工作组 z 索引后增加边界检查,当索引超出 `logical_dispatch_z` 的有效范围时立即返回,阻止无效工作组继续参与计算。新增的 70,000 批次 MatMul 回归用例专门覆盖归一化调度产生多余工作组的场景,以验证不会访问超出批次范围的数据。验证包括 WebGPU provider 的 RelWithDebInfo 构建、该回归测试及格式检查;改动主要提升大批量推理的正确性,现有信息未提供性能基准或跨设备兼容性测试结果。

📁 Changed Files (2 files, 5 changes: +5/-0)
onnxruntime/core/providers/webgpu/math/gemm_utils.cc
onnxruntime/test/providers/webgpu/matmul_large_test.cc
👤 mustjab📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 为可选 LoRA 增加默认关闭的图融合优化,通过 optimization.enable_matmul_nbits_lora_fusion=1 启用,将符合条件的量化投影与 LoRA 子图融合为 com.microsoft.MatMulNBitsLora,避免空秩适配器仍执行额外的 MatMul 和 Add。实现涵盖算子定义、图优化器及 CPU/WebGPU 内核:秩为零时仅运行基础量化投影,启用适配器时仍保留两次低秩 MatMul 和独立的增量加法,因此并非将活跃 LoRA 的全部计算合并成单个 GPU 内核。支持范围为 CPU FP32 和原生 WebGPU FP32/FP16,融合要求执行提供程序与数据类型兼容、可覆盖的默认适配器张量为空且中间结果仅被单处使用,同时保留适配器输入名称和模型元数据,不修改量化权重,也不引入 ONNX 控制流。新增回归测试覆盖执行、向量输入、融合限制与显式启用行为;预期收益主要是减少无适配器时的冗余计算和调度,但所给验证描述不完整且缺少性能数据,无法确认具体加速幅度或完整验证范围。

📁 Changed Files (14 files, 929 changes: +927/-2)
docs/design/optional_lora_matmul_nbits_fusion.md
include/onnxruntime/core/session/onnxruntime_session_options_config_keys.h
onnxruntime/contrib_ops/cpu/cpu_contrib_kernels.cc
onnxruntime/contrib_ops/cpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/cpu/quantization/matmul_nbits_lora_helper.h
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits.h
onnxruntime/contrib_ops/webgpu/webgpu_contrib_kernels.cc
onnxruntime/core/graph/contrib_ops/contrib_defs.cc
onnxruntime/core/optimizer/graph_transformer_utils.cc
onnxruntime/core/optimizer/matmul_nbits_fusion.cc
onnxruntime/core/optimizer/matmul_nbits_fusion.h
onnxruntime/test/contrib_ops/matmul_nbits_lora_test.cc
onnxruntime/test/optimizer/matmul_nbits_lora_fusion_test.cc
👤 mustjab📅 Created: 10/07/2026
🤖 AI 摘要

该改动修复 ONNX MatMul 内维度 K 为零但输出非空时,WebGPU 因绑定空 A/B 张量的空 GPU 缓冲区而触发验证错误或生成无效绑定组的问题,覆盖可选零秩 LoRA 默认值等场景。实现上在矩阵乘算法选择前处理 K=0:输出为空时跳过 GPU 调度,输出非空时直接写入零,或计算已有偏置及融合激活的结果,避免绑定空输入,非零 K 的执行路径保持不变。回归测试覆盖 FP32/FP16、批量广播、向量与标量、空输出及图捕获重放;transpose 路径也有配套修改,但现有信息不足以确定其具体处理逻辑。该修复提升了边界形状下的兼容性,并已在 Windows RTX 4070 上启用完整 WebGPU 验证和图捕获通过 FP16 集成检查,但未提供性能基准,不能据此判断常规矩阵乘的性能变化。

📁 Changed Files (3 files, 196 changes: +196/-0)
onnxruntime/core/providers/webgpu/math/matmul.cc
onnxruntime/core/providers/webgpu/tensor/transpose.cc
onnxruntime/test/providers/webgpu/matmul_large_test.cc
👤 edgchen1📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 修复 ONNX Runtime WebGPU 在 dispatch 归一化时因向上取整引入额外工作组的问题,防止这些工作组进入实际计算并造成潜在越界访问或结果错误。核心实现是共享的工作组一致性保护,在缓冲区访问、工作组屏障和 Split-K 分解之前排除填充工作组,并让 Intel subgroup GEMM 与 MatMul 着色器复用逻辑坐标初始化逻辑。同时强化主机端 dispatch、空间尺寸及 CeilDiv 运算的溢出防护,提升大尺寸输入下的健壮性。测试覆盖归一化与工具函数、逻辑坐标和填充保护的 GPU 探针,以及使用生产程序构建器的 Conv 回归场景;这些改动主要提升执行正确性,现有信息未提供性能基准或跨设备验证结果,无法量化性能及兼容性收益。

📁 Changed Files (15 files, 493 changes: +440/-53)
cmake/onnxruntime_unittests.cmake
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/nn/conv2d_mm.cc
onnxruntime/core/providers/webgpu/program_manager.cc
onnxruntime/core/providers/webgpu/program_manager.h
onnxruntime/core/providers/webgpu/vendor/intel/math/gemm.cc
onnxruntime/core/providers/webgpu/vendor/intel/math/gemm.h
onnxruntime/core/providers/webgpu/vendor/intel/math/gemm_subgroup.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.h
onnxruntime/test/providers/webgpu/dispatch_normalization_test.cc
onnxruntime/test/providers/webgpu/webgpu_utils_test.cc
👤 edgchen1📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 旨在修复 ONNX Runtime WebGPU 的 nightly 构建,重点解决着色器转储输出交错及校验失败时诊断信息不足的问题。在 WebGPU 程序管理器中,着色器转储输出改为由同一把互斥锁同步,避免并发输出混杂干扰后续校验。着色器校验脚本与工作流补充了错误行号,并在失败时上传完整日志,便于定位问题。CI 流水线还将构建与测试拆分为独立作业,以利用更快的构建机器缩短构建耗时;这些改动主要改善构建可靠性和排障效率,现有信息未提供 GPU 推理性能变化或兼容性影响的验证结果。

📁 Changed Files (3 files, 143 changes: +119/-24)
.github/actions/webgpu-validate-shader-key/validate-shader-key.js
.github/workflows/nightly_webgpu.yml
onnxruntime/core/providers/webgpu/program_manager.cc
👤 gyagp📅 Created: 10/07/2026
🤖 AI 摘要

该 PR 重构 ONNX Runtime 原生 WebGPU 的着色器缓存键生成机制,将特化配置与缓存标识统一为声明式配置,并自动纳入张量和流水线元数据,避免不兼容的调用错误复用同一流水线,迁移范围覆盖全部 187 类原生程序生成器,包括多种注意力与有状态算子。实现上移除手工缓存提示和 Type/Rank 选择接口,为静态生成器提供受限辅助接口,并通过编译期约束标识不可变静态代码片段,同时保留现有 ready/pending 缓存和静态形状特化,不引入第二套流水线缓存。缓存命中时不生成 WGSL,Min/Max/Pow 辅助代码及 Einsum 符号推导也仅在未命中时执行,旨在提高缓存正确性并避免热路径上的代码生成开销,但未提供性能基准来量化收益。此外,该 PR 修复 BiasSplitGelu 中独立的 FP16 除法类型错误,补充编译与源码检查、框架及 GPU 回归测试,并让生成器变更触发 CMake 增量构建失效;已报告 Windows 原生 Release 测试程序和 Python 绑定构建成功,5,440 个唯一测试用例通过、280 个跳过,但未提供跨平台或不同 GPU 的验证结果。

📁 Changed Files (30 files, 14059 changes: +7895/-6164)
.github/workflows/wgsl_template_tests.yml
cmake/onnxruntime_providers_webgpu.cmake
docs/design/webgpu_shader_cache.md
onnxruntime/contrib_ops/webgpu/bert/attention.cc
onnxruntime/contrib_ops/webgpu/bert/attention.h
onnxruntime/contrib_ops/webgpu/bert/bias_add.cc
onnxruntime/contrib_ops/webgpu/bert/bias_add.h
onnxruntime/contrib_ops/webgpu/bert/bias_gelu.cc
onnxruntime/contrib_ops/webgpu/bert/bias_gelu.h
onnxruntime/contrib_ops/webgpu/bert/bias_split_gelu.cc
onnxruntime/contrib_ops/webgpu/bert/bias_split_gelu.h
onnxruntime/contrib_ops/webgpu/bert/branchwise_rms_norm.cc
onnxruntime/contrib_ops/webgpu/bert/branchwise_rms_norm.h
onnxruntime/contrib_ops/webgpu/bert/causal_conv_with_state.cc
onnxruntime/contrib_ops/webgpu/bert/causal_conv_with_state.h
onnxruntime/contrib_ops/webgpu/bert/dynamic_sparse_attention.cc
onnxruntime/contrib_ops/webgpu/bert/dynamic_sparse_attention.h
onnxruntime/contrib_ops/webgpu/bert/engram_gate.cc
onnxruntime/contrib_ops/webgpu/bert/engram_gate.h
onnxruntime/contrib_ops/webgpu/bert/fast_gelu.cc
onnxruntime/contrib_ops/webgpu/bert/fast_gelu.h
onnxruntime/contrib_ops/webgpu/bert/flash_attention.cc
onnxruntime/contrib_ops/webgpu/bert/flash_attention.h
onnxruntime/contrib_ops/webgpu/bert/gated_add.cc
onnxruntime/contrib_ops/webgpu/bert/gated_add.h
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.cc
onnxruntime/contrib_ops/webgpu/bert/gated_delta_net.h
onnxruntime/contrib_ops/webgpu/bert/group_query_attention.cc
onnxruntime/contrib_ops/webgpu/bert/group_query_attention.h
onnxruntime/contrib_ops/webgpu/bert/hadamard_transform.cc
👤 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 (8 files, 671 changes: +667/-4)
docs/ContribOperators.md
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/core/graph/contrib_ops/bert_defs.cc
onnxruntime/test/contrib_ops/gated_delta_net_op_test.cc