- 2025.05.22:🚀 InternVL3 BM1684X/1688已支持,详情见InternVL3。支持图片和视频。
- 2025.04.30:🚀 Qwen2.5VL BM1684X/1688已支持,详情见Qwen2.5VL。其中demo有python和c++两个版本,且都支持图片和视频。
- 2025.04.29:🚀 Qwen最新推理模型Qwen3,BM1684X/1688已支持,详情见Qwen3 Demo。
- 2025.03.07:🚀 Qwen最新推理模型QWQ-32B和DeepSeek-R1-Distill-Qwen-32B,1684x多芯demo已适配,详情见Qwen2.5 Demo。
- 2025.02.05:🚀 DeepSeek时刻!!我们适配了DeepSeek-R1-Distill-Qwen系列模型,包括1.5B、7B和14B版本,详情见Qwen2.5 Demo。
本项目实现算能BM1684X、BM1688(CV186X)芯片部署各类开源生成式AI模型
,其中以LLM/VLM为主。通过TPU-MLIR编译器将模型转换成bmodel,再基于tpu-runtime的推理引擎接口,采用python/c++代码将其部署到PCIE环境或者SoC环境。
如果要编译模型,需要配置TPU-MLIR环境,包括安装docker和编译源码; 也可以直接用各类Demo中编译好的bmodel。
各个模型的Demo见此目录models。
克隆LLM-TPU项目,并执行run.sh脚本
git clone https://github.com/sophgo/LLM-TPU.git
./run.sh --model qwen2.5vl
详细请参考Quick Start, 跑通后效果如下图所示:
目前用于演示的模型如下:
Model | Command |
---|---|
Qwen3-4B | ./run.sh --model qwen3 |
Qwen2.5-VL-3B | ./run.sh --model qwen2.5vl |
InternVL3-2B | ./run.sh --model internvl3 |
以Qwen2.5-VL
为例介绍模型编译方法。
下载LLM模型,注意优先使用AWQ或者GPTQ模型,如下:
git lfs install
git clone git@hf.co:Qwen/Qwen2.5-VL-3B-Instruct-AWQ
MLIR环境支持多种安装方式,请参考:MLIR环境安装指南
编译命令如下:
llm_convert.py -m /workspace/Qwen2.5-VL-3B-Instruct-AWQ -s 2048 -q w4bf16 -c bm1684x --max_pixels 672,896 -o qwen2.5vl_3b
llm_convert.py
是一个通用的llm模型导出工具,能够直接将llm原始权重直接导出为bmodel。
支持的主要参数如下:
参数名 | 简写 | 必选? | 说明 |
---|---|---|---|
model_path | m | 是 | 指定权重路径 |
seq_length | s | 是 | 指定序列最大长度 |
quantize | q | 是 | 指定量化类型, w4bf16/w4f16/bf16/f16等等 |
chip | c | 是 | 指定平台, 如bm1684x/bm1688/cv186x |
q_group_size | g | 否 | 指定每组量化的组大小, 默认64 |
max_pixels | - | 否 | qwen vl参数, 指定最大图片尺寸, 可以是672,896 ,也可以是602112 |
do_sample | - | 否 | 指定输出是否包含采样模型,默认关闭 |
out_dir | o | 是 | 指定输出目录 |
还有更多参数可以参考进阶应用。
llm_convert.py
执行完成后在指定目录会生成对应的bmodel和配置目录config。
支持一键编译的VLM模型包括:
LLM模型包括:
- Qwen系列:Qwen1.5/Qwen2/Qwen2.5/Qwen3/QwQ-32B
- Qwen相关:DeepSeek-R1-Distill-Qwen
- Llama系列:Llama2/Llama3
- MiniCPM系列:MiniCPM4
- Phi系列:Phi3/Phi4
- ChatGLM系列:ChatGLM3
除了一键编译外,其他模型可以采用传统方法编译,先转onnx再转bmodel,具体可以参考每个模型的Demo介绍。
我们已经部署过的LLM模型包括:
Baichuan2
ChatGLM3
/ChatGLM4
/CodeFuse
DeepSeek-6.7B
/DeepSeek-R1-Distill-Qwen
Falcon
Gemma
/Gemma2
Llama2
/Llama3
/LWM-Text-Chat
MiniCPM
/MiniCPM3
/MiniCPM4
/Mistral
Phi-3
/Phi-4
Qwen
/Qwen1.5
/Qwen2
/Qwen2.5
/QwQ-32B
/Qwen3
WizardCoder
Yi
多模态模型包括:
Qwen2.5-VL
/Qwen2-VL
/Qwen-VL
InternVL3
/InternVL2
MiniCPM-V-2_6
Llama3.2-Vision
Stable Diffusion
Molmo
OpenClip
NVILA
DeepSeek-Janus-Pro
如果您想要知道转换细节和源码,可以到本项目models子目录查看各类模型部署细节。
如果您对我们的芯片感兴趣,也可以通过官网SOPHGO联系我们。
默认情况下模型是静态编译,输入按照指定的seq_length
长度推理,不足部分会补0和mask掉,当输入长度变化幅度不大的时候,建议用默认方式。
动态编译可以根据输入长度动态推理,在输入长短变化幅度较大的情况下,可以减少短输入的延时。
方法:在llm_converter.py
命令加入--dynamic
样例:
默认情况下历史上下文是靠历史token与当前输入token拼凑来实现,延时较长。
采样prefill with kv cache可以减少延时。
方法:在llm_converter.py
命令加入--use_block_with_kv
参数;
--max_input_length
指定单次输入最大长度,不指定时默认是seq_length的1/4;
--max_prefill_kv_length
指定输入最大kv长度, 不指定时默认是seq_length。
样例:
默认情况下推理在单芯上进行。可以采用多芯设备支持更大模型,和加速推理。
方法:在llm_converter.py
命令加入--num_device
参数指定芯片数量
样例:
- Qwen2_5/python_demo_parallel,支持Qwen系列2/4/6/8芯推理
默认情况下采用greedy方式,即topk1取token。可以支持根据generation.json
的配置进行随机采样。
方法:在llm_converter.py
命令加入--do_sample
样例:
可以对相同模型,加载多次支持多任务;如果是对同一颗芯片,权重只会加载一次;不过不太建议单颗芯片做多任务。 样例:
可以支持模型被第三方库加密,推理时用解密库解密