0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于MindSpeed MM玩转Qwen2.5VL多模态理解模型

OSC开源社区 ? 来源:OSC开源社区 ? 2025-04-18 09:30 ? 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

多模态理解模型是让AI像人类一样,通过整合多维度信息(如视觉、语言、听觉等),理解数据背后的语义、情感、逻辑或场景,从而完成推理、决策等任务。

当前已经进入多模态理解大模型发展的快车道,2025年2月,最新一代的多模态理解模型Qwen2.5VL开源发布,其在多个基准测试中取得了SOTA效果,更是直接登顶司南(OpenCompass)排行榜,甚至超越国内外知名的GPT-4o和Gemini-2.0等闭源模型。

MindSpeed MM开发团队快速对Qwen2.5VL模型全系列尺寸进行适配,并将其正式开源在MindSpeed MM仓库,同时支持视图理解全参微调训练、Lora微调训练、在线推理和评测。

MindSpeed MM基于MindSpeed Core的多维并行能力实现对多模态模型的极致性能优化,更亲和昇腾硬件,致力成为昇腾开发者大集群、大参数场景多模态训练的首选,为开发者提供高效易用的开发体验。

基于MindSpeed MM的Qwen2.5VL视图理解生成体验

新一代的多模态理解模型Qwen2.5VL有强大的视图理解能力,让我们快速体验一下。

基于MindSpeed MM的Qwen2.5VL训练优化特性

多模态理解模型主要处理如文本、图像、音频视频传感器信号等模态数据,不同模态数据存在结构差异、特征表示异质性、融合策略多样性、训练机制复杂性等特点,Qwen2.5VL训练的性能瓶颈主要是负载不均衡问题。MindSpeed MM在使用融合算子、分布式优化器及流水调度优化等常用特性的基础上,支持多模态异构流水线并行、动态流水线并行、数据分桶负载均衡等优化加速特性,实现训练性能极致优化。

01多模态异构流水线并行,支持大规模数据的复杂多模态训练,实现负载均衡

Qwen2.5VL模型包括视觉模块、连接层以及语言模块,其中视觉模块的激活值比较大,当视觉模块放开训练或视图数据规模较大时,会导致显存占用过大甚至OOM,同时影响多卡之间的负载均衡。MindSpeed MM创新性地实现了异构流水线并行特性,支持各种模态模块的快速流水线并行适配,支撑实现更复杂场景和更大数据规模的训练微调,同时也缓解了负载不均衡的问题。

使用方式:在examples/qwen2.5vl/model_*b.json中配置vision_encoder和text_decoder中的pipeline_num_layers字段参数

3755f9a4-19c4-11f0-9310-92fbcf53809c.png

02流水线并行动态shape通信支持,实现训练效率和资源利用率双提升

多模态场景中,batch内样本长度要保持一致,需将所有输入样本都扩展到统一的序列长度,而不同样本的序列长度差异较大,对于短序列的数据样本会产生大量冗余计算、增加显存占用和通信耗时。MindSpeed MM通过使用MindSpeed Core的动态shape流水线并行特性,减少过度扩展现象,有效降低冗余计算量,实现训练效率与计算资源利用率双提升,数据集序列长度差异越大,收益越大。

使用方式:在examples/qwen2.5vl/finetune_qwen2_5_vl_*b.sh的GPT_ARGS中加入--variable-seq-lengths参数。

378067fc-19c4-11f0-9310-92fbcf53809c.png

03数据分桶负载优化,实现多卡数据计算均衡,训练效率提升10%+

多模态理解场景由于视图数据的规模不一致,不同输入数据长度差异很大,因此会导致大集群训练微调过程中,不同卡之间的计算耗时差异大,出现卡间负载不均衡问题。MindSpeed MM中通过实现全局数据分桶重排,将不同序列长度的数据重新进行划分,从而实现卡间的数据大小基本相同,保证训练数据多样性的同时训练效率提升10%+。

379e9524-19c4-11f0-9310-92fbcf53809c.png

数据分桶负载:将数据按token数量

分配到不同的桶,训练时按桶取数据

使用方式:在examples/qwen2.5vl/data_*b.json中,修改dataloader_param下的sampler_type为"BucketBatchSampler"

37c5bd52-19c4-11f0-9310-92fbcf53809c.png

快速上手,基于MindSpeed MM玩转Qwen2.5VL

环境安装

模型开发时推荐使用配套的环境版本,详见仓库中的”环境安装”

https://gitee.com/ascend/MindSpeed-MM/blob/master/examples/qwen2.5vl/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 data


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 -ntestpython=3.10


