基于昇腾MindSpeed MM玩转InternVL3

本文转载自昇腾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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值