ggml交叉编译安卓部署大模型

ubuntu 编译,推送.so文件和模型至安卓执行。

部分内容参考:

https://github.com/ggml-org/ggml?tab=readme-ov-file

注意下载模型时

复制代码
../examples/gpt-2/download-ggml-model.sh文件默认是huggingface,可以将网址替换为

https://hf-mirror.com

export HF_HUB_OFFLINE=0
export HF_ENDPOINT=https://hf-mirror.com
pip install -U huggingface_hub
复制代码
git clone https://github.com/ggml-org/ggml
cd ggml
conda create -n ggml python==3.10
# build the examples
mkdir build && cd build
cmake ..
cmake --build . --config Release -j 8
复制代码
# run the GPT-2 small 117M model
../examples/gpt-2/download-ggml-model.sh 117M


将models文件夹拷贝至build目录下

./bin/gpt-2-backend -m models/gpt-2-117M/ggml-model.bin -p "This is an example"

执行成功界面

交叉编译,推至安卓端执行

以下内容保存为.sh文件,执行该文件生成对应的安卓端执行文件

复制代码
#!/bin/bash

# 👇 这里改成你自己的 NDK 路径
NDK_PATH=/opt/android-ndk-r26c

# 编译目录
BUILD_DIR=build-android-arm64
rm -rf $BUILD_DIR
mkdir -p $BUILD_DIR
cd $BUILD_DIR

cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/android.toolchain.cmake \
  -DANDROID_ABI=arm64-v8a \
  -DANDROID_PLATFORM=android-24 \
  -DCMAKE_BUILD_TYPE=Release \
  -DBUILD_EXAMPLES=ON \
  -DBUILD_TESTS=OFF

make -j$(nproc)

生成以下内容在build-android-arm64目录下

编译好的文件在build-android-arm64目录下,注意查看libggml.so是否为安卓可执行的文件

复制代码
# create directories
adb shell 'mkdir /data/local/tmp/bin'
adb shell 'mkdir /data/local/tmp/models'

# push the compiled binaries to the folder
cd 
adb push build-android-arm64/bin/* /data/local/tmp/bin/

# push the ggml library
adb push build-android-arm64/src libggml-base.so libggml-cpu.so  libggml.so /data/local/tmp/

# push model files
adb push models/gpt-2-117M/ggml-model.bin /data/local/tmp/models/

adb shell
cd /data/local/tmp
export LD_LIBRARY_PATH=/data/local/tmp
./bin/gpt-2-backend -m models/ggml-model.bin -p "this is an example"

异常错误处理:/system/bin/sh: *** not executable: 64-bit ELF file

如果在安卓端执行以下命令时,出现/system/bin/sh: *** not executable: 64-bit ELF file错误,说明交叉编译生成.so库不是安卓端可执行的文件,需要重新进行编译

./bin/gpt-2-backend -m models/ggml-model.bin -p "this is an example"

相关推荐
阿拉斯攀登2 天前
【瑞芯微 RK 系列 + 安卓驱动全栈教程】博客系列
嵌入式硬件·安卓·瑞芯微·rk3576·嵌入式安卓·安卓驱动
星夜钢琴手4 天前
从安卓设备上移除已关闭的微软账号(清除残留的微软账号)
安卓·残留·微软账号
我命由我1234517 天前
在 Android Studio 中,新建 AIDL 文件按钮是灰色
android·ide·android studio·安卓·android jetpack·android-studio·android runtime
我命由我1234517 天前
Android 多进程开发 - AIDL 回调、RemoteCallbackList、AIDL 安全校验
android·java·安全·android studio·安卓·android-studio·android runtime
Sun_gentle25 天前
java.lang.RuntimeException: Could not load wrapper properties from ‘C:\Users\
java·开发语言·安卓
技术摆渡人1 个月前
RK3588 USB系统硅级剖析
android·linux·驱动开发·车载系统·安卓
灯火不休ᝰ1 个月前
[kotlin] 从Java到Kotlin:掌握基础语法差异的跃迁指南
java·kotlin·安卓
感谢地心引力1 个月前
安卓、苹果手机无线投屏到Windows
android·windows·ios·智能手机·安卓·苹果·投屏