01.引言
今天,小米开源发布两款 7B 规模视觉-语言模型 MiMo-VL-7B-SFT 和 MiMo-VL-7B-RL。
MiMo-VL-7B的模型架构为:
① 保持细粒度视觉细节的原生分辨率ViT编码器
② 用于高效跨模态对齐的MLP projector
③ 专为复杂推理任务优化的MiMo-7B语言模型
编辑
MiMo-VL-7B的开发涉及两个连续的训练过程:
1、预训练阶段
数据规模:
总计约 2.4 万亿 tokens,涵盖图像描述、文本-图像交错、OCR/定位、视频、GUI 操作与合成推理数据等多模态语料。
阶段划分:
- Projector预热:仅训练Project head,使用图文对齐数据。
- 视觉-语言对齐:解冻 ViT;引入混合网页、书籍等交错数据。
- 通用多模态预训练:全面开放所有组件,加入 OCR、定位、视频与 GUI 数据,并少量引入推理与指令数据。
- 长上下文微调:将最大序列长度扩展至 32K,引入更长文本、视频与高分辨率图像,提高长上下文与深度推理能力。
2、后训练阶段
在此阶段研究团队引入了混合在线强化学习(MORL),这是一种新颖的框架,能够无缝集成涵盖感知准确性、视觉基础精度、逻辑推理能力和人机偏好的多种奖励信号。具体步骤如下:
-RLVR 部分:设计视觉推理、文本推理、图像/GUI 定位、视觉计数与视频时序定位等可规则化验证的奖励函数,实现自动打分与反馈。
-RLHF 部分:构建双模态与文本奖励模型,经 GPT-4o 排序标注,保证生成结果符合人类偏好并降低有害输出。
-混合在线策略:基于 GRPO 的全在线变体,统一通过 Reward-as-a-Service 提供低延迟多任务奖励,消除 KL 惩罚以提升训练稳定性。
编辑
研究团队开源了MiMo-VL-7B系列,包括SFT和RL模型的CheckPoint。 研究团队相信这份报告连同这些模型将为开发强大推理能力的VLM提供宝贵的见解,从而惠及更广泛的社区。
模型链接:
https://modelscope.cn/collections/MiMo-VL-bb651017e02742
代码仓库:
https://github.com/XiaomiMiMo/MiMo-VL
技术报告:
https://github.com/XiaomiMiMo/MiMo-VL/blob/main/MiMo-VL-Technical-Report.pdf
🛤️ 在这个过程中,研究团队发现在预训练阶段纳入高质量、广泛覆盖的推理数据对于提升模型性能至关重要
- 研究团队通过识别多样化的查询,使用大型推理模型重新生成带有长CoT的响应,并应用拒绝采样以确保质量,从而策划高质量的推理数据。
- 研究团队将大量这种合成推理数据直接纳入后期预训练阶段,而不是将其视为补充微调数据。延长训练时间可以持续提高性能而不会饱和。
混合在线策略强化学习进一步增强了模型性能,但同时实现稳定改进仍然具有挑战性
- 研究团队在多种能力上应用RL,包括推理、感知、接地和人类偏好对齐,涵盖文本、图像和视频等多种模态。虽然这种混合训练方法进一步释放了模型的潜力,但跨数据域的干扰仍然是一个挑战。
02.模型评估
通用能力
在通用视觉语言理解中,MiMo-VL-7B 达到了当前开源模型性能的SOTA水平
编辑
推理任务
在多模态推理中,SFT和RL模型在这几个基准测试中都显著优于所有比较的开源基线。
编辑
标有 * 的结果是使用研究团队的评估框架获得的。 带有 †{\dagger}† 的任务由 GPT-4o 评估。
GUI 任务
MiMo-VL-7B-RL 具备卓越的 GUI 理解和定位能力。作为一个通用的视觉语言模型,MiMo-VL 在性能上与专门针对 GUI 的模型相当,甚至更优。
编辑
Elo 评分
通过研究团队内部的评估数据集和 GPT-4o 的评判,MiMo-VL-7B-RL 在所有被评估的开源视觉语言模型中获得了最高的 Elo 评分,在从 7B 到 72B 参数范围内的模型中排名第一。
编辑
03.模型推理
MiMo-VL-7B 系列在部署和推理时完全兼容 Qwen2_5_VLForConditionalGeneration
架构。
使用transformers推理
from modelscope import Qwen2_5_VLForConditionalGeneration, AutoTokenizer, AutoProcessor from qwen_vl_utils import process_vision_info # default: Load the model on the available device(s) model = Qwen2_5_VLForConditionalGeneration.from_pretrained( "XiaomiMiMo/MiMo-VL-7B-SFT", torch_dtype="auto", device_map="auto" ) # default processer processor = AutoProcessor.from_pretrained("XiaomiMiMo/MiMo-VL-7B-SFT") messages = [ { "role": "user", "content": [ { "type": "image", "image": "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen-VL/assets/demo.jpeg", }, {"type": "text", "text": "Describe this image."}, ], } ] # Preparation for inference text = processor.apply_chat_template( messages, tokenize=False, add_generation_prompt=True ) image_inputs, video_inputs = process_vision_info(messages) inputs = processor( text=[text], images=image_inputs, videos=video_inputs, padding=True, return_tensors="pt", ) inputs = inputs.to("cuda") # Inference: Generation of the output generated_ids = model.generate(**inputs, max_new_tokens=128) generated_ids_trimmed = [ out_ids[len(in_ids) :] for in_ids, out_ids in zip(inputs.input_ids, generated_ids) ] output_text = processor.batch_decode( generated_ids_trimmed, skip_special_tokens=True, clean_up_tokenization_spaces=False ) print(output_text)
编辑
04.模型微调
我们介绍使用ms-swift对XiaomiMiMo/MiMo-VL-7B-RL进行微调。ms-swift是魔搭社区官方提供的大模型与多模态大模型训练部署框架。
ms-swift开源地址:
https://github.com/modelscope/ms-swift
我们将展示可运行的微调demo,并给出自定义数据集的格式。
在开始微调之前,请确保您的环境已准备妥当。
git clone https://github.com/modelscope/ms-swift.git cd ms-swift pip install -e . pip install "transformers<4.52" liger_kernel -U
图像OCR微调脚本如下。更多任务可以参考这里:https://github.com/modelscope/ms-swift/tree/main/examples/train/multimodal
MAX_PIXELS=1003520 \ CUDA_VISIBLE_DEVICES=0 \ swift sft \ --model XiaomiMiMo/MiMo-VL-7B-RL \ --dataset AI-ModelScope/LaTeX_OCR:human_handwrite#20000 \ --train_type lora \ --torch_dtype bfloat16 \ --num_train_epochs 2 \ --per_device_train_batch_size 16 \ --per_device_eval_batch_size 16 \ --learning_rate 1e-4 \ --lora_rank 8 \ --lora_alpha 32 \ --target_modules all-linear \ --freeze_vit true \ --gradient_accumulation_steps 1 \ --eval_steps 50 \ --save_steps 50 \ --save_total_limit 2 \ --logging_steps 5 \ --max_length 2048 \ --output_dir output \ --warmup_ratio 0.05 \ --padding_free true \ --attn_impl flash_attn \ --use_liger_kernel true \ --dataloader_num_workers 4
训练显存资源:
编辑
自定义数据集格式如下(system字段可选),只需要指定`--dataset <dataset_path>`即可:
{"messages": [{"role": "user", "content": "浙江的省会在哪?"}, {"role": "assistant", "content": "浙江的省会在杭州。"}]} {"messages": [{"role": "user", "content": "<image><image>两张图片有什么区别"}, {"role": "assistant", "content": "前一张是小猫,后一张是小狗"}], "images": ["/xxx/x.jpg", "/xxx/x.png"]}
训练完成后,使用以下命令对训练时的验证集进行推理:
CUDA_VISIBLE_DEVICES=0 \ swift infer \ --adapters output/vx-xxx/checkpoint-xxx \ --stream false \ --max_batch_size 1 \ --load_data_args true \ --max_new_tokens 2048
推送模型到ModelScope:
CUDA_VISIBLE_DEVICES=0 \ swift export \ --adapters output/vx-xxx/checkpoint-xxx \ --push_to_hub true \ --hub_model_id '<your-model-id>' \ --hub_token '<your-sdk-token>'
点击阅读原文,即可跳转模型~