## PR 主要改动总结 ### 核心改动 这个 PR 改进了 WebGPU EP(Execution Provider)在 `CreateEpFactories` 函数中的错误处理机制,增强了 API 初始化失败时的异常处理逻辑。 ### 解决的问题 修复了一个崩溃问题:原代码在 API 尚未成功初始化时就尝试创建 C++ API 的 `Ort::Status` 对象,导致程序崩溃并隐藏了真实的错误信息。新代码采用更保守的机制来创建 `OrtStatus` 对象。 ### 技术影响 通过改进异常捕获和状态对象创建流程(新增 33 行代码),确保了 WebGPU EP 初始化失败时能够正确报告底层错误信息,提升了调试体验和系统稳定性。
## PR 主要改动总结 **注意:此 PR 与 WebGPU 无关,是针对 CUDA 后端的改进** ### 核心改动 为 CUDA PagedAttention 算子添加了 CUTLASS 内存高效注意力机制(MEA)作为降级方案,首次在 **sm<80 架构(Turing/Volta/Pascal)上支持 fp16 的 PagedAttention**。 ### 解决的问题 - 原实现仅支持 sm>=80(Ampere 及更新架构)的 FlashAttention,在旧架构上会直接报错 - 现在 sm<80 + fp16 可通过 MEA 正常运行;sm>=80 默认仍使用 FlashAttention,可通过环境变量切换到 MEA 用于调试和性能对比 - 注意 bf16 在 sm<80 上仍不支持(MEA 的 bf16 需要 sm>=80) ### 技术要点 修改主要集中在实现层(`paged_attention_impl.cu` +204 行)和算子逻辑层(`paged_attention.cc` +85 行),增加了内核选择逻辑和 MEA 实现路径,并补充了相应的 Python 测试用例。
## PR 主要改动总结 ### 核心改动 这个 PR 优化了 WebGPU 后端的矩阵乘法(MatMul)操作,当 `batchB==1` 时,将 `batchA` 维度合并到 `M` 维度中进行计算。 ### 解决的问题 针对 M 维度较小但 batchA 维度较大的场景,原有实现会在每个 tile 中产生大量无效元素。通过维度合并减少了 workgroup 数量,提升了计算效率和 GPU 利用率。 ### 技术影响 修改了 WebGPU 和 Intel 供应商特定的 MatMul 实现逻辑,优化了工作组调度策略。同时增加了相应的测试用例(32 行)以验证维度合并的正确性。 ### 技术要点 这是一个针对批量矩阵乘法的性能优化,通过重塑张量维度来改善 GPU 并行计算的工作负载分布,特别适用于非对称批量场景(一侧有批量维度,另一侧为单批次)。
## PR 主要改动总结 **主要功能改动:** 针对 WebGPU 的 ReduceMean 算子优化了计算策略选择逻辑。当输出尺寸远大于归约维度大小时,改用朴素归约(naive reduction)方法替代共享内存归约方法。 **解决的问题:** 解决了共享内存归约方法在特定场景下的性能问题。当输出维度较大时,共享归约可能需要对输入进行转置操作,这会带来显著的时间开销,影响整体性能。 **对 WebGPU 支持的影响:** 通过根据数据维度特征智能选择归约算法,提升了 WebGPU 后端在处理大输出尺寸归约操作时的执行效率。 **技术要点:** 代码改动量很小(仅 3 行新增,1 行删除),通过添加条件判断实现算法切换,属于性能优化类改动。
## PR 主要改动总结 **1. 主要功能:** 此 PR 为 ONNX Runtime 的 CUDA 插件执行提供器(EP)添加了完整的打包流水线,参照现有 WebGPU 插件的打包模式构建。新增了 4 个 Azure Pipelines 配置文件和 1 个 Linux 构建脚本,共新增 714 行代码。 **2. 解决的问题与特性:** 支持在 Windows x64 和 Linux x64 平台上打包 CUDA 12.8 和 13.0 两个版本,并在选择 CUDA 13.0 时可选支持 Linux aarch64 架构。流水线通过参数化配置(CUDA 版本、包版本、构建类型、Python 配置)实现灵活扩展,同时内置验证逻辑拒绝不支持的组合(如 CUDA 12.8 + Linux aarch64)。 **3. 对 WebGPU 的影响:** 此 PR 与 WebGPU 无直接关系,标题中提到 WebGPU 是因为该 CUDA 打包流水线借鉴了现有 WebGPU 插件的打包架构模式作为参考实现。 **4. 技术要点:** 采用分层 Pipeline 架构(顶层调度 + 平台特定 Stage),通过条件判断和参数验证确保构建配置的合法性,并对 CMake 构建脚本和头文件进行了小幅调整以支持插件打包。
## PR 主要改动总结 **核心功能:** 该 PR 为 WebGPU 后端添加了对批量大小(batch size)> 1 时的 Split-K 优化支持。通过在 dispatch_z 维度同时编码批次索引和 Split-K 索引,并在着色器中通过除法和取模运算进行解码(`batch = logical_global_id.z / num_k_splits` 和 `split_index = logical_global_id.z % num_k_splits`)来实现。 **解决的问题:** 优化了多批次矩阵乘法的性能,在 Intel PTL 硬件上对 `sam-vit-b-decoder-static-fp16-demo` 模型实现了 7.5% 的性能提升。同时将批量大小纳入 Split-K 启用条件,因为增加批量大小本身就能提高并行度,从而降低 Split-K 的优化效果。 **技术要点:** 主要修改集中在 GEMM/MatMul 相关代码(gemm_utils.cc、matmul.cc、matmul_packed.cc 等),增加了 200+ 行代码和相应的测试用例。另外将 `ort_version_check.h` 中的 `consteval` 改为 `constexpr` 以解决 VS2022 的编译错误。
# ONNX Runtime 1.25.1 版本发布总结 ## 主要改动 这是 ONNX Runtime 1.25.1 版本发布,主要为支持 **Qwen3.5 模型**添加了关键算子和优化。 ## 核心特性 1. **新增算子支持**:添加了 LinearAttention 和 CausalConvState 两个自定义算子,为 Qwen3.5 模型提供底层支持,包含 CPU 和 CUDA 实现(新增约 2300 行核心代码) 2. **WebGPU 增强**:实现了 Qwen3.5 的 WebGPU 支持,并对 QMoE(Quantized Mixture of Experts)单 token 解码路径进行融合优化,减少 GPU 调度次数,提升推理性能 3. **算子升级**:更新了多个基础算子签名,包括 RoPE、RMSNorm 等,并将 Reshape 升级到 ONNX opset-25,Transpose 升级到 opset-24 ## 技术要点 新增的 LinearAttention 实现了线性复杂度的注意力机制,CausalConvState 支持因果卷积状态管理,这些都是现代高效 Transformer 架构的关键组件。
## PR 主要改动总结 ### 1. 主要功能改动 将 SubgroupMatrixMatMulNBits 从基于厂商特定(Apple/Intel)的实现重构为基于配置的厂商无关(vendor-agnostic)架构。现在任何支持匹配子组矩阵配置的 GPU 都能自动被支持,无需硬编码厂商判断。 ### 2. 解决的问题与新特性 - **移除厂商绑定**:用统一的 `SupportedSubgroupMatrixConfig` 结构替代厂商特定配置表,包含矩阵维度(M/N/K)、组件类型、子组大小等参数 - **新增 NVIDIA 支持**:添加 16x16x16 shader 模板,专门优化 NVIDIA Blackwell 架构(如 RTX 5080),使用 128 线程工作组处理 64x64 tile - **改进可扩展性**:shader 选择由配置维度驱动(8x8x8、8x16x16、16x16x16),而非厂商标识 ### 3. 对 WebGPU 支持的影响 显著提升 WebGPU 量化矩阵运算的通用性和性能,通过自动配置匹配机制实现跨厂商 GPU 的无缝支持,为未来添加更多硬件优化奠定基础。 ### 4. 技术要点 - shader 模板重命名反映矩阵维度(`_apple` → `_8x8x8`,`_intel` → `_8x16x16`) - 16x16x16 实现采用边界检查和 scratch buffer 处理部分 M tile - 修复预打包(prepack)逻辑以适配新配置系统
## 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+ 行新代码,为后续优化奠定基础。