该改动修复 ONNX Runtime 图优化器 ReshapeFusion 在空输入场景下的语义问题:例如将 [batch, 20, 30, 40] 到 [batch, 20, 1200] 的 reshape 改写为 [0, 0, -1] 后,batch 为 0 会导致推断维度无法确定。关键实现是在用 -1 替换形状计算前,要求所有复制的维度都能静态确定为正数,否则保留原始形状计算;原有字面量 -1 的处理保持不变,静态安全的情况仍可融合。修改位于通用图优化器并新增了相关回归测试,并非 WebGPU 专用内核调整;符号维度场景可能因此减少融合机会,即使运行时输入非空也会保留形状计算,但具体性能影响尚无数据支持。该修复旨在保持空与非空输入的执行兼容性,不过提供的验证信息仅说明修复前新回归测试失败、其余 25 项测试通过,未给出修复后的测试结果或 WebGPU 验证数据。
此改动修复 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 未提供性能测量数据。
该 PR 完善了 ONNX Runtime WebGPU 执行提供程序(EP)的发布流程文档,重点补充最终发布步骤的操作细节,并对其他说明做了小幅调整。改动位于 plugin-ep-webgpu/RELEASE.md,属于发布指南维护,旨在提高发布流程的清晰度和可操作性,而非修改 WebGPU 算子、GPU 推理逻辑或运行时实现。现有描述未提供具体新增的发布指令、检查项或版本要求,因此无法判断流程细节如何变化,也没有依据认为此次改动会直接影响推理性能或运行兼容性。
该改动针对 ONNX Runtime WebGPU 在 Windows 上的原生 D3D12 外部权重加载,在受支持的 UMA 设备上将文件数据直接读入 CPU 可见、采用写回缓存的目标 UAV 缓冲区,绕过默认的 192 MiB 上传暂存池及后续 GPU 拷贝。新路径需通过设备架构检查和缓冲区创建、映射能力探测,否则保留原有上传流程,且无需新增 WebGPU Provider 配置。读取使用八个工作线程、16 MiB 分块和有界队列,并在继续分配堆与资源时逐步向读取线程提供已映射的目标缓冲区,同时保持范围顺序与填充语义。失败或取消时会串行处理取消回调,并确保读取任务结束、线程回收后再解除映射或释放资源;新增原生 D3D12 测试,保留上传槽位测试对旧路径的覆盖及禁用异常的构建支持。该优化可减少 UMA 权重加载中的暂存内存需求与数据搬运,但描述未提供加载耗时或峰值内存的实测数据,无法量化收益。
该改动修复 WebGPU 图捕获重放遗漏显式缓冲区清零的问题,避免 GRU/LSTM 在序列长度至少为 2 时,后续调用从残留的隐藏态或细胞态开始计算,同时恢复空序列输出在重放时的清零行为。实现上将 ComputeContext::FillZero 记录为独立的缓冲区清零命令,保留目标缓冲区及请求清零的大小,并与复制和计算调度按原顺序重放;这些命令不占用性能分析时间戳槽位,分配器初始化清零则保持原有行为。共享修复也覆盖 CausalConvWithState、PagedAttention 和 PackedSparseAttentionIndexer 中已有的 FillZero 调用,但这些算子的模型级效果尚未单独验证。测试改动涉及图捕获、WebGPU 上下文和流回归测试,但提供的验证信息仅说明复用了现有 Windows Release 构建,未给出测试执行结果、性能数据或跨平台兼容性结论。
该 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++ 测试通过;但所给信息未包含具体性能数据或数值调查结论,因此无法量化收益或确认不同内核间的数值一致性。
此次改动将 WebGPU 输入上传批处理抽取为共享机制,供内置执行提供程序(EP)和插件 EP 使用,旨在减少大量小输入张量逐个上传时的 staging 缓冲区分配与队列提交开销。共享上传器将传输合并到单个容量不超过 16 MiB 的 staging 缓冲区中,内置路径覆盖符合条件的 CPU 到 GPU 输入复制,包括 UMA 设备;插件路径则要求输入共用同一个非空的所属会话流,并在复制前检查整个传输列表的批处理资格,以保持混合传输回退时的顺序。单输入、超大输入及不符合条件的传输仍走回退路径,插件端也保留映射缓冲区和无流场景的原有行为。新增六项回归测试覆盖重复写入的数据完整性、空张量与非对齐张量、staging 容量边界、超大输入及插件实际队列提交次数;预期收益是降低上传开销,但所给信息未包含端到端性能基准,无法量化推理加速幅度。
该改动修复 ONNX Runtime 在 CPU FP16 回退插入 Cast 时的张量值命名冲突,避免因节点名与张量值名属于不同命名空间而产生重复定义或类型冲突。实现上,AddCastNode 使用 GenerateNodeArgName 独立生成输出张量名,并排除当前图、祖先图及后代子图中已存在的名称,以保护嵌套图的词法作用域。每次 InsertCastTransformer::ApplyImpl 会一次性收集后代图指针,并在分配名称时查询这些图的最新状态,因此父图也能避开此前子图递归中新插入的值名,同时保持遍历顺序和精度回退策略不变。修改还补充了相关回归测试,主要提升含精度转换和嵌套子图模型的正确性与兼容性;现有信息未显示 WebGPU 专属逻辑变更,也未提供性能测量,无法据此判断 WebGPU 推理速度或整体性能收益。
该改动修复了同一 ONNX Runtime 会话内,独立 CPU IoBinding 操作与直接推理、图捕获及重放交叠时,对共享 WebGPU 命令录制状态的并发访问竞争。实现上引入操作级递归互斥锁,同步内核命令录制、内存分配与清零、张量拷贝、流刷新、运行回调以及计算图重放和释放,同时保持 Core Run 原有的串行化机制不变。回归测试覆盖上述并发场景、图重新捕获,以及主机端错误导致 OnRunEnd 被跳过后的恢复;现有 Windows 本地构建中的 WebGPU 插件并发测试套件共 45 项测试全部通过。该修复旨在提升 WebGPU 并发使用的正确性与稳定性,但未提供性能基准或其他平台验证结果,尚无法量化加锁开销或确认跨平台表现。
该 PR 新增默认关闭的 CMake 选项 onnxruntime_DISABLE_STREAM,允许非 minimal 构建不再定义 ORT_ENABLE_STREAM,从而排除受该宏保护的框架和会话流支持代码;minimal 构建原本就不启用该宏。该选项仅适用于纯 CPU 执行提供程序构建,WebGPU、CUDA、TensorRT、QNN 等注册流处理器的执行提供程序仍依赖流支持,因此它不是 GPU 推理优化开关。配置阶段会拒绝禁用流与完整训练同时启用的组合,但不会阻止启用上述执行提供程序,也无法据此保证运行时加载插件执行提供程序的兼容性。改动还修正了禁用流时分配规划器对会话执行顺序的遵循,并补充相关测试;描述中的优先级执行顺序说明被截断,且未提供性能或体积测量,无法量化该选项的收益。