综合介绍
MiniMind-V 是一个开源项目,托管于 GitHub,旨在帮助用户在 1 小时内训练一个仅 2600 万参数的轻量级视觉语言模型(VLM)。它基于 MiniMind 语言模型,新增视觉编码器和特征投影模块,支持图像和文本联合处理。项目提供从数据集清洗到模型推理的完整代码,训练成本低至约 1.3 元人民币,适合单张 GPU(如 NVIDIA 3090)。MiniMind-V 强调简单易用,代码改动少于 50 行,适合开发者实验和学习视觉语言模型的构建过程。
功能列表
- 提供 2600 万参数视觉语言模型的完整训练代码,支持单 GPU 快速训练。
- 使用 CLIP 视觉编码器,处理 224x224 像素图像,生成 196 个视觉 token。
- 支持单图和多图输入,结合文本进行对话、图像描述或问答。
- 包含数据集清洗、预训练和监督微调(SFT)的全流程脚本。
- 提供 PyTorch 原生实现,支持多卡加速,兼容性强。
- 包含模型权重下载,支持 Hugging Face 和 ModelScope 平台。
- 提供 Web 界面和命令行推理,便于测试模型效果。
- 支持 wandb 工具,记录训练过程中的损失和性能。
使用帮助
MiniMind-V 的使用流程包括环境配置、数据准备、模型训练和效果测试。以下详细介绍每个步骤,帮助用户快速上手。
环境配置
MiniMind-V 需要 Python 环境和 GPU 支持。以下是安装步骤:
- 克隆代码
在终端运行以下命令,下载项目代码:git clone https://github.com/jingyaogong/minimind-v cd minimind-v
- 安装依赖
项目提供requirements.txt
文件,包含所需库。运行以下命令:pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
建议使用 Python 3.9 或以上版本。确保 PyTorch 支持 CUDA(若有 GPU)。可运行以下代码验证:
import torch print(torch.cuda.is_available())
输出
True
表示 GPU 可用。 - 下载 CLIP 模型
MiniMind-V 使用 CLIP 模型(clip-vit-base-patch16
)作为视觉编码器。运行以下命令下载并放置到./model/vision_model
:git clone https://huggingface.co/openai/clip-vit-base-patch16 ./model/vision_model
也可从 ModelScope 下载:
git clone https://www.modelscope.cn/models/openai-mirror/clip-vit-base-patch16 ./model/vision_model
- 下载基座语言模型权重
MiniMind-V 基于 MiniMind 语言模型,需下载语言模型权重到./out
目录。例如:wget https://huggingface.co/jingyaogong/MiniMind2-V-PyTorch/blob/main/lm_512.pth -P ./out
或下载
lm_768.pth
,具体视模型配置而定。
数据准备
MiniMind-V 使用约 57 万张预训练图像和 30 万条指令微调数据,存储空间约 5GB。操作步骤如下:
- 创建数据集目录
在项目根目录创建./dataset
文件夹:mkdir dataset
- 下载数据集
从 Hugging Face 或 ModelScope 下载数据集,包含*.jsonl
问答数据和*images
图片数据:- Hugging Face: https://huggingface.co/datasets/jingyaogong/minimind-v_dataset
- ModelScope: https://www.modelscope.cn/datasets/gongjy/minimind-v_dataset
下载后解压图片数据到./dataset
:
unzip pretrain_images.zip -d ./dataset unzip sft_images.zip -d ./dataset
- 验证数据集
确保./dataset
包含以下文件:pretrain_vlm_data.jsonl
:预训练数据,约 57 万条。sft_vlm_data.jsonl
:单图微调数据,约 30 万条。sft_vlm_data_multi.jsonl
:多图微调数据,约 1.36 万条。- 图片文件夹:包含预训练和微调的图像文件。
模型训练
MiniMind-V 训练分为预训练和监督微调,支持单卡或多卡加速。
- 配置参数
编辑./model/LMConfig.py
,设置模型参数。例如:- 小型模型:
dim=512
,n_layers=8
- 中型模型:
dim=768
,n_layers=16
这些参数决定模型大小和性能。
- 小型模型:
- 预训练
运行预训练脚本,学习图像描述能力:python train_pretrain_vlm.py --epochs 4
输出权重保存为
./out/pretrain_vlm_512.pth
(或768.pth
)。单张 NVIDIA 3090 约需 1 小时完成 1 个 epoch。冻结 CLIP 模型,仅训练投影层和语言模型最后一层。 - 监督微调(SFT)
使用预训练权重进行微调,优化对话能力:python train_sft_vlm.py --epochs 4
输出权重保存为
./out/sft_vlm_512.pth
。此步骤训练投影层和语言模型全部参数。 - 多卡训练(可选)
若有 N 张显卡,使用以下命令加速:torchrun --nproc_per_node N train_pretrain_vlm.py --epochs 4
替换
train_pretrain_vlm.py
为其他训练脚本(如train_sft_vlm.py
)。 - 监控训练
可使用 wandb 记录训练损失:python train_pretrain_vlm.py --epochs 4 --use_wandb
在 wandb 官网查看实时数据。
效果测试
训练完成后,可测试模型的图像对话能力。
- 命令行推理
运行以下命令加载模型:python eval_vlm.py --load 1 --model_mode 1
--load 1
:从 Hugging Face 加载 transformers 格式模型。--load 0
:从./out
加载 PyTorch 权重。--model_mode 1
:测试微调模型;0
测试预训练模型。
- Web 界面测试
启动 Web 界面:python web_demo_vlm.py
访问
http://localhost:8000
,上传图片并输入文本测试。 - 输入格式
MiniMind-V 使用 196 个@@@
占位符表示一张图片。例如:@@@...@@@\n这张图片是什么内容?
多图输入示例:
@@@...@@@\n第一张图是什么?\n@@@...@@@\n第二张图是什么?
- 下载预训练权重
若不训练,可直接下载官方权重:
注意事项
- 推荐显存 24GB(如 RTX 3090)。若显存不足,减小批次大小(
batch_size
)。 - 确保数据集路径正确,
*.jsonl
和图片文件需放在./dataset
。 - 训练时冻结 CLIP 模型,降低算力需求。
- 多图对话效果有限,建议优先测试单图场景。
应用场景
- AI 算法学习
MiniMind-V 提供简洁的视觉语言模型代码,适合学生理解跨模态模型原理。用户可修改代码,实验不同参数或数据集。 - 快速原型验证
开发者可基于 MiniMind-V 构建图像对话应用原型。它轻量高效,适合低算力设备,如个人电脑或嵌入式系统。 - 教育培训工具
高校或机构可将 MiniMind-V 用于 AI 课程,展示模型训练全流程。代码注释清晰,适合课堂实践。 - 低成本实验
项目训练成本低,适合预算有限的团队测试多模态模型效果,无需高性能服务器。
QA
- MiniMind-V 支持多大图片?
默认处理 224x224 像素图片,受 CLIP 模型限制。数据集图片可能压缩至 128x128 以节省空间。未来可尝试更大分辨率 CLIP 模型。 - 训练需要多少时间?
单张 NVIDIA 3090 上,预训练 1 个 epoch 约 1 小时,微调稍快。具体时间因硬件和数据量而异。 - 可以不预训练直接微调吗?
可以。直接下载官方预训练权重,运行train_sft_vlm.py
进行微调。 - 支持哪些语言?
主要支持中文和英文,效果取决于数据集。用户可通过微调扩展其他语言。 - 多图对话效果如何?
当前多图对话能力有限,建议优先使用单图场景。未来可通过更大模型和数据集改进。