conda activatetest



#安装torch和torch_npu,注意要选择对应python版本、x86或arm的torch、torch_npu及apex包


#下载路径参考https://www.hiascend.com/document/detail/zh/Pytorch/60RC3/configandinstg/instg/insg_0001.html


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


#建议从原仓编译安装



#安装加速库


gitclonehttps://gitee.com/ascend/MindSpeed.git


cdMindSpeed


# checkout commit from MindSpeed core_r0.8.0


git checkout 3f09d6736571cf1e30f8ac97de77982d0ab32cc5


pip install -r requirements.txt


pip3 install -e .


cd..


#替换MindSpeed中的文件


cp examples/qwen2vl/dot_product_attention.py MindSpeed/mindspeed/core/transformer/dot_product_attention.py



#安装其余依赖库


pip install -e .



#安装transformers指定版本


gitclonehttps://github.com/huggingface/transformers.git


cdtransformers


git checkout fa56dcc2a


pip install -e .

权重下载及转换

Qwen2.5VL权重下载:

模型 Huggingface下载链接
3B https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct/tree/main
7B https://huggingface.co/Qwen/Qwen2.5-VL-7B-Instruct/tree/main
32B https://huggingface.co/Qwen/Qwen2.5-VL-32B-Instruct/tree/main
72B https://huggingface.co/Qwen/Qwen2.5-VL-72B-Instruct/tree/main

权重转换:

MindSpeed MM修改了部分原始网络的结构名称,使用mm-convert工具对原始预训练权重进行转换。该工具实现了huggingface权重和MindSpeed MM权重的互相转换以及PP(Pipeline Parallel)权重的重切分。

# 3b
mm-convert Qwen2_5_VLConverter hf_to_mm 
 --cfg.mm_dir"ckpt/mm_path/Qwen2.5-VL-3B-Instruct"
 --cfg.hf_config.hf_dir"ckpt/hf_path/Qwen2.5-VL-3B-Instruct"
 --cfg.parallel_config.llm_pp_layers [36] 
 --cfg.parallel_config.vit_pp_layers [32] 
 --cfg.parallel_config.tp_size 1

# 7b
mm-convert Qwen2_5_VLConverter hf_to_mm 
 --cfg.mm_dir"ckpt/mm_path/Qwen2.5-VL-7B-Instruct"
 --cfg.hf_config.hf_dir"ckpt/hf_path/Qwen2.5-VL-7B-Instruct"
 --cfg.parallel_config.llm_pp_layers [1,10,10,7] 
 --cfg.parallel_config.vit_pp_layers [32,0,0,0] 
 --cfg.parallel_config.tp_size 1

# 32b
mm-convert Qwen2_5_VLConverter hf_to_mm 
 --cfg.mm_dir "ckpt/mm_path/Qwen2.5-VL-32B-Instruct" 
 --cfg.hf_config.hf_dir "ckpt/hf_path/Qwen2.5-VL-32B-Instruct" 
 --cfg.parallel_config.llm_pp_layers [4,9,9,9,9,9,9,6] 
 --cfg.parallel_config.vit_pp_layers [32,0,0,0,0,0,0,0] 
 --cfg.parallel_config.tp_size 2

# 72b
mm-convert Qwen2_5_VLConverter hf_to_mm 
 --cfg.mm_dir"ckpt/mm_path/Qwen2.5-VL-72B-Instruct"
 --cfg.hf_config.hf_dir"ckpt/hf_path/Qwen2.5-VL-72B-Instruct"
 --cfg.parallel_config.llm_pp_layers [14,23,23,20] 
 --cfg.parallel_config.vit_pp_layers [32,0,0,0] 
 --cfg.parallel_config.tp_size 8

#其中:
# mm_dir:转换后保存目录
# hf_dir: huggingface权重目录
# llm_pp_layers: llm在每个卡上切分的层数,注意要和model.json中配置的pipeline_num_layers一致
# vit_pp_layers: vit在每个卡上切分的层数,注意要和model.json中配置的pipeline_num_layers一致
# tp_size: tp并行数量,注意要和微调启动脚本中的配置一致

如果需要用转换后模型训练的话,同步修改

examples/qwen2.5vl/finetune_qwen2_5_vl_7b.sh中的LOAD_PATH参数,该路径为转换后或者切分后的权重,注意与原始权重ckpt/hf_path/Qwen2.5-VL-7B-Instruct进行区分。


LOAD_PATH="ckpt/mm_path/Qwen2.5-VL-7B-Instruct"

【数据集准备及处理】

数据集下载(coco2017数据集为例)

(1)用户需要自行下载COCO2017数据集,并解压到项目目录下的./data/COCO2017文件夹中

下载链接:https://gitee.com/link?target=https%3A%2F%2Fcocodataset.org%2F%23download

(2)获取图片数据集的描述文件(LLaVA-Instruct-150K),下载至./data/路径下;

https://gitee.com/link?target=https%3A%2F%2Fhuggingface.co%2Fdatasets%2Fliuhaotian%2FLLaVA-Instruct-150K%2Ftree%2Fmain

(3)在./data路径下新建文件mllm_format_llava_instruct_data.json,运行数据转换脚本python examples/qwen2vl/llava_instruct_2_mllm_demo_format.py;


$playground


├── data


├── COCO2017


├── train2017



├── llava_instruct_150k.json


├── mllm_format_llava_instruct_data.json


...

当前支持读取多个以,(注意不要加空格)分隔的数据集,配置方式为data.json中 dataset_param->basic_parameters->dataset 从"./data/mllm_format_llava_instruct_data.json"修改为"./data/mllm_format_llava_instruct_data.json,./data/mllm_format_llava_instruct_data2.json"

同时注意data.json中dataset_param->basic_parameters->max_samples的配置,会限制数据只读max_samples条,这样可以快速验证功能。如果正式训练时,可以把该参数去掉则读取全部的数据。

纯文本或有图无图混合训练数据(以LLaVA-Instruct-150K为例):

现在本框架已经支持纯文本/混合数据(有图像和无图像数据混合训练)。在数据构造时,对于包含图片的数据,需要保留image这个键值。


{


"id": your_id,


"image": your_image_path,


"conversations": [


{"from":"human","value": your_query},


{"from":"gpt","value": your_response},


],


}

在数据构造时,对于纯文本数据,可以去除image这个键值。


{


"id": your_id,


"conversations": [


{"from":"human","value": your_query},


{"from":"gpt","value": your_response},


],


}

【微调】

1. 准备工作

配置脚本前需要完成前置准备工作,包括:环境安装、权重下载及转换、数据集准备及处理,详情可查看对应章节。

2. 配置参数

数据目录配置:

根据实际情况修改data.json中的数据集路径,包括model_name_or_path、dataset_dir、dataset等字段。

以Qwen2.5VL-7B为例,data.json进行以下修改,注意model_name_or_path的权重路径为转换前的权重路径。

注意cache_dir在多机上不要配置同一个挂载目录避免写入同一个文件导致冲突。


{


"dataset_param": {


"dataset_type": "huggingface",


"preprocess_parameters": {


"model_name_or_path": "./ckpt/hf_path/Qwen2.5-VL-7B-Instruct",


...


},


"basic_parameters": {


...


"dataset_dir": "./data",


"dataset": "./data/mllm_format_llava_instruct_data.json",


"cache_dir": "./data/cache_dir",


...


},


...


},


...


}


}

模型保存加载及日志信息配置:

根据实际情况配置examples/qwen2.5vl/finetune_qwen2_5_vl_7b.sh的参数,包括加载、保存路径以及保存间隔--save-interval(注意:分布式优化器保存文件较大耗时较长,请谨慎设置保存间隔)


...


#加载路径


LOAD_PATH="ckpt/mm_path/Qwen2.5-VL-7B-Instruct"


#保存路径


SAVE_PATH="save_dir"


...


GPT_ARGS="


...


--no-load-optim #不加载优化器状态,若需加载请移除


--no-load-rng #不加载随机数状态,若需加载请移除


--no-save-optim #不保存优化器状态,若需保存请移除


--no-save-rng #不保存随机数状态,若需保存请移除


...


"


...


OUTPUT_ARGS="


--log-interval 1 #日志间隔


--save-interval 5000 #保存间隔


...


--log-tps #增加此参数可使能在训练中打印每步语言模块的平均序列长度,并在训练结束后计算每秒吞吐tokens量。


"

若需要加载指定迭代次数的权重、优化器等状态,需将加载路径LOAD_PATH设置为保存文件夹路径LOAD_PATH="save_dir",并修改latest_checkpointed_iteration.txt文件内容为指定迭代次数 (此功能coming soon)

$save_dir
 ├── latest_checkpointed_iteration.txt
 ├── ...

单机运行配置:

配置examples/qwen2.5vl/finetune_qwen2_5_vl_7b.sh参数如下


#根据实际情况修改 ascend-toolkit 路径


source /usr/local/Ascend/ascend-toolkit/set_env.sh


NPUS_PER_NODE=8


