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"

相关推荐
小向是个Der1 天前
嵌入式进阶——编译与链接
汇编·单片机·学习·编译原理·交叉编译
行者-全栈开发1 天前
【鸿蒙心迹】三方库移植(一)——NAPI 把 C/C++ 库桥接到 ArkTS 的完整链路(HarmonyOS 7.x)
harmonyos·arkts·交叉编译·c/c++·napi·三方库移植
北京自在科技2 天前
谷歌安卓 Gemini 迎来界面改版,Find Hub 接入 Gemini 支持物品记忆查找
android·安卓
limit00754 天前
三维 WebGIS 工具选型:加载、样式、分析、交付,一套界面能做完什么
android·前端·web3·安卓·webgl
limit00755 天前
三维模型悬空与切片偏移的排查顺序
低代码·3d·arcgis·web3·安卓·webgl
/**书香门第*/11 天前
Cocos Creator 3.8 配置如何直接运行白包到模拟器
安卓·cocos creator·白包
iReachers19 天前
Termux:把安卓手机变成随身的命令行工具箱
python·安卓·termux·命令行·实用工具
木白CPP21 天前
Vold Bugs(二)---U盘不识别(onVolumeChecking 返回错误码 -5)
安卓
木白CPP1 个月前
SELinux 介绍和基本使用
嵌入式硬件·安卓·安全架构
物极必反10241 个月前
QT使用FFMpeg编译安卓程序.md
qt·ffmpeg·安卓