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

相关推荐
掘金安东尼1 小时前
字节-Trae、阿里-通义灵码、腾讯-CodeBuddy,为什么都在“卷”AI编码?
面试·llm·github
土豆12506 小时前
告别“专属”编辑器:为什么 GitHub Copilot 是比 Cursor 更优的 AI 编程选择
llm·cursor·github copilot
知其然亦知其所以然6 小时前
RAG 结果太水?用 RRF + Reranker 重排,效果翻倍提升!
java·后端·llm
磊叔的技术博客7 小时前
Spring AI Chat Memory 实战指南:Local 与 JDBC 存储集成
spring·llm·openai
憨憨睡不醒啊1 天前
如何让LLM智能体开发助力求职之路——构建属于你的智能体开发知识体系📚📚📚
面试·程序员·llm
柯南二号1 天前
深入理解 Agent 与 LLM 的区别:从智能体到语言模型
人工智能·机器学习·llm·agent
Q同学1 天前
TORL:工具集成强化学习,让大语言模型学会用代码解题
深度学习·神经网络·llm
人肉推土机1 天前
AI Agent 架构设计:ReAct 与 Self-Ask 模式对比与分析
人工智能·大模型·llm·agent
洗澡水加冰1 天前
n8n搭建多阶段交互式工作流
后端·llm
中杯可乐多加冰1 天前
【解决方案-RAGFlow】RAGFlow显示Task is queued、 Microsoft Visual C++ 14.0 or greater is required.
人工智能·大模型·llm·rag·ragflow·deepseek