找回密码
 会员注册
查看: 30|回复: 0

swift与Internvl下的多模态大模型分布式微调指南(附代码和数据)

[复制链接]

2万

主题

0

回帖

6万

积分

超级版主

积分
68588
发表于 2024-9-10 10:22:01 | 显示全部楼层 |阅读模式
大模型相关目录大模型,包括部署微调prompt/Agent应用开发、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模型应用开发内容从0起步,扬帆起航。基于Dify的智能分类方案:大模型结合KNN算法(附代码)OpenCompass:大模型测评工具一文读懂多模态大模型基础架构大模型管理平台:one-api使用指南大模型RAG、ROG、RCG概念科普RAGOnMedicalKG:大模型结合知识图谱的RAG实现DSPy:变革式大模型应用开发最简明的Few-shotPrompt指南SemanticKernel:微软大模型开发框架——LangChain替代对话大模型Prompt是否需要礼貌点?swift与Internvl下的多模态大模型分布式微调指南(附代码和数据)文章目录大模型相关目录OCR多模态大模型微调全流程记录前言微调框架部署数据集构建及注册微调配置OCR多模态大模型微调全流程记录前言微调框架:swift微调模型:internvl-chat-v1_5微调任务:多模态大模型在指定任务上的OCR能力微调优化微调显存:55G,多batch时对单卡要求较高(4090不能满足需求)微调框架部署gitclonehttps://kkgithub.com/modelscope/swift.gitcdswift/condacreate-nswift-ypython=3.11condaactivateswiftpipinstall-e'.[llm]'#glm4-v还需要额外安装torchvisionpipinstalltorchvision#minicpm-v-v2_5-chat还需要timmpipinstalltimm12345678910数据集构建及注册下载开源数据集,以多模态OCR数据集为例:该数据集包含2个部分,即JPG、PNG格式的带编号图像数据集和与图像数据集对应的QA问答JSONL数据集。寻找swift在多模态任务中所需的数据格式:编写脚本,批量处理数据格式:importjson#写入jsonl文件defwrite_jsonl(data_list,filename):withopen(filename,'w',encoding='utf-8')asf:foritemindata_list:json_str=json.dumps(item,ensure_ascii=False)#将Python对象转换为JSON格式的字符串f.write(json_str+'\n')#读取jsonl文件defread_jsonl(filename):data_list=[]withopen(filename,'r',encoding='utf-8')asf:forlineinf:data_list.append(json.loads(line))#将JSON格式的字符串转换为Python对象returndata_list#读取jsonl文件read_data=read_jsonl('/home/super/sgq/swift/metadata.jsonl')#打印读取的数据new_data=[]foriteminread_data:new_data.append({"query":item['question'],"response":item['answers'],"images":["/self_data/test/"+item['file_name']]})write_jsonl(new_data,'finall_data.jsonl')12345678910111213141516171819202122232425262728293031为使数据能够在框架中进行应用,需进行数据集注册:于路径:/home/super/sgq/swift/swift/llm/data/dataset_info.json对数据集信息进行注册,自定义数据集格式参考:需强调的是,默认数据集使用dataset_id字段进行索引定位,自定义数据集使用dataset_path即可,目前仅支持jsonl、json格式,推荐jsonl。最后附处理后可用于微调的数据集:链接:https://pan.baidu.com/s/1dvWs8ny2-bky_zAWIXnxrg提取码:ybwe微调配置项目部署成功,且数据集准备后,启动框架,指令如下:cdsgq/swift/condaactivateswiftWEBUI_SERVER=0.0.0.0swiftweb-ui123启动后界面如下:1.选择需要微调训练的模型型号:如图所示,在选项栏中选定internvl-chat-v1_5,后方的路径和模型类型系统会自动加载。须注意的是,模型路径是项目缓存路径,由框架自动缓存并路由。未试验自定义路径时框架是否能够作用。2.配置系统提示词和微调数据集,数据集可多选,具体如下方红色框图区域所示:需注意的是,选择数据集要出现在可选下拉框中且可用,必须安装“数据集构建及注册”所强调的步骤自定义数据并注册。3.训练方式配置默认训练方式采取LoRA,需设置精度为bf16。设置batch为1,2及以上时4090卡会报显存溢出。学习率等参数保持不变,本文未提到的参数项均可不做改动。Flashattention可选项勾上,这是一种显存利用优化方案。下拉项目界面,LoRA更多参数设置如图:以上参数设置为经验之谈,网上案例如此配置效果较好。4.点击开始训练,若无报错,显示显存加载,并最终显示预估训练时间即表示微调成功。5.微调成功后,查看训练结果(日志及模型全重)。训练日志路径:/home/super/output/internvl-chat-v1_5/v4-20240708-180015/runs/训练参数:“/home/super/output/internvl-chat-v1_5/v4-20240708-180015/training_args.json”训练度量:“/home/super/output/internvl-chat-v1_5/v4-20240708-180015/logging.jsonl”可视化脚本:importjsonloss_values=[]acc_values=[]#打开JSONL文件withopen(r"C:\Users\12258\Desktop\logging.jsonl",'r')asfile:forlineinfile:try:#加载每一行的JSON对象entry=json.loads(line)print(entry)#打印出每个条目的内容loss_values.append(entry['loss'])acc_values.append(entry['acc'])exceptassimportmatplotlib.pyplotasplt#Plotthelossvaluesplt.plot(loss_values,label="Loss")plt.xlabel("GlobalStep")plt.ylabel("Loss")plt.title("LossOverGlobalSteps")plt.legend()plt.grid(True)plt.show()importmatplotlib.pyplotasplt#Plotthelossvaluesplt.plot(acc_values,label="Acc",color='orange')plt.xlabel("GlobalStep")plt.ylabel("Acc")plt.title("AccOverGlobalSteps")plt.legend()plt.grid(True)plt.show()123456789101112131415161718192021222324252627282930313233
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-5 09:31 , Processed in 0.428806 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表