概览

本周(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_sessionsana_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_f16flash_attn_mask_pad_f16flash_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-1y >= 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: 1X-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_2507qwen3_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 端配置 storageBufferCacheModeuniformBufferCacheMode 等 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):ObjectTypeAnyType,明确语义为「任意 Relax 值」。
  • Phase out PrimValue 和 Relax expression wrappers(#19891):移除 PrimValue 包装层,Relax 表达式直接接受 PrimExpr 值。
  • PrimExpr 类型统一(#19875):PrimExpr.dtypePrimExpr.ty 替代,携带 PrimType 而非 DataType;运行时侧改用 DLPack DLDataType
  • Phase out Downcast(#19857):移除遗留 Downcast 辅助,全面迁移至 as_or_throw 风格。

这些重构使 Relax IR 更贴近统一 IR 体系,降低维护成本。

TFLite 前端进步

  • 新增 DELEGATE/PLACEHOLDER_FOR_GREATER_OP_CODES 显式标记处理(#19824)。
  • 支持动态 shape 的 RANGE 操作(#19867)。
  • 支持动态 DYNAMIC_UPDATE_SLICE starts(#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),无实质功能更新,故不展开。


总结

本周端侧推理框架呈现几个趋势:

  1. Attention 优化的战场仍在持续:llama.cpp 的 OpenCL FA + prepass、ONNX Runtime 的 CPU FP32 FA / GEMV decode / sliding window XQA、ExecuTorch 的 TQ4 SDPA 无 spill 和 length-aware attention,各自在不同后端上深挖 attention 算子的性能潜力。

  2. Qwen 系列成为跨框架标杆模型:Qualcomm AI Hub 的 Qwen3 系列迁移、LLM-TPU 的 Qwen3.5 chunk prefill、ExecuTorch 的 Qwen3.5 MoE sampling——Qwen 几乎成了所有推理框架验证新能力时的首选模型。

  3. 端侧 LLM 微调开始内嵌进推理框架:MNN 的 MNN-aware QLoRA finetuning 代表了「推理和训练在同一个框架内完成」的趋势,这对端侧持续学习至关重要。

  4. IR 统一趋势明显:TVM 的 Relax IR 重构将多套类型系统收敛到统一 IR,减少了跨层维护负担。

  5. GenieX / Qualcomm AI Hub 工具链日趋成熟:dynamo 动态 shape 导出、跨平台 GenieX 支持、scorecard 弹性改进,高通的端侧 LLM 部署工具链正在追赶上游 GPU 框架的成熟度。

下期再见。