ONNX Runtime WebGPU PR Monitor

Last Updated: 10/23/2026, 09:12 PM | Total: 675 PRs

Showing 1-10 of 112 PRs
Page 1 of 12
👤 aciddelgado📅 Created: 10/23/2026
🤖 AI 摘要

该改动针对固定状态缓存等场景中大量小型 GPU 拷贝带来的逐次提交开销,默认将兼容且未指定显式流的 GPU 到 GPU `OrtApi::CopyTensors` 向量合并为一次调用内的命令录制和队列提交。拷贝按数组顺序编码以保留条目间依赖,上下文生命周期延续至提交完成,并为并发调用及错误恢复隔离录制状态。单次拷贝、CPU 传输、显式流和不兼容向量继续使用原有路径,不引入公共 API/ABI 变更或实验开关。配套的 WebGPU 提供程序测试覆盖提交次数、流路由、拷贝依赖、错误恢复、缓冲区生命周期及并发 Session 销毁,并更新相关文档;预期收益是减少主机侧提交开销,但现有信息未提供性能基准,无法量化加速幅度。

📁 Changed Files (4 files, 220 changes: +220/-0)
onnxruntime/core/providers/webgpu/ep/README.md
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
👤 El1as42📅 Created: 10/23/2026
🤖 AI 摘要

该改动旨在减少 ONNX Runtime Web 端 Asyncify 构建中不必要的异步插桩,覆盖 JSEP 和未启用 JSPI 的原生 WebGPU 构建。实现上通过 WebAssembly 的 CMake 配置传入 -s ASYNCIFY_REMOVE=@onnxruntime/wasm/asyncify_remove.txt,排除 Graph、GraphViewer、ONNX schema 与形状推断以及 protobuf 解析相关函数。上述代码不会调用异步导入,因此排除它们可减少间接调用导致的冗余插桩,同时保留 WebGPU 回读、适配器/设备/管线创建及 WebNN 相关路径所需的异步支持。此举有助于控制 Wasm 函数体积和插桩开销,但描述中有关 WebKit 优化编译层的说明不完整,也未提供性能实测数据,无法量化收益或确认具体兼容性改善;JSPI 和普通 Wasm 构建不受影响。

📁 Changed Files (2 files, 14 changes: +13/-1)
cmake/onnxruntime_webassembly.cmake
onnxruntime/wasm/asyncify_remove.txt
👤 gyagp📅 Created: 10/23/2026
🤖 AI 摘要

该 PR 优化了 ONNX Runtime WebGPU 中低比特矩阵乘法的 DP4A 路径,重点适配 Qualcomm Adreno 的 64–128 lane 宽子组。激活量化着色器先在每个 lane 内归约四个激活分量的绝对值,再进行 XOR shuffle,以减少跨 lane 通信,同时确保每个 128 值量化块在独立的 32-lane 分区内归约。矩阵乘法路径在兼容的 Qualcomm 适配器上,仅针对 4-bit 权重、块大小为 32 且 M≥128 的情况采用 128×32 输出分块,并显式请求两个 128-lane 子组,每个 lane 负责一个激活行上的 16 个输出列。回归测试覆盖独立量化块、不完整工作组、矩阵分块尾部、批处理、偏置和零点,以验证优化路径的正确性;描述中的 Windows ARM64/Adreno X1-85 基准结果被截断,因此无法确认实际性能提升幅度。

📁 Changed Files (4 files, 157 changes: +136/-21)
onnxruntime/contrib_ops/webgpu/quantization/dp4a_matmul.wgsl.template
onnxruntime/contrib_ops/webgpu/quantization/dp4a_matmul_nbits.cc
onnxruntime/contrib_ops/webgpu/quantization/dp4a_quantize.wgsl.template
onnxruntime/test/providers/webgpu/quantization/matmul_nbits_test.cc
👤 qjia7📅 Created: 10/23/2026
🤖 AI 摘要

