端侧 AI 推理框架周报(2026-04-22 ~ 2026-04-29)
本周跟踪了 15 个主流端侧 AI 推理框架的开源仓库,其中 9 个有显著更新,共产生 170 次提交。以下是各仓库的重点变化分析。
1. alibaba/MNN — 4 commits
Vulkan 后端 no-subgroup 降级分支
MNN 本周在 Vulkan 后端的 VulkanLinearAttention 和 Conv1x1-Decode 的 gemv 操作中引入了 no-subgroup 降级分支。这是一个非常实用的兼容性改进:
- 背景:Vulkan subgroup(子组)操作是现代 GPU 做 warp-level 协作的高效方式,但并非所有 Vulkan 实现都支持(特别是 Mesa 驱动的某些 Intel GPU、部分移动端 Mali GPU)。
- 实现思路:为主路径保留 subgroup 优化的高性能路径,同时为不支持的设备提供了纯线程级替代实现。使得 LLM decode 阶段的注意力计算在更广泛的 Vulkan 设备上可用。
这种”高性能路径 + 通用降级”的架构思路值得借鉴,尤其对于需要跨平台部署的推理框架而言。
CPU ARMv8.2/v8.6 decode 性能优化
另一个值得关注的变化是对 ARM 平台 decode 速度的优化,专门针对 ARMv8.2 和 ARMv8.6 指令集做了调优。ARMv8.6 引入了 BF16 和 INT8 矩阵乘法的原生指令(如 BFDOT、SMMLA),利用好这些指令可以在移动端 LLM 推理中获得显著的 decode 加速。
Geometry Bugfix:cumsum 对 virtual type 的修复
修复了 cumsum 操作在使用 command buffer 时的 bug(#4267),这个修复虽然小,但涉及到 MNN 的 Geometry 计算图中的类型推导逻辑,影响算子正确性。
2. sophgo/tpu-mlir — 9 commits
2D RMSNorm Weight EU_ALIGN Bug Fix
FPGA/NPU 上做 LayerGroup 并行编译时,weight 的 EU(处理单元)对齐是一个容易出问题的细节。本次修复了 RMSNorm 在 LayerGroup 中未正确设置 eu_align=false 的问题,避免了因对齐假设错误导致的计算结果错误。对于在 TPU 上部署 LLM 的用户来说,这是一个有实际意义的 Bugfix。
IO-Alone 地址分配浪费修复
修复了当 outputs 与 inputs 共享同一地址时,地址分配器多分配内存的浪费问题。这个优化对于内存受限的端侧场景很有价值——在 TPU 推理中,显存合理复用能直接决定是否能跑更大的模型。
LLM Analyse 工具增强
增加了更多算子的支持。llm_analyse 是算能 TPU-MLIR 工具链中的一个分析工具,用于检测模型中算子在 TPU 上的兼容性和性能瓶颈。扩展算子覆盖度意味着更多模型可以在不进行手动调优的情况下获得分析报告。
文档与代码结构整理
- Docker 镜像的用户组信息更正
- README 和配置文件刷新
- LLM PP(prefill + decode pipeline)bmodel 命名规范化(
embed_vit/block_{i}/lmead)
3. sophgo/LLM-TPU — 3 commits
Qwen3.5 PP 示例
提供了 Qwen3.5 的 PP(pipeline parallel)bmodel 示例。PP 是算能 TPU 推理中的关键概念,它将 prefill 和 decode 阶段分别部署到不同的模型文件中,以优化端到端推理延迟。Qwen3.5 是本月刚发布的新版本模型,算能社区跟进速度值得肯定。
4. ggml-org/llama.cpp — 30 commits(本周最活跃之一)
CUDA 后端重大更新
- Blackwell NVFP4 原生支持:为 NVIDIA Blackwell 架构(RTX 50 系列)增加了 NVFP4(4-bit 浮点格式)的原生支持。Blackwell 引入了原生的 FP4 张量核心,llama.cpp 率先在开源社区跟进这一特性。这意味着在 Blackwell 显卡上推理 4-bit 量化模型可以获得更高的吞吐量和更低的显存占用。
- Flash Attention for Mistral Small 4:为 Mistral Small 4 新增了 DKQ=320/DV=256 的非标准 head 尺寸 Flash Attention 支持,GQA ratio 32。这说明了 llama.cpp 的 kernel 系统在处理非标准 head size 时有着良好的扩展性。
- CUDA Fusion 代码重构:将 fusion 代码从分散实现重构为统一架构,配合环境变量控制开关。
WebGPU 后端
- Q1_0 量化格式支持:添加了 Q1_0 的快速 matmul 和 matvec kernel。Q1_0 是 ggml 中极具侵略性的 1-bit 量化格式,这次在 WebGPU 上的实现让浏览器端推理 1-bit 模型成为可能。
- I-Quant 快速 mat-vec kernel:除了 Q1_0,还添加了所有 i-quant 量化系列的快速 mat-vec kernel,覆盖 Q2_K ~ Q6_K 等量化格式。
- Flash Attention 兼容性修复:修复了不支持 subgroup 的 WebGPU 设备上的 FA 检查逻辑。
- SSM Scan 缓冲别名修复:修复了 State Space Model 推理中 buffer aliasing 问题。
Vulkan 后端
- Q4_K/Q5_K scale load coalescing:SPIR-V 编译器(特别是 Mesa ANV Intel 驱动)在处理 Q4_K/Q5_K 的 scale 加载时优化不佳,本次通过合并加载模式显著改善了编译质量和运行时性能。
- WriteTimestamp 后添加 barrier:确保 query pool 的 timestamp 写入在后续 host 端读取前的可见性。
RISC-V 平台
- SpacemiT IME 扩展支持:为 SpacemiT(赛昉科技)K3 平台的 IME(Int8 Matrix Engine)添加了
xsmtvdotii自定义扩展的编译支持。这是一个 RISC-V 生态中端侧推理的重要进展。
SVE(可扩展向量扩展)优化
- Fujitsu 贡献了
gemm_q8_0_4x8_q8_0()kernel 的 SVE 调优代码。SVE 是 ARM 的可变长度向量扩展,在富士通 A64FX 等处理器上尤为重要。
服务器与 WebUI
- Server Tools 系统:大版本更新,引入了
/tools端点的 Server Tools 支持,集成了内置工具 + MCP 协议 + JSON Schema 的完整工具调用框架。这是将 llama.cpp 从单纯的文本生成引擎向 AI Agent 执行平台演变的关键一步。 - Router form-data 转发:修复了 router 模式下无法使用
/v1/audio/transcriptions的问题(#22044),使得多模型部署场景下的语音功能得以工作。
模型支持
- NVIDIA Nemotron Nano 3 Omni:新增了对该多模态模型的 GGUF 格式转换支持。
- Reasoning Budget 多轮修复:修复了 Qwen3.6 等多轮
<think>模型在 DONE 状态后无法正确重置 budget 的问题。
CANN(华为昇腾)后端
- 新增了 GGML_OP_SET、CUMSUM、FILL、DIAG、TRI、SOLVE_TRI 和多种 unary ops 的实现,继续扩大华为昇腾平台的算子覆盖度。
5. qualcomm/ai-hub-models — 30 commits
新模型发布
- SixDRepNet:6D 旋转头部姿态估计模型,新增到模型库中。
- Qwen2.5-VL-7B-Instruct:正式发布并添加 release assets,附带多个平台的性能数据(8 Elite、X Elite、X2 Elite)。
基础设施改进
- Scorecard 回归问题自动化:引入了 link jobs(编译后链接阶段的自动化测试),在 scorecard 流程中增加了 PR 自动创建和 Issue 自动生成的能力。
- CI 稳定性增强:添加了更多重试逻辑以缓解高通内部网络的请求限流问题,以及 URL 验证时的 429 处理。
质量提升
- Claude 自动代码审查:通过 Claude Code 发现了 15 个关键 bug(yolor 缺少 assert、foot_track_net 标签类型错误、ddcolor 等),均得到修复。
- WaveLM eval pipeline 修复:修复了峰值归一化、撇号处理和标注量化的三个 bug。
6. microsoft/onnxruntime — 30 commits(安全修复与性能优化并重)
安全修复(本周重点主题)
本周 ONNX Runtime 在安全方面投入显著:
Python Backend setattr 漏洞修复(#28083):用户控制的
kwargs通过setattr()应用到SessionOptions和RunOptions,可能被利用进行任意文件覆盖。修复方案是用白名单机制替代了无限制 setattr。RNN operator sequence_lens=0 堆越界读取(#28052):当
sequence_lens为 0 时,sequence_lens[batch] - 1 = -1导致从输出缓冲区的负偏移处读取 heap 数据,泄露未初始化内存到Y_h输出张量中。SVM vector_per_class 边界检查(#27952):未验证的 vector_per_class 维度可能导致非法内存访问。
EmbedLayerNormalizationShapeInference 堆越界写入(#28176):当
getNumOutputs() == 2 && mask_index_type == 0时无条件写入 output index 2,造成堆越界写入。EP Adapter reinterpret_cast ABI 问题(#28081):
OrtKernelInfo*到内部OpKernelInfo*的reinterpret_cast在跨 DLL 边界时 ABI 破坏,改用 C API 调用。
CUDA 后端
- PagedAttention SM<80 FP16 回退:为 Turing/Volta/Pascal 架构添加了基于 CUTLASS memory-efficient attention 的 FP16 降级路径,使 PagedAttention 在 sm<80 的 GPU 上首次可用。
- GQA Unfused FP32 Accumulation:修复 Gemma 4 因 head_dim=512 导致的 fp16/bf16 overflow(#28195),新 kernel 将 Q·K^T 写到 FP32 暂存缓冲区。这是一个优雅的 fix——只在需要时才启用更昂贵的 FP32 累加路径。
- LabelEncoder CUDA EP:基于排序键 + 二分搜索实现了 CUDA 上的 LabelEncoder(O(log n) per element)。
WebGPU 后端
- SubgroupMatrix MatMulNBits 重构:从供应商特定配置(Apple/Intel)迁移到供应商无关的配置表,任何支持相应 subgroup matrix 配置的设备(通过 Dawn 查询)都能自动适配,并添加了 NVIDIA 16x16x16 配置支持。
- RotaryEmbedding position_ids 边界检查:完成 WebGPU/JS 路径的安全修复(#27597 的后续)。
- MHA past KV 忽略逻辑:当 MultiHeadAttention 只有 1 个输出(无 present KV)时,正确忽略 past KV 输入,匹配 CPU EP 语义。
CoreML EP
- QuickGelu 和 HardSigmoid 支持被添加到 CoreML Execution Provider 中,快速跟进更多激活函数的苹果芯片硬件加速。
线程池优化
- 引入可选的指数退避自旋模式(exponential-backoff),当启用时每次自旋迭代发出几何递增的
SpinPause()调用,降低 CPU 占用和功耗。
7. microsoft/onnxruntime-genai — 4 commits
k_quant_linear 混合精度量化
这是一个有针对性的重要改进:对于 Qwen3.5 等 hybrid attention 模型,在线性注意力投影和 MLP 层中引入 INT8 量化(原来为 INT4),因为线性注意力的递归结构会在整个序列长度上累积量化误差(不像 softmax attention 那样每步归一化)。这本质上是通过牺牲少量压缩率换取关键层的精度保持。
Mistral3/Pixtral VLM 多图推理
完成了 Mistral3 VLM(视觉语言模型)的完整集成,包括:
- C++ 图像处理器:处理
[IMG]/[IMG_BREAK]/[IMG_END]token 的展开逻辑 - PixtralVisionState:每图独立的视觉处理状态管理
- 多图推理支持
WebGPU Continuous Decoding
引入 GPU graph capture 的支持,对 attention mask 的更新做了 CUDA 和 WebGPU 双端优化,为网页端持续生成提供基础设施。
8. pytorch/executorch — 30 commits
新模型支持
- Gemma 4 E2B/E4B 多模态模型:完成了 Gemma 4 的 export、双方法 runner 和端到端推理流水线。Google Gemma 4 是最新发布的模型系列,Executorch 的快速跟进体现了其在 LLM 生态中的活跃度。
- Qwen3.5 Attention Custom Op(已 revert):曾添加了 recurrent gated delta rule 自定义算子,但因内部问题临时回退。这是一个双向注意力替代方案的重要尝试。
AOTI/AOTInductor 优化
- Per-Weight Constant Cache(#18901):多方法 AOTI 模型(如 Qwen3.5 MoE 的 prefill/decode 分离)会为每个方法独立加载权重 blob。引入 per-weight FQN-keyed 常量缓存后,共享权重只加载一次。这个优化对 GPU 显存需求影响显著——Qwen3.5 MoE 从 35 GB 降到了单卡 24 GB 以下。
- MoE Kernel 优化:使用 KernelAgent 自动调优 MoE kernel,移除多余的精度转换,实现 ~13% 的性能提升。
- Registry 按需大小:根据 selective build 元数据精确确定所需 kernel 数量,在高配 MCU 上节省约 24 KB BSS。
ET-VK(Vulkan 后端)改进
- Fused apply_rotary_emb:为 SAM2/EdgeTAM memory attention 添加了 fused 自定义算子,将原本需要 12+ 个小操作的 layout shuffle 链合并为单次 GPU dispatch。
- SDPA ViT Attention 修复:当 Q·K^T 的點积超过 fp16 最大范围(65504)时,改为 fp32 中间累加。ViT-S encoder 的注意力计算精度问题由此得到解决。
- Layout 分配优化:将 DFS 改为 BFS 遍历下游用户,layout transition 减少了 ~89%(EdgeTAM ViT-S encoder 从 73 降低到 9)。
嵌入式支持
- Zephyr + Ethos-U NPU 示例:新增在 Alif Ensemble E8 DevKit(Cortex-M55 + Ethos-U55 256 MAC)上运行 INT8 MobileNetV2 的完整示例,19ms 推理时间,100% NPU 卸载。
- Cortex-M FVP E2E Nightly:重构了 Cortex-M 的 Fixed Virtual Platform 端到端测试为可复用 workflow,并增加了 nightly 覆盖 4 个额外模型。
- Pico2 链接顺序修复:修复了 Raspberry Pi Pico2 上 codegen 符号因
--whole-archive解析顺序导致的链接失败。 - 选择性构建内存优化:根据 selective build 生成的元数据精确确定 kernel 注册表大小,替代原来固定的 2000 个槽位,节省内存。
平台适配
- Metal 后端签名支持:Hardened Runtime 拒绝在导出时签名的 dlopen’d code,Metal 后端现在支持在 AOTI 编译后自动
codesign.so 文件。 - Android ProGuard 规则:添加了
@DoNotStrip注解和 consumer ProGuard 规则,防止 R8 混淆时移除 JNI 调用的类。 - torch_pin.py 中央化:将所有 torch-family 版本信息统一到
torch_pin.py,消除多个源文件之间的版本不一致。
9. apache/tvm — 30 commits(大规模重构周)
架构重构:libtvm.so 一分为二
这是本周 TVM 最重大的变化:#19444 将原本单一的 libtvm.so 拆分为 libtvm_runtime.so 和 libtvm_compiler.so。这一改动解决了长期存在的痛点:
- 二进制体积:LLVM-static 占据了编译器部分的主体,纯运行时部署不用再携带编译器。
- 安装结构:避免了 Python package 目录下的符号冲突。
- 链接器依赖:
libtvm_compiler.so不再硬链接运行时后端的 ModuleCreate 符号——这些符号现在通过ffi.Module.create.<kind>注册表间接引用(#19447)。
IR 体系向 tvm-ffi 迁移(大规模清理)
Tianqi Chen 主导了一系列关于 IR 基础设施向 tvm-ffi 迁移的重构:
- include/tvm/node 迁移到 include/tvm/ir(#19463):清理了历史遗留的 node vs ir 分离。
- ReprPrinter → ffi_repr 迁移(#19461):~169 个
TVM_STATIC_IR_FUNCTOR(ReprPrinter, vtable).set_dispatch<T>站点全部迁移到 Python FFI 的__ffi_repr__机制。 - Python shim 清理:移除了
runtime/object.py、runtime/packed_func.py、runtime/container.py、ir/container.py等中间代理层,直接路由到 tvm_ffi(#19440、#19442)。 - module.h 消除(#19441):将 runtime/module.h 的职责拆分到
tvm/ffi/extra/module.h和runtime/device_api.h。 - Global Memory Barrier 删除(#19454):清除了传统 CUDA spin-on-global-memory barrier 机制,使用 CUDA 原生 cooperative groups 替代。
TFLite 前端扩展
TFLite frontend 本周非常活跃,新增了多个算子映射:
- DENSIFY:转换时(非运行时)将稀疏权重张量转为稠密格式,通过
prefetched_nodes机制成为 IR 中的常量。 - NON_MAX_SUPPRESSION_V4/V5:V5 版本增加了 soft-NMS 支持,扩展了
relax.vision.non_max_suppression的 soft-NMS 属性。 - BITCAST:底层字节重解释,映射到
relax.op.memory.view。 - FILL/SPLIT_V 动态形状支持:允许
FILL接受运行时 dims tensor,SPLIT_V接受运行时size_splitstensor。 - CUMSUM:支持 exclusive 标志和 axis 参数提取。
KVCache 与 Attention 改进
- Causal Left-Padded Prefill:为 decoder-only embedding 场景新增了左填充因果 prefilling 的 mask 模式(
mask_mode="causal_padded_left")。 - ConvTranspose auto_pad 修复:解决了 ONNX ConvTranspose 转换中忽略
auto_pad属性的 bug。
其他
- Evolutionary Search 容错:MetaSchedule 的进化搜索中,trace replay 可能抛出
ScheduleError,此前会直接中止调优。现在增加了异常处理使搜索更鲁棒。 - BYOC NPU 教程重构:示例 NPU 后端的教程现在可以完整运行并展示算子融合效果。
无更新仓库
以下仓库本周未检测到新 commit:
- tencent/ncnn — 腾讯推理框架(约 28.6k stars)
- airockchip/rknn-toolkit2 — 瑞芯微 NPU 工具链
- airockchip/rknn-llm — 瑞芯微 LLM 部署
- futz12/ncnn_llm — 基于 ncnn 的 LLM 推理
- mlc-ai/mlc-llm — MLC LLM 端侧推理
- ml-explore/mlx-lm — Apple MLX LLM 支持
这些框架可能处于稳定期或内部开发阶段,开源仓库同步节奏较慢。
总结与趋势
本周的更新呈现出几个明显趋势:
安全成为端侧推理框架的核心关注:ONNX Runtime 本周投入大量精力修复多个 OOB 访问和 setattr 注入漏洞,Executorch 也引入了 Android ProGuard 规则和 Metal 签名。随着推理框架从研究工具变为生产级组件,安全性正在从”锦上添花”变为”基础要求”。
LLM 在端侧的生态分工更加清晰:llama.cpp 持续统治个人桌面和开发者社区(Blackwell FP4、WebGPU Q1_0、Server Tools、RISC-V),ONNX Runtime GenAI 专攻企业级部署(Mistral3 VLM、混合精度量化),Executorch 则在移动/嵌入式端持续深耕(Zephyr Ethos-U、Gemma 4、MoE kernel 优化)。
CANN/昇腾生态加速补课:llama.cpp 的 CANN 后端一次性增加了 7+ 个新算子;此前该后端一直是社区参与较少的短板,本周的密集提交表明昇腾的部署需求正在快速增长。
TVM 进入结构性调整期:libtvm 一分为二、IR 体系向 tvm-ffi 迁移——这些都是长期积累的技术债清理。虽然短期内对普通用户影响不大,但为 TVM 未来的可维护性和部署灵活性奠定了基础。