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 80GB | 4x A100 80GB | 8x A100 80GB |
|---|---|---|---|
| LoRA | 14.4 GiB | 13.6 GiB | 13.1 GiB |
| 全量 | 16.0 GiB | 15.8 GiB | 15.63 GiB |
OOM 排查
训练过程中遇到显存不足(OOM)时,可按以下顺序排查:
- 减小
batch_size或per_device_train_batch_size - 减小输入图片分辨率或最大切片数
- 使用 LoRA 替代全量微调,显存占用更低
- 启用 DeepSpeed ZeRO-2 或 ZeRO-3 进行显存优化
- 使用 gradient checkpointing 降低激活显存
- 增加 GPU 数量以分摊显存压力
相关资源
| 主题 | 入口 |
|---|---|
| 模型概览 | MiniCPM-o 2.6 概览 |
| 代码仓库 | OpenBMB/MiniCPM-o |
| LLaMA-Factory 框架 | hiyouga/LLaMA-Factory |
| ms-swift 框架 | modelscope/ms-swift |