端侧 AI 推理框架周报(2026-06-21 ~ 2026-06-28)
概览
本周(2026-06-21 ~ 2026-06-28)15 个仓库中有 10 个产生更新,共计 162 次提交。以下按仓库逐一解读。
一、阿里巴巴 MNN(7 commits)
MNN-aware QLoRA 微调支持
MNN 本周最大的亮点是新增了 MNN-aware QLoRA finetuning 功能(#4560)。这一特性将 QLoRA 的微调流程与 MNN 的量化推理管线深度结合:微调时直接用 MNN 的低比特量化算子(如 INT4/INT8 matmul)参与前向传播,使量化误差和训练过程在同一个计算图内对齐,而非传统 QLoRA 中先「冻结量化权重 + 推理框架外微调」的两阶段解耦方式。这意味着在 MNN 上部署 QLoRA 微调后的模型时,精度损失理论上更可控,是端侧参数高效微调(PEFT)值得关注的方向。
Vulkan Range op 图像实现
Vulkan 后端新增了 Range 操作的 image 实现(#4563)。Range 在动态 shape 场景中用于构造连续索引序列(例如 [0, 1, ..., n-1]),此前仅在 buffer 模式下支持。image 实现能利用 Vulkan 的 texture 内存层次,对于 tile 化访问模式更友好的算子组合(如与 Gather/Scatter 联用)可降低带宽。
其他修复
- Metal 后端:修复 Attention 中 KV cache flag 的误忽略(#4556),确保 Metal 上启用了 KV cache 时能正确复用缓存而非每次都重新计算。
- LLM 校准:修复 WikiText 数据集校准加载报错(#4566)。
- Android JNI:为
diffusion_session和sana_session补全 CMake 缺失源文件(#4569),修复此前因链接缺失导致的UnsatisfiedLinkError。 - CPU Bugfix:修复 issue #4454 中报告的问题(#4552)。
二、算能 LLM-TPU(1 commit)
Qwen3.5 Chunk Prefill 支持
LLM-TPU 为 Qwen3.5 新增了 chunk prefill 能力。Chunk prefill 将长 prompt 切分为多个短块依次进行 prefill,能在不增加峰值显存的前提下处理超长上下文。对于 TPU 这种显存/内存相对受限的端侧 NPU 设备而言,这是支持长文本场景(如 RAG 检索、长文档摘要)的关键优化。
三、llama.cpp(30 commits)
本周 llama.cpp 迎来大量高质量提交,覆盖几乎所有后端。
OpenCL Flash Attention 重大改进
Hongqiang Wang 贡献了大篇幅的 OpenCL Flash Attention 重写(#25069),包含:
- FA kernel 重写:同时支持 f16 和 f32 精度。
- Prepass 机制:新增三个预处理 kernel(
flash_attn_kv_pad_f16、flash_attn_mask_pad_f16、flash_attn_blk_f16),在正式 FA 计算之前对 KV tile 进行分类:完全 masked、混合和完全 unmasked。主 kernel 可以跳过完全 masked 的 tile,大幅减少无效计算。 - 这套机制对于 OpenCL 后端(典型的 GPU 后端依赖分支 divergence 少的架构)来说尤为实用,因为预处理阶段的分类开销远小于冗余 tile 的 attention 计算。
CUDA 后端多项优化
- cudaMemcpy2DAsync 快速路径(#25057):
ggml_cuda_cpy新增针对 same-type/same-shape strided copy 的 fast path。当张量按行连续但整体不连续时,直接使用cudaMemcpy2DAsync而非逐元素拷贝,解决 GDN 循环 snapshot 更新中 cache stride 导致的拷贝瓶颈。 - Split compute 去同步化(#20793):通过减少 CUDA stream 间的同步点提升 token 生成速度,PR #17795 的基础上重新引入并完善。
- cpy.cu 修复(#25000):修复
x >= 2^31-1和y >= 65535时的边界崩溃。 - Batch out_prod broadcast(#24426):
dps2 > 1时使用cublasSgemmBatched加速。
Vulkan 后端
- Intel Xe-LPG Plus coopmat 支持(#24404):新增
INTEL_XE1架构枚举,在 Intel Arc 和后续 GPU 上启用 cooperative matrix 支持,这是 Vulkan backend 在 Intel 平台的关键性能提升。 - Conv2D coopmat2 路径编译器 workaround(#24924):解决特定驱动对 coopmat2 的编译错误。
- mul_mat_vecq 针对 MI50 优化(#22933):为 AMD MI50 定制的 mat-vec 量化乘法优化。
SYCL 后端改进
- 修复 Norm 操作中的 UT 失败(#25044)。
- 对 softmax 输入进行 clamp 防止 underflow(#24941),这对长上下文场景尤其重要。
新功能
- SSE Replay Buffer(#23226):服务端 SSE 回放缓冲区,客户端断连后推理依然继续。支持
X-Stream-Resume: 1和X-Conversation-Id头——用户刷新页面或切后台回来后,正在生成的响应不会丢失。这项功能对 Web UI(如llama.cpp的 server 模式)体验提升显著。 - OpenVINO 后端:更新至 OV 2026.2.1,release 包改为自包含模式,移除硬编码的
compute_op_type集合(#24974)。 - Mamba2 扩展因子(#23082):移除硬编码的 2x expansion factor,支持任意 expand 值。
- ggml 版本:bump 至 0.15.3(#96183e9)。
四、Qualcomm AI Hub Models(30 commits)
本周高通侧大量提交集中在 dynamo 动态 shape 导出 和 GenieX 工具链 上。
Qwen 模型动态 shape 迁移
qwen3_4b_instruct_2507 和 qwen3_8b 均从静态 AIMET-ONNX + QNN 模式迁移到 PreSplit/Part/Collection 动态 shape (dynamo) 模式。核心变化:
- 使用
torch.onnx.export(dynamo=True, ...)+ torch 2.10 导出单个动态 ONNX。 - 通过代码生成
export.py,配合 full-zip asset 重新导出。 - 迁移过程中遇到了
tie_word_embeddings导致的 embedding/lm_head 边界 HTP linker 报错(#3694, #3685),通过从源头 untie embedding 并分两步修复边界编码解决。
GenieX 工具链
- GenieX 性能收集:支持 precision 输入(
default/all/list)、添加 Windows/Linux/Android 多平台支持、集成 llama.cpp 和 QAIRT plugin。 - Scorecard 弹性:单模型失败不再丢失整批结果(#3686),并支持
test_devices下传到 LLM perf collection(#3692)。 - Qwen3 VL 4B 新增(#3619):加入多模态视觉问答模型支持。
CLI 工具链完善
新增 find 命令(按版本和 filter 搜索已发布 asset)、chipsets 命令显示 similar chipset 映射、运行时显示名称美化、qai-hub-models CLI quick start README 嵌入等。
五、ONNX Runtime(30 commits)
本周 ONNX Runtime 在 Attention 算子和量化推理方面进展显著。
CPU 端 Attention 大升级
- FP32 Flash Attention for GQA(#28962):为 CPU 的
GroupQueryAttention贡献 op 新增 FP32 flash attention 路径,通过 tiled online-softmax 避免物化完整的[S, T]注意力分数矩阵。仅用于 prefill/chunked-prefill 阶段;decode 阶段回退到朴素路径。这是 CPU 端长上下文推理的重要性能提升。 - FP32 GEMV decode kernel(#29216):在 prefill-only flash attention 基础上,新增专用的单 token decode GEMV kernel,比 flash decoding 更快。
- Sliding window 支持 XQA decode(#29177):CUDA XQA decode kernel 此前遇到 sliding window 时回退到 FlashDecode,现在直接支持
local_window_size,覆盖 Mistral/Gemma2 等模型。 - Causal mask 对齐修复(#29050):CPU Attention causal mask 与上三角对齐,修正 q_len=1、kv_len>1 且无 past 时的行为。
MoE 路由优化
Fuse MoE router bias(#29170):将 MatMulNBits + Add([32] bias) 模式融合进 CUDA MatMulNBits 的 GEMV 路径。精确匹配 GPT-OSS 的 router 投影 shape(M=1, N=32, K=2880, W4A16, block_size=32, 无 zero point),其他 shape 保持不变。
FP8 量化修复
compute_scale_zp_float8 中 FLOAT8E4M3FN 的 scale 计算此前使用了 range(256)(整数 0~255)而非实际的 float8 可表示值,导致 scale 偏差。现已修正为使用正确的 float8 值分布(#29350)。
WebGPU 改进
- Batched GQA FlashAttention(#29247):解除 WebGPU FA 的
batch_size == 1限制,支持 right-padded prompts 的 batched GQA 场景。 - Buffer cache mode 透传(#29017):
Onnxruntime-web现在可以从 JS 端配置storageBufferCacheMode、uniformBufferCacheMode等 WebGPU EP 选项。 - Profiling 时间戳对齐(#29021):GPU 事件对齐 ORT profiler 时间基线。
安全与稳定性
- Crypto I/O callback(#28624):允许应用提供自定义 I/O callback 用于 EPContext 二进制数据,支持加密存储或内存 buffer。
- CUDA graph + user compute stream(#29221):CUDA plugin EP 现可同时启用用户指定 stream 和 CUDA graph 捕获。
- SparseAttention CSR 验证(#29242):增加 device 端和 host 端的稀疏注意力输入验证。
- RKNPU 整数溢出修复(#29249):Conv/Gemm 隐式 bias 分配增加溢出检查。
六、ONNX Runtime GenAI(1 commit)
支持 ONNX Runtime Model Package 加载
OgaCreateModel / OgaCreateConfig 现可从 ORT model package(而非扁平目录)加载模型(#2227)。Package 打包了同一模型的多个构建变体,加载时 ONNX Runtime 根据本地硬件和 EP hint 自动选择最优变体。C API 接口保持向下兼容。
七、PyTorch ExecuTorch(30 commits)
本周 ExecuTorch 在 CUDA 大模型部署、MLX 后端和 Vulkan 桌面端支持上取得显著进展。
CUDA gemma4-31B @128K
团队围绕 gemma4-31B 在 5090 上的部署做了大量优化:
- TQ4 SDPA 无 spill prefill kernel + analytic causal(#20512):long-context prefill 加速,127K context 下 prefill 差距从 -37% 缩小到 -7%。
- Length-aware bf16 global attention(#20506):decoder 阶段复杂度从 O(kvcache_length) 降至 O(context),decode 速度从 36.5 t/s 恢复到 46.5@512 tokens。
- Gate/Up MLP 融合(#20482):将两个 INT4 matmul 合并为单个
[2*intermediate, hidden]coalesced matmul,减少 launch overhead。 - 5090 导出修复(#20480):优化 dequant 流程避免权重重复,修复 AOTI-CUDA 降低时 KV cache 的显存爆炸,为 128K context 添加 autotune 配置。
MLX 后端:On-Device Sampling
连续提交实现了 MLX 后端的 on-device token sampling:
- Gumbel-max on-device sampling(#20454):在 exported
.pte内完成argmax(logits/temp + g),避免每步 logits 回传 host,新增RandomBitsNode作为随机源。 - Qwen3.5 MoE on-device sampling(#20545):在上述基础上为 Qwen3.5 MoE 添加 sampling 支持,通过
--sample标志启用,实测 decode 吞吐提升约 17%。
Vulkan 桌面端支持
Vulkan 后端突破 Android 限制,开始支持 Linux/Windows 桌面 GPU(#20138),包含 opt-in wheel 构建支持。这意味着在 AMD GPU 上可以通过 Vulkan 而非 CUDA 跑 ExecuTorch,填补了此前仅 NVIDIA CUDA + Android Vulkan 的空白。
WebGPU 算子完善
- 新增
aten.cat.default和 ValueList graph 支持(#20565)。 - SDPA 恢复 per-dispatch
kernel_name标签(#20551)。 slice_copy+permute_copy操作的支持(#20550)。
Arm 后端
- Bump vela 至 5.1.0(#20181)。
- 新增
FuseIdenticalInputTransformsPass(#20514),将add(permute(x), permute(y))优化为permute(add(x, y))。 - 新增 TOSA binary op visitor,修复 int64 cleanup 和 placeholder fusion 问题(#20479)。
八、Apache TVM(30 commits)
本周 TVM 核心是 Relax IR 重构 和 TFLite 前端完善。
Relax IR 重大重构
Tianqi Chen 主导了一系列 IR 重构提交:
- Phase out Relax PrimType(#19858):移除 Relax-specific PrimType,统一使用 canonical
ir.PrimType表示 dtype-only 标量类型。 - Rename Relax base type 至 AnyType(#19889):
ObjectType→AnyType,明确语义为「任意 Relax 值」。 - Phase out PrimValue 和 Relax expression wrappers(#19891):移除
PrimValue包装层,Relax 表达式直接接受PrimExpr值。 - PrimExpr 类型统一(#19875):
PrimExpr.dtype被PrimExpr.ty替代,携带PrimType而非DataType;运行时侧改用 DLPackDLDataType。 - Phase out Downcast(#19857):移除遗留
Downcast辅助,全面迁移至as_or_throw风格。
这些重构使 Relax IR 更贴近统一 IR 体系,降低维护成本。
TFLite 前端进步
- 新增
DELEGATE/PLACEHOLDER_FOR_GREATER_OP_CODES显式标记处理(#19824)。 - 支持动态 shape 的
RANGE操作(#19867)。 - 支持动态
DYNAMIC_UPDATE_SLICEstarts(#19881)。 - 增加
SQUEEZE/REVERSE_SEQUENCE/UNPACK/ZEROS_LIKE测试覆盖(#19814)。 - 支持
HASHTABLE_FIND静态常量折叠(#19879)。
TIRx 生态
- LLVM Scalable Ramp(#19866):支持 scalable vector 的 Ramp lowering 路径,使向量化 TIR/TIRx 程序能正确生成 RVV/SVE 指令。
- BufferReplacer 修复(#19871):修复 buffer strides 和 elem_offset 中变量未被替换的 bug。
- CudaProfiler 教程(#19895):新增 TIRx CUDA 内 kernel profiling 的文档和 Perfetto trace 导出示例。
其他
nn.dropout合法化为推理阶段 no-op(#19841)。nn.conv_transpose支持 dilation > 1(#19842),通过 zero-filling kernel 复用 TOPI 计算。- ONNX AffineGrid 的
align_corners属性支持(#19864)。 - Docs 主题迁移至 sphinx-book-theme(#19828)。
九、Apple MLX LM(1 commit)
DeepSeek RoPE 参数修复
修复 DeepSeek 模型中 RoPE(旋转位置编码)的参数传递问题(#1431)。RoPE 参数错误会导致 position encoding 在高维度的三角函数计算偏移,影响长距离 token 之间的注意力分数。对于 DeepSeek 这类使用了复杂 RoPE 变体(如 YARN / NTK-aware scaling)的模型,接口对齐至关重要。
十、腾讯 ncnn(2 commits)
本周 ncnnn 只有 CI 依赖升级(actions/cache v5→v6、actions/checkout v6→v7),无实质功能更新,故不展开。
总结
本周端侧推理框架呈现几个趋势:
Attention 优化的战场仍在持续:llama.cpp 的 OpenCL FA + prepass、ONNX Runtime 的 CPU FP32 FA / GEMV decode / sliding window XQA、ExecuTorch 的 TQ4 SDPA 无 spill 和 length-aware attention,各自在不同后端上深挖 attention 算子的性能潜力。
Qwen 系列成为跨框架标杆模型:Qualcomm AI Hub 的 Qwen3 系列迁移、LLM-TPU 的 Qwen3.5 chunk prefill、ExecuTorch 的 Qwen3.5 MoE sampling——Qwen 几乎成了所有推理框架验证新能力时的首选模型。
端侧 LLM 微调开始内嵌进推理框架:MNN 的 MNN-aware QLoRA finetuning 代表了「推理和训练在同一个框架内完成」的趋势,这对端侧持续学习至关重要。
IR 统一趋势明显:TVM 的 Relax IR 重构将多套类型系统收敛到统一 IR,减少了跨层维护负担。
GenieX / Qualcomm AI Hub 工具链日趋成熟:dynamo 动态 shape 导出、跨平台 GenieX 支持、scorecard 弹性改进,高通的端侧 LLM 部署工具链正在追赶上游 GPU 框架的成熟度。
下期再见。