Android 端侧大模型推理框架对比

CPU 上限选 llama.cpp,GPU 上限选 MLC-LLM,NPU 能效上限选 MediaPipe / AI Edge SDK(Qualcomm AI Engine Direct),PyTorch 生态选 ExecuTorch,"能跑就行"选 PocketPal / Ollama 移动端。 没有"全能王",瓶颈决定了上限------想跑得更稳更快,关键是选对硬件路径(CPU / GPU / NPU)再选框架。

一、框架全景速查表

框架 计算后端 模型格式 模型灵活度 量化支持 典型性能(0.6~3B 旗舰机) 接入成本
llama.cpp CPU(NEON/dotprod/i8mm/KleidiAI)+ Vulkan/Metal/OpenCL GGUF ★★★ 100+ 架构 Q4/Q5/Q8 K-quants、IQ 系列 CPU: 30~80 t/s(0.6B) ★☆☆ 直接下载二进制
MLC-LLM Adreno/Mali GPU(Vulkan/OpenCL/Metal) MLC 专属(需编译转换) ★★ 需要预编译 list 编译期量化(q4f16 等) GPU 路径比 llama.cpp CPU 快 2.5~3×(骁龙 8 Gen 3) ★★☆ 需编译模型
MediaPipe LLM Inference API CPU + GPU delegate + NPU(AICore) .task / .bin ★★ 受限(Gemma、Phi、Falcon、StableLM、Gemma 3N) Google 预量化 Gemma 2B在骁龙上流畅 ★☆☆ 一行代码接入
AI Edge SDK / LiteRT + GenAI CPU / GPU / NPU(Hexagon HTP) .litertlm / .tflite ★★ 受限(Google 官方 list) Google 预量化 NPU 路径能效最高、TTFT < 100ms ★★☆ 需配置 delegate
ExecuTorch CPU(XNNPACK)+ Vulkan + QNN delegate .pte(导出式) ★★ 需自行导出 PT2E、GPTQ、8da4w PyTorch 原生体验 ★★★ 导出流程复杂
NexaSDK CPU/GPU/NPU 全栈 专属格式 ★★ 多种 骁龙全家桶,一站式 ★★☆
PocketPal / Ollama Mobile 底层 llama.cpp GGUF 继承 llama.cpp 同 llama.cpp ≈ llama.cpp ★☆☆ GUI 即开即用
Termux + llama.cpp CPU(同 llama.cpp) GGUF 继承 llama.cpp 同 llama.cpp ≈ llama.cpp ★★☆ 需会 Linux CLI

二、五大主流动手方案详解

1. llama.cpp(你现在在用的)

定位:CPU 上限方案,唯一开箱即用的通用引擎。

Android 官方 Release 提供 arm64-v8a 静态二进制,下载后 chmod +x 即可运行 llama-server,无任何依赖。模型从 HuggingFace 下载 GGUF 文件,100+ 架构通吃(Qwen、Llama、Gemma、Phi、Mistral、MoE 等)。

CPU 路径是它最深的护城河:内置 KleidiAI 微内核 ,运行时自动按 dotprod/i8mm/SVE2 调度,且支持 GGML_KLEIDIAI_SME=1 在 v9.6 芯片上启用 SME2。Vulkan 后端能调 Adreno GPU,但社区实测 CPU 仍是最稳路径。

性能调优要点(你已踩过):

  • taskset 绑定大核(如 taskset F0 绑 cpu4-7),llama.cpp 自己的 -Cr/-Crb 在 Android 上常因线程掩码失败
  • 线程数 = 大核数(旗舰机通常 4)
  • KV cache 用 f16(ARM 上 q8_0 要现场反量化,反而更慢)
  • decode 已接近内存带宽 roofline(0.6B Q8_0 在 SD888 上约 33 t/s = 21 GB/s 有效带宽,超过理论值的 85%)
    适用:所有想深度定制、想用任何模型、想跑在自己编译版本上的用户。

2. MLC-LLM(GPU 上限)

定位:TVM 编译型引擎,调 Adreno/Mali GPU 而不是 CPU。

思路完全不同:编译期 把模型图编译成针对目标 GPU 的优化 kernel(Vulkan/OpenCL/Metal),生成专属模型包(.mlcarchive + mlc-chat-config),然后通过 Android App(mlcchat)或自研 App 加载。

  • 支持 Vulkan(Adreno/Mali 通吃)和 OpenCL,Web 端还能跑 WebGPU
  • 在骁龙 8 Gen 3 上实测比 llama.cpp CPU 快 2.5~3×(PocketPal vs MLC Chat 对比)
  • 学术评测也把它列为 GPU 部署的代表方案
    代价 :模型支持列表受编译管线限制,不能像 GGUF 那样"下载就能跑";自定义模型要走 mlc_llm convert_weight + mlc_llm gen_config + 编译流程;模型文件也比 GGUF 略大。
    适用:在意速度上限、不介意预编译流程、想调 Adreno GPU 的用户。

3. MediaPipe LLM Inference API(最简接入)

定位:Google 官方一站式 API,几行 Java/Kotlin 代码接入本地 LLM。

LLM Inference Stack 封装了分词、采样、KV cache 管理,开发者只关心"喂 prompt、拿 token"。支持平台覆盖 Android/iOS/Web,模型列表目前包含 Gemma、Gemma 3N、Phi 2、Falcon 1B、StableLM 3B 等。

  • 接入成本最低:Gradle 引依赖 → LlmInference 实例化 → generateResponse()
  • 底层可调 CPU、GPU delegate、以及通过 Android AICore 调 NPU(Gemini Nano 系统级服务,Android 14+ 旗舰设备)
  • 模型需转成 .task.bin 格式,官方提供转换脚本,也支持把 safetensors 的 Gemma 3N 微调版转过来
    代价 :模型范围受限,不能随便加载 Qwen/Llama 等任意 GGUF;底层不暴露 llama.cpp 那样的精细调优参数。
    适用:App 开发者,想给 Android 应用加"本地 AI 助手"功能,不需要折腾底层。

4. AI Edge SDK / LiteRT(NPU 能效上限)

定位:Google LiteRT(原 TensorFlow Lite)的 GenAI 扩展,直接打通 Qualcomm Hexagon NPU。

2025 年底 Google 宣布 LiteRT 通过 Qualcomm AI Engine Direct(QNN) delegate 把 90+ 算子下沉到 Hexagon HTP,覆盖大多数视觉、音频、LLM 模型。这是目前唯一能在 Android 上原生调 NPU 跑 LLM 的公开路径。

  • 骁龙 Hexagon NPU 在旗舰 SoC 上提供 45~75 TOPS 算力,能效比 CPU/GPU 高一个数量级
  • 首个 token 延迟(TTFT)可压到 100ms 量级
  • 也可以直接走 Qualcomm SNPE SDK 加载 ONNX/自定义格式模型
    代价 :模型需按 NPU 重新量化并编译;支持的 SoC 列表有限(主要是骁龙 8 Gen 2/3/Elite);Google 官方 LLM 模型清单相对窄。
    适用:电池敏感场景(长时语音助手、常驻 AI 功能),且目标用户机型相对集中。

5. ExecuTorch(PyTorch 原生路径)

定位:PyTorch 官方端侧运行时,AOT 编译产物为 .pte 文件。

流程是 Python 侧用 torch.export 导出 → ExecuTorch 编译器链接 backend delegate(XNNPACK、Vulkan、QNN)→ Android App 通过 JNI 加载 .pte 推理。

  • 对 PyTorch 训练资产最友好,torch.export 一次到位
  • 支持 XNNPACK(CPU)、Vulkan(GPU)、QNN(NPU)三种 delegate
  • LLM 推理支持(Llama 3、Phi 等)官方提供导出脚本
    代价 :导出流程复杂(动态 shape、KV cache 的 export 处理是难点);社区 LLM 生态远不如 llama.cpp 丰富。
    适用:团队已经深度使用 PyTorch 训练管线,想复用训练侧工程师。

三、其他可选方案

  • PocketPal AI:基于 llama.cpp 的 Android GUI 客户端,零配置直接下 GGUF 用,是"会点手机但不想命令行"的用户首选
  • Ollama / LM Studio:桌面端为主,移动端体验有限,不推荐作为 Android 主力
  • NexaSDK(Qualcomm 官方推荐):一套 SDK 同时覆盖 CPU/GPU/NPU,模型格式统一,适合做骁龙生态绑定
  • Termux + llama.cpp:在 Termux 里编译运行 llama.cpp,体验和原生二进制一致,适合喜欢 Linux 命令行的极客

四、模型获取与格式速查

框架 模型格式 从哪儿拿
llama.cpp / PocketPal / Termux GGUF HuggingFace(unsloth/Qwen3-0.6B-GGUF 等仓库)
MLC-LLM .mlcarchive MLC 官方预编译包 或 mlc_llm package 自编译
MediaPipe LLM API .task / .bin Google Model Garden / MediaPipe Models
AI Edge SDK .litertlm / .tflite Google AI Edge Models
ExecuTorch .pte examples/models/llama 导出脚本

五、性能参考(0.6~3B 模型,旗舰 SoC)

以骁龙 8 Gen 3 / Elite 跑 Qwen3-0.6B~1.7B 为例(实际数字因机型、温控、量化级别浮动):

  • llama.cpp CPU(taskset 大核):30~80 t/s
  • MLC-LLM Vulkan:llama.cpp CPU 的 2.5~3×
  • NPU 路径 :TTFT < 100ms,decode 能效比最高,但吞吐未必最高
    预算给得多 → 选 MLC-LLM GPU;预算紧但求稳 → llama.cpp CPU;电池敏感 → NPU 路径(MediaPipe/AI Edge)。

六、按场景选型速查

  • Android 原生 App 内嵌本地 AI 助手,最快落地 → MediaPipe LLM Inference API(Gemma 3N)
  • App 内嵌、想用 Qwen/Llama 等任意开源模型 → llama.cpp JNI 封装(或现成的 PocketPal)
  • 追求最高速度,愿意花时间编译 → MLC-LLM(Vulkan/OpenCL)
  • 旗舰骁龙 + 电池敏感(常驻助手、语音唤醒) → AI Edge SDK / NexaSDK(NPU)
  • 已有 PyTorch 训练管线要下放端侧 → ExecuTorch
  • 极客玩家、Termux 命令行 → Termux + llama.cpp(你正在用的方式)
  • 只想"下载个 App 就能用" → PocketPal AI
    一句话总结:llama.cpp 是"什么都能跑但只到 CPU 上限",MLC-LLM 是"能调 GPU 的上限",MediaPipe/AI Edge 是"NPU 能效上限但模型受限",ExecuTorch 是"PyTorch 党的端侧通道",PocketPal 是"零门槛消费级入口"。 选型前先问自己两个问题:目标机型 SoC 是什么?能接受多复杂的模型转换流程?答案就能锁定唯一选项。
相关推荐
科技每日热闻2 小时前
创业公司需要弹性可伸缩的 GPU 算力,如何规避大额前期硬件投入?
ai
ACP广源盛139246256732 小时前
国产 PCIe2.1 交换芯片 IX6024:低成本轻量化端侧 AI IO 扩展选型解析
大数据·人工智能·硬件架构·pcie·国产芯片
衡石科技2 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
微三云 - 廖会灵 (私域系统开发)2 小时前
架构师视角:用AI Agent与超级APP重构私域自动化盈利系统
人工智能·重构·自动化
新时代牛马2 小时前
cyclictest 毛刺从哪来?从ftrace、latencytop、perf到IRQ/调度延迟定位
android·开发语言·python·kotlin
海盗12342 小时前
AI 新闻日报 2026-09-08:GPT-6 Astra 全面铺开、多模型编排、具身智能融资潮
人工智能·gpt
AI创界者2 小时前
前沿多模态大模型 MiniMax-H3无审查 本地部署与深度实测指南
人工智能·aigc·音视频
武汉大学-王浩宇2 小时前
Autodl配置claude code教程
ai
锋行天下2 小时前
LangGraph 两种消息变更模式的差异
人工智能