该改动让 CPU 和 WebGPU 的 MatMulNBits 在 weight_prepacked=0 时支持空打包权重,适用于禁用 LoRA 适配器等可选投影场景,无需再提供完整尺寸的全零权重张量;B 的打包形状允许一个或多个维度为零,其余维度仍须符合正常布局。输出保持由 A、K、N 决定的逻辑形状,并填充为零或广播后的 bias,未使用的量化参数也允许为空。CPU 跳过无用的参数打包和矩阵乘法,WebGPU 则记录填充 dispatch,确保图捕获后的重放能够重新写入正确输出,而非仅在首次执行时初始化。WebGPU 的 QKV/MLP 融合仍然启用,空权重投影走共享的零值或 bias 回退路径,非空投影继续计算;算子文档、定义及专项测试同步覆盖精度、量化位宽、输入覆盖切换和图捕获等场景,但未提供量化性能收益的基准数据。

📁 Changed Files (8 files, 578 changes: +567/-11)
docs/ContribOperators.md
onnxruntime/contrib_ops/cpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/cpu/quantization/matmul_nbits_helper.h
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits_mlp.cc
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits_qkv.cc
onnxruntime/core/graph/contrib_ops/contrib_defs.cc
onnxruntime/test/contrib_ops/matmul_nbits_empty_weights_test.cc
👤 aciddelgado📅 Created: 10/22/2026
🤖 AI 摘要

该 PR 优化了 ONNX Runtime WebGPU 执行提供程序的 CPU→GPU 数据上传路径,对符合条件且大小不超过 1 MiB 的上传自动使用 Queue.WriteBuffer,以减少每次新建 staging buffer 带来的分配、映射、复制及提交开销。在队列写入前,实现会先提交延迟执行的读取操作,确保旧数据被读取后再覆盖,同时不引入额外的 CPU 完成等待。对于已映射缓冲区、大于阈值、未对齐及 capture/replay 场景,仍保留原有处理或 staging 路径,并维持既有的完成通知、校验、设备丢失和失败处理语义。配套修改补充了 WebGPU 上下文与数据传输测试,并记录执行顺序、源数据生命周期保证和阈值规则;该优化旨在缓解 Qwen/DFlash2 在 A100 上分析发现的主机端开销,但所给信息未包含量化性能收益或跨设备验证结果。

📁 Changed Files (4 files, 595 changes: +594/-1)
docs/WebGPU_Queue_Uploads.md
onnxruntime/core/providers/webgpu/buffer_manager.cc
onnxruntime/test/providers/webgpu/data_transfer_test.cc
onnxruntime/test/providers/webgpu/webgpu_context_test.cc
👤 xgbtxy📅 Created: 10/22/2026
🤖 AI 摘要

该改动修复 ONNX Runtime 图优化器 ReshapeFusion 在空输入场景下的语义问题:例如将 [batch, 20, 30, 40] 到 [batch, 20, 1200] 的 reshape 改写为 [0, 0, -1] 后,batch 为 0 会导致推断维度无法确定。关键实现是在用 -1 替换形状计算前,要求所有复制的维度都能静态确定为正数,否则保留原始形状计算;原有字面量 -1 的处理保持不变,静态安全的情况仍可融合。修改位于通用图优化器并新增了相关回归测试,并非 WebGPU 专用内核调整;符号维度场景可能因此减少融合机会,即使运行时输入非空也会保留形状计算,但具体性能影响尚无数据支持。该修复旨在保持空与非空输入的执行兼容性,不过提供的验证信息仅说明修复前新回归测试失败、其余 25 项测试通过,未给出修复后的测试结果或 WebGPU 验证数据。

📁 Changed Files (2 files, 209 changes: +209/-0)
onnxruntime/core/optimizer/reshape_fusion.cc
onnxruntime/test/optimizer/graph_transform_test.cc
👤 kylo5aby📅 Created: 10/22/2026
🤖 AI 摘要

此改动修复 ONNX Runtime WebGPU 执行提供程序在 WASM 构建中未获取 subgroup matrix 配置的问题,修改位置是 webgpu_context.cc 中的 WebGpuContext::Initialize。此前 #33055 调整条件编译范围,误将 adapter_info_.nextInChain = &subgroup_matrix_configs_ 排除在 WASM 构建之外,导致 GetAdapterInfo() 未接入该配置结构,相关内核全部回退到非 subgroup matrix 实现。本次通过调整条件编译边界,恢复 WASM 下的配置链连接,使支持相应能力的环境能够正常获取配置并选择 subgroup matrix 内核。该修复有助于恢复受影响推理路径的潜在性能优势,但实际收益取决于设备与运行环境的支持情况,PR 未提供性能测量数据。