MASTER_ADDR=locahost


MASTER_PORT=29501


NNODES=1


NODE_RANK=0


WORLD_SIZE=$(($NPUS_PER_NODE * $NNODES))

注意,当开启PP时,model.json中配置的vision_encoder和text_decoder的pipeline_num_layer参数控制了各自的PP切分策略。对于流水线并行,要先处理vision_encoder再处理text_decoder。 比如7b默认的值[32,0,0,0]、[1,10,10,7],其含义为PP域内第一张卡先放32层vision_encoder再放1层text_decoder、第二张卡放text_decoder接着的10层、第三张卡放text_decoder接着的10层、第四张卡放text_decoder接着的7层,vision_encoder没有放完时不能先放text_decoder(比如[30,2,0,0]、[1,10,10,7]的配置是错的)。

同时注意,如果某张卡上的参数全部冻结时会导致没有梯度(比如vision_encoder冻结时PP配置[30,2,0,0]、[0,11,10,7]),需要在finetune_qwen2_5_vl_7b.sh中GPT_ARGS参数中增加--enable-dummy-optimizer,

3. 启动微调

以Qwen2.5VL-7B为例,启动微调训练任务。

bash examples/qwen2.5vl/finetune_qwen2_5_vl_7b.sh

【性能实测:昇腾硬件加速提升性能】

备注:Samples per Second 为 (SPS)

模型尺寸 任务类型 训练规模(A2) 混精类型 性能
3B 微调 单机8卡 bf16 23.771(SPS)
7B 微调 单机8卡 bf16 14.204(SPS)
32B 微调 双机16卡 bf16 6.755(SPS)
72B 微调 4机32卡 bf16 4.669(SPS)

【更多参数见MindSpeed MM仓库】

准备工作和参数说明见MindSpeed MM开源代码仓链接:

https://gitee.com/ascend/MindSpeed-MM/tree/master/examples/qwen2.5vl

结语

MindSpeed MM是面向大规模分布式训练的昇腾多模态大模型套件,同时支持多模态生成及多模态理解,旨在为华为昇腾芯片提供端到端的多模态训练解决方案, 包含预置业界主流模型,数据工程,分布式训练及加速,预训练、微调、在线推理任务等特性。

MindSpeed MM即将上线更加丰富的支持Qwen2.5VL模型的特性,敬请期待。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • AI
    AI
    +关注

    关注

    88

    文章

    35476

    浏览量

    281235
  • 开源
    +关注

    关注

    3

    文章

    3754

    浏览量

    43968
  • 模型
    +关注

    关注

    1

    文章

    3531

    浏览量

    50566
  • Mindspeed
    +关注

    关注

    1

    文章

    15

    浏览量

    9266

原文标题:多模态理解SOTA模型开箱即用,MindSpeed MM支持Qwen2.5-VL最佳实践

文章出处:【微信号:OSC开源社区,微信公众号:OSC开源社区】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    一文理解模态大语言模型——上

    /understanding-multimodal-llms 在过去几个月中, OpenVINO? 架构师 Yury阅读了众多有关模态大语言模型的论文和博客,在此基础上,推荐了一篇解读
    的头像 发表于 12-02 18:29 ?1253次阅读
    一文<b class='flag-5'>理解</b><b class='flag-5'>多</b><b class='flag-5'>模态</b>大语言<b class='flag-5'>模型</b>——上

    爱芯通元NPU适配Qwen2.5-VL-3B视觉模态模型

    InternVL2.5-1B/8B/MPO,Huggingface推出的全球最小模态模型SmloVLM-256M。为工业界提供了离线部署
    的头像 发表于 04-21 10:56 ?1611次阅读
    爱芯通元NPU适配<b class='flag-5'>Qwen2.5-VL</b>-3B视觉<b class='flag-5'>多</b><b class='flag-5'>模态</b>大<b class='flag-5'>模型</b>

    阿里云开源视觉语言大模型Qwen-VL ,支持图文双模态输入

    据介绍,Qwen-VL 是支持中英文等多种语言的视觉语言(Vision Language,VL模型。相较于此前的 VL 模型
    的头像 发表于 08-25 15:12 ?1821次阅读
    阿里云开源视觉语言大<b class='flag-5'>模型</b><b class='flag-5'>Qwen-VL</b> ,支持图文双<b class='flag-5'>模态</b>输入

    苹果发布300亿参数MM1模态模型

    近日,科技巨头苹果公司在一篇由多位专家共同撰写的论文中,正式公布了其最新的模态模型研究成果——MM1。这款具有高达300亿参数的
    的头像 发表于 03-19 11:19 ?1253次阅读

    商汤科技推出SenseFoundry-VL方舟模态新智平台

    WAIC 2024期间,基于 “日日新5.5”大模型体系能力,商汤“方舟城市开放平台”进行全新产品架构升级, 推出首个“大模型+城市服务”的解决方案及应用实践「SenseFoundry-VL 方舟
    的头像 发表于 07-12 14:15 ?1117次阅读
    商汤科技推出SenseFoundry-<b class='flag-5'>VL</b>方舟<b class='flag-5'>多</b><b class='flag-5'>模态</b>新智平台

    基于Qwen-Agent与OpenVINO构建本地AI智能体

    Qwen2 是阿里巴巴集团 Qwen 团队研发的大语言模型和大型模态模型系列。
    的头像 发表于 07-26 09:54 ?1308次阅读
    基于<b class='flag-5'>Qwen</b>-Agent与OpenVINO构建本地AI智能体

    通义千问发布第二代视觉语言模型Qwen2-VL

    Qwen2-VL系列模型模态处理领域取得了突破性进展,于多个权威测评中崭露头角,刷新了多项最佳成绩记录,展现出强大的视觉理解与语言交互
    的头像 发表于 09-03 16:31 ?896次阅读

    号称全球最强开源模型 ——Qwen2.5 系列震撼来袭!PerfXCloud同步上线,快来体验!

    9月19日凌晨,阿里通义千问 正式开源Qwen2.5系列大模型 ,最新发布包括了语言模型Qwen2.5,以及专门针对编程的Qwen2.5-C
    的头像 发表于 09-25 16:52 ?1675次阅读
    号称全球最强开源<b class='flag-5'>模型</b> ——<b class='flag-5'>Qwen2.5</b> 系列震撼来袭!PerfXCloud同步上线,快来体验!

    苹果发布300亿参数模态AI大模型MM1.5

    苹果近日推出了全新的模态AI大模型MM1.5,该模型拥有高达300亿的参数规模,是在前代MM1
    的头像 发表于 10-14 15:50 ?654次阅读

    利用OpenVINO部署Qwen2模态模型

    模态模型的核心思想是将不同媒体数据(如文本、图像、音频和视频等)进行融合,通过学习不同模态之间的关联,实现更加智能化的信息处理。简单来说,
    的头像 发表于 10-18 09:39 ?1324次阅读

    PerfXCloud重磅升级 阿里开源最强视觉语言模型Qwen2-VL-7B强势上线!

    体验吧! Qwen2-VL Qwen2-VL模型由阿里推出,在描述图像、理解视频以及解答视觉相关问题等方面表现极为卓越。该模型提供2B/7B
    的头像 发表于 10-23 11:07 ?794次阅读
    PerfXCloud重磅升级  阿里开源最强视觉语言<b class='flag-5'>模型</b><b class='flag-5'>Qwen2-VL</b>-7B强势上线!

    阿里云开源Qwen2.5-Coder代码模型系列

    Qwen2.5-Coder-32B-Instruct,在代码生成领域取得了显著成就。据官方介绍,该模型在EvalPlus等十多个主流的代码生成基准测试中,均刷新了开源模型的得分纪录,展现出了卓越的性能。更值得一提的是,
    的头像 发表于 11-14 11:28 ?1044次阅读

    一文理解模态大语言模型——下

    /understanding-multimodal-llms ? 《一文理解模态大语言模型 - 上》介绍了什么是
    的头像 发表于 12-03 15:18 ?639次阅读
    一文<b class='flag-5'>理解</b><b class='flag-5'>多</b><b class='flag-5'>模态</b>大语言<b class='flag-5'>模型</b>——下

    阿里云通义Qwen2.5-Max模型全新升级

    近期,阿里云通义团队为用户带来了一个振奋人心的好消息:其旗舰版模型Qwen2.5-Max迎来了全新升级发布。 Qwen2.5-Max模型是阿里云通义团队在MoE(Mixture of
    的头像 发表于 02-05 14:07 ?818次阅读

    利用英特尔OpenVINO在本地运行Qwen2.5-VL系列模型

    近期阿里通义实验室在 Hugging Face 和 ModelScope 上开源了 Qwen2.5-VL 的 Base 和 Instruct 模型,包含 3B、7B 和 72B 在内的 3 个模型尺寸。
    的头像 发表于 03-12 13:42 ?1084次阅读
    利用英特尔OpenVINO在本地运行<b class='flag-5'>Qwen2.5-VL</b>系列<b class='flag-5'>模型</b>