赞
踩
话不多说,直接开始实战吧!
参考自MLC使用文档
这里稍微讲解了一些MLC的基本概念,以帮助我们使用和了解 MLC LLM。
MLC-LLM 由三个不同的子模块组成:模型定义、模型编译和模型运行。
MLC LLM 的三个独立子模块
➀ Python 中的模型定义。MLC 提供各种预定义架构,例如 Llama(例如 Llama2、Vicuna、OpenLlama、Wizard)、GPT-NeoX(例如 RedPajama、Dolly)、RNN(例如 RWKV)和 GPT-J(例如MOSS)。开发人员可以仅使用纯 Python 定义模型,而无需接触编码。
➁ Python 中的模型编译。模型由TVM Unity编译器编译,其中编译配置为纯 Python。MLC LLM 将基于 Python 的模型量化导出到模型库并量化模型权重。可以用纯 Python 开发量化和优化算法,以针对特定用例压缩和加速 LLM。
➂ 不同平台的模型运行。每个平台上都提供了 MLCChat 的变体:用于命令行的C++ 、用于 Web 的Javascript 、用于 iOS 的Swift 和用于 Android 的Java,可通过 JSON 进行配置。开发人员只需熟悉平台即可将 MLC 编译的 LLM 集成到他们的项目中。
MLC相关术语
MLC中有一些自己定义的术语,我们通过了解这些基本术语,对后面的使用会提供很大的帮助。
modelweights:模型权重是一个文件夹,其中包含语言模型的量化神经网络权重以及分词器配置。
model lib:模型库是指能够执行特定模型架构的可执行库。在 Linux 上,这些库文件的后缀为 .so,在 macOS 上,后缀为.dylib,在 Windows 上,后缀为.dll,在WebGPU上,后缀是.wasm。
chat config:推理配置,包含允许的自定义参数(例如Temperature 和system prompt)的设置。推理配置与模型权重默认位于同一个目录中。推理配置还包含下面两个在多种模型设置中都支持使用的元数据字段。
local_id,应用程序中模型的唯一标识
model_lib,指定要使用哪个模型库。
MLC运行流程图
配置好模型权重、模型库和推理设置后,MLC提供了各种MLC 聊天程序帮助用户能直接使用模型,下图显示了 MLC 聊天程序的工作流程。
图右侧的伪代码,说明了聊天应用程序的结构。
ChatModule管理模型的类。
chat.reload模型加载,通过local_id来确定需要加载的模型,model_lib来确定需要加载的模型库,同时允许覆盖Temperature 和system prompt等设置
chat.generate结果生成,input为需要输入的内容,stream_callbace为多轮对话的轮数
所有的 MLC聊天程序 运行时(包括 iOS、Web、CLI 等)都会使用这三个元素。所以运行时读取的都是同一个模型权重文件夹。而模型库会根据编译时环境的选择而生成不同的文件。其中 CLI的模型库存储在 DLL 目录中。iOS 和 Android 由于动态加载限制,在应用程序中就预先打包好了模型库。WebLLM则是利用URL来访问本地文件或互联网的 WebAssembly (Wasm) 文件 。
以上拾人牙慧,下面开始我自己的工作。
请注意,本流程在MLC-LLM0.1.0版本可以正常跑通,后续版本更新请根据官网最新文档进行!
官网教程理论来说在Windows或者Linux平台上都能跑通,但是Windows平台我在实际测试的时候会在各种地方报各种各样的错误,因此我们选择Linux平台进行整个流程的运行,如果没有Linux系统的可以根据这篇博客:Ubuntu Linux的安装进行安装。
如果你的Linux环境和我一样是新装的,那么你有可能会遇到和我一样的问题:
这次需要的依赖还挺多的,没有关系我们一步一步来。
注意:因为我的系统是新系统,如果读者的电脑上已经安装了诸如此类的东西,我不敢保证结果和我显示一样,可能会有报错之类的问题,请自助查询资料,如果是新机流程和我一致。
Anaconda基本是必备的吧,可以避免各种包冲突,管理起来也方便,安装教程参考这篇博文:Linux安装anaconda
在MLC中需要使用的python最低版本在3.10以上。
# 创建一个 your-environment的虚拟环境,python版本为3.10
conda create -n your-environment python==3.10
# 进入虚拟环境
conda activate your-environment
注意:之后绝大部分的操作都要在你新建的这个虚拟环境下进行,否则会出现各种问题,例如找不到库。
来自官网的介绍:Rust (install) is needed to cross-compile HuggingFace tokenizers to Android. Make sure rustc, cargo, and rustup are available in $PATH.
如此安装:
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
安装完成后,可以在命令行输入一下命令检验是否安装成功,如果没有结果,则表示安装失败,可以尝试重新安装rust。
rustc --version
进行apk的打包,需要使用Android Studio。
要使用Android Studio就需要安装 SDK、NDK、CMake和JAVA。
其中Android Studio可以在官网中去下载,windows直接执行安装程序,按照默认设置安装即可,linux则是将tar.gz文件解压到对应的目录即可。运行以下命令即可开始使用android studio(需要图形化界面)
./bin/studio.sh
在 Android Studio 单击“File → Settings → Languages & Frameworks → Android SDK → SDK Tools”,选择安装NDK、CMake和Android SDK Platform-Tools。安装完成后,需要在环境变量中去对NDK等进行配置才可使用。
下面是安装完毕之后需要配置的环境变量,具体操作就是 vim ~/.bashrc 打开之后在最下面粘贴即可:(小白注意:里面的路径需要和自己安装的路径一致)
export ANDROID\_NDK=/home/User/Android/Sdk/ndk/26.1.10909125
export ANDROID\_HOME=/home/User/Android/Sdk
export PATH=$PATH:/home/User/Android/Sdk/cmake/3.22.1/bin
export PATH=$PATH:/home/User/Android/Sdk/platform-tools
export TVM\_NDK\_CC=$ANDROID\_NDK/toolchains/llvm/prebuilt/linux-x86_64/bin/aarch64-linux-android24-clang
export TVM\_HOME=/home/User/mlc-llm/3rdparty/tvm
export TVM\_HOME=$TVM\_HOME/include/tvm/runtime
source $HOME/.cargo/env # Rust
Android Studio需要安装openjdk,官方要求的版本是>17。
# 更新update
sudo apt update
# 安装openjdk17
sudo apt install openjdk-17-jdk
# 查看jdk17的安装路径
sudo update-alternatives --list java
# 用上面命令获取的路径,编入到bashrc文件的最后一行中
vi ~/.bashrc
# 将下面的命令,编入到bashrc文件的最后一行中
export JAVA\_HOME=/usr/lib/jvm/java-17-openjdk-amd64/bin/java
# 更新环境变量
source ~/.bashrc
这个就在我们接下来要git clone的包里,在 3rdparty/tvm里面,所以不需要额外下载,只需要在上面环境配置中路径写对即可。
这个必须要安装,我们需要用这个来对模型进行编译,(官网说如果用prebuilt的话则不用安装,但是我没找到prebuilt在哪,有知道的小伙伴可以提醒我一下)
conda activate your-environment
python -m pip install --pre -U -f https://mlc.ai/wheels mlc-ai-nightly
注意:由于mlc-ai-nigtly这个包不在国内的pip源中,需要在mlc.ai网站的wheels中去进行下载,如果你没有像我一样安装Clash for linux,则根据这篇博文进行安装MLC-LLM
TVM的安装验证:以下命令可以帮助确认 TVM 是否已正确安装为 python 包并提供 TVM python 包的位置
>>> python -c "import tvm; print(tvm.__file__)"
/some-path/lib/python3.10/site-packages/tvm/__init__.py
好,现在前置环境配置的工作终于完成了,现在可以进行模型的编译了,由于从huggingface上下载模型太慢,这里采用别人提供的国内云盘上的模型:
Llama2模型下载地址
Llama2-7B Hugging Face版本:https://pan.xunlei.com/s/VN_t0dUikZqOwt-5DZWHuMvqA1?pwd=66ep
Llama2-7B-Chat Hugging Face版本:https://pan.xunlei.com/s/VN_oaV4BpKFgKLto4KgOhBcaA1?pwd=ufir
Llama2-13B Hugging Face版本:https://pan.xunlei.com/s/VN_yT_9G8xNOz0SDWQ7Mb_GZA1?pwd=yvgf
Llama2-13B-Chat Hugging Face版本:https://pan.xunlei.com/s/VN_yA-9G34NGL9B79b3OQZZGA1?pwd=xqrg
Llama2-70B-Chat Hugging Face版本:https://pan.xunlei.com/s/VNa_vCGzCy3h3N7oeFXs2W1hA1?pwd=uhxh#
下载好了之后放到虚拟机里面备用,虚拟机务必留出足够的空间!我下载的是Llama2-7B-Chat Hugging Face版本。
git clone --recursive https://github.com/mlc-ai/mlc-llm/
^^^^^^^^^^^
cd ./mlc-llm/
没啥好说的,如果显示没有git命令就安装好了,注意–recursive是必须加的。
终于到了最关键的一步!
首先,找到我们放模型的目录,打开终端,运行下面的命令:
我先解释一下:MODEL_NAME这个变量就是你放模型的目录名,QUANTIZATION就是默认的q4f16_1,后面的dist/MODEL_NAME-QUANTIZATION-MLC/就是保存编译之后的文件目录名,建议严格根据官网教程来,除非你知道你在做什么。
MODEL\_NAME=Llama-2-7b-chat-hf QUANTIZATION=q4f16_1 # convert weights mlc_llm convert_weight ./dist/models/$MODEL\_NAME/ --quantization $QUANTIZATION -o dist/$MODEL\_NAME-$QUANTIZATION-MLC/ # create mlc-chat-config.json mlc_llm gen_config ./dist/models/$MODEL\_NAME/ --quantization $QUANTIZATION \ --conv-template llama-2 --context-window-size 768 -o dist/${MODEL\_NAME}-${QUANTIZATION}-MLC/ # 2. compile: compile model library with specification in mlc-chat-config.json mlc_llm compile ./dist/${MODEL\_NAME}-${QUANTIZATION}-MLC/mlc-chat-config.json \ ### 最后 **在这里我和身边一些朋友特意整理了一份快速进阶为Android高级工程师的系统且全面的学习资料。涵盖了Android初级——Android高级架构师进阶必备的一些学习技能。** 附上:我们之前因为秋招收集的二十套一二线互联网公司Android面试真题(含BAT、小米、华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。) ![](https://img-blog.csdnimg.cn/img_convert/8f3b531f33d1e8f68f3a354dd71caac9.webp?x-oss-process=image/format,png) **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!** 华为、美团、滴滴)和我自己整理Android复习笔记(包含Android基础知识点、Android扩展知识点、Android源码解析、设计模式汇总、Gradle知识点、常见算法题汇总。) [外链图片转存中...(img-HOlYjttG-1714508668720)] **网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。** **[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)** **一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。