📁 Changed Files (1 files, 2 changes: +1/-1)
onnxruntime/core/providers/webgpu/webgpu_context.cc
👤 gyagp📅 Created: 10/21/2026
🤖 AI 摘要

该改动针对 ONNX Runtime WebGPU 在 Windows 上的原生 D3D12 外部权重加载,在受支持的 UMA 设备上将文件数据直接读入 CPU 可见、采用写回缓存的目标 UAV 缓冲区,绕过默认的 192 MiB 上传暂存池及后续 GPU 拷贝。新路径需通过设备架构检查和缓冲区创建、映射能力探测,否则保留原有上传流程,且无需新增 WebGPU Provider 配置。读取使用八个工作线程、16 MiB 分块和有界队列,并在继续分配堆与资源时逐步向读取线程提供已映射的目标缓冲区,同时保持范围顺序与填充语义。失败或取消时会串行处理取消回调,并确保读取任务结束、线程回收后再解除映射或释放资源;新增原生 D3D12 测试,保留上传槽位测试对旧路径的覆盖及禁用异常的构建支持。该优化可减少 UMA 权重加载中的暂存内存需求与数据搬运,但描述未提供加载耗时或峰值内存的实测数据,无法量化收益。

📁 Changed Files (10 files, 740 changes: +725/-15)
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/webgpu/d3d12_external_data_loader.cc
onnxruntime/core/providers/webgpu/d3d12_external_data_loader.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/providers/webgpu/d3d12_file_buffer_loader_test.cc
onnxruntime/test/providers/webgpu/webgpu_context_test.cc
👤 aciddelgado📅 Created: 10/20/2026
🤖 AI 摘要

该 PR 为 WebGPU 的量化 MatMulNBits 引入实验性的形状感知内核选择策略,针对小 M 场景优先使用现有常规内核,而非 subgroup-matrix 内核。该策略仅在原有 subgroup 资格检查通过后,对 INT4 量化、FP16 输入与输出、wave32 的 16×16×16 配置生效,触发条件为 4 ≤ M ≤ 8 且以 64 位整数计算的 M×N ≤ 131072;命中后会跳过中间的 DP4A 和宽 tile 路径,直接选择常规 MatMulNBits。改动仅涉及内核选择逻辑,保留全局 tile 优化阈值 M=4、M=1 解码路径及其他配置的既有行为,不修改着色器实现或推测解码逻辑。PR 补充了选择边界测试、性能实验及数值正确性调查文档,并报告九项聚焦 WebGPU 的 C++ 测试通过;但所给信息未包含具体性能数据或数值调查结论,因此无法量化收益或确认不同内核间的数值一致性。

📁 Changed Files (5 files, 549 changes: +534/-15)
docs/contrib_ops/webgpu/matmul_nbits_small_m_correctness.md
docs/contrib_ops/webgpu/matmul_nbits_small_m_experiments.md
onnxruntime/contrib_ops/webgpu/quantization/matmul_nbits.cc
onnxruntime/contrib_ops/webgpu/quantization/subgroup_matrix_matmul_nbits.h
onnxruntime/test/providers/webgpu/quantization/matmul_nbits_test.cc
👤 xgbtxy📅 Created: 10/20/2026
🤖 AI 摘要

该改动修复 ONNX Runtime 在 CPU FP16 回退插入 Cast 时的张量值命名冲突,避免因节点名与张量值名属于不同命名空间而产生重复定义或类型冲突。实现上,AddCastNode 使用 GenerateNodeArgName 独立生成输出张量名,并排除当前图、祖先图及后代子图中已存在的名称,以保护嵌套图的词法作用域。每次 InsertCastTransformer::ApplyImpl 会一次性收集后代图指针,并在分配名称时查询这些图的最新状态,因此父图也能避开此前子图递归中新插入的值名,同时保持遍历顺序和精度回退策略不变。修改还补充了相关回归测试,主要提升含精度转换和嵌套子图模型的正确性与兼容性;现有信息未显示 WebGPU 专属逻辑变更,也未提供性能测量,无法据此判断 WebGPU 推理速度或整体性能收益。

📁 Changed Files (2 files, 319 changes: +315/-4)
onnxruntime/core/optimizer/insert_cast_transformer.cc
onnxruntime/test/framework/insert_cast_transformer_test.cc