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

打印 上一主题 下一主题

主题 474|帖子 474|积分 1422

大模子相关目次

大模子,包罗部署微调prompt/Agent应用开辟、知识库增强、数据库增强、知识图谱增强、自然语言处理、多模态等大模子应用开辟内容
从0起步,扬帆起航。

  • 基于Dify的智能分类方案:大模子结合KNN算法(附代码)
  • OpenCompass:大模子测评工具
  • 一文读懂多模态大模子根本架构
  • 大模子管理平台:one-api使用指南
  • 大模子RAG、ROG、RCG概念科普
  • RAGOnMedicalKG:大模子结合知识图谱的RAG实现
  • DSPy:变革式大模子应用开辟
  • 最简明的Few-shot Prompt指南
  • Semantic Kernel:微软大模子开辟框架——LangChain 更换
  • 对话大模子Prompt是否必要规矩点?
  • swift与Internvl下的多模态大模子分布式微调指南(附代码和数据)


  

OCR多模态大模子微调全流程纪录

媒介

微调框架:swift
微调模子:internvl-chat-v1_5
微调使命:多模态大模子在指定使命上的OCR能力微调优化
微调显存:55G,多batch时对单卡要求较高(4090不能满意需求)

微调框架部署

  1. git clone https://kkgithub.com/modelscope/swift.git
  2. cd swift/
  3. conda create -n swift -y python=3.11
  4. conda activate swift
  5. pip install -e '.[llm]'
  6. # glm4-v还需要额外安装torchvision
  7. pip install torchvision
  8. # minicpm-v-v2_5-chat还需要timm
  9. pip install timm
复制代码
数据集构建及注册

下载开源数据集,以多模态OCR数据集为例:
该数据集包含2个部门,即JPG、PNG格式的带编号图像数据集和与图像数据集对应的QA问答JSONL数据集。


探求swift在多模态使命中所需的数据格式:

编写脚本,批量处理数据格式:
  1. import json
  2. # 写入jsonl文件
  3. def write_jsonl(data_list, filename):
  4.     with open(filename, 'w', encoding='utf-8') as f:
  5.         for item in data_list:
  6.             json_str = json.dumps(item, ensure_ascii=False)  # 将Python对象转换为JSON格式的字符串
  7.             f.write(json_str + '\n')
  8. # 读取jsonl文件
  9. def read_jsonl(filename):
  10.     data_list = []
  11.     with open(filename, 'r', encoding='utf-8') as f:
  12.         for line in f:
  13.             data_list.append(json.loads(line))  # 将JSON格式的字符串转换为Python对象
  14.     return data_list
  15. # 读取jsonl文件
  16. read_data = read_jsonl('/home/super/sgq/swift/metadata.jsonl')
  17. # 打印读取的数据
  18. new_data = []
  19. for item in read_data:
  20.     new_data.append({
  21.         "query": item['question'],
  22.         "response": item['answers'],
  23.         "images": ["/self_data/test/"+item['file_name']]
  24.     })
  25. write_jsonl(new_data,'finall_data.jsonl')
复制代码
为使数据能够在框架中进行应用,需进行数据集注册:
于路径:
/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
微调配置

项目部署乐成,且数据集准备后,启动框架,指令如下:
  1. cd sgq/swift/
  2. conda activate swift
  3. WEBUI_SERVER=0.0.0.0 swift web-ui
复制代码
启动后界面如下:

1.选择必要微调训练的模子型号:

如图所示,在选项栏中选定internvl-chat-v1_5,后方的路径和模子类型体系会自动加载。须注意的是,模子路径是项目缓存路径,由框架自动缓存并路由。未试验自定义路径时框架是否能够作用。
2.配置体系提示词和微调数据集,数据集可多选,具体如下方红色框图区域所示:

需注意的是,选择数据集要出现在可选下拉框中且可用,必须安装“数据集构建及注册”所强调的步骤自定义数据并注册。
3.训练方式配置

默认训练方式采取LoRA,需设置精度为bf16。

设置batch为1,2及以上时4090卡会报显存溢出。
学习率等参数保持不变,本文未提到的参数项均可不做改动。
Flash attention可选项勾上,这是一种显存利用优化方案。
下拉项目界面,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”

可视化脚本:
  1. import json
  2. loss_values = []
  3. acc_values = []
  4. # 打开JSONL文件
  5. with open(r"C:\Users\12258\Desktop\logging.jsonl", 'r') as file:
  6.     for line in file:
  7.         try:
  8.             # 加载每一行的JSON对象
  9.             entry = json.loads(line)
  10.             print(entry)
  11.             # 打印出每个条目的内容
  12.             loss_values.append(entry['loss'])
  13.             acc_values.append(entry['acc'])
  14.         except:
  15.             Pass
  16. import matplotlib.pyplot as plt
  17. # Plot the loss values
  18. plt.plot(loss_values, label="Loss")
  19. plt.xlabel("Global Step")
  20. plt.ylabel("Loss")
  21. plt.title("Loss Over Global Steps")
  22. plt.legend()
  23. plt.grid(True)
  24. plt.show()
  25. import matplotlib.pyplot as plt
  26. # Plot the loss values
  27. plt.plot(acc_values, label="Acc",color='orange')
  28. plt.xlabel("Global Step")
  29. plt.ylabel("Acc")
  30. plt.title("Acc Over Global Steps")
  31. plt.legend()
  32. plt.grid(True)
  33. plt.show()
复制代码



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

曹旭辉

金牌会员
这个人很懒什么都没写!

标签云

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