构建TVM Unity

直接使用pip安装该教程中的预编译wheel包会失败,查看github issue发现预编译包要求比较新的系统版本。所以按照该教程编译安装TVM Unity

注意事项:

  • 链接libtvm.so时会有-lxml2依赖,所以需要提前安装sudo apt-get install libxml2-dev
  • 在Python安装tvm之后,可能会出现GLIBCXX_3.4.30 not found的情况,查看系统所有的C++库:locate libstdc++.so.6, 找到其中包含GLIBCXX_3.4.30的库并替换依赖

模型编译

Llama-2-7b-chat-ms模型编译成为动态库

python -m mlc_llm.build \
    --target android \
    --max-seq-len 768 \
    --model ./Llama-2-7b-chat-ms \
    --quantization q4f16_1

编译apk

参考教程构建Android apk文件并安装。

注意:

  • android/MLCChat/app/src/main/assets/app-config.json 文件对应修改为:
    {
    "model_libs": [
      "Llama-2-7b-chat-ms-q4f16_1"
    ],
    "model_list": [
      {
        "model_url": "https://huggingface.co/mlc-ai/mlc-chat-Llama-2-7b-chat-hf-q4f16_1/",
        "local_id": "Llama-2-7b-chat-ms-q4f16_1"
      }
    ],
    "add_model_samples": []
    }
    
  • 将第2步中编译出的params下的文件拷贝到手机中,注意模型目录Llama-2-7b-chat-ms-q4f16_1需要与local_id一致
    adb shell "mkdir -p /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/"
    adb push dist/Llama-2-7b-chat-ms-q4f16_1/params /data/local/tmp/Llama-2-7b-chat-ms-q4f16_1/
    adb shell "mv /data/local/tmp/Llama-2-7b-chat-ms-q4f16_1 /storage/emulated/0/Android/data/ai.mlc.mlcchat/files/Llama-2-7b-chat-ms-q4f16_1"
    

测试

使用xiaomi12测试,Soc为骁龙8gen1, 内存8G;

  • 速度:prefill: 2.7 tok/s, decode: 3.4 tok/s
  • 发现内存原因崩溃情况比较多;原因如下:
    • 预计mlc-llmllama-2-7b-int4需要内存大于4G;
    • MIUI系统内存占用较高,原始内存8G,空闲内存在4G左右;