尧图网络科技YAOTU DIGITAL 获取报价
获取报价
首页 / 资讯中心 / 文章详情

PowerInfer 在 Android 上的构建与本地部署指南:Termux 设备端编译与 NDK 交叉编译全流程

发布时间:2026/9/24 16:07:25

资讯中心
01
ARTICLE

PowerInfer 在 Android 上的构建与本地部署指南:Termux 设备端编译与 NDK 交叉编译全流程

PowerInfer 在 Android 上的构建与本地部署指南:Termux 设备端编译与 NDK 交叉编译全流程
人工智能大模型推理引擎本地部署【免费下载链接】PowerInferHigh-speed Large Language Model Serving for Local Deployment项目地址https://gitcode.com/gh_mirrors/po/PowerInfer点击查看免费下载本文以 smallthinker/docs/android.md 为骨架结合仓库内的 README、构建文档与源码实现系统讲解在 Android 平台上编译并运行 PowerInferllama.cpp 生态的本地大模型推理引擎的两种主流路径无需 root 的 Termux 设备端构建以及宿主机上基于 Android NDK 的交叉编译。读完本文你将掌握在手机/平板上直接构建、用 adb 推送部署、配置推理上下文参数并理解 PowerInfer 针对 Android 平台如骁龙 8 Elite的稀疏模型专属编译与运行要点。两条路径概览在 Android 上运行 PowerInfer 的两种方式Android 并非桌面 Linux但其内核与 Linux 同源这为在移动设备上运行完整的本地大模型推理引擎提供了两条成熟路径设备端构建Termux在手机上安装 Termux 终端模拟器无需 root将其当作一个小型 Linux 环境直接通过apt安装编译工具链在设备本机上完成从源码到可执行文件的构建适合快速体验与调试。宿主机交叉编译Android NDK在 PC 上使用 Android NDK 提供的 CMake 工具链文件为指定 ABI如arm64-v8a交叉编译出二进制再通过adb push部署到设备适合面向多设备分发、集成进 Android 应用以及追求更严格编译控制的场景。无论选择哪条路径产物都是同一套基于 llama 库 的可执行程序。仓库中该分支的工程根目录为 smallthinker下文涉及源码路径均以此为准。路径一在 Termux 中直接构建 PowerInfer安装 Termux 与基础工具链Termux 是一款 Android 终端模拟器与 Linux 环境应用无需 root 权限。截至文档撰写时Termux 在 Google Play Store 中处于实验性发布状态也可以从其项目仓库或 F-Droid 获取安装包。安装并进入 Termux shell 后先完成系统包更新再安装git与cmake$ apt update apt upgrade -y $ apt install git cmakegit用于拉取源码cmake则是本仓库默认的构建系统生成器关于 CMake 构建的完整说明可参考仓库内的 构建指南。克隆源码并执行 CMake 构建Termux 环境与 Linux 高度相似因此可以直接复用常规的 CMake 构建流程。在 Termux 的 home 目录下克隆本仓库随后执行标准的两步构建$ cmake -B build -DCMAKE_BUILD_TYPERelease $ cmake --build build --config Release -j4提示-j4指定并行编译任务数可按设备 CPU 核数调整以加快编译速度Termux 环境下通常不涉及 GPU 后端保持纯 CPU 构建即可。下载模型并放置到 home 目录构建完成后下载你选定的模型文件例如 GGUF 格式的量化模型。建议将模型放置在~/home目录下以获得最佳性能——这是因为 home 目录通常位于设备内部存储读写性能优于通过 FUSE 挂载的共享存储分区。$ curl -L {model-url} -o ~/{model}.gguf运行推理进入仓库目录后即可调用编译产物运行模型$ ./build/bin/llama-cli -m ~/{model}.gguf -c {context-size} -p {your-prompt}-m指定 GGUF 模型文件路径-c上下文大小context-size-p初始提示词。文档特别强调务必先将context-size设置为一个合理的数值例如 4096再开始运行。上下文越大KV 缓存占用的内存越多若一次性设置过大内存可能瞬间飙升并把你的终端进程杀死。这里以llama-cli为例但理论上 examples 目录下的任一可执行程序如llama-server、llama-simple都可以用同样的方式运行。路径二使用 Android NDK 交叉编译设备端构建适合快速验证但如果你希望为特定设备定制最优化指令集、或将 PowerInfer 集成到自己的 Android App 中则应在宿主机上通过 CMake Android NDK 进行交叉编译。前置条件已准备好面向 Android 的交叉编译环境即安装了 Android SDK 与 NDK。理解 Android 平台的库约束与桌面环境不同Android 只内置了有限的系统原生库因此使用 NDK 构建时CMake 仅能链接到这些可用的库可参考 Android NDK 稳定 API 文档。配置 CMake 工程在项目目录下执行如下 CMake 配置命令$ cmake \ -DCMAKE_TOOLCHAIN_FILE$ANDROID_NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABIarm64-v8a \ -DANDROID_PLATFORMandroid-28 \ -DCMAKE_C_FLAGS-marcharmv8.7a \ -DCMAKE_CXX_FLAGS-marcharmv8.7a \ -DGGML_OPENMPOFF \ -DGGML_LLAMAFILEOFF \ -B build-android关键参数含义参数值说明CMAKE_TOOLCHAIN_FILE$ANDROID_NDK/build/cmake/android.toolchain.cmakeNDK 自带的 Android 工具链文件负责指定交叉编译器、sysroot 等ANDROID_ABIarm64-v8a目标 ABI可按设备调整为armeabi-v7a、x86_64等ANDROID_PLATFORMandroid-28目标 Android API 级别CMAKE_C_FLAGS/CMAKE_CXX_FLAGS-marcharmv8.7a针对现代 ARMv8.7a 指令集优化GGML_OPENMPOFF关闭 OpenMP原因见下方 NotesGGML_LLAMAFILEOFF关闭 llamafile 支持原因见下方 NotesNotes原文档强调的两个已知限制较新版本的 Android NDK 虽然自带 OpenMP 运行时但 CMake 仍需要将 OpenMP 作为依赖单独安装而这一点目前并不被支持因此这里显式关闭GGML_OPENMP。llamafile目前不支持 Android 设备故需关闭GGML_LLAMAFILE。这也与仓库中 Android 示例工程 的 CMake 参数保持一致该工程同样传入了-DGGML_LLAMAFILEOFF。关于指令集与运行时特性检测上述命令以-marcharmv8.7a为现代设备配置了最具性能的编译选项。即使你的设备并非 ARMv8.7a也无需担心PowerInfer 的底层计算内核ggml在运行时会对可用 CPU 特性进行检测自动选择合适的内核。从源码看这一机制体现在 ggml-cpu.c 中初始化时会读取AT_HWCAP辅助向量解析 ARM 特性标志如HWCAP_ASIMDDP对应 dotprod 支持并通过ggml_cpu_has_neon()、ggml_cpu_has_dotprod()等接口暴露ggml-cpu.cpp 与 ggml-cpu-aarch64.cpp 中则依据这些标志在编译进二进制的一组候选内核里动态挑选执行路径。构建与安装配置完成后执行构建与安装$ cmake --build build-android --config Release -j{n} $ cmake --install build-android --prefix {install-dir} --config Release-j{n}n为宿主机并行编译任务数--prefix {install-dir}指定安装目录将头文件、库与可执行文件集中输出便于后续整体推送。部署到设备并运行安装完成后在宿主机下载你选定的模型然后通过 adb 将安装目录与模型推送到设备$ adb shell mkdir /data/local/tmp/llama.cpp $ adb push {install-dir} /data/local/tmp/llama.cpp/ $ adb push {model}.gguf /data/local/tmp/llama.cpp/ $ adb shell进入adb shell后$ cd /data/local/tmp/llama.cpp $ LD_LIBRARY_PATHlib ./bin/llama-simple -m {model}.gguf -c {context-size} -p {your-prompt}这里以llama-simple为例llama-simple是仓库 examples 下最精简的推理示例适合验证部署链路。关于context-size的取值建议与其余 examples 的用法参照上文 Termux 一节。重要提醒Android 系统不会自动查找lib目录下的共享库路径必须显式设置LD_LIBRARY_PATHlib才能运行安装后的可执行程序。Android 在较新的 API 级别上已支持RPATH未来这一行为可能发生变化。PowerInfer 在 Android 上的专属编译要点骁龙 8 Elite 示例本仓库在 Android 上的构建还包含了 PowerInfer 稀疏推理引擎的专属配置。以骁龙 8 EliteQualcomm 8 Elite设备为例smallthinker/README.md 给出了完整流程由于稀疏推理依赖异步 I/O需要先将仓库自带的libaio与liburing交叉编译并安装进 NDK sysroot随后再执行 CMake 配置cmake -S . -B build_a \ -DCMAKE_TOOLCHAIN_FILE$NDK/build/cmake/android.toolchain.cmake \ -DANDROID_ABIarm64-v8a \ -DANDROID_PLATFORMandroid-34 \ -DCMAKE_BUILD_TYPERelWithDebInfo \ -DBUILD_SHARED_LIBSOFF \ -DGGML_OPENMPOFF \ -DLLAMA_CURLOFF \ -DAZ_ENABLE_PERFETTOON \ -DPOWERINFER_NO_FFN_REPACKON \ -DDISABLE_ARM_FEATURE_CHECKON \ -DCMAKE_C_FLAGS-marcharmv8.6-a -D__USE_GNU -Ofast -flto \ -DCMAKE_CXX_FLAGS-marcharmv8.6-a -D__USE_GNU -Ofast -flto cmake --build build_a --config RelWithDebInfo --target llama-cli -j32对比通用 NDK 构建这里出现了几个 PowerInfer 专属开关-DPOWERINFER_NO_FFN_REPACKON关闭 FFN 权重重打包该选项在仓库其他 ARM 平台如 rk3588 等交叉编译示例 中同样被设置-DDISABLE_ARM_FEATURE_CHECKON禁用 ARM 特性运行时检查配合固定的-march编译标志-DAZ_ENABLE_PERFETTOON启用 Perfetto 性能追踪-DBUILD_SHARED_LIBSOFF静态链接减少部署时的库文件管理负担。Android 上运行稀疏模型的注意事项PowerInfer 在移动端运行时README 中同样适用于 Termux还有几点值得注意运行需要使用Q4_0 量化的稀疏模型且线程数建议不超过 8-t 4是文档示例值如需低内存运行模式可先用GENERATE_EXPERT_BUNDLE环境变量生成专家包expert bundle再用 get_no_moe_weights_ffn.py 从 GGUF 中剥离 MoE 权重最后以EXPERT_BUNDLE_PATH与MAX_N_CACHED环境变量按内存上限调节缓存矩阵数如 4B 模型 1GB 限制下取 768启动在 Termux 中运行内存高效版本时可能需要 root 权限稀疏 lm_head 可能带来轻微精度损失如需关闭可修改 llama-model.cpp 中的对应条件但推理速度会变慢。将 PowerInfer 集成进 Android 应用的官方示例如果你的目标不是命令行工具而是将推理能力嵌入 Android App仓库提供了现成的示例工程 examples/llama.android包含一个 Android Library 模块llama/与一个演示 Appapp/。其中 build.gradle.kts 展示了通过 Gradle 的externalNativeBuild直接调用 CMake 的方式并显式传入-DLLAMA_CURLOFF、-DLLAMA_BUILD_COMMONON、-DGGML_LLAMAFILEOFF、-DCMAKE_BUILD_TYPERelease等参数minSdk设为 33NDK 的 CMake 版本要求 3.22.1——这些参数与本文前述 NDK 命令行构建一脉相承可作为 App 集成时的参考基线。常见问题与调试建议内存暴涨导致终端被杀几乎总是-c上下文设置过大所致。建议从 4096 起步根据设备可用内存逐步上调。lib找不到 / 动态库加载失败Android 不会自动搜索lib目录务必在运行前设置LD_LIBRARY_PATHlib。OpenMP / llamafile 报错NDK 路径下两者均不可用按上文参数显式关闭即可。设备端构建速度慢Termux 在手机本机编译耗时较长可适当减小-j防止过热降频追求速度应改用宿主机 NDK 交叉编译。指令集不匹配即使目标设备不支持编译时指定的-marchggml 的运行时 CPU 特性检测见 ggml-cpu.c会兜底选择可用内核但为获得最佳性能仍建议按实际设备调整 ABI 与架构标志。总结在 Android 上部署 PowerInfer 有两条清晰的路径Termux 设备端构建适合快速上手与原型验证全程无需 PCNDK 交叉编译则适合追求性能优化、批量分发与 App 集成。两者共享同一套 CMake 构建体系核心差异在于工具链与运行约束。对 PowerInfer 用户而言结合 smallthinker/README.md 中的稀疏模型编译与运行参数POWERINFER_NO_FFN_REPACK、DISABLE_ARM_FEATURE_CHECK、MAX_N_CACHED等即可在骁龙 8 Elite 等现代旗舰 SoC 上获得完整的本地大模型推理体验。赞分享人工智能大模型推理引擎本地部署【免费下载链接】PowerInferHigh-speed Large Language Model Serving for Local Deployment项目地址https://gitcode.com/gh_mirrors/po/PowerInfer点击查看免费下载相关推荐ik_llama.cpp Android 部署完全指南Termux 编译、NDK 交叉编译与 JNI 集成实战ik_llama.cpp Android 部署完全指南Termux 编译、NDK 交叉编译与 JNI 集成实战 本指南基于仓库 docs/android.md人工智能大模型推理引擎本地部署模型量化llama.cpp Android 部署完全指南Android Studio GUI 绑定、Termux CLI 与 NDK 交叉编译三种方案llama.cpp Android 部署完全指南Android Studio GUI 绑定、Termux CLI 与 NDK 交叉编译三种方案 本文基于 ll人工智能大模型模型推理服务推理引擎本地部署后端ZeroClaw Android 部署实战指南预编译二进制、Termux 运行与 NDK 源码编译全流程ZeroClaw Android 部署实战指南预编译二进制、Termux 运行与 NDK 源码编译全流程 ZeroClaw 是一个可部署到任意平台的全自主 A人工智能AI Agent交互助手工具调用MCP Clients本地部署Agent 工作流RAG上一篇Spaceship ZSH v3.0 深度解析脱离 Oh-My-Zsh 的原生 Prompt 架构与模块化 Section API下一篇Notepad Markdown实时预览插件技术文档工作者的效率革命创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
02
RELATED NEWS

相关资讯

更多网站建设与数字化升级内容

03
WHY YAOTU

想打造同款高转化官网?

懂行业、懂生意,从建站到增长一站式陪跑

场景化定制

不做模板站,围绕你的业务场景量身设计,小众不撞款。

营销型架构

以转化目标组织内容与路径,让官网真正带来询盘。

全周期服务

设计、开发、运营、运维一体,上线只是开始。

免费获取你的建站方案

留下需求,专属顾问 24 小时内为你输出方案建议。