本文旨在结合笔者自身的实践经历,详细介绍如何使用 LLaMA-Factory 来微调多模态大语言模型。目前仓库已支持若干流行的MLLM比如LLaVA-1.5,Yi-VL,Paligemma等。
2024.5.29 注:本文后续不再更新,如果想了解更新的特性和功能欢迎访问知乎博客:https://zhuanlan.zhihu.com/p/699777943
值得注意的是现在LLaMA-Factory引入了CLI,因此调用方式更加简单,只需要简单的几行命令即可开始微调。
环境准备
首先安装LLaMA-Factory
git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,metrics]
检查机器含有可用GPU
import torch
try:
assert torch.cuda.is_available() is True
except AssertionError:
print("Please set up a GPU before using LLaMA Factory")
多模态多轮对话数据集构建
这里出于方便的考虑,以仓库自带的 mllm_demo 数据集作为例子。在此也推荐一些笔者创建的hf数据集可供使用,都能适配LLaMA-Factory,场景分别是通用,医学,动漫。
https://huggingface.co/datasets/BUAADreamer/llava-en-zh-300k
https://huggingface.co/datasets/BUAADreamer/llava-med-zh-instruct-60k
https://huggingface.co/datasets/BUAADreamer/pokemon-gpt4-1k
本地图像准备
项目的 data/mllm_demo_data 目录下有三张比较新的图像,两张为拜仁慕尼黑的球员本赛季在主场庆祝,1张为桂海潮教授在演讲。本文以这三张图像作为例子进行讲解,读者可以换成任意的自己的图像
data/mllm_demo_data/1.jpg
data/mllm_demo_data/2.jpg
data/mllm_demo_data/3.jpg
本地多轮对话数据构建
直接修改 data/mllm_demo.json 即可,这里用python写入文件作为演示,格式遵循类似openai的聊天格式。images 参数设置为含有一张图像所在路径的列表。注意:这里的图像路径为绝对路径或相对于当前位置的相对路径。
[
{
"messages": [
{
"content": "他们是谁",
"role": "user"
},
{
"content": "他们是来自拜仁慕尼黑的主力中锋凯恩和主力中场格雷茨卡。",
"role": "assistant"
},
{
"content": "他们在做什么?",
"role": "user"
},
{
"content": "他们在拜仁慕尼黑主场激情庆祝。",
"role": "assistant"
}
],
"images": [
"data/mllm_demo_data/1.jpg"
]
},
{