🎉 MnnLlmChat v0.8.3.3 (pisces fork)
🔧 修复内容
Hexagon Backend 回退 CPU 问题修复
- 上一个 release (v0.8.3.1) 的 APK 中,Hexagon backend 实际未启用,请求 NPU 后静默回退到 CPU
- 根因:
build.sh缺少-DMNN_HEXAGON=ON编译选项 - 修复后 Hexagon backend 正常工作,logcat 可见
[MNN::Hexagon] vectorSize=64, vtcmSize=8388608, maxThreads=8
QNN 与 Hexagon 符号冲突修复
- 修复 dsprpc wrapper 符号重复定义问题,QNN 和 Hexagon 两种 backend 可同时编译
StridedSlice 范围修复
- 修复 QNN 模型中负索引未正确处理导致的崩溃
🚀 新增功能
QNN (Qualcomm Neural Network) HTP NPU 后端支持
- 支持 QNN 离线模型(HTP context binary)在 NPU 上运行 LLM 推理
- Qwen3-0.6B 真机验证通过:decode 32 t/s(远超 Hexagon 的 1.5 t/s)
- 集成 QNN SDK 2.39.0 运行时库(
libQnnSystem.so等) - App 设置页新增 NPU 选项,支持选择 QNN 后端
移除 QNN 模型冗余 weight 依赖
- 新增
use_external_weight配置项,QNN plugin 模型不再需要llm.mnn.weight(省 303MB) - 转换脚本自动生成
"use_external_weight": false
📦 预转换 QNN 模型
预转换好的 Qwen3-0.6B QNN NPU 模型可在 HuggingFace 下载:
👉 https://huggingface.co/pisces312-hf/qwen3-0.6b-mnn-qnn-npu
📊 SM8850 性能对比(Qwen3-0.6B)
| 指标 | CPU fp16 (4T) | Hexagon | QNN HTP (NPU) |
|---|---|---|---|
| Prefill | ~306 t/s | ~49.7 t/s | 12.8~20.7 t/s |
| Decode | ~70 t/s | ~1.5 t/s | ~32 t/s |
💡 小模型 (≤1B) CPU 更快;4B+ 模型 NPU 优势显著(低功耗 + 不占 CPU + 大模型带宽瓶颈下更快)
📦 包含内容
MnnLlmChat-v0.8.3.3-pisces-standard-signed.apk— 标准版签名 APK (38MB)- 内含 libMNN.so(QNN + Hexagon 启用)+ QNN 运行时库
- 适用设备:arm64-v8a, Android 8.0+ (API 26)
🎉 MnnLlmChat v0.8.3.3 (pisces fork)
🔧 Bug Fixes
Hexagon Backend Fallback to CPU — Fixed
- Previous release (v0.8.3.1) had Hexagon backend silently falling back to CPU
- Root cause: missing
-DMNN_HEXAGON=ONinbuild.sh - Now Hexagon initializes correctly with HVX vector unit and VTCM
QNN/Hexagon Symbol Conflict
- Fixed duplicate dsprpc wrapper symbols when both QNN and Hexagon backends are compiled together
StridedSlice Range Fix
- Fixed crash from negative indices not being handled correctly in QNN models
🚀 New Features
QNN (Qualcomm Neural Network) HTP NPU Backend
- Run LLM inference on Qualcomm NPU via QNN offline models (HTP context binary)
- Qwen3-0.6B verified on real device: decode 32 t/s (vs Hexagon 1.5 t/s)
- Bundled QNN SDK 2.39.0 runtime libraries
- New NPU option in app settings for QNN backend selection
Remove QNN Model Weight Dependency
- New
use_external_weightconfig option, QNN plugin models no longer needllm.mnn.weight(saves 303MB) - Conversion scripts auto-generate
"use_external_weight": false
📦 Pre-converted QNN Model
Pre-converted Qwen3-0.6B QNN NPU model available on HuggingFace:
👉 https://huggingface.co/pisces312-hf/qwen3-0.6b-mnn-qnn-npu
📊 SM8850 Performance (Qwen3-0.6B)
| Metric | CPU fp16 (4T) | Hexagon | QNN HTP (NPU) |
|---|---|---|---|
| Prefill | ~306 t/s | ~49.7 t/s | 12.8~20.7 t/s |
| Decode | ~70 t/s | ~1.5 t/s | ~32 t/s |
💡 Small models (≤1B): CPU is faster. For 4B+ models: NPU wins on power efficiency + freed CPU + bandwidth-bound scenarios.
📦 Package Contents
MnnLlmChat-v0.8.3.3-pisces-standard-signed.apk— Standard signed APK (38MB)- Includes libMNN.so (QNN + Hexagon enabled) + QNN runtime libs
- Requirements: arm64-v8a, Android 8.0+ (API 26)