Intern-VL2是由上海人工智能实验室联合商汤科技开发的书生多模态大模型,原始仓库见InternVL2-4B,InternVL2-2B。
本例程对Intern-VL2 4B/2B模型进行移植,使其可在Sophon BM1684X/BM1688芯片上运行。PCIE模式下,该例程支持在V24.04.01(libsophon_0.5.1)及以上的SDK上运行,支持在插有1684X加速卡(SC7系列)的x86主机上运行。在1684X SoC设备(如SE7、SM7、Airbox等)上,支持在V24.04.01(libsophon_0.5.1)SDK上运行。在1688 SoC设备上(如SE9-16、SM9-16等),支持在v1.7.0及以上SDK上运行。
├── pics # 存放README等说明文档中用到的图片
├── python # 存放Python例程及其README
| ├──README.md
| ├──internvl2_sail.py # 使用SAIL推理的Python例程
| ├──image1.jpg # 测试图片
| ├──requirements.txt # 运行环境上需要安装的第三方依赖
| ├──token_config_2b # 2b模型的tokenizer
| ├──token_config_4b # 4b模型的tokenizer
| └──token_config_2b # 8b模型的tokenizer
├── README.md # 本例程的中文指南
├── scripts # 存放模型编译等shell脚本
└── tools # 存放onnx导出等python脚本- 支持BM1684X(x86 PCIe、SoC)、BM1688(SoC)
- LLM语言部分支持INT4,ViT视觉部分支持FP16
- 支持基于SAIL推理的Python例程
可以通过以下命令下载我们编译好的模型。
pip3 install dfss -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade
python3 -m dfss --url=open@sophgo.com:sophon-demo/InternVL2/internvl2-4b_bm1684x_int4_1core.bmodel #1684x 4b seq_len=512
python3 -m dfss --url=open@sophgo.com:sophon-demo/InternVL2/internvl2-2b_bm1688_int4_2core.bmodel #1688 2b seq_len=512
python3 -m dfss --url=open@sophgo.com:sophon-demo/InternVL2/internvl2-8b_bm1684x_int4_3072.bmodel #1684x 8b seq_len=3072
python3 -m dfss --url=open@sophgo.com:sophon-demo/InternVL2/internvl2-8b_bm1684x_int8_3072.bmodel #1684x 8b seq_len=3072Intern-VL2模型导出需要依赖InternVL2官方仓库,目前只支持在x86主机进行模型编译。
注意: 用cpu转模型需要保证运行内存至少32G以上,导出的onnx模型需要存储空间20G以上,请确有足够的内存完成对应的操作。
pip3 install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
git lfs install
git clone https://huggingface.co/OpenGVLab/InternVL2-4B
git clone https://huggingface.co/OpenGVLab/InternVL2-2B
git clone https://huggingface.co/OpenGVLab/InternVL2-8B如果git clone完代码之后出现卡住,可以尝试ctrl+c中断,然后进入仓库运行git lfs pull。
完成官方仓库下载后,使用本例程的tools目录下的files/InternVL2-4B/*等文件,直接替换掉原仓库的文件。
# /path/to/InternVL2-4B/ 为下载的InternVL2-4B官方仓库的路径
cp tools/files/InternVL2-4B/* /path/to/InternVL2-4B/
cp tools/files/InternVL2-2B/* /path/to/InternVL2-2B/
cp tools/files/InternVL2-8B/* /path/to/InternVL2-8B/在tools文件夹下,运行export_onnx.py脚本即可导出onnx模型,并存放在models/onnx中的internvl2-4b和internvl2-2b文件夹下,指令如下:
python3 tools/export_onnx.py --model_path /path/to/InternVL2-4B
python3 tools/export_onnx.py --model_path /path/to/InternVL2-2B
python3 tools/export_onnx.py --model_path /path/to/InternVL2-8B建议使用TPU-MLIR编译BModel,模型编译前需要安装TPU-MLIR,具体可参考TPU-MLIR环境搭建。安装好后需在TPU-MLIR环境中进入例程目录,并使用本例程提供的脚本将onnx模型编译为BModel。脚本中命令的详细说明可参考《TPU-MLIR开发手册》(请从算能官网相应版本的SDK中获取)。
在tpu-mlir环境中执行编译脚本,会将models/onnx/下的文件转换为bmodel。
cd scripts
./gen_bmodel.sh --mode int4 --name internvl2-4b --chip bm1684x #会在当前目录下生成internvl2-4b_bm1684x_int4_1core.bmodel
./gen_bmodel.sh --mode int4 --name internvl2-2b --chip bm1688 --num_core 2 #会在当前目录下生成internvl2-2b_bm1688_int4_2core.bmodel
./gen_bmodel.sh --mode int4 --name internvl2-8b --chip bm1684x #会在当前目录下生成internvl2-4b_bm1684x_int8_1core.bmodel这里的测试输入为:"please describe this image in detail.",测试图片为image1.jpg。
| 测试平台 | 测试模型 | first token latency(s) | token per second(tokens/s) |
|---|---|---|---|
| SE7-32 | internvl2-8b_bm1684x_int8_3072.bmodel | 7.706 | 5.710 |
| SE7-32 | internvl2-8b_bm1684x_int4_3072.bmodel | 7.686 | 8.722 |
| SE7-32 | internvl2-4b_bm1684x_int4_1core.bmodel | 0.573 | 19.794 |
| SE9-16 | internvl2-2b_bm1688_int4_2core.bmodel | 1.528 | 18.088 |
测试说明:
- 性能测试结果具有一定的波动性,建议多次测试取平均值;
- 加载模型和第一次问答可能会比较慢,后续几次就会恢复正常。