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解决即可(该解决方案参考该文章得到)

相关推荐
大耳朵爱学习12 小时前
掌握Transformer之注意力为什么有效
人工智能·深度学习·自然语言处理·大模型·llm·transformer·大语言模型
洛阳泰山12 小时前
如何使用Chainlit让所有网站快速嵌入一个AI聊天助手Copilot
人工智能·ai·llm·copilot·网站·chainlit·copliot
数据智能老司机1 天前
从零开始构建大型语言模型——微调用于分类
深度学习·神经网络·llm
大耳朵爱学习1 天前
大模型预训练的降本增效之路——从信息密度出发
人工智能·深度学习·机器学习·自然语言处理·大模型·llm·大语言模型
数据智能老司机1 天前
从零开始构建大型语言模型——实现注意力机制
深度学习·神经网络·llm
Seal软件2 天前
GPUStack 0.2:开箱即用的分布式推理、CPU推理和调度策略
大模型·llm·aigc·gpu·genai·gpu集群
阿里云大数据AI技术2 天前
对接开源大模型应用开发平台最佳实践
人工智能·阿里云·llm·opensearch
skywalk81632 天前
使用PaddleNLP调用大模型ChatGLM3-6b进行信息抽取
人工智能·llm·chatglm
Hoper.J2 天前
使用 HFD 加快 Hugging Face 模型和数据集的下载
llm·aigc·hugging face·hfd
真-忒修斯之船2 天前
搭配Knowledge Graph的RAG架构
人工智能·大模型·llm·知识图谱·graph·rag·knowledgegraph