在安卓手机上运行 llama.cpp


安装 Termux, 手机输命令太麻烦了所以我建议用 adb shell 打开 Termux:
# adb shell
run-as com.termux /data/data/com.termux/files/usr/bin/bash \
-lic 'export PATH=/data/data/com.termux/files/usr/bin:$PATH; \
export LD_PRELOAD=/data/data/com.termux/files/usr/lib/libtermux-exec.so; \
export PREFIX=/data/data/com.termux/files/usr; \
export HOME=/data/data/com.termux/files/home; bash'安装环境:
# bash
apt install --no-install-recommends tur-repo x11-repo
apt install --no-install-recommends \
build-essential cmake ndk-multilib ndk-sysroot \
git libc++ libandroid-spawn libandroid-shmem
# for vulkan
apt install --no-install-recommends \
vkmark mesa-utils vulkan-tools vulkan-loader-generic shaderc \
libvulkan1 libvulkan-dev libassimp-dev libdrm libdrm-dev
# for Adreno GPU
apt install --no-install-recommends mesa-vulkan-icd-freedreno
# for Mali GPU
dpkg -i mesa-vulkan-icd-wrapper_24.3.1-3_aarch64.deb
# other gpus / llvmpipe
apt install --no-install-recommends mesa-vulkan-drivers
# system original driver
apt install --no-install-recommends vulkan-loader-androidmesa-vulkan-icd-wrapper_24.3.1-3_aarch64.deb
若需要 vulkan 加速, GPU 需要支持 16 位存储缓冲, 且计算共享内存不小于 32768:
# vulkaninfo 2>/dev/null | grep "maxComputeSharedMemorySize\|storageBuffer16BitAccess"
maxComputeSharedMemorySize = 32768
storageBuffer16BitAccess = true编译 llama.cpp, 使用版本 b7936:
git clone -b b7936 --depth=1 https://github.com/ggml-org/llama.cpp.git
# for vulkan
git clone --depth=1 https://github.com/KhronosGroup/Vulkan-Headers.git
export PREFIX=/data/data/com.termux/files/usr
export LIBRARY_PATH=/data/data/com.termux/files/usr/opt/ndk-multilib/aarch64-linux-android/lib
cd llama.cpp
cmake -B build \
# for vulkan
# -DGGML_VULKAN=ON -DVulkan_LIBRARY=/system/lib64/libvulkan.so \
# -DVulkan_INCLUDE_DIR="../Vulkan-Headers/include" \
# -DGGML_CUDA_FA_ALL_QUANTS=ON -DGGML_CUDA_ENABLE_UNIFIED_MEMORY=ON \
-DLLAMA_CURL=OFF -DBUILD_SHARED_LIBS=OFF
cmake --build build --config Release -j $(nproc) \
--target llama-server llama-cli llama-mtmd-cli llama-bench也可以使用我编译好的: llama.cpp-b7936-vulkan-android.tar.xz