多模态理解领域当前已成了各家AI大模型公司“军备竞赛”的关键点之一,国内外知名AI大模型公司都争相通过发布最先进的多模态大语言模型展现其在多模态理解领域的前沿能力。近期,上海AI实验室推出了其最新的多模态大语言模型InternVL3系列,相比上一代InternVL2.5模型,该模型展现出卓越的多模态感知和推理能力,同时进一步扩展了其工具使用、GUI代理、工业图像分析等多模态能力。此前MindSpeed MM仓库一直同步开源InternVL2系列、InternVL2.5系列等模型,InternVL3系列一经发布开源,即在MindSpeed MM中开箱即用并同步开源,当前已支持在线推理功能并基于InternVL2.5给出参考的微调实践。MindSpeed MM是面向大规模分布式训练的昇腾多模态大模型套件,基于MindSpeed Core实现多模态模型的极致性能优化,为开发者提供高效易用的开发体验。
基于MindSpeed MM的
InternVL系列训练优化特性
InternVL系列是多模态理解模型,基于其异构特点以及该模型存在明显的负载不均衡问题,MindSpeed MM对InternVL系列模型在使用了融合算子、分布式优化器及流水调度优化等常用特性的基础上,同时使能多模态异构流水线并行、动态流水线并行、数据分桶负载均衡、虚拟流水线并行、分离部署等优化加速特性,实现了极致性能优化。(其中多模态异构流水线并行、动态流水线并行、数据分桶负载均衡等特性的介绍,在之前的文章(多模态理解SOTA模型开箱即用,MindSpeed MM支持Qwen2.5-VL最佳实践)已有介绍)
虚拟流水线并行:
常规的流水线并行切分粒度过大,运行过程中仍然有许多空泡(bubble),计算资源利用率仍有提高空间。虚拟流水线并行(VPP)能够在设备数量不变的情况下,分出更多的流水线阶段,以更多的通信量,换取空泡比率降低。MindSpeed MM将虚拟流水线并行同时应用到视觉模块和语言模块,并支持自定义的非均匀切分,进一步减小空泡比率,提升性能5%。
使用方式:在examples/internvl*/ finetune_internvl*B.sh中配置num-layers-per-virtual-pipeline-stage字段。(具体使用方式可参考仓库特性文档

分离部署(Dist-train):
多模态模型的训练中,由于不同模态模型对算力和内存需求的异构性,不同模态模型的最优并行配置往往不一致,如果全部使用同一种并行配置,会造成负载不均衡、资源利用不充分。MindSpeed MM支持Dist-train功能,通过对异构模型配置不同的计算资源和并行配置,减少冗余的静态资源和异构模型间的空泡(bubble),使异构模型之间的运行速度达到最优匹配,提升性能15%。
使用方式:在examples/internvl*/ finetune_internvl*B.sh中添加参数–dist-train,同时配置model.json中的dist_config字段。(具体使用方式可参考仓库特性文档https://gitee.com/ascend/MindSpeed-MM/blob/master/docs/features/dist-train.md)

基于MindSpeed MM的
InternVL3视图理解体验
新一代的多模态理解模型InternVL3有强大的视图理解能力,让我们快速体验一下。
图片理解体验:

Prompt:描述一下这张梗图并解释其中的笑点。
输出结果:

OCR识别:

Prompt:识别出图中的文字。
输出结果:

视频理解体验:
Prompt:请描述这个视频。
输出结果:

快速上手
基于MindSpeed MM玩转InternVL3
【环境安装】
模型开发时推荐使用配套的环境版本,详见仓库中的“环境安装”:https://gitee.com/ascend/MindSpeed-MM/blob/master/examples/internvl3/README.md
仓库拉取:
1 git clone https://gitee.com/ascend/MindSpeed-MM.git
2 git clone https://github.com/NVIDIA/Megatron-LM.git
3 cd Megatron-LM
4 git checkout core_r0.8.0
5 cp -r megatron ../MindSpeed-MM/
6 cd ..
7 cd MindSpeed-MM
8 mkdir logs
9 mkdir dataset
10 mkdir ckpt
环境搭建:
torch npu 与 CANN包参考链接:安装包参考链接
https://gitee.com/link?target=https%3A%2F%2Fsupport.huawei.com%2Fenterprise%2Fzh%2Fascend-computing%2Fcann-pid-251168373%2Fsoftware
1 # python3.10
2 conda create -n test
3 python=3.10
4 conda activate test
5
6 # 安装 torch 和 torch_npu,注意要选择对应python版本、x86或arm的torch、torch_npu及apex包
7 pip install torch-2.1.0-cp310-cp310m-manylinux2014_aarch64.whl
8 pip install torch_npu-2.1.0*-cp310-cp310m-linux_aarch64.whl
9
10 # apex for Ascend 参考 https://gitee.com/ascend/apex
11 # 建议从原仓编译安装
12
13 # 安装加速库
14 git clone
15 https://gitee.com/ascend/MindSpeed.git
16 cd
17 MindSpeed
18 # checkout commit from MindSpeed core_r0.8.0
19 git checkout 3f09d6736571cf1e30f8ac97de77982d0ab32cc5
20 pip install -r requirements.txt
21 pip3 install -e .
22 cd
23 ..
24 # 替换MindSpeed中的文件
25 cp examples/internvl2.5/dot_product_attention.py MindSpeed/mindspeed/core/transformer/dot_product_attention.py
26
27 # 安装其余依赖库
28 pip install -e .
【权重下载及转换】
InternVL3权重下载:

权重转换:
MindSpeed-MM修改了部分原始网络的结构名称,使用mm-convert工具对原始预训练权重进行转换。该工具实现了huggingface权重和MindSpeed-MM权重的转换以及PP(Pipeline Parallel)的权重切分。
1 # 根据实际情况修改 ascend-toolkit 路径
2 source
3 /usr/local
4 /Ascend/ascend-toolkit/set_env.sh
5
6 # 8B
7 mm-convert InternVLConverter hf_to_mm \
8 –cfg.mm_dir “pretrained/InternVL3-8B”
9 \
10 –cfg.hf_config.hf_dir “raw_ckpt/InternVL3-8B”
11 \
12 –cfg.parallel_config.llm_pp_layers [[28]] \
13 –cfg.parallel_config.vit_pp_layers [[28]] \
14 –cfg.trust_remote_code True
15 # 其中:
17 # mm_dir: 转换后保存目录
18 # hf_dir: huggingface权重目录
19 # llm_pp_layers: llm在每个卡上切分的层数,注意要和model.json中配置的pipeline_num_layers一致
20 # vit_pp_layers: vit在每个卡上切分的层数,注意要和model.json中配置的pipeline_num_layers一致
21 # trust_remote_code: 为保证代码安全,配置trust_remote_code默认为False,用户需要设置为True,并且确保自己下载的模型和数据的安全性
【数据集准备及处理】
数据集下载:
用户需自行获取并解压InternVL-Finetune数据集到dataset/playground目录下,以数据集ai2d为例,解压后的数据结构如下:
1 $playground
2 ├── data
3 ├── ai2d
4 ├── abc_images
5 ├── images
6 ├── opensource
7 ├── ai2d_train_12k.jsonl
【微调】
(1) 由于当前官仓还未开源微调代码和脚本,正式版的微调功能后续跟进上线;
(2)用户想尝鲜微调功能,可参考InternVL2.5的微调实践
(https://gitee.com/ascend/MindSpeed-MM/blob/master/examples/internvl2.5/README.md)
【推理】
1.准备工作
配置脚本前需要完成前置准备工作,包括:环境安装、权重下载及转换,详情可查看对应章节。(当前支持8B单卡推理)
推理权重转换命令如下:
1 # 根据实际情况修改 ascend-toolkit 路径
2 source /usr/local/Ascend/ascend-toolkit/set_env.sh
3
4 # 8B
5 mm-convert InternVLConverter hf_to_mm \
6 –cfg.mm_dir “pretrained/InternVL3-8B” \
7 –cfg.hf_config.hf_dir “raw_ckpt/InternVL3-8B” \
8 –cfg.parallel_config.llm_pp_layers [[28]] \
9 –cfg.parallel_config.vit_pp_layers [[28]] \
10 –cfg.trust_remote_code True
2.配置参数
参数配置:
修改inference_8B.json文件,包括infer_data_type、file_path、prompts、from_pretrained以及tokenizer的from_pretrained等字段。
单图推理:
以InternVL3-8B为例,按实际情况修改inference_8B.json对应参数,注意tokenizer_config的权重路径为转换前的权重路径。
1 {
2 “infer_data_type”: “image”,
3 “file_path”: “./examples/internvl3/view.jpg”, #
4 按实际情况输入图片路径
5 “prompts”: “Please describe the image shortly.”, #
6 按实际情况输入提示词(支持中英文)
7 “model_id”: “InternVLPipeline”,
8 “from_pretrained”: “./pretrained/InternVL3-8B/release/mp_rank_00/model_optim_rng.pt”, #
9 注意路径要到
10 .pt
11 文件
12 …
13 “tokenizer”:{
14 …
15 “autotokenizer_name”: “AutoTokenizer”,
16 “from_pretrained”: “raw_ckpt/InternVL3-8B”,
17 …
18 },
19 …
20 }
视频推理:
以InternVL3-8B为例,按实际情况修改inference_8B.json对应参数,注意tokenizer_config的权重路径为转换前的权重路径。(推理demo视频下载red-panda)
1 {
2 “infer_data_type”: “video”,
3 “file_path”: “examples/internvl3/red-panda.mp4”, #
4 按实际情况输入视频路径
5 “prompts”: “Please describe the video shortly.”, #
6 按实际情况输入提示词(支持中英文)
7 “model_id”: “InternVLPipeline”,
8 “from_pretrained”: “./pretrained/InternVL3-8B/release/mp_rank_00/model_optim_rng.pt”, #
9 注意路径要到
10 .pt
11 文件
12 …
13 “tokenizer”:{
14 …
15 “autotokenizer_name”: “AutoTokenizer”,
16 “from_pretrained”: “raw_ckpt/InternVL3-8B”,
17 …
18 },
19 …
20 }
修改启动脚本:
按实际情况修改inference_internvl.sh脚本。
1 # 根据实际情况修改 ascend-toolkit 路径
2 source /usr/local/Ascend/ascend-toolkit/set_env.sh
3 …
4 MM_MODEL=”./examples/internvl3/inference_8B.json”
3.启动推理
bash examples/internvl3/inference_internvl.sh
【更多参数见MindSpeed MM仓库】
准备工作和参数说明见MindSpeed MM开源代码仓链接:
结语
MindSpeed MM是面向大规模分布式训练的昇腾多模态大模型套件,同时支持多模态生成及多模态理解,旨在为华为 昇腾芯片 提供端到端的多模态训练解决方案, 包含预置业界主流模型,数据工程,分布式训练及加速,预训练、微调、在线推理任务等特性。
由于当前InternVL3系列模型的代码和训练微调功能等未完全发布开源,后续MindSpeed MM将基于InternVL3系列模型同步上线更加丰富的特性,敬请期待。
欢迎关注MindSpeed MM:https://gitee.com/ascend/MindSpeed-MM