mlc-llm安卓端部署流程

MLC-LLM是大模型的通用部署方案。以下是根据安卓部署官方文档的部署流程。主要安装步骤参考官方文档即可,这里仅为一些踩坑笔记,可以作为参考

部分说明基于自己理解,若有错误还请指正

主要参考文章: 官方安装文档掘金用户部署笔记

1 流程简介

如图所示,绿色方框表示tvm-unity ,其中黄色方框表示需要安装的依赖,紫色方块表示外部输入。 HuggingFace_TokenizerModel 分别通过rusttvm_compiler 编译,得到安卓运行库(android lib)

得到的安卓运行库(android lib)需要和tvm_runtime 打包在一起,该过程需要调用java ,得到一个jar文件

jar文件通过Android Studio,最终生成一个安卓应用

2 安装依赖

2.1 安装rust

例如在Ubuntu 22.04系统下,执行如下命令:

curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source ~/.cargo/env

2.2 安装AS

根据官方文档安装即可,同时下载NDK和CMake。

2.3 安装java

这里推荐安装jdk 17,否则将会在AS构建apk的过程中遇到java版本号过高的问题,例如:
报错: Unsupported class file major version 65
解决方法: 使用更低版本的jdk 或者 升级AS的gradle

注意: 执行./prepare_libs.sh会使用第一次配置的java生成缓存。要使用不同版本的java,先删除mlc-llm/android/build文件夹,再重新执行./prepare_libs.sh命令。

2.4 配置环境变量

在工具链调用过程中,需要用到某些环境变量。参考官方文档配置即可。

例如,我在~/.bashrc中有如下配置:

export ANDROID_NDK=~/Android/Sdk/ndk/26.1.10909125

export TVM_NDK_CC=$ANDROID_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang

export JAVA_HOME=~/jdk-17.0.2

export TVM_HOME=~/mlc-llm/3rdparty/tvm

2.5 安装tvm-compiler

参考安装文档安装即可。

特别需要注意的是,在验证时,执行

less 复制代码
python -c "import tvm; print('\n'.join(f'{k}: {v}' for k, v in tvm.support.libinfo().items()))"

需要特别检查如下参数处于打开状态:

vbnet 复制代码
USE_LLVM: llvm-config --link-static  
LLVM_VERSION: 15.0.7

否则后续编译遇到报错: Module stackvm should be either dso exportable or binary serializable
解决方法: 由于该prebuilt package更新频率快,如果上述检查参数不正确,等待几天重新下载即可。若不想等待,直接从源代码构建。

3 构建安卓运行库(android lib)

3.1 克隆mlc-llm项目到本地,并安装依赖(torch等)

git clone --recursive https://github.com/mlc-ai/mlc-llm/
cd ./mlc-llm/
pip install .

3.2 构建模型

由于Llama模型较大,构建环境耗时,这里使用RedPajama作为示例,执行如下代码:

css 复制代码
python3 -m mlc_llm.build --hf-path togethercomputer/RedPajama-INCITE-Chat-3B-v1 --target android --max-seq-len 768 --quantization q4f16_1

注意: 检查tvm-compiler是否安装成功,执行python3 -m mlc_llm.build --help即可。

接下来,跟着官方文档走即可。

4 使用AS构建apk

问题: 打开该andorid项目时,AS需要配置相应的gradle环境。由于仓库在国外,下载速度极慢
解决方法:setting.gradle中配置国内镜像,例如:

rust 复制代码
pluginManagement {
    repositories {
        maven { url 'https://maven.aliyun.com/repository/centerl' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        google()
        mavenCentral()
        gradlePluginPortal()
    }
}
dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        maven { url 'https://maven.aliyun.com/repository/centerl' }
        maven { url 'https://maven.aliyun.com/repository/public' }
        maven { url 'https://maven.aliyun.com/repository/gradle-plugin' }
        google()
        mavenCentral()
    }
}
rootProject.name = "MLCChat"
include ':app'

5 其他

官方提供的源代码构建成最终apk文件后,可能会出现应用权限问题

参考该commit解决即可(该解决方案参考该文章得到)

相关推荐
知来者逆6 小时前
Binoculars——分析证实大语言模型生成文本的检测和引用量按学科和国家明确显示了使用偏差的多样性和对内容类型的影响
人工智能·深度学习·语言模型·自然语言处理·llm·大语言模型
几米哥13 小时前
如何构建高效的AI代理系统:LLM应用实践与最佳方案的深度解析
llm·aigc
测试者家园15 小时前
ChatGPT生成接口文档实践案例(二)
软件测试·chatgpt·llm·测试用例·测试图书·质量效能·用chatgpt做测试
bastgia3 天前
Tokenformer: 下一代Transformer架构
人工智能·机器学习·llm
新智元3 天前
李飞飞谢赛宁:多模态 LLM「空间大脑」觉醒,惊现世界模型雏形!
人工智能·llm
RWKV元始智能4 天前
RWKV-7:极先进的大模型架构,长文本能力极强
人工智能·llm
zaim14 天前
计算机的错误计算(一百八十七)
人工智能·ai·大模型·llm·错误·正弦/sin·误差/error
张拭心4 天前
Google 提供的 Android 端上大模型组件:MediaPipe LLM 介绍
android·人工智能·llm
带电的小王4 天前
whisper.cpp: Android端测试 -- Android端手机部署音频大模型
android·智能手机·llm·whisper·音频大模型·whisper.cpp
带电的小王5 天前
whisper.cpp: PC端测试 -- 电脑端部署音频大模型
llm·whisper·音视频·音频大模型