logo 🤗

技术视野

聚焦科技前沿,分享技术解析,洞见未来趋势。在这里,与您一起探索人工智能的无限可能,共赴技术盛宴。

安装

  1. 安装MLC,推荐Linux系统。参考链接,网络差的可以去网站手动下载whl文件。python版本官方推荐3.11,cuda版本推荐12.1。
python3 -m pip install --pre -U -f https://mlc.ai/wheels mlc-ai-nightly-cu121
python3 -m pip install --pre -U -f https://mlc.ai/wheels mlc-llm-nightly-cu121
  1. 验证mlc。
mlc_llm --help
  1. 验证TVM,MLC库里面已经预编译了TVM,所以不需要再安装了,直接验证一下就行了,输出不为空就ok了。
python -c "import tvm; print(tvm.__file__)"

转权重

  1. 准备一下qwen1.5-1.8b-chat的模型(官网用的是一个3b的模型)。
  2. 转模型权重。
  • 转gpu权重
mlc_llm convert_weight ./dist/models/Qwen1.5-1.8B-Chat \
    --model-type qwen2 \
    --device cuda:0 \
    --quantization q4f16_1 \
    --source-format huggingface-safetensor \
    -o dist/qwen1.5-1.8b-q4f16_1-MLC
  • 如果需要转cpu权重,可以用这个
mlc_llm convert_weight ./dist/models/Qwen1.5-1.8B-Chat \
    --model-type qwen2 \
    --device cpu \
    --quantization q4f32_1 \
    --source-format huggingface-safetensor \
    -o dist/qwen1.5-1.8b-q4f32_1-MLC
  • 关于这个的参数解释,可以通过下面的指令获取。
mlc_llm convert_weight --help
  1. 生成 MLC 聊天配置,用于生成和处理分词器。
  • gpu,建议降低一下上下文到8k,否则容易显存不足而运行时失败。
mlc_llm gen_config ./dist/models/Qwen1.5-1.8B-Chat \
    --model-type qwen2 \
    --quantization q4f16_1 \
    --context-window-size 8192 \
    --conv-template chatml \
    -o dist/qwen1.5-1.8b-q4f16_1-MLC
  • cpu
mlc_llm gen_config ./dist/models/Qwen1.5-4B-Chat \
    --model-type qwen2 \
    --quantization q4f32_1 \
    --context-window-size 8192 \
    --conv-template chatml \
    -o dist/qwen1.5-1.8b-q4f32_1-MLC
  • 关于这个的参数解释,可以通过下面的指令获取。
mlc_llm gen_config --help

部署安卓app

  1. 需要安装一些环境,参考官方链接,安装顺序:rustAndroid Studio,下载NDK,配置ANDROID_NDKTVM_NDK_CC环境。
  2. 再生成一次配置文件(可选),降低上下文窗口长度,防止安卓手机内存不足卡死。gemma默认上下文是8k,这里给他降到2048,最大batch也设置为1。
mlc_llm gen_config ./dist/models/Qwen1.5-1.8B-Chat \
    --model-type qwen2 \
    --quantization q4f16_1 \
    --conv-template chatml \
    --context-window-size 2048 \
    --max-batch-size 1 \
    -o dist/qwen1.5-1.8b-q4f16_1-MLC
  1. 需要先下载预编译库,根据模型类型,对应平台,对应数据类型的so,官方下载页面,所以这里需要下载q4f16_1-android.tar结尾的包,下载地址,如果有执行第二步减少内存,则需要重新编译一下安卓依赖库。
  • 创建一个文件夹储存编译后的lib
mkdir dist/prebuilt_libs
  • 开始编译
mlc_llm compile ./dist/qwen1.5-1.8b-q4f16_1-MLC/mlc-chat-config.json \
    --device android \
    -o dist/prebuilt_libs/qwen1.5-1.8b-q4f16_1-android.tar
  1. 拉取mlc-llm官方仓库,编译安卓apk需要用到。
git clone https://github.com/mlc-ai/mlc-llm.git
cd mlc-llm
git submodule update --init --recursive
cd ..
  1. 将之前编译的qwen1.5-1.8b-q4f16_1-android.tar放到mlc-llm/dist/prebuilt/lib/qwen1.5-1.8b/目录下。没有就创建该目录。
mkdir -p mlc-llm/dist/prebuilt/lib/qwen1.5-1.8b/
cp dist/prebuilt_libs/qwen1.5-1.8b-q4f16_1-android.tar mlc-llm/dist/prebuilt/lib/qwen1.5-1.8b/
  1. 进入mlc-llm/android/library路径
cd mlc-llm/android/library
  1. 里面有一个prepare_model_lib.py,在其子路径src/main/assets/app-config.json,里面有定义模型路径和动态库路径。这里的model_url只支持在线路径,并且在运行时会从网站上下载,并存储在/storage/emulated/0/Android/data/ai.mlc.mlcchat/files/目录下。我们只需要qwen1.5-1.8b的,所以可以选择只留下gemma的相关配置即可,url可以直接将刚刚的模型上传,也可以用别人上传好的MLC模型。
  • 为了和dist文件夹一致,这里我修改了一下model_id,修改后配置如下:
{
  "model_list": [
    {
      "model_url": "https://huggingface.co/ondevicellm/Qwen1.5-1.8B-Chat-q4f16_1-MLC",
      "model_id": "qwen1.5-1.8b-q4f16_1",
      "model_lib": "qwen2_q4f16_1",
      "estimated_vram_bytes": 3000000000
    }
  ],
  "model_lib_path_for_prepare_libs": {
    "qwen2_q4f16_1": "prebuilt/lib/qwen1.5-1.8b/qwen1.5-1.8b-q4f16_1-android.tar"
  }
}
  1. 执行prepare_libs.sh
./prepare_libs.sh
  • 这将生成以下两个文件:
./build/output/arm64-v8a/libtvm4j_runtime_packed.so
./build/output/tvm4j_core.jar
  1. 打开android-studio,在android-studio打开刚刚的mlc-llm/android目录,打开后会自动下载gradle中依赖,需要等待一会。
  2. 运行Build → Generate Signed Bundle/APK,选择你的签名,打包方式建议选APK,然后就可以在mlc-llm/android/release目录获得一个app-release.apk包,然后手机安装该apk包就行了。
  3. 不过目前模型只能在线下载或者adb复制进去,为了省事,我们可以选择用adb将模型复制进手机。
adb push dist/qwen1.5-1.8b-q4f16_1-MLC /data/local/tmp/qwen1.5-1.8b-q4f16_1/

adb shell "mkdir -p /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/"


adb shell "mv /data/local/tmp/qwen1.5-1.8b-q4f16_1/ /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/"
  1. 测试一下没啥问题。
    image.png
  2. (可选)将你刚刚的dist/qwen1.5-1.8b-q4f16_1-MLC文件夹上传到huggingface(实测不支持魔搭),然后将你的app-config.json关于qwen的url换成你的项目url,这样分享apk给其他人的时候,别人就可以直接在apk里面在线下载了。

版权属于:tlntin
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2024年04月21日 11:12


39 文章数
5 分类数
40 页面数
已在风雨中度过 1年160天12小时24分
目录
来自 《MLC-LLM体验(以qwen1.5-1.8b-chat为例)》
暗黑模式
暗黑模式
返回顶部
暗黑模式
暗黑模式
返回顶部