端侧 AI 推理框架周报(2026-04-26 ~ 2026-05-03)
本周(2026-04-26 ~ 2026-05-03)共跟踪 15 个仓库,其中 9 个仓库有更新,合计 165 次提交。以下是对各仓库关键变化的详细解读。
本周无更新的仓库: tencent/ncnn、airockchip/rknn-toolkit2、airockchip/rknn-llm、futz12/ncnn_llm、mlc-ai/mlc-llm、ml-explore/mlx-lm
ggml-org/llama.cpp(30 commits)
本周 llama.cpp 依然保持了最高的活动量,涵盖后端优化、新硬件支持和用户界面重构。
CUDA / GPU 后端
- 多 GPU PCI Bus ID 去重修复(#22533):修复了当多个 GPU 共享 PCI Bus ID 时,CUDA 设备检测 OOM 导致仅发现 1 张卡而忽略其他 3 张的严重 bug。同时同步更新了 HIP 和 MUSA 宏的支持。
- Flash Attention Pascal 架构修复(#22541):Tile-based flash attention kernel 在 Pascal GPU 上的兼容性问题已修正,这对仍在使用 GTX 10 系列显卡的用户是重要的修复。
- MoE 快速矩阵乘法 i-quants 支持(#22504):新增 MoE 场景下的 int4/8 量化快速 matmul 路径,提升 MoE 模型推理效率。
Vulkan 后端
- Flash Attention 非对称量化支持(#21753):在 coopmat2 路径中加入了非对称 FA 支持,允许混合量化类型(如 Q1_0)用于 Flash Attention,为实验性低比特 attention 提供了通道。
- Tensor 2D get/set 函数(#22514):新增在 Vulkan 后端中获取和设置 2D tensor 片段的 API,方便算子开发者调试。
WebGPU 后端
- MUL_MAT_ID 性能提升(#22464):为 MoE 的专家路由矩阵乘法提供独立的 mat-vec 和 mat-mat fast path,极大改善 WebGPU 后端上 MoE 模型的推理速度。
- Upscale Shader(#22419):新增 nearest/bilinear/bicubic 三种上采样 shader,填补了 WebGPU 后端的图像缩放能力。
- mul-mat vectorized 修复(#22578):修复了 mul-mat 和 mul-mat-id pipeline 的 vectorized 条件判断,确保向量路径在合适时启用。
Hexagon(高通 DSP)后端
- HMX Flash Attention(#22347):为 Hexagon 后端实现了 HMX 加速的 Flash Attention,用于 prefill 阶段。同时将内联汇编包装为 Q6_ 内联函数,提高代码可维护性。这是骁龙平台上 LLM prefill 性能的关键优化。
- 非连续行 Tensor 支持(#22574):为 unary ops 增加了非连续布局支持,使 Hexagon 后端能处理更灵活的输入格式。
OpenCL(Adreno GPU)后端
- MoE MxFP4 优化(#22301):为 Adreno GPU 实现了专门的 MoE MxFP4 kernel,包括 GPU 上的 router reorder 操作,显著提升移动端 MoE 模型效率。
推理与服务
- Server Checkpoint 零拷贝(#22558):避免了 checkpoint 数据的 host 侧拷贝,直接将 GPU memory 中的数据写入文件,减少显存占用和延迟。
- Speculative Decoding 修复(#22521, #22426, #22552):修复了 draft model checkpoint 管理和 vocab 兼容性检查的问题,以及改进 ngram-mod 警告逻辑。
- Reasoning Budget Sampler 优化(#22488):不再将 prompt tokens 传递给 reasoning budget sampler,避免对输入序列采样预算的错误消耗。
WebUI 重构
- Spring Cleaning Refactor(#22505):对 WebUI 进行了大规模重构,引入
/tools端点、MCP 工具集成、JSON Schema 工具支持,并完成了 snake_case 命名规范化。这是 llama.cpp WebUI 功能性的重要演进。
杂项
- cpp-httplib 更新至 0.43.2(#22548),GGML 版本升至 0.10.2,以及 mmap 大文件支持(修复 WASM 下 >2GB 模型加载)。
microsoft/onnxruntime(30 commits)
核心推理引擎
- 内存映射 ORT 模型加载(#28164):新增
use_memory_mapped_ort_modelSessionOption,允许直接通过内存映射 I/O 加载 ORT 格式模型,消除了调用方手动维护映射有效性的负担,对共享内存场景非常友好。 - CPU 执行提供者 RVV 支持(#28261):为 RISC-V Vector (RVV) 指令集添加了 MLAS 优化的 CPU kernel 支持。ORT 此前已支持 SSE/AVX/NEON/SVE/VSX/LSX/zvector 等多种 SIMD 指令集,RVV 的加入补齐了 RISC-V 生态的关键一环。Close #17466 和 #24596。
- GridSample 数值稳定性修复(#28302):硬化了 CPU GridSample 算子中 float→int64 的类型转换,防止 NaN/Inf/越界坐标导致的未定义行为。
注意力机制
- GQA seqlens_k 向后兼容(#28259):放宽了 GroupQueryAttention 的 seqlens_k shape 校验,接受的 shape 允许带单位维度(如
[1,1]而非[1]),以兼容 Qwen3-0.6B/1.7B 等旧版本模型。 - DFT 算子 irfft 支持(#27028):添加了
DFT算子onesided=True & inverse=True即 irfft 模式的实现,对应 numpy/pytorch 中的torch.fft.irfft。
CUDA / GPU
- Cutlass 升级至 4.4.2(#28276):为后续 CUDA 性能优化做准备,新特性包括改进的 GEMM 调度和 Hopper 架构支持。
- CUDA 13 编译修复(#28309):修复
gqa_unfused_attention.cu在 CUDA 13.x 下的 Windows MSVC 编译失败,根本原因是 CCCL 头文件中__out参数名与 MSVC 的 SAL 宏冲突。 - CUDA EP Plugin Profiling API(#28216):为 CUDA Plugin EP 添加了基于 CUPTI 的 GPU profiling 支持,在
onnxruntime_ENABLE_CUDA_PROFILING编译标志下可用。
WebGPU
- GridSample 算子(#28264):为 WebGPU EP 实现了 GridSample(opset 16-19),填补了此前所有主流 EP 都已支持而 WebGPU 缺失的算子。
- WebGPU Plugin EP Python 打包(#28226):为 WebGPU Plugin EP 添加了 Python wheel 构建流水线和测试。
OpenVINO EP
- OV 2026.1.0 升级(#28170, #28297):OpenVINO EP 整体升级至 2026.1.0,新增 FLOAT8E4M3FN/FLOAT8E5M2 初始化的 CPU/GPU/NPU 注册,QDQ 剥离(由 OV 内部处理),以及 DynamicQuant 的 FP16/INT8 支持。
WebNN
- pool2d 的 roundingType 重命名(#28172):为遵循 WebNN 最新规范,
roundingType改名为outputShapeRounding,同时保留旧名称以维持一段时间的向后兼容。
React Native
- 自动链接修复(#28266):
onnxruntime-react-native添加了react-native.config.js和 Expo plugin 补丁,彻底解决了TypeError: Cannot read property 'install' of null这一长期问题。
杂项
- NVTX Profiling Begin() 调用恢复(#28273):修复了 sequential_executor 重构后丢失的
node_compute_range_.Begin()调用。 - Session Logger Use-After-Free(#28274):重新排列
InferenceSession的成员声明顺序,确保 logger 在 EP 析构时仍然存活。 - C#/Python 硬件设备 API 绑定(#28128):为
GetHardwareDevices/GetHardwareDeviceEpIncompatibilityDetails等 API 提供了 C++、C# 和 Python 语言绑定。
microsoft/onnxruntime-genai(4 commits)
新模型支持
- Mistral3 / Pixtral VLM(#2077):添加了对 Mistral3/Pixtral 视觉语言模型的支持,实现了多图像推理。包括 C++ 图像处理器、
PixtralVisionState(按图管理视觉状态)、[IMG]/[IMG_BREAK]/[IMG_END]标记扩展规则以及 Python 导出支持。这是 onnxruntime-genai 在 VLM 领域的重要一步。
混合精度量化
- k_quant_linear 混合精度量化(#2100):新增
k_quant_linearINT4 量化的 config 选项,将线性注意力投影及其 MLP 提升至 INT8 精度。这针对 Qwen3.5 等混合注意力模型尤为重要——线性注意力由于缺乏 softmax 的逐步归一化,沿序列累积量化误差严重,提升为 INT8 能显著改善精度。
工程清理
- 移除 HF_TOKEN 引用(#2108)和 移除 QNN 打包(#2109)——清理 pipeline 以简化维护。
pytorch/executorch(30 commits)
Qwen3.5 MoE 专项优化(核心亮点)
这是 ExecuTorch 本周的最重磅更新,围绕着 Qwen3.5 MoE 模型的端侧高效部署 展开了一系列系统级优化:
- Triton INT4 Dense Kernels 与 Dequant Prefill 路径(#19227 / #19188):为 Qwen3.5 MoE 实现了基于 Triton 的 INT4 权重 × INT8 激活(W4A8)稠密矩阵乘法,并配合 dequant prefill 路径,将量化计算的 dequant 与 prefill 合并,减少访存开销。
- Triton kernels BUCK 修复(#19239):补全了
int4_matmul.py的 BUCK 构建配置。 - 结构化 Stats Reporting 与 GPU 内存追踪(#19228 / #19190):为 Qwen3.5 MoE runner 添加了结构化的性能统计输出和 CUDA GPU 内存信息追踪。后续在 macOS Metal 环境下修复了
cudaMemGetInfo的编译门控(#19265)。 - CUDA 版本门控修复(#19265):将新增的
cudaMemGetInfo调用保护在EXECUTORCH_BUILD_CUDA宏之后,避免 macOS/Metal 编译失败。
Arm / Cortex-M 后端
- Cortex-M MVE/Helium INT16 量化反量化(#19218):为 Cortex-M55/M85 等支持 MVE(Helium)的 MCU 实现了 INT16 的 quantize/dequantize kernel,扩展了 TinyML 场景下的数值精度选择。
- TOSA AVG_POOL2D_ADAPTIVE 算子(#19150):新增 TOSA 1.1 标准的自适应平均池化算子,同时修复了
tosa.avg_pool2d的 fake tracing bug。 - Cadence HiFi quantized_conv1d 溢出修复(#19193):修复了 HiFi DSP 上量化卷积的溢出问题以及 stride>1 时的 fallback 路径。
- Cortex-M 模型验证文档(#19078):列出了 CI 验证的 6 个 TinyML 模型(mv2、ds_cnn、mv3、mobilenet_v1_025、resnet8、deep_autoencoder)及各模型的 dialect/implementation。
- E2E 测试脚本优化(#19073)和 Ethos Driver 向后兼容(#19116)。
量化与编译器优化
- DecomposeMeanDimPass 重构(#19242):将 AVG_POOL2D 替换为 REDUCE_SUM 以简化量化流程。
- RemovePermutesAroundElementwiseOps 扩展(19243):新增对
sum.dim_IntList的支持。 - 量化 max_pool2d 输出观测器修复(#19259):修复了 tuple 返回的算子的量化输出观测。
- Arm 后端 Control Flow Quant Folding(#19109):重新标注 while_loop 的量化参数,支持附加输入(如 threshold)时区分量化参数。
- OpenVINO NNCF 版本固定(#18684):将 NNCF 锁定到 PyPi 版本,修复了 NNCF 接口变化导致的量化器兼容性。
优化 CPU Kernel
- grid_sampler_2d.out NEON + sum.IntList_out 向量化(#19119):两个新优化 kernel 替换 portable 参考实现。特别地,
grid_sampler_2d在 bilinear 模式下使用 fp32 累加,解决了 fp16 精度问题。 - XNNPACK 输出 tensor resize 提前(#17661):将 resize 移至子图执行前,使越界写入能被提前捕获而非直到 crash。
工程与平台
- NXP 后端 BUCK 路径修复 + 新 Neutron 转换 Flow(#19212, #19184)。
- Qualcomm QNN atan2 算子支持(#19051)。
- Runtime/Backend Header 打入 pip 包(#19196)。
- rlformers 导出支持(#19096)和 flatc 缓存加速(#19104)。
- 可选依赖基础设施(#19149):支持
pip install executorch[ethos_u]等模式。
apache/tvm(30 commits)
版本里程碑:0.24.0 发布
TVM 本周发布了 0.24.0 版本,随后主分支版本更新至 0.25.dev0(#19493, #19476)。从提交量(30 个,全周持续活跃)来看,0.24.0 开发周期内积累了大量重构。
FFI / ABI 重构(核心主题——Tianqi Chen 主导的大规模内部清理)
TVM 团队本周几乎专注于一场系统性的代码架构重构:
- tvm-ffi 0.1.11rc2 升级(#19484):更新第三方依赖,同时修复了
TupleTypeNode/FuncTypeNode/TensorMapTypeNode中重复注册span字段的问题。 - TVM FFI 间接别名清理(#19483):移除过渡期留下的
using String = ffi::String等别名 shim,并将logging.h中非 ICHECK 场景切换至ffi/error.h。 src/support/libinfo.cc删除(#19477):将TVM_INFO_*编译时信息查询替换为运行时 FFI 注册的环境查询,认为”编译时USE_CUDA=ON不代表运行时能加载 CUDA 设备”,减少构建时数据带来的误导。include/tvm/runtime/object.h退役(#19476):将TVM_DEFINE_OBJECT_REF_COW_METHOD移到include/tvm/ir/cow.h,彻底淘汰了这个 tvm-ffi 过渡期的兼容头文件。- IntTuple 别名退役(#19471)、**
builtin_fp16.h退役(#19472)、threading_backend.h搬迁**(#19469)。 - **
tvm/support/with.h→tvm/ir/with_context.h**(#19474):重命名并定位到 IR 层。 - **
tvm/support/random_engine.h→tvm/s_tir/random_engine.h**(#19475):s_tir 专用的 RNG 归属到正确的命名空间。
TVMScript 方言化重构
- Dialect 注册机制(#19479):将 TVMScript 重构为 dialect-aware 架构。各个扩展 dialect(TIRX, Relax)拥有各自独立的 script 子树,而核心 script 层保持 dialect-agnostic。这为未来添加新的 IR dialect 提供了清晰的扩展插槽。
后端与 Target 重构
- Backend-specific Target/Runtime 重构(#19465):每个后端变成一个自包含的
src/target/<X>/集群,引入了 per-backend fallback 模块(替代旧的target/opt/stub),干净地处理交叉编译回退逻辑,不再需要DeviceSourceModuleNode或泄漏 synthetickind()。
Relax Frontend(TFLite 算子持续扩张)
本周 TVM 的 TFLite frontend 经历了一轮空前的算子扩张:
- BROADCAST_TO、EMBEDDING_LOOKUP、SELECT_V2(#19489)
- SCATTER_ND(#19490)—— 处理
indices和updates的静态/动态 shape - RANDOM_UNIFORM、RANDOM_STANDARD_NORMAL、MULTINOMIAL(#19473)—— 随机数生成算子,降级为
tvm.contrib.random - BROADCAST_ARGS(#19487)—— 计算 broadcast shape
- DILATE(#19481)—— 插入 padding 值扩展 tensor
- ATAN2(#19485)—— 新增
relax.op.atan2二元元素级原语 - BITCAST(#19466)——
relax.op.memory.view实现 - DENSIFY 修复 + 测试(#19421)—— 稀疏到稠密转换,提高 prefetched_nodes 机制
- NON_MAX_SUPPRESSION_V4(#19464)—— 复用已有的
relax.op.vision.non_max_suppression - STRIDED_SLICE 负步长修复 + SPLIT_V 动态(#19468, #19433)
- CumSum ONNX 修复(#19467)—— 运行时 axis tensor 支持
- ConstantOfShape 缺省值 bug(#19480)—— 修复 value 属性缺失时的
AttributeError
Relax Frontend 新容器
- nn.ParameterList / nn.ParameterDict(#19495):新增了类似 PyTorch 的 Parameter 容器,使 Relax frontend 的模型定义更接近原生 PyTorch 体验。
Bug Fixes
- isnan / isinf / isfinite legalize 缺失(#19492):修复了这些 Relax op 缺少 FLegalize 注册导致
relax.build()崩溃的问题。 - Dlight shared_memory_per_block 缺省值处理(#19453):当 CUDA 自动检测缺少
max_shared_memory_per_block属性时的分层 fallback 策略。 - Metal 日志头文件缺失(#19493):Metal 文件中使用了
LOG宏但未包含 logging 头文件。
alibaba/MNN(1 commit)
Vulkan Linear Attention Subgroup Fallback
- 非 subgroup 回退分支:为
VulkanLinearAttention添加了一个无 subgroup 支持的 fallback 路径。这意味着在不支持 Vulkan subgroup 操作的设备(一些较老的移动 GPU 或部分模拟器环境)上,线性注意力仍然可以正常工作。MNN 的 Vulkan 后端因而获得了更广的设备兼容性。Merge-Request 27018734 来自阿里内部代码审查。
sophgo/tpu-mlir(6 commits)
Bug Fixes
- 2D RMSNorm Weight EU_ALIGN Bug 修复:
yifan.chen修复了 LayerGroup 中 RMSNorm 的eu_align=false设置问题。在 TPU 的 LayerGroup 编译场景下,weight tensor 的对齐方式未被正确设置,会导致片上内存分配错误。这是一个算子层面的低层 bug,影响推理数值正确性。 - Affine 优化修复:移除了 store 操作中不必要的代码,并支持
offset < 0的 slice 场景。affine 优化是 TPU-MLIR 的关键编译 pass,直接影响生成指令的质量。
工程
- PP BModel 命名规范化(#403630b):将 LLM pipeline 编译生成的 bmodel 文件统一采用
embed_vit/block_{i}/lmead命名模式。 - Docker 文档修复:修复了缺少 group info 导致的 Docker 环境问题。
- README 和配置文件更新、文档错误清理。
sophgo/LLM-TPU(4 commits)
Qwen3VL / Qwen3.5 支持
- Programmatic Mode(#595d1f):为 Qwen3VL 和 Qwen3.5 添加了 programmatic 调用模式(区别于脚本模式),允许通过 API 而非 CLI 来控制模型推理流程,对于集成到服务架构非常关键。
- PP BModel 示例(#24809, #5727e8):上传了 Qwen3.5 的 pipeline bmodel 示例文件,使用
embed_vit/block_{i}/lmead命名规范,并给出了 pp example,帮助用户快速上手。 - 文档更新(#91afea):对整个使用文档进行了同步更新。
qualcomm/ai-hub-models(30 commits)
本周高通 AI Hub 仓库同样活跃,主要集中在 新模型引入、CI 基础设施改进和代码质量提升。
新模型
- PiperTTS 量化版本(#2976):新增了口音纯正的英语、德语、意大利语量化版 PiperTTS 模型,并修复了 nightly 中的兼容性。
- SuperPoint 特征点模型(#3091):新增计算机视觉经典的特征点检测/描述模型 SuperPoint,并配备了 HPatches 数据集评估流水线。
- SixDRepNet(#2947):新增 6DoF 头部姿态估计模型,demo 展示了实时头部姿态追踪能力。
- MeloTTS 英文模型更新(#3207):替换了 MeloTTS-English-v3,新版本声音更自然。
CI / 基础设施
- Scorecard 数据自动更新(#3198)。
- Nightly 失败通知修复(#3210, #3218, #3202, #3205):修复了 GH_TOKEN 缺失、URL 验证失败、Slack 通知因 YAML 多行字符串中断等问题。
- 自动重试逻辑增加(#3191):减少 Qualcomm 内部网络对 GitHub 请求的限流导致的 CI 不稳定性。
- Release Assets 依赖管理(#3201):确保 website import 依赖于资产发布步骤完成。
代码质量与安全
- 严格依赖版本锁定(#3209):全量审计了 101 个依赖文件,将模糊版本
~=改为精确==锁定,作为供应链安全措施。 - Claude 自动发现 15 个关键 Bug 修复(#3062):涵盖 YOLOR 缺失
assert、foot_track_net 字符串比较 bug、DDColor 等模型的潜在错误。 - 外部仓库克隆基础设施重构(#3188):统一使用 pathlib.Path,简化外部代码库的集成。
模型部署优化
- Llama 3.2 1B GPU Nightly Perf(#3113):新增
device_attributes字段和write_supplementary_files方法,为 GPU nightly 性能收集提供完整的配置文件生成。 - SAM2 迁移至 PT2(#3158)、CVT AOT 回退(#3211/3216)、SSD LM Head 拆分(#3175)。
- 输出规范元数据扩展(#3132):为 YOLO、图像分类器、DeepLab、深度估计、超分辨率等共享基类添加
get_output_spec()。
总结
本周是农历”谷雨”末周,各框架呈现出显著的差异化发展轨迹:
- llama.cpp 延续了全面覆盖的策略——从数据中心级的 CUDA Fused Attention 到嵌入式 Hexagon DSP 的 HMX 加速,再到浏览器端 WebGPU 的 MUL_MAT_ID 优化,体现了单一推理库横跨从云到端的能力。
- ONNX Runtime 展现了企业级推理引擎的工程成熟度——RVV 支持补齐了 RISC-V 生态关键一环,而 Memory-Mapped ORT 加载、Use-After-Free 修复、CUDA 13 兼容等体现了对生产环境稳定性的极致追求。
- ExecuTorch 本周围绕着 Qwen3.5 MoE 的端侧部署,给出了一个教科书式的优化案例:从 Triton W4A8 量化 kernel 到 GPU 内存追踪 到 BUCK 构建集成,展示了 PyTorch 端侧系的系统性优化能力。同时 Cortex-M INT16 MVE 的加入巩固了 ExecuTorch 在 TinyML 领域的地位。
- TVM 正经历着 Tianqi Chen 主导的深层架构重构——FFI 间接层清理、TVMScript 方言化、后端目录重组和 libinfo 退役,都在为下一阶段的 TVM 生态做准备。同时 TFLite frontend 一周接入 10+ 个新算子,展现了 Relax/TFLite 导入管线的快速成熟。
- sophgo/tpu-mlir 和 LLM-TPU 持续推进 Qwen3.5 pipeline 部署工具链的完善,BModel 命名规范化和 programmatic 模式是易用性提升的重要信号。
- MNN 虽只有 1 个提交,但 Vulkan Linear Attention 的 subgroup fallback 体现了对移动端兼容性的持续关注。
下周值得关注:llama.cpp WebUI 重构后生态的反馈、TVM 0.24.0 发布后的社区采用情况、以及 ExecuTorch Qwen3.5 MoE Triton kernel 的性能数据公开。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Yet Another 何榜文's Blog!