该改动调整 WebGPU 执行提供程序的运行时兼容策略:将连续支持版本的下限设为 ONNX Runtime 1.30.1,同时精确允许 1.28.3,不扩大为对整个 1.28.x 系列的支持,也不改变 API 版本协商机制。版本策略通过统一定义供运行时兼容性匹配、CMake 配置以及 Python wheel、NuGet 的 README 生成使用,减少构建、运行时判断与发布文档之间的不一致。新增版本匹配和打包回归测试,并让运行时冒烟 CI 继续使用最低连续支持版本 1.30.1,避免依赖例外版本二进制包已公开可用的假设。此改动主要改善兼容性管理和发布一致性,现有信息未体现 WebGPU 算子、GPU 执行路径或推理性能方面的变化。
此改动修复 ONNX Runtime 的 JSEP WebGPU Concat 在输入较多时超出存储缓冲区绑定上限、导致执行被静默跳过并返回全零结果的问题:在上限为 8 的设备上,8 个输入加 1 个输出就会触发该问题。实现按 maxStorageBuffersPerShaderStage - 1 限制每次 dispatch 的输入数量,为输出预留一个绑定,并在多次 dispatch 间复用同一输出缓冲区、保持沿拼接轴的正确写入偏移。相关类型定义和初始化逻辑也同步调整,并将新增的 8 输入回归用例纳入 WebGPU 测试套件。这使多输入 Concat 能适配设备的存储缓冲区限制;分批会增加 dispatch 次数,但目前没有性能测量数据,无法判断具体开销。
该改动改善了 ONNX Runtime 核心库与 WebGPU EP 插件版本不一致时的错误诊断:核心库可能将旧版 EP 不支持的激活函数融合进 Conv,导致会话创建失败。实现上改为抛出 GetFusedActivationAttr 返回的错误状态,替代仅报告条件失败的 ORT_ENFORCE,并在错误信息中标明不支持的激活函数、属性来源,以及使用 ORT_ENABLE_BASIC 保留独立激活节点的规避方式。同时移除了 FusedConv 中重复的属性解析,因为其 Conv<_, is_fused = true> 基类已完成该操作,并新增针对未知融合激活函数的错误诊断测试。这主要提升了版本兼容问题的可诊断性,并未扩展 WebGPU Conv 支持的融合激活范围;降低优化级别可能影响推理性能,但所给信息没有提供性能测量结果。
此次改动针对 Windows 平台的 WebGPU CI 工作流,目的是将构建与测试阶段拆分,调整自动化验证流程,而非修改 ONNX Runtime 的 WebGPU 算子或 GPU 执行逻辑。修改集中在 .github/workflows/windows_webgpu.yml,但 PR 描述为空且未提供具体差异,因此无法确认阶段间的构建产物传递方式、任务依赖及测试覆盖范围。此类拆分有助于明确构建失败与测试失败的边界,但是否支持复用构建产物、独立重跑测试或缩短 CI 耗时,仍缺少配置依据。现有信息不能证明该改动会提升 WebGPU 推理性能或扩大硬件、驱动及浏览器兼容性。
该 PR 为 WebGPU EP 的 GatedDeltaNet 增加 state_update_capacity 支持,满足 DFlash2 设置为 7 的需求,使 GenAI Engine 能按实际接受的草稿 token 数精确提交循环状态。改动涉及 WebGPU 算子实现、接口及 WGSL 着色器,并引入 CUDA 已采用的紧凑状态更新输出约定,同时调整算子定义与相关测试。此举使 WebGPU 的状态更新输出能力与 CUDA 对齐,为 DFlash2 的推测解码流程提供所需的状态提交支持。现有信息未提供具体输出布局、测试结果或性能基准,因此无法确认跨后端数值一致性,也不能量化延迟或显存收益。
该 PR 为 WebGPU EP 的 com.microsoft::PagedAttention 启用 is_causal=0 且 local_window_size<=0 的非因果注意力,使 DFlash2 等块式推测生成模型中同一查询块的所有 token 能双向访问完整的有效上下文。实现上保存并传递 is_causal 属性,将其接入现有 FlashAttention 的 is_unidirectional 着色器特化,替代此前对非因果配置的拒绝及硬编码的因果行为。原有因果注意力和因果局部窗口行为保持不变,非因果模式与正值局部窗口的组合仍被拒绝,因为相对查询位置的左窗口掩码不在本次支持范围内。测试侧扩展了 C++ 参考实现以区分因果前缀可见性和非因果全上下文可见性,并调整了 C++ 与 Python 测试;此次改动主要扩展 WebGPU 的模型兼容性,现有信息未提供性能基准,无法判断吞吐或延迟变化。
该 PR 修复了 WebGPU 执行提供程序对一维 blocked DequantizeLinear 的分类错误,避免指定 block_size 的输入被误按逐轴反量化处理,导致无报错但输出错误。核心改动位于 WebGPU 量化算子的分类逻辑,并在公共算子测试文件中新增带 zero-point 的一维 int8 分块反量化回归用例。相关 DequantizeLinearOp21BlockedTest 测试共 37 项全部通过,包括新增用例,且构建和 lint 检查通过。此次修复改善了 WebGPU 对该反量化模式的语义兼容性与数值正确性;现有信息未提供性能基准,无法判断其对推理速度的影响。
该 PR 修复了 ONNX Runtime Web 的 JSEP WebGPU GatherND 实现中,对 vec4 打包 uniform 的索引访问错误,避免在输入秩不小于 5 时生成非法的 `i32(vec4<u32>)` 转换,导致 Tint 拒绝着色器模块。关键改动位于 `computeSliceOffsets` 的打包数据访问逻辑,使输入维度和切片步长的索引读取符合标量计算要求,并新增覆盖 rank-5 输入维度及打包切片步长的回归测试。直接调用测试运行器后,Chrome WebGPU 上全部 7 个 GatherND 用例通过,TypeScript 检查及相关格式、静态检查也通过;最初的 npm 测试失败涉及参数传递和缺少 JSEP WASM 产物,已由后续运行替代验证。该修复主要恢复受影响 GatherND 场景的 WebGPU 可用性与着色器编译兼容性,现有信息未提供性能基准或跨浏览器验证结果,不能据此推断性能提升或其他浏览器的兼容性。
该 PR 将规划好的工作区表示为“执行提供程序原生缓冲区、字节偏移和可用大小”,使 WebGPU 能使用预分配缓冲区中的区域作为算子临时存储,同时保留适用于可寻址分配的指针返回接口。关键实现包括在张量视图、绑定组、分段绑定、数据传输、间接调度及计算图捕获与重放中保留缓冲区偏移,并在禁用普通激活内存模式时单独缓存工作区规划,支持每个内核独立跟踪多个工作区槽位。WebGPU MatMulNBits 的 DP4A 激活与缩放因子临时存储,以及条件启用的 subgroup 激活预打包临时存储,被接入规划区域并保留动态分配回退,旨在减少运行时临时分配,但未提供性能基准,无法量化收益。当前差异还包含前置 PR #32071 的执行框架、BFC arena 及 CUDA MatMulNBits、GroupQueryAttention 工作区规划相关改动,不能全部归为 WebGPU 专属实现;该 PR 面向 main,需先合入前置依赖。
该改动修复了 GroupQueryAttention 在 KV 缓存增长时的形状推断错误:过去序列长度为符号维度时,不再将该符号复制给 present,而是让 present 的序列维度保持动态,避免内存规划器误判两者等长并复用容量不足的缓冲区。固定长度缓存仍沿用原有推断方式,WebGPU 的 MayInplace 声明也予以保留,使合法的原地复用继续生效;该修复同时覆盖 WebGPU/CUDA 的别名复用路径及包括 CPU 在内的各 EP 空闲缓冲区复用路径。SparseAttention 的最大缓存模式和采用独立形状推断的 PagedAttention 不受影响,新增的增长缓存回归测试用于验证相关场景,但现有信息未提供性能测量结果。另一项改动改善了 WebGPU 融合 Conv 遇到无法解析的 activation 时的报错,并新增相应测试;由于描述末尾截断,无法确认具体错误文本,但没有证据表明其扩展了支持的激活函数范围。