一、模型微调
模型微调的作用
模型微调的主要作用是通过在特定任务或特定领域的数据上进一步训练预训练模型,使其能够更好地适应特定任务的需求。这种方法利用了预训练模型在大规模数据上学习到的广泛知识,并将其与特定任务的数据相结合,从而提高模型在该任务上的表现。
目的
-
提升特定任务的性能:预训练模型在大量通用数据上训练,具备了广泛的知识和技能。然而,当应用到特定任务或特定领域时,模型可能无法充分发挥其潜力。通过微调,可以使模型在特定任务上表现得更为精准和有效。
-
节省训练时间和资源:相比从头开始训练一个新模型,微调现有的预训练模型需要的时间和计算资源大大减少。预训练模型已经具备了基本的语言理解和生成能力,微调仅需在较小规模的数据上进行调整。
-
适应领域特定的需求:不同领域有不同的语言习惯和术语,预训练模型可能无法完全覆盖这些特定领域的知识。通过微调,可以使模型更加适应领域特定的语言特征和需求。
-
解决数据不均衡问题:在某些任务中,数据可能存在不均衡的情况,预训练模型可能无法很好地处理这些问题。通过微调,可以有针对性地调整模型参数,使其更好地处理数据不均衡的问题。
二、VisualGLM 6B微调步骤
多模态任务分布广、种类多,预训练往往不能面面俱到。 VisualGLM 6B提供了一个小样本微调的例子,使用20张标注图增强模型回答“背景”问题的能力。
解压数据&运行微调命令
解压fewshot-data.zip
以后运行如下命令:
bash finetune/finetune_visualglm.sh
支持的微调方式
目前支持三种方式的微调:
- LoRA:样例中为ChatGLM模型的第0层和第14层加入了rank=10的LoRA微调,可以根据具体情景和数据量调整
--layer_range
和--lora_rank
参数。 - QLoRA:如果资源有限,可以考虑使用
bash finetune/finetune_visualglm_qlora.sh
,QLoRA将ChatGLM的线性层进行了4-bit量化,只需要9.8GB显存即可微调。 - P-tuning:将
--use_lora
替换为--use_ptuning
,不过不推荐使用,除非模型应用场景非常固定。
模型推理
训练好以后可以使用如下命令推理:
python cli_demo.py --from_pretrained your_checkpoint_path --prompt_zh 这张图片的背景里有什么内容?
三、使用官方数据集微调
官方提供了fewshort数据集来对模型进行微调,使用20张标注图增强模型回答“背景”问题的能力。
数据集
数据集为data.json格式,每张图片都具有img键指向图像存储路径,prompt提示均为“这图片的背景里有什么内容?”,label标签为图片的具体背景描述。模型通过读取图像,结合prompt引导模型聚焦label关注的内容。
微调方式选择
-
LoRA(Low-Rank Adaptation):
- 适用于大多数场景,通过在部分层加入低秩适应层,提升模型特定任务上的表现。
- 优点:在保持模型原有能力的基础上,提高特定任务的准确性。
-
QLoRA:
- 适用于计算资源有限的情况,通过4-bit量化减少显存占用。
- 优点:显著降低显存需求,适合在资源受限环境中使用。
-
P-tuning:
- 适用于非常固定的应用场景,通过在特定任务上进行精细调整。
- 优点:在固定任务上表现优异,但通用性较低。
鉴于我们使用2张A100,决定使用LoRA微调,配置微调参数。
bash finetune/finetune_visualglm.sh --layer_range 0 14 --lora_rank 10
微调效果对比
微调前:
欢迎使用 VisualGLM-6B 模型,输入图像URL或本地路径读图,继续输入内容对话,clear 重新开始,stop 终止程序
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/2p.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:人们总是被生活琐事所困扰,无法摆脱束缚.
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/meme.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是一张狗的图片,它躺在木地板上。
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/passport.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是一台电脑键盘和两张护照。
用户:clear
请输入图像路径或URL(回车进入纯文本对话):
微调后:
欢迎使用 VisualGLM-6B 模型,输入图像URL或本地路径读图,继续输入内容对话,clear 重新开始,stop 终止程序
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/2p.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是雨天,
用户:描述一下这张图片。
VisualGLM-6B:这张图片描绘了雨天的情景,雨水淅淅沥沥地落在地面上。人们穿着雨衣或雨伞,走在雨中,似乎在寻找着什么.
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/meme.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是木质地板。
用户:什么颜色的地板
VisualGLM-6B:这张图片的背景是蓝色的。
用户:描述一下这张图片。
VisualGLM-6B:这张图片描绘了一只棕色的小狗躺在蓝色的木质地板上。
用户:clear
请输入图像路径或URL(回车进入纯文本对话): fewshot-data/passport.png
用户:这张图片的背景里有什么内容?
VisualGLM-6B:这张图片的背景是电脑键盘。
用户:描述一下这张图片。
VisualGLM-6B:这张图片的特点是电脑键盘和护照。
用户:有几张护照
VisualGLM-6B:两张护照。
用户:clear
请输入图像路径或URL(回车进入纯文本对话):
例如,对于2p.png,图片描述男女生在雨中行走的内容。
微调前的回答:
微调后的回答:
可以看到,微调后的模型对“背景”回答的能力有一定提升,后续可以进行继续调优。