10. 编译LLM模型

10.1. 概述

llm_convert.py 是一个用于将大语言模型(LLM)转换成bmodel的工具,将原始模型权重转换为 bmodel 格式,以便在 BM1684X、BM1688 和 CV186AH 等芯片平台上进行高效推理。 目前支持的LLM类型包括qwen2和llama,比如Qwen2-7B-Instruct、Llama-2-7b-chat-hf等。

10.2. 命令行参数说明

下面介绍该工具支持的各个命令行参数:

  • -m, --model_path (string, 必填) 指定原始模型权重的路径。例如:./Qwen2-7B-Instruct

  • -s, --seq_length (integer, 必填) 指定转换时使用的序列长度。

  • -q, --quantize (string, 必填) 指定 bmodel 的量化类型,必须从下面的选项中选择:

    • bf16

    • w8bf16

    • w4bf16

    • f16

    • w8f16

    • w4f16

  • -g, --q_group_size (integer, 默认值: 64) 如果使用 W4A16 量化模式,则用于设置每组量化的组大小。

  • -c, --chip (string, 默认值: bm1684x) 指定生成 bmodel 的芯片平台,支持如下选项:

    • bm1684x

    • bm1688

    • cv186ah

  • --num_device (integer, 默认值: 1) 指定 bmodel 部署的设备数。

  • --num_core (integer, 默认值: 0) 指定 bmodel 部署使用的核数,0表示采用最大核数。

  • --symmetric 如果设置该标志,则使用对称量化。

  • --embedding_disk 如果设置该标志,则将word_embedding导出为二进制文件,并通过 CPU 进行推理。

  • --max_pixels (integer) 对于多模态模型如qwen2.5vl,用于指定最大像素尺寸,比如可以指定为 672,896,表示 672x896 的图片;也可以是 602112,表示最大像素。

  • -o, --out_dir (string, 默认值: ./tmp) 指定输出的 bmodel 文件保存路径。

10.3. 示例用法

假设需要将位于 /workspace/Qwen2-7B-Instruct 的大模型转换为 bm1684x 平台的 bmodel,同时使用 384 的序列长度和``w4bf16`` 的量化类型,设置 group size 为 128,并将输出文件存放在目录 qwen2_7b 下,可以执行以下命令:

首先需要将Qwen2-7B-Instruct从huggingface下载到本地,然后执行如下命令:

llm_convert.py -m /workspace/Qwen2-7B-Instruct -s 384 -q w4bf16 -g 128 -c bm1684x -o qwen2_7b

注意如果提示transformers找不到,则需要安装,命令如下(其他pip包同理):

pip3 install transformers --upgrade

另外该命令也支持AWQ和GPTQ模型,参考命令如下:

llm_convert.py -m /workspace/Qwen2.5-0.5B-Instruct-AWQ -s 384 -q w4bf16 -c bm1684x -o qwen2.5_0.5b
llm_convert.py -m /workspace/Qwen2.5-0.5B-Instruct-GPTQ-Int4 -s 384 -q w4bf16 -c bm1684x -o qwen2.5_0.5b