本周(5月3日~5月10日),15 个开源仓库中有 9 个产生了更新,共计 168 次提交。以下是各仓库的关键变化及技术分析。

tencent/ncnn:Vulkan 管线缓存、PNNX 功能增强与 x86 修复

本周 ncnn 共有 13 次提交,涵盖 Vulkan 后端、PNNX 工具链及 x86 优化等多个方面。

Vulkan 管线持久化缓存

最值得关注的变化是 Vulkan 后端新增了管线缓存持久化支持(PR #6702)。此前 ncnn 的 Vulkan 后端每次运行时都需要重新编译 SPIR-V 着色器,这在移动端 GPU(如 Adreno、Mali)上可能导致数秒的启动延迟。新的实现按着色器哈希缓存编译后的管线对象,并附带严格的设备/驱动/着色器校验,确保缓存不会在不同 GPU 间误用。这对生产环境中需要快速冷启动的场景意义重大。

同时,PR #6705 修复了 Vulkan 扩展依赖链的处理——某些扩展存在传递依赖(如 VK_KHR_16bit_storage 依赖 VK_KHR_storage_buffer_storage_class),之前的实现未递归解析这些依赖关系。

PNNX:Torch 2.11 支持、FLOPs 统计与 NPY 输入

PNNX 方面有三项更新:

  • Torch 2.11 兼容性更新(PR #6701),保持与最新 PyTorch 的同步;
  • FLOPs 和内存操作数统计(PR #5836),允许开发者在模型转换时直接打印计算量和访存量,对模型选型和性能预估非常实用;
  • NPY 张量输入支持(PR #6700),允许用户直接传入 NumPy 格式的 .npy 文件作为 PNNX 推理输入,简化了 Python 生态与 ncnn 的集成路径;
  • PReLU(num_parameters=1)自动转换为 LeakyReLU(PR #6344),使得更多激活函数能与 Conv 融合,减少运行时 Kernel Launch 次数。

x86 与架构修复

  • 修复了 i386 平台上 AVX512 BF16 GEMM 的 B-tile 打包顺序问题(PR #6708),DPBF16 指令需要特定的 K/K+1 配对顺序;
  • ASAN 报告了 x86 临时缓冲区对齐问题(PR #6703);
  • 修复了 Windows ARM 构建(PR #6699),确保 ncnn 在新一代 Windows on ARM 设备上可用;
  • 修复了 SSE ShuffleChannel 中最后一个通道处理逻辑的缓冲区溢出(PR #5735)。

Conv1D GEMM 实现(PR #6587)

Conv1D 算子新增了 GEMM 路径,使用 cm(列主序矩阵乘法)加速。这对于语音识别(如 Mamba、S4 等序列模型的 Conv1D 层)场景有实际意义。


alibaba/MNN:LLM 推理优化、Qualcomm QNN 并行化与 RISC-V 加速

阿里巴巴 MNN 本周 15 次提交,LLM 相关优化占据主导。

Omni 模型交错生成:Thinker/Talker 延迟降低 2.7 倍

PR #4397 实现了 Omni 多模态模型(如 Qwen2-Audio 等)的交错生成策略。传统的 Thinker/Talker 模式中,Thinker(文本/推理部分)和 Talker(音频/输出部分)串行执行,Talker 等待 Thinker 完整生成后才开始。新实现将两者交错执行,TTFA(Time-To-First-Audio)降低了 2.7 倍。这是一个经典的流水线并行(Pipeline Parallelism)思路在单设备推理中的应用。

推测解码中的缓存修复

PR #4421/#4410 修复了推测解码(Speculative Decoding)中的两个关键问题:KV Cache 不匹配和 M-RoPE 支持。推测解码依赖 draft model 和 target model 之间共享的 KV Cache 结构,缓存的 dtype 或 shape 不匹配会导致灾难性后果。M-RoPE 是 Qwen2-VL 等多模态模型的旋转位置编码变体,在多维空间中应用 RoPE。

GPTQ 权重量化加载器修复

PR #4411 修复了 GPTQ 加载器中 weight_dict 的重初始化问题。在逐层量化的 GPTQ 流程中,每次调用加载器会重置共享的权值字典,导致量化解码器的权重引用被破坏。

QNN 离线图导出的多进程并行化

PR #4414 将 Qualcomm QNN 后端的离线图导出过程改为多进程并行。QNN 编译每个子图时是独立进程,充分挖掘多核 CPU 的并行能力,减少整体编译时间。

RISC-V 向量扩展 Int8 加速

PR #4359 为 RISC-V 向量扩展(RVV)增加了 Int8 函数加速。RVV 在嵌入式 AI 场景中越来越重要,MNN 持续扩展对其支持。

几何计算修复与内存管理

  • GeometryCumSum 的 midtensor 类型不匹配修复——创建中间张量时未复制数据类型,导致整型 cumsum 结果错误(默认为 float);
  • KV Cache 磁盘扩展中的 size_t 宽度收窄问题修复(PR #4413);
  • CPU 频率扫描时的错误日志修复(PR #4400)。

ggml-org/llama.cpp:新模型架构、SYCL/OpenCL/CUDA 加速与 Hexagon 后端

llama.cpp 本周 30 次提交,覆盖新模型支持、多后端性能优化和基础设施更新。

新模型架构支持

  • Sarvam MoE 架构(PR #20275):支持印度 AI 创业公司 Sarvam AI 的 MoE 模型;
  • Gemma 4 26B NVFP4(PR #22804):Google Gemma 4 系列 26B 模型的 NVFP4(NVIDIA FP4 量化)格式支持;
  • MiMo-V2.5 Flash Attention(PR #22812):支持 d_kq=192、d_v=128 的非标准注意力头维度配置,Flash Attention MMA/Tiles 路径扩展;
  • Sarashina 2.2 Vision 3B(PR #22103):日本语言模型家族的多模态扩展。

SYCL 后端:BF16、量化内核与 Battlemage GPU

本周 SYCL 团队提交频繁,说明 Intel 在 llama.cpp 的投入持续加大:

  • BF16 GET_ROWS 支持(PR #21391):此前 Gemma 4 等模型使用 BF16 嵌入张量时,GET_ROWS 操作会 fallback 到 CPU,导致每 token 一次完整的 GPU→CPU 张量传输。新增的 SYCL BF16 路径消除了这一瓶颈;
  • Q5_K/Q8_0 MMVQ 重排(PR #22152):优化量化矩阵的乘法和反量化路径;
  • Battlemage AOT 构建(PR #22147):通过 spir64_gen 目标为 Intel Battlemage GPU 提供离线编译支持,对 Arch Linux 等社区的 Intel GPU 用户意义重大;
  • PAD 算子的非连续输入支持(PR #22148);
  • Flash Attention 减少分配开销(PR #22732)。

CUDA:Snake 激活融合与 out_prod 批量

  • Snake 激活融合(PR #22667):语音模型(BigVGAN、Vocos)中的 Snake 激活函数原本被分解为 mul→sin→sqr→mul→add 五个独立算子,现在 fused 为单次 elementwise kernel,显著减少 kernel launch 开销;
  • out_prod 批量 cublasSgemmStridedBatched(PR #22651):将 out_prod 算子的内循环批量化为 cuBLAS strided batched GEMM。

Hexagon:Gated Delta Net 与 L2 Normalization

  • Gated Delta Net 内核(PR #22837):在 Hexagon HVX 上实现了 GDN 循环的完整 pipeline——PP 路径使用 4 行融合 kernel,TG 路径用 8 行减少 K/Q/Gate 向量重载开销,VTCM 状态暂存区配合 DMA 实现单周期访问;
  • L2 Normalization(PR #22816):新增 HVX 向量化的 L2 Norm 实现。

OpenCL:Adreno Q4_0 MoE GEMM

PR #22731 为 Adreno GPU 增加了 Q4_0 量化的 MoE GEMM 实现,扩展了 OpenCL 后端对 MoE 架构的覆盖。

其他重要修复

  • PCI bus ID 标准化(PR #22820):统一使用小写 PCI bus ID;
  • 推理预算 logit bias 回滚(PR #22740):修复 +inf logit bias 导致的 reasoning token 预算处理问题;
  • 设备状态保存/加载修复(PR #22805):修复 llama_state_* API 的跨设备状态序列化问题;
  • Vertex AI 兼容 API(PR #22545):server 端新增 GCP Vertex AI 协议兼容模式。

qualcomm/ai-hub-models:Scorecard 重构、CI 修复与设备支持

高通 AI Hub 模型库本周 30 次提交,主要围绕 LLM Scorecard 基础设施重构。

LLM Scorecard 重构(6 个 PR 系列)

本周由 Kory Watson 主导了一个 6 PR 的系列重构:

  1. Scorecard 工件路径集中管理(PR #3254)
  2. ScorecardJobYaml 新增 from_intermediates/from_test_artifacts(PR #3263)
  3. 移除量化测试中的 device 参数(PR #3264)
  4. 评分卡结果收集扁平化(PR #3265)
  5. 导出返回类型改为类型化容器类(PR #3267)
  6. 新增组件/图名持久化存档(PR #3269)

这一重构将 LLM 逐步融入 Scorecard 评测流程,扁平化设计使得后续支持更多参数量维度(如子图名称)成为可能。

设备与 CI 修复

  • 切回生产环境部署(PR #3268):dev 后端自 5 月 7 日起连续故障,所有 nightly 任务因此失败;
  • 新增 X Plus 芯片名支持(PR #3261/3266);
  • 修复 GPU weekly 任务中 schedule 触发的空 inputs 问题(PR #3246);
  • 添加 similar devices 功能(PR #3206/3221/3227);
  • TTS 模型导出问题修复:Pydantic v2 序列化时基类字段丢失导致的 config.json assets 为空;
  • Nightly 失败 Issue 自动嵌入测试摘要(PR #3240)。

microsoft/onnxruntime:FLOAT8E8M0 数据类型、Plugin EP 生态与 CoreML/WebGPU

ONNX Runtime 本周 30 次提交,数据类型扩展和 Plugin EP 基础设施是两大主题。

新数据类型 FLOAT8E8M0

PR #28381 新增了 FLOAT8E8M0 数据类型支持。这是一种全正数的 8 位浮点格式:8 位指数、0 位尾数、无符号位。所有值都是 2 的幂(2^(val-127)),0xFF 保留为 NaN。这与其说是一个”精度可用的数值类型”,不如说是一种缩放因子编码格式——非常适合做量化 scale 的紧凑表示,或者某些极端量化的权重值。

Plugin EP 基础设施

本周 Plugin EP 的 API 完善速度明显加快:

  • Session 选项 Getter(PR #28377):新增 MemPatternEnabledExecutionMode 的 getter API,让 Plugin EP 可以查询当前 session 配置以做兼容性校验;
  • OnSessionInitializationEnd 回调(PR #28319):给 Plugin EP 作者一个机会在 session 初始化完成后清理临时资源;
  • 加载器引用计数泄露修复(PR #28396):当 Plugin DLL 不导出 GetProvider 时,共享库的引用计数未递减;
  • CUDA Plugin NuGet 包(PR #28378):C#/.NET 打包,主包名 Microsoft.ML.OnnxRuntime.EP.Cuda
  • CUDA Plugin Python 包(PR #28299):Linux/Windows x64 的 Python wheel 发布流水线;
  • WebGPU NuGet 包(PR #28313):移除对 ORT 主包的硬依赖(PR #28384)。

FusedConv 的 CoreML 支持

PR #28289 为 CoreML EP 增加了 com.microsoft:FusedConv 的支持。FusedConv 是 ORT 的 ConvActivationFusion pass 生成的融合算子,此前 CoreML EP 无法处理保存后重新加载的优化模型中的 FusedConv 节点。

WebGPU FlashAttention:支持 QKV Bias

PR #28380 移除了 FlashAttention 中 bias == nullptr 的限制,使得 MultiHeadAttention 节点即使带有 QKV Bias 也能走 FlashAttention 加速路径。这对 Whisper 等语音模型的 WebGPU 推理性能提升显著。

算子 opset 覆盖补齐

本周多个 PR 补齐了 CUDA EP 的 ONNX opset 覆盖缺口:

  • Round(opset 11→22)
  • Equal(opset 13→19)
  • Reshape(opset 23→25)
  • RNN(opset 14→22)
  • ReduceMax/ReduceMin(opset 18→20)
  • Cast(opset 23→25)
  • 同时修复了 Resize 中 round_prefer_ceil 模式对负半值的不正确处理(PR #28345)。

Pre-opset-13 Split 的 CoreML 回退修复

PR #28270 将 CoreML Split 的最低支持 opset 从 13 降至 1。pre-13 的 Split 通过 INTS 属性传递分割尺寸,而新版通过第二个输入传递。现在 CoreML EP 两种方式都支持了。

量化工具链改进

PR #28221 为 quantize_static() 新增了 calibration_cache_path 参数,允许用户保存和重放校准阶段的 TensorsData。当迭代调参(调整 nodes_to_excludeactivation_typeweight_type)时,无需重新跑昂贵的校准推理。

PEP 561 py.typed 标记

PR #28438 在 onnxruntime 包根目录添加了 PEP 561 的 py.typed 标记文件,使得 mypy/pyright 等类型检查工具能正确解析 inline 类型注解。


microsoft/onnxruntime-genai:CUDA Graph、Gemma 4 多模态与 Qwen3.5 优化

本周 6 次提交,集中在性能优化和新模型支持。

CUDA Graph Capture:Decode 吞吐提升 20-45%

PR #2070 移除了此前对 CUDA Graph 的硬性阻挡,在 decode 阶段启用 CUDA Graph capture。Graph capture 将整个 decode 迭代的 kernel launch 序列化到单个图执行中,消除了每 token 的 CPU→GPU launch 开销。Qwen3.5 系列(0.8B-9B)的 decode 吞吐量提升了 20-45%。

Gemma 4 多模态支持

PR #2103 为 ORT GenAI 新增了 Google Gemma 4 全系列多模态支持:纯文本(gemma4_text)、视觉语言和 Any-to-Any(视觉+音频+文本)。Any-to-Any 通过 speech.filename 配置自动检测,无需单独注册模型类型。

Qwen3.5:移除 RMSNorm 的 fp32 cast

PR #2101 移除了 Qwen3.5 模型中 RMSNorm 附近强制 fp32 的 use_fp32 标记。在 24 层模型中,这消除了约 216 个 Cast 节点(108 个 to-fp32 + 108 个 to-fp16),WebGPU 上 decode 速度提升 13.2%(76.6→86.8 tps)。

LFM2 模型支持

PR #1979 添加了 LiquidAI 的 LFM2 系列 LLM 支持,包括 Model Builder 支持。


pytorch/executorch:Vulkan 着色器优化、W4A8 GEMM 量化与 CI 修复

ExecuTorch 本周 30 次提交,Vulkan 后端的调优和 TFLite 兼容性改进是重点。

Vulkan 后端深度优化

多个 PR 围绕 Vulkan 后端的着色器性能展开:

  • q8ta_pixel_shuffle 融合自定义算子(PR #19397):RefineNet 分割模型的 PixelShuffle 操作原本被分解为 dequant→view→permute→view→quant 五个步骤,周期约 860μs。融合为单一着色器后显著降低延迟;
  • q8ta_conv2d_pw 累积器减半(PR #19396):Adreno 740 上点态量化卷积的 int32 累积器从 32 个减至 16 个,提升 ALU 占用率,降低长延迟停顿;
  • Subgroup 属性查询基础设施(PR #0cafcb2):添加 VK_EXT_subgroup_size_control 支持,为编写跨 GPU(Adreno=64、Mali=16、NVIDIA=32)子组宽度可移植的着色器奠定基础;
  • 布局感知分区器的量化张量流通(PR #19395):允许 identity-like 操作保持 PACKED_INT8 布局流通,消除虚假的 clone dispatch。

W4A8 GEMM 量化优化

PR #19209 将 W4A8 MoE GEMM 的激活量化提升到主循环之外。原始实现中每个 K-tile 都需要对激活做 tl.max(tl.abs(a)) + INT8 转换,每个 program 做了 256 次归约。新实现预量化激活到单独的 INT8 缓冲区,将 BF16→INT8 带宽占用减半。对于 MoE 模型的推理,每次前向推理会调用多个 Expert GEMM,这一优化的累积效果相当可观。

TFLite/XNNPACK 更新

  • XNNPACK 更新重放(PR #19237):此前被回退的 XNNPACK 更新重新落地,pthreadpool 相关问题已修复;
  • 量化 Conv1D NLC 的 AOT 偏移预计算(PR #19344);
  • 算子传播优化(PR #19345/19346):Slice 操作在 Binary Broadcast 和 Unary 操作前的传播重排。

文档与 CI

  • Python 类型注解修复(PR #4413a5c):在 Runtime API 参考文档中添加 Extension APIs;
  • HF Xet 存储禁用(PR #19371):HuggingFace 的 Xet 存储后端在 CI 运行时中经常暂停下载,导致 90 分钟超时,全量设置 HF_HUB_DISABLE_XET=1
  • 文档 URL 修复(PR #19325/19338):修复多处过期版本引用的文档链接;
  • macOS CI 的 PyTorch wheel 缓存键修复(PR #19350)。

apache/tvm:TFLite 前端扩展、PyTorch 到 Relax 的 Bug 修复与 Web OPFS

TVM 本周 13 次提交,覆盖 Bug 修复和新前端支持。

TFLite 前端:Conv3D 与 Segment 算子

  • Conv3D 支持(PR #19523):为 Relax TFLite 前端增加了 3D 卷积的支持,正确映射 TFLite 的 DHWIO 核布局;
  • Segment 算子(PR #19491):新增 SEGMENT_SUMUNSORTED_SEGMENT_MINUNSORTED_SEGMENT_PROD 的 Relax 前端支持,通过 relax.op.scatter_nd 配合对应归约模式实现;
  • SPACE_TO_BATCH_ND / BATCH_TO_SPACE_ND 测试覆盖(PR #19499):改为通过 TOPI 实现;
  • GATHER 测试覆盖(PR #19516)。

PyTorch 前端 Bug 修复

本周 Soowon Jeong 贡献了多个 PyTorch 前端的精度修复:

  • torch.flip 的多轴支持(PR #19511):此前 Relax 的 flip 转换器将多维度输入截断为单轴,静默丢弃了除第一个之外的所有维度;
  • std/var 的 correction 支持(PR #19512):correction 参数被忽略,所有方差都除以 n(总体方差),而非 (n-1) 或用户指定的值;
  • index_put_ 的嵌套 tuple segfault(PR #19488):当输出包含嵌套 Python tuple 时,直接传递给 Relax 的 tuple 构造器导致段错误。

S-TIR GPU 调度器修复

PR #19514 修复了 DefaultGPUSchedule 对纯标量 PrimFunc 的处理——当 body 是 SBlockRealize(无循环、无迭代变量)时,调度器试图在根块上添加循环,触发 Cannot add loops on top of the root block 崩溃。修复方法是在裸标量 body 上包裹一个恒等循环。

TIR CSE 跳过布尔表达式

PR #19502 使 TIR 的公共子表达式消除(CSE)跳过布尔类型的子表达式。布尔表达式(如 i < na && b)通常是分支条件,将其提升为 cse_v: bool 常量并不利于下游优化(ProveCondition、分支消除等)。

Web 后端:OPFS 缓存支持

PR #19494 为 TVM Web 运行时添加了 Origin Private File System(OPFS)作为工件缓存机制。OPFS 是浏览器 File System API 的一部分,相比 IndexedDB 提供更好的大文件存取性能。


ml-explore/mlx-lm:Gemma 4 共享层的 KV 投影修复

Apple MLX 框架本周仅 1 次提交。PR #1240 修复了 Gemma 4 模型权重清理(sanitize)函数中对共享层的 KV 投影映射的处理。当模型的多层共享相同的键值投影时,权重清理函数未能正确剥离这些共享投影的冗余条目。


无更新仓库

以下仓库本周无新提交:

  • airockchip/rknn-toolkit2
  • airockchip/rknn-llm
  • sophgo/tpu-mlir
  • sophgo/LLM-TPU
  • futz12/ncnn_llm
  • mlc-ai/mlc-llm

本周技术亮点总结

  1. llama.cpp 的多后端并发优化最为活跃——SYCL 团队的 Intel GPU 优化、CUDA 的算子融合和批量 GEMM、Hexagon 的 GDN 和 L2 Norm、OpenCL 的 Adreno MoE GEMM,体现了 GGML 生态在多样化硬件上的广泛兼容性。

  2. ONNX Runtime 的 Plugin EP 生态正在加速成型:CUDA 和 WebGPU 的 Python/NuGet 包发布流水线落地、新增 session 配置 getter 和回调 API,EP 开发者体验大幅改善。

  3. 端侧量化推理的深化——ncnn 的 Conv1D GEMM、ExecuTorch 的 W4A8 量化预提取和 Vulkan q8ta 融合算子、llama.cpp 的 Snake 激活融合,都在推动端侧推理的极致性能。

  4. TVM 的 PyTorch 前端精度修复——flip 多轴、std/var correction、index_put_ segfault这些修复虽不 headline,但对生产环境的模型部署正确性至关重要。