跳到主要内容

MiniCPM-o 2.6

MiniCPM-o 全模态系列

支持的微调方式:官方脚本(LoRA / 全量)、LLaMA-Factory、ms-swift(SWIFT)、Align-Anything(DPO)

数据准备​

微调数据采用 JSON 格式,与 MiniCPM-V 系列保持一致。每条数据包含 id、image、conversations 三个字段。

单图数据格式

JSON
[
{
"id": "0",
"image": "path/to/image.jpg",
"conversations": [
{"role": "user", "content": "<image>\n描述这张图片"},
{"role": "assistant", "content": "这是一张..."}
]
}
]

多图数据格式

JSON
[
{
"id": "0",
"image": ["path/to/image1.jpg", "path/to/image2.jpg"],
"conversations": [
{"role": "user", "content": "<image>\n<image>\n比较这两张图片"},
{"role": "assistant", "content": "第一张图片..."}
]
}
]

官方脚本微调​

克隆 MiniCPM-o 仓库后,修改微调脚本中的 MODEL 和 LLM_TYPE 参数即可开始训练。

LoRA 微调

Bash
MODEL="openbmb/MiniCPM-o-2_6"
LLM_TYPE="qwen"

bash finetune/finetune_lora.sh

全量微调

Bash
MODEL="openbmb/MiniCPM-o-2_6"
LLM_TYPE="qwen"

bash finetune/finetune_ds.sh

LoRA 推理​

微调完成后,使用 peft 库加载 LoRA adapter 进行推理。

Python
from peft import PeftModel
from transformers import AutoModel, AutoTokenizer

model_path = "openbmb/MiniCPM-o-2_6"
lora_path = "path/to/lora_adapter"

model = AutoModel.from_pretrained(model_path, trust_remote_code=True)
lora_model = PeftModel.from_pretrained(model, lora_path)
tokenizer = AutoTokenizer.from_pretrained(model_path, trust_remote_code=True)

# 合并权重(可选,用于部署)
merged_model = lora_model.merge_and_unload()

LLaMA-Factory 微调​

LLaMA-Factory 已支持 MiniCPM-o 系列模型,使用模板 minicpm_o。

LoRA 微调

Bash
llamafactory-cli train examples/train_lora/minicpm_o_lora_sft.yaml

全量微调

Bash
llamafactory-cli train examples/train_full/minicpm_o_full_sft.yaml

显存参考​

以下为不同 GPU 配置下的显存占用参考(A100 80GB):

微调方式2x A100 80GB4x A100 80GB8x A100 80GB
LoRA14.4 GiB13.6 GiB13.1 GiB
全量16.0 GiB15.8 GiB15.63 GiB

OOM 排查​

训练过程中遇到显存不足(OOM)时,可按以下顺序排查:

  1. 减小 batch_size 或 per_device_train_batch_size
  2. 减小输入图片分辨率或最大切片数
  3. 使用 LoRA 替代全量微调,显存占用更低
  4. 启用 DeepSpeed ZeRO-2 或 ZeRO-3 进行显存优化
  5. 使用 gradient checkpointing 降低激活显存
  6. 增加 GPU 数量以分摊显存压力

相关资源​

主题入口
模型概览MiniCPM-o 2.6 概览
代码仓库OpenBMB/MiniCPM-o
LLaMA-Factory 框架hiyouga/LLaMA-Factory
ms-swift 框架modelscope/ms-swift

开发者精选

查看全部 →