本文转载自昇腾AI开发者,主要介绍如何基于MindSpeed MM,实现InternVL3的微调和推理。
原文链接:https://mp.weixin.qq.com/s/W9ObKueVsKZVguLAOJWz9g
相关介绍
书生·万象3.0(InternVL3)
2025年4月16日,上海人工智能实验室(上海AI实验室)升级并开源了通用多模态大模型书生·万象3.0(InternVL3)。通过采用创新的多模态预训练和后训练方法,InternVL3 多模态基础能力全面提升,在专家级基准测试、多模态性能全面测试中,10亿~780亿参数的全量级版本在开源模型中性能均位列第一,同时大幅提升了图形用户界面(GUI)智能体、建筑场景图纸理解、空间感知推理以及通识学科推理等方面的能力。
体验链接:
https://chat.intern-ai.org.cn/
GitHub链接:
https://github.com/OpenGVLab/InternVL
HuggingFace链接:
https://huggingface.co/collections/OpenGVLab/internvl3-67f7f690be79c2fe9d74fe9d
MindSpeed MM
MindSpeed MM是面向大规模分布式训练的昇腾多模态大模型套件,同时支持多模态生成及多模态理解,旨在为华为 昇腾芯片 提供端到端的多模态训练解决方案, 包含预置业界主流模型,数据工程,分布式训练及加速,预训练、微调、在线推理任务等特性。
MindSpeed MM Gitee链接:
https://gitee.com/ascend/MindSpeed-MM
环境安装
模型开发时推荐使用配套的环境版本,详见仓库中的“环境安装”
https://gitee.com/ascend/MindSpeed-MM/blob/master/examples/internvl3/README.md
仓库拉取:
git clone https://gitee.com/ascend/MindSpeed-MM.git
git clone https://github.com/NVIDIA/Megatron-LM.git
cd Megatron-LM
git checkout core_r0.8.0
cp -r megatron ../MindSpeed-MM/
cd ..
cd MindSpeed-MM
mkdir logs
mkdir dataset
mkdir ckpt
环境搭建:
torch npu 与 CANN 包参考链接:
https://gitee.com/link?target=https%3A%2F%2Fsupport.huawei.com%2Fenterprise%2Fzh%2Fascend-computing%2Fcann-pid-251168373%2Fsoftware
# python3.10
conda create -n test
python=3.10
conda activate test
# 安装 torch 和 torch_npu,注意要选择对应python版本、x86或arm的torch、torch_npu及apex包
pip install torch-2.1.0-cp310-cp310m-manylinux2014_aarch64.whl
pip install torch_npu-2.1.0*-cp310-cp310m-linux_aarch64.whl
# apex for Ascend 参考 https://gitee.com/ascend/apex
# 建议从原仓编译安装
# 安装加速库
git clone
https://gitee.com/ascend/MindSpeed.git
cd
MindSpeed
# checkout commit from MindSpeed core_r0.8.0
git checkout 3f09d6736571cf1e30f8ac97de77982d0ab32cc5
pip install -r requirements.txt
pip3 install -e .
cd
..
# 替换MindSpeed中的文件
cp examples/internvl2.5/dot_product_attention.py MindSpeed/mindspeed/core/transformer/dot_product_attention.py
# 安装其余依赖库
pip install -e .
权重下载及转换
下载地址:
https://huggingface.co/OpenGVLab/InternVL3-8B/tree/main
权重转换:
MindSpeed-MM修改了部分原始网络的结构名称,使用mm-convert工具对原始预训练权重进行转换。该工具实现了huggingface权重和MindSpeed-MM权重的转换以及PP(Pipeline Parallel)的权重切分。
# 根据实际情况修改 ascend-toolkit 路径
source
/usr/local
/Ascend/ascend-toolkit/set_env.sh
# 8B
mm-convert InternVLConverter hf_to_mm \
--cfg.mm_dir "pretrained/InternVL3-8B"
\
--cfg.hf_config.hf_dir "raw_ckpt/InternVL3-8B"
\
--cfg.parallel_config.llm_pp_layers [[28]] \
--cfg.parallel_config.vit_pp_layers [[28]] \
--cfg.trust_remote_code True
# 其中:
# mm_dir: 转换后保存目录
# hf_dir: huggingface权重目录
# llm_pp_layers: llm在每个卡上切分的层数,注意要和model.json中配置的pipeline_num_layers一致
# vit_pp_layers: vit在每个卡上切分的层数,注意要和model.json中配置的pipeline_num_layers一致
# trust_remote_code: 为保证代码安全,配置trust_remote_code默认为False,用户需要设置为True,并且确保自己下载的模型和数据的安全性
数据集准备及处理
数据集下载:
用户需自行获取并解压InternVL-Finetune数据集到dataset/playground目录下,以数据集ai2d为例,解压后的数据结构如下:
$playground
├── data
├── ai2d
├── abc_images
├── images
├── opensource
├── ai2d_train_12k.jsonl
微调
(1) 由于当前官仓还未开源微调代码和脚本,正式版的微调功能后续跟进上线;
(2)用户想尝鲜微调功能,可参考InternVL2.5的微调实践(https://gitee.com/ascend/MindSpeed-MM/blob/master/examples/internvl2.5/README.md)
推理
准备工作
配置脚本前需要完成前置准备工作,包括:环境安装、权重下载及转换,详情可查看对应章节。(当前支持8B单卡推理)
推理权重转换命令如下:
# 根据实际情况修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
# 8B
mm-convert InternVLConverter hf_to_mm \
--cfg.mm_dir "pretrained/InternVL3-8B" \
--cfg.hf_config.hf_dir "raw_ckpt/InternVL3-8B" \
--cfg.parallel_config.llm_pp_layers [[28]] \
--cfg.parallel_config.vit_pp_layers [[28]] \
--cfg.trust_remote_code True
配置参数
参数配置:
修改inference_8B.json文件,包括infer_data_type、file_path、prompts、from_pretrained以及tokenizer的from_pretrained等字段。
单图推理:
以InternVL3-8B为例,按实际情况修改inference_8B.json对应参数,注意tokenizer_config的权重路径为转换前的权重路径。
{
"infer_data_type": "image",
"file_path": "./examples/internvl3/view.jpg", #
按实际情况输入图片路径
"prompts": "Please describe the image shortly.", #
按实际情况输入提示词(支持中英文)
"model_id": "InternVLPipeline",
"from_pretrained": "./pretrained/InternVL3-8B/release/mp_rank_00/model_optim_rng.pt", #
注意路径要到
.pt
文件
...
"tokenizer":{
...
"autotokenizer_name": "AutoTokenizer",
"from_pretrained": "raw_ckpt/InternVL3-8B",
...
},
...
}
视频推理:
以InternVL3-8B为例,按实际情况修改inference_8B.json对应参数,注意tokenizer_config的权重路径为转换前的权重路径。(推理demo视频下载red-panda)
{
"infer_data_type": "video",
"file_path": "examples/internvl3/red-panda.mp4", #
按实际情况输入视频路径
"prompts": "Please describe the video shortly.", #
按实际情况输入提示词(支持中英文)
"model_id": "InternVLPipeline",
"from_pretrained": "./pretrained/InternVL3-8B/release/mp_rank_00/model_optim_rng.pt", #
注意路径要到
.pt
文件
...
"tokenizer":{
...
"autotokenizer_name": "AutoTokenizer",
"from_pretrained": "raw_ckpt/InternVL3-8B",
...
},
...
}
修改启动脚本:
按实际情况修改inference_internvl.sh脚本。
# 根据实际情况修改 ascend-toolkit 路径
source /usr/local/Ascend/ascend-toolkit/set_env.sh
...
MM_MODEL="./examples/internvl3/inference_8B.json"
启动推理
bash examples/internvl3/inference_internvl.sh
准备工作和参数说明见MindSpeed MM开源代码仓链接:
https://gitee.com/ascend/MindSpeed-MM/tree/master/examples/internvl3