## PR 主要改动总结 **核心改动:** 此 PR 移除了 `op_kernel_info.h` 头文件中不安全的 `reinterpret_cast` 强制类型转换,改用 ONNX Runtime 的 C API 调用来实现相同功能。 **解决的问题:** 修复了跨 DLL 边界的 ABI 兼容性问题。原先将 `OrtKernelInfo*` 直接转换为内部 `OpKernelInfo*` 会导致 vtable 不匹配,当 WebGPU 插件 EP 与旧版本 ORT(如 1.24.4)一起使用时,由于虚函数表结构变化会引发崩溃。 **技术实现:** 改用 `Ort::ConstKernelInfo::GetEp()` 替代直接访问执行提供器,使用 `KernelInfoGetAllocator` C API 和 `IAllocatorImplWrappingOrtAllocator` 包装器替代直接类型转换,确保了跨版本的二进制兼容性。 **WebGPU 影响:** 提升了 WebGPU 插件 EP 与不同版本 ONNX Runtime 的兼容性和稳定性,避免了版本升级时的崩溃问题。
## PR 主要改动总结 ### 核心功能 为 ONNX Runtime WebGPU 实现了 **TurboQuant 量化加速技术**,这是一个正在开发中的实验性功能,用于优化大语言模型的推理性能。 ### 技术实现 - 采用 **Hadamard 矩阵进行旋转变换**替代论文中的常规矩阵方法,实现了自定义的 TurboQuant 变体 - 主要集成在 Flash Attention 和 Group Query Attention (GQA) 模块中,新增了旋转量化 (rotate_quantize) 的 WebGPU shader 实现 - 基准测试显示在 Phi-4 模型上获得了显著性能提升:**prompt 处理速度达到 1790 tokens/s,token 生成速度为 99.8 tokens/s** ### 代码结构 新增了完整的 TurboQuant 基础设施,包括 Hadamard 变换核心逻辑、WGSL shader 模板、GQA 测试用例和详细的实现计划文档(646 行),共计 2700+ 行新代码,为后续优化奠定基础。
## PR 主要改动总结 **1. 主要功能:** 此 PR 为 ONNX Runtime 的 WebGPU 后端实现了 DeformConv(可变形卷积)算子,新增了约 370 行实现代码和相应的头文件。 **2. 解决的问题:** 添加 DeformConv 算子支持是为了运行 BiRefNet 模型,填补了 WebGPU 后端在该算子上的功能空缺。 **3. 对 WebGPU 的影响:** 增强了 WebGPU 执行提供程序的算子覆盖范围,使其能够支持更多依赖可变形卷积的深度学习模型,特别是图像分割类模型。 **4. 技术要点:** 在 `webgpu_execution_provider.cc` 中注册了新算子,实现遵循 ONNX 标准的 DeformConv 规范,同时更新了版本检查相关配置。
## PR 改动总结 **主要改动:** 修复了 WebGPU 后端中 MultiHeadAttention 算子在没有 present 输出时错误处理 past key/value 输入的问题。 **解决的问题:** 当 MHA 只有 1 个输出(无 present_key/present_value 输出)时,past key/value 应该被完全忽略以匹配 CPU 后端语义,但之前的实现仍将其传递给 shader,导致: - past 数据泄漏到注意力计算中,产生错误结果(输出 pastValue 数据而非预期的 V 数据) - shader 缓存键受到不必要的影响 **技术方案:** 在 `applyAttention()` 函数中引入 `effectivePastKey`/`effectivePastValue` 变量,当 `outputCount <= 1` 时将其设为 `undefined`,确保所有下游使用(shader 创建、输入数组)都基于这些有效值而非原始参数,从而正确隔离 past 数据的影响。
## PR 主要改动总结 **核心改动:** 修复了 ONNX Runtime JavaScript 实现中的两个关键性 bug,涉及轴向归一化和 WebGPU Slice 算子。 **解决的问题:** 1. 修复了 `normalizeAxis()` 函数中的逻辑错误,将不可能为真的条件 `axis < -tensorRank && axis >= tensorRank` 中的 `&&` 改为 `||`,使其能够正确检测和拒绝超出有效范围的轴参数,避免潜在的数组越界访问 2. 为 WebGPU Slice 算子补充了 `step == 0` 的验证逻辑,与 CPU 实现保持一致,防止除零错误导致的未定义行为(`ceil((end-start)/step)` 计算会产生无穷大并导致类型转换异常) **技术影响:** 提升了 WebGPU 后端的健壮性和安全性,确保恶意或错误输入不会导致运行时崩溃或未定义行为,同时修复了 onnxjs 和 jsep 两个 JavaScript 实现路径中的共同缺陷。
## PR 主要改动总结 **1. 主要功能改动:** 修复了 Windows WebGPU CI 构建超时问题,通过优化测试执行策略减少资源消耗。 **2. 解决的问题:** - 移除了冗余的 `onnxruntime_test_all.exe` 测试执行(该测试已在 CTest 阶段覆盖) - 将 `onnxruntime_provider_test.exe` 拆分为 4 个 GTest 分片并行执行,解决了数百个测试共享单个 WebGPU 上下文导致的 GPU 资源耗尽问题 **3. 对 WebGPU 支持的影响:** 显著提升了 WebGPU Windows CI 的稳定性,避免了测试运行器在执行过程中无响应或崩溃,确保持续集成流程能够正常完成。 **4. 技术要点:** 通过 GTest 的 `GTEST_TOTAL_SHARDS` 和 `GTEST_SHARD_INDEX` 参数实现测试分片,避免 Dawn/WebGPU 在长时间运行大量测试时的资源耗尽问题。
## PR 改动总结 **主要功能:** 为 ONNX Runtime 的 WebGPU 执行提供程序添加了 LSTM(长短期记忆网络)算子的完整支持,新增了约 666 行代码实现 LSTM 的 GPU 加速计算。 **解决的问题:** 填补了 WebGPU 后端对循环神经网络(RNN)中核心算子 LSTM 的支持空白,使得包含 LSTM 层的模型能够在 WebGPU 环境中运行,扩展了 WebGPU 后端对序列建模任务的支持能力。 **对 WebGPU 的影响:** 显著增强了 WebGPU 执行提供程序对深度学习模型的覆盖范围,特别是自然语言处理、时间序列预测等需要 LSTM 的场景,提升了浏览器端运行复杂 RNN 模型的能力。 **技术要点:** 实现包含独立的 LSTM 头文件和实现文件(lstm.h/cc),并在 WebGPU 执行提供程序中注册该算子,涉及 LSTM 特有的门控机制、隐藏状态管理和 GPU 计算着色器的适配。
## PR 主要改动总结 ### 核心功能 为 ONNX Runtime 的 WebGPU 后端新增了三个缺失的算子实现:**SpaceToDepth**、**ConstantOfShape** 和 **Compress**,共新增约 607 行代码。 ### 解决的问题 在优化 lfm2-vl 视觉模型时发现这些算子缺失导致推理过程中产生大量 **CPU 与 GPU 之间的数据拷贝**,严重影响性能。实现这些算子后,模型(特别是视觉编码器部分)的推理速度显著提升。 ### 技术实现 - 为每个算子分别创建了独立的头文件和实现文件(.h/.cc) - 在 `webgpu_execution_provider.cc` 中注册了新算子 - PR 开发主要借助 Claude Opus 4.6 生成,但经过人工审查、修正和测试验证 ### 影响意义 消除了 WebGPU 后端的关键算子空白,减少了推理时的 CPU-GPU 数据传输开销,增强了 WebGPU 在视觉模型上的实用性和性能表现。
## ONNX Runtime WebGPU MultiHeadAttention 修复总结 **主要改动:** 修复了 WebGPU 后端中 MultiHeadAttention 算子的 flash attention 路径在处理 past KV 缓存时的错误逻辑。当 `present_key/present_value` 输出未被请求时,flash attention 路径错误地仍然使用了 `past_key/past_value` 输入,而非 flash 路径则正确地忽略了这些输入。 **解决的问题:** 修复了在支持 subgroup 的 GPU 上(会选择 flash attention 路径)产生错误结果的问题。通过在 `ApplyFlashAttention` 中添加与 `ApplyAttention` 相同的检查逻辑:当 present 输出都为空时,将 past 输入置空并相应调整序列长度参数。 **技术要点:** 将函数参数签名从 const 引用改为按值传递,以允许在函数内部调整 past_key/past_value 和相关序列长度参数,确保两种 attention 实现路径的行为一致性。
## PR 主要改动总结 ### 核心改动 此 PR 更新了 CUDA 后端的 TopK 算子注册机制,将原本仅支持 opset 11 的开放式注册拆分为两部分:opset 11-23 的版本化注册和 opset 24 的新开放式注册。 ### 解决的问题 修复了 CUDA TopK 算子版本不匹配导致的性能问题。之前当模型使用 opset 11 以上的 TopK 节点时,`VerifyVersion` 会拒绝非版本化的内核注册,导致算子静默回退到 CPU 执行,产生不必要的主机与设备间数据拷贝开销。 ### WebGPU 关联 此改动使 CUDA EP 与 CPU 和 WebGPU provider 的 TopK 算子注册模式保持一致,遵循了 PR #27728 建立的统一版本管理规范。 ### 技术要点 无内核逻辑变更,仅调整注册宏(`ONNX_OPERATOR_VERSIONED_KERNEL_EX` 和 `ONNX_OPERATOR_KERNEL_EX`),因为 opset 24 的 schema 与现有 `TopK<true>` 实现完全兼容。