背景:
最近在学习多模态大模型的相关知识,正好有一个多模态的天池比赛 WWW2025 多模态对话系统意图识别挑战赛 这里使用该竞赛数据集作为实践。先在本地跑一遍baseline,出一个基准分数。因为我只有4张A30,所以选择Qwen2-VL-7B-Instruct作为基准模型,使用LLama Factory运行微调代码。
环境安装
这里新开一个conda环境并安装LlamaFactory, 其余缺少的包在运行LLamaFactory时在逐步安装即可。按照官方的推荐环境安装, 如果环境出现问题,可以参考官网的解决方案,相关链接都放在文末的参考中了:
官方推荐环境版本
conda create -n l_factory python==3.11
git clone --depth 1 https://github.com/hiyouga/LLaMA-FactoryA-Factory.git
cd LLaMA-Factory
pip install -e “.[torch,metrics,deepspeed]”
我这里安装完成后是0.9.1.dev0版本,其余重要环境参数如下:
-
Transformers 4.46.1
-
Pytorch 2.5.1+cu124
-
Datasets 3.1.0
-
Tokenizers 0.20.3
一些环境的问题
gcc版本问题
由于需要单机多卡,我这里使用deepspeed的zero3版本,但是需要gcc版本在8.0以上,这里升级机器的gcc版本,参考如下步骤
升级gcc版本
提示网络问题,需要更换SCL为国内数据源,这里选阿里数据源
参考如下步骤:
更换SCL为阿里源 https://blog.csdn.net/qq_45748758/article/details/132212591
模型下载
在huggingface官网下载模型即可,网络有限制的话可以使用镜像网站HF-Mirror,按照官网的下载方式下载即可,支持断点续传,可以一键下载,很方便。
多模态对话系统意图识别挑战赛
竞赛简介
详情可以参考竞赛主页,简单而言,需要完成对多模态数据(这里是图片及文本)的意图分类。包含对图片的意图分类,及用户对话的意图分类。
数据示例:
输入:
用户: [本处为上图]\n客服: 宝贝,请问有什么可以帮到您的吗?\n用户: 这一套的链接麻烦发下小姐姐\n
输出:
套装推荐
数据下载
在竞赛的数据下载页面下载数据,竞赛的数据详情可以参考竞赛主页。
数据包含1000条的训练数据集,初赛包含10000条的测试数据。
baseline
官方提供了baseline的代码,baseline-git,对训练数据微调,并预测结果且提交。下面采用两种常见的微调方式完成baseline,lora及full微调。
lora微调
- 配置yaml文件,如下所示:
### model,base model的路径``model_name_or_path: Qwen2-VL-7B-Instruct`` ``### method``stage: sft``do_train: true``finetuning_type: lora``lora_target: all`` ``### dataset``dataset: mire_train # 这里配置自己的数据集``template: qwen2_vl``cutoff_len: 2048``max_samples: 1000 # 这个参数匹配自己的数据集或设置大点``overwrite_cache: true``preprocessing_num_workers: 16``val_size: 0.1`` ``### output``output_dir: saves/qwen2_vl-7b/lora/sft``logging_steps: 10``save_steps: 50``plot_loss: true``overwrite_output_dir: true`` ``### train``per_device_train_batch_size: 1``gradient_accumulation_steps: 8``learning_rate: 1.0e-4``num_train_epochs: 3.0``lr_scheduler_type: cosine``warmup_ratio: 0.1``bf16: true``ddp_timeout: 180000000`` ``### eval``val_size: 0.1``per_device_eval_batch_size: 1``eval_strategy: steps``eval_steps: 20
- 运行llama factory的训练脚本
FORCE_TORCHRUN=1 llamafactory-cli train examples/qwen2_vl_lora_sft.yaml
- 合并lora及基准模型
### model``model_name_or_path: Qwen2-VL-7B-Instruct``adapter_name_or_path: ./saves/qwen2_vl-7b/lora/sft/checkpoint-168 # 上一步保存的路径``template: qwen2_vl``finetuning_type: lora`` ``### export``export_dir: models/qwen2_vl_lora_sft``export_size: 2``export_device: cpu``export_legacy_format: false
llamafactory-cli export merge_config.yaml
- 使用合并后的模型预测测试集
FORCE_TORCHRUN=1 llamafactory-cli train examples/predict.yaml
最终提交的分数为:
全参数微调
和lora微调方式一样,不过少了一步合并模型,配置如下:
model_name_or_path: Qwen2-VL-7B-Instruct`` ``### method``stage: sft``do_train: true``finetuning_type: full`` ``### dataset``dataset: mire_train # video: mllm_video_demo``template: qwen2_vl``cutoff_len: 1024``max_samples: 1000``overwrite_cache: true``preprocessing_num_workers: 16``val_size: 0.1`` ``### output``output_dir: saves/qwen2_vl-7b/full/sft``logging_steps: 1``save_steps: 0.2``plot_loss: true``overwrite_output_dir: true`` ``### train``per_device_train_batch_size: 4``gradient_accumulation_steps: 2``learning_rate: 5.0e-6``num_train_epochs: 3.0``lr_scheduler_type: cosine``warmup_ratio: 0.05``fp16: true``ddp_timeout: 180000000`` ``### eval``val_size: 0.1``per_device_eval_batch_size: 8``eval_strategy: steps``eval_steps: 5`` ``flash_attn: fa2``deepspeed: examples/deepspeed/ds_z3_offload_config.json
最终提交的分数为下图,超过了一半的提交者:
遇到的一些错误:
shape mismatch:
训练时一直报这个错误(这个出现在输入有多张图片时),可能因为在数据向量化时,输入图片过长,导致shape超过了最大长度,可以通过把 cutoff_len 参数调大来解决,但调太大会导致显存不足,尽量调整到刚好够用(每次少调整一些,直至不报错)
outof memory:
在预测时,显存不足
发现每次都是在单卡上完整加载一个模型,在预测多图(这里为超过5张图)的样本时就会显存不足,暂时通过把样本图片量减少,临时解决掉了。如何在多张卡加载一个模型的方案还是未找到,找到我在补充吧。
在训练时,显存不足
使用deepspeed进行训练,
显存不足时,会临时调用cpu和内存进行辅助计算。在全量微调时配置如下参数:
deepspeed: examples/deepspeed/ds_z3_offload_config.json
参考:
-
LLamaFactory-git https://github.com/hiyouga/LLaMA-Factory/blob/main/README_zh.md
-
LLamaFactory官方参考文档 https://llamafactory.readthedocs.io/zh-cn/latest/getting_started/installation.html
-
huggingface-Qwen2-vl https://huggingface.co/Qwen/Qwen2-VL-7B-Instruct
==============================================================================
《AIGC面试宝典》欢迎你的加入
《AIGC面试宝典》星球主要是作者的一些学习成果和资料分享。
-
今年
-
十月 AIGC面经
-
八-九月 AiGC 实践教程 —AiGC摩天大楼(争取把所有AiGC任务都刷一遍)
-
七月 大模型推理加速教程
-
六月 Agent实战教程— Agent千机变
-
六月 大模型训练系列
-
五月 RAG实战教程— RAG潘多拉宝盒
-
四月 AiGC实战训练营—非一般程序猿
-
去年
-
NLP实践教程 —NLP菜鸟逆袭
-
LLMs实践教程—LLMs九层妖塔
-
LLMs面经— LLMs千面郎君
-
NLP面经— NLP面无不过
-
推荐系统入门—推荐系统入门
-
推荐系统面经—推荐系统百面百搭
AI大模型学习路线
如果你对AI大模型入门感兴趣,那么你需要的话可以点击这里大模型重磅福利:入门进阶全套104G学习资源包免费分享!
扫描下方csdn官方合作二维码获取哦!
这是一份大模型从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
100套AI大模型商业化落地方案
大模型全套视频教程
200本大模型PDF书籍
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
LLM面试题合集
大模型产品经理资源合集
大模型项目实战合集
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓
