Android
使用 Termux 在 Android 上构建
Termux 是一个 Android 终端模拟器和 Linux 环境应用程序(无需 root 权限)。截至目前,Termux 在 Google Play 商店中以实验性版本提供;也可以直接从项目仓库或 F-Droid 获取。
通过 Termux,你可以像在 Linux 环境中一样安装和运行 llama.cpp。进入 Termux 终端后:
$ apt update && apt upgrade -y
$ apt install git cmake
然后,按照构建说明,特别是 CMake 相关部分进行操作。
构建完成后,下载你选择的模型文件(例如,从 Hugging Face 下载)。建议将模型文件放在 ~/ 目录中以获得最佳性能:
$ curl -L {模型文件URL} -o ~/{模型文件名}.gguf
然后,如果你还没有在仓库目录中,请 cd 进入 llama.cpp 目录并执行:
$ ./build/bin/llama-cli -m ~/{模型文件名}.gguf -c {上下文大小} -p "{你的提示文本}"
这里我们展示的是 llama-cli,但理论上 examples 目录下的任何可执行文件都应该可以正常工作。请确保将 上下文大小 设置为合理的数值(比如 4096)作为开始;否则,内存使用可能会激增并导致终端崩溃。
注意: 上下文大小的设置非常重要,过大的数值可能会导致内存不足。
要查看视觉效果,这里有一个在 Pixel 5 手机上运行交互式会话的旧演示:
https://user-images.githubusercontent.com/271616/225014776-1d567049-ad71-4ef2-b050-55b0b3b9274c.mp4
使用 Android NDK 交叉编译
可以通过 CMake 和 Android NDK 在主机系统上为 Android 构建 llama.cpp。如果你对这种方式感兴趣,请确保你已经准备好了用于为 Android 交叉编译程序的环境(即安装 Android SDK)。请注意,与桌面环境不同,Android 环境只提供有限的原生库集合,因此在使用 Android NDK 构建时,CMake 只能使用这些库(参见:https://developer.android.com/ndk/guides/stable_apis)。
准备就绪并克隆了 llama.cpp 后,在项目目录中执行以下命令:
$ cmake \
-DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK/build/cmake/android.toolchain.cmake \
-DANDROID_ABI=arm64-v8a \
-DANDROID_PLATFORM=android-28 \
-DCMAKE_C_FLAGS="-march=armv8.7a" \
-DCMAKE_CXX_FLAGS="-march=armv8.7a" \
-DGGML_OPENMP=OFF \
-DGGML_LLAMAFILE=OFF \
-B build-android
注意事项:
- 虽然较新版本的 Android NDK 包含 OpenMP,但仍需要 CMake 将其作为依赖项安装,目前不支持此功能
llamafile似乎不支持 Android 设备(参见:https://github.com/Mozilla-Ocho/llamafile/issues/325)
上述命令应该为现代设备配置 llama.cpp 的最高性能选项。即使你的设备不运行 armv8.7a,llama.cpp 也包含运行时检查,以确定可用的 CPU 功能特性。
你可以根据目标设备调整 Android ABI 设置。项目配置完成后:
$ cmake --build build-android --config Release -j{线程数}
$ cmake --install build-android --prefix {安装目录} --config Release
安装完成后,在主机系统上下载你选择的模型文件。然后:
$ adb shell "mkdir /data/local/tmp/llama.cpp"
$ adb push {安装目录} /data/local/tmp/llama.cpp/
$ adb push {模型文件名}.gguf /data/local/tmp/llama.cpp/
$ adb shell
在 adb shell 中:
$ cd /data/local/tmp/llama.cpp
$ LD_LIBRARY_PATH=lib ./bin/llama-simple -m {模型文件名}.gguf -c {上下文大小} -p "{你的提示文本}"
就是这样!
重要提示: Android 无法自动找到库路径
lib,因此我们必须指定LD_LIBRARY_PATH才能运行已安装的可执行文件。Android 在较新的 API 级别中确实支持RPATH,所以这种情况在未来可能会改变。
有关 上下文大小(非常重要!)和运行其他 examples 的信息,请参考上一节的说明。