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