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

news2024/9/28 12:19:32

大模型相关目录

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

  1. 基于Dify的智能分类方案:大模型结合KNN算法(附代码)
  2. OpenCompass:大模型测评工具
  3. 一文读懂多模态大模型基础架构
  4. 大模型管理平台:one-api使用指南
  5. 大模型RAG、ROG、RCG概念科普
  6. RAGOnMedicalKG:大模型结合知识图谱的RAG实现
  7. DSPy:变革式大模型应用开发
  8. 最简明的Few-shot Prompt指南
  9. Semantic Kernel:微软大模型开发框架——LangChain 替代
  10. 对话大模型Prompt是否需要礼貌点?
  11. swift与Internvl下的多模态大模型分布式微调指南(附代码和数据)

文章目录

  • 大模型相关目录
  • OCR多模态大模型微调全流程记录
    • 前言
    • 微调框架部署
    • 数据集构建及注册
    • 微调配置


OCR多模态大模型微调全流程记录

前言

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

在这里插入图片描述

微调框架部署

git clone https://kkgithub.com/modelscope/swift.git
cd swift/
conda create -n swift -y python=3.11
conda activate swift
pip install -e '.[llm]'

# glm4-v还需要额外安装torchvision
pip install torchvision
# minicpm-v-v2_5-chat还需要timm
pip install timm

数据集构建及注册

下载开源数据集,以多模态OCR数据集为例:
该数据集包含2个部分,即JPG、PNG格式的带编号图像数据集和与图像数据集对应的QA问答JSONL数据集。
在这里插入图片描述
在这里插入图片描述
寻找swift在多模态任务中所需的数据格式:
在这里插入图片描述
编写脚本,批量处理数据格式:

import json

# 写入jsonl文件
def write_jsonl(data_list, filename):
    with open(filename, 'w', encoding='utf-8') as f:
        for item in data_list:
            json_str = json.dumps(item, ensure_ascii=False)  # 将Python对象转换为JSON格式的字符串
            f.write(json_str + '\n')

# 读取jsonl文件
def read_jsonl(filename):
    data_list = []
    with open(filename, 'r', encoding='utf-8') as f:
        for line in f:
            data_list.append(json.loads(line))  # 将JSON格式的字符串转换为Python对象
    return data_list


# 读取jsonl文件
read_data = read_jsonl('/home/super/sgq/swift/metadata.jsonl')

# 打印读取的数据
new_data = []
for item in read_data:
    new_data.append({
        "query": item['question'],
        "response": item['answers'],
        "images": ["/self_data/test/"+item['file_name']]
    })

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

微调配置

项目部署成功,且数据集准备后,启动框架,指令如下:

cd sgq/swift/
conda activate swift
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”

在这里插入图片描述
可视化脚本:

import json
loss_values = []
acc_values = []
# 打开JSONL文件
with open(r"C:\Users\12258\Desktop\logging.jsonl", 'r') as file:
    for line in file:
        try:
            # 加载每一行的JSON对象
            entry = json.loads(line)
            print(entry)
            # 打印出每个条目的内容
            loss_values.append(entry['loss'])
            acc_values.append(entry['acc'])
        except:
            Pass
import matplotlib.pyplot as plt
# Plot the loss values
plt.plot(loss_values, label="Loss")
plt.xlabel("Global Step")
plt.ylabel("Loss")
plt.title("Loss Over Global Steps")
plt.legend()
plt.grid(True)
plt.show()
import matplotlib.pyplot as plt
# Plot the loss values
plt.plot(acc_values, label="Acc",color='orange')
plt.xlabel("Global Step")
plt.ylabel("Acc")
plt.title("Acc Over Global Steps")
plt.legend()
plt.grid(True)
plt.show()

在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1913999.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AD3518 SOP-8封装 单节锂电池保护芯片 可替代XB8608/XB8608A

AD3518 是一款内置 MOSFET 的单节锂电池保护芯片。该芯片具有非常低的功耗和非常低阻抗的内置 MOSFET。该芯片有充电过压,充电过流,放电过压,放电过流,过热,短路,电芯反接等各项保护等功能,确保…

MUNIK解读ISO26262:安全计划

前言 当我们进行功能安全开发时,由于整个项目周期和内容较多,因此需要在项目前期对一些问题提前进行规划:比如功能安全开发具体分为几个阶段,应该怎么去做?对于不同的环节,有哪些人员来执行?资…

@RequestBody注解的使用及源码解析

前言 RequestBody 注解是我们进行JavaEE开发,最常见的几个注解之一,这篇博文我们以案例和源码相结合,帮助大家更好的了解 RequestBody 注解 使用案例 1.自定义实体类 Data NoArgsConstructor AllArgsConstructor public class User {priv…

飞睿智能6公里WiFi图传接收模块,低延迟、抗干扰、高速稳定传输数据,无人机、农田远距离WiFi模块

在科技日新月异的今天,无线通信技术正以前所未有的速度发展,不仅改变了我们的生活方式,还为企业带来了前所未有的商业机遇。今天,我要向大家介绍一款飞睿智能的产品——6公里WiFi图传接收模块,它以其高性能、稳定的传输…

安防综合管理/视频汇聚平台EasyCVR视频监控存储技术:高效稳定的视频数据保障方案

随着科技的飞速发展,视频监控已成为现代社会不可或缺的一部分。无论是城市治安、交通管理,还是商业安保、家庭监控,视频监控都发挥着至关重要的作用。而在这背后,视频监控存储技术则是确保监控数据得以长期保存、高效检索和可靠利…

今天,纷享AI正式发布,开启智能CRM新纪元

纷享销客作为国产CRM中连续四年保持近40%增长的领先品牌,一直在探索AICRM领域的数字化变革。 7月10日,纷享AI产品正式上线。与通用大模型不同,纷享AI是在合规之下,开放性的接入各种大模型平台,并结合纷享销客在营销服…

Python爬虫教程第4篇-使用BeautifulSoup解析html

文章目录 Beautiful Soup简介安装Beautiful Soup快速开始如何使用Beautiful Soup中的对象TagNameAttributes多值属性 NavigableStringBeautifulSoupComment 遍历文档树子节点tag名字.contents 和 .children.descendants.strings 和 stripped_strings 父节点.parent.parents 兄弟…

深入解析RocketMQ的名字服务机制:功能、原理与应用

NameServer 是专为 RocketMQ 设计的轻量级名字服务,它的源码非常精简,八个类 ,少于 1000 行代码。 这篇文章, 笔者会从基础概念、Broker 发送心跳包、NameServer 维护路由、Zookeeper vs NameServer 四个模块揭秘名字服务的设计精…

Paimon下载使用和基础操作说明

简介 Apache Paimon 是一种湖格式,支持使用 Flink 和 Spark 构建实时湖仓一体架构 用于流式处理和批处理操作。Paimon创新性地将湖格式与LSM(Log-structured merge-tree)相结合 结构,将实时流式更新引入 Lake 架构。 Paimon提供以…

力扣 203反转链表

思路 用cur->next指向pre,把链表倒转 cur后移,cur指向原链表的下一个 注意用tmp存储原链表中cur的后一个 class Solution { public: ListNode* reverseList(ListNode* head) { ListNode *cur head; ListNode *pre nullptr; ListNode *tmp; while (cur ! nul…

echarts——横坐标轴文字过长如何换行

横坐标轴文字过长,想要换行 实现如下效果 具体实现代码如下: axisLabel: {show: true,interval: 0,formatter: function (value) {var ret "";//拼接加\n返回的类目项 var maxLength 4;//每项显示文字个数 var valLength value.length;//X轴类目项…

为何Expo成为React Native官方推荐框架?

在React Conf上,我们更新了关于构建React Native应用的最佳工具指南:一个React Native框架——一个工具箱,包含所有必要的API,让你可以构建生产就绪的应用。 现在,使用React Native框架(如Expo&#xff09…

快团团团长如何获得物流查询码以及如何查询呢?

快团团团长如何获得物流查询码以及如何查询呢? 一、功能说明 团长可自行生成物流查询码,直接将码发给顾客,顾客扫码可查询自己订单的物流状态! 用户扫码后,会出现用户在该团长处下单的所有快递订单。团员可查看该订…

js逆向第24例:FastMoss数据分析网站Fm-Sign加密字段破解

文章目录 一、前言二、定位关键参数三、代码实现一、前言 破解:FastMoss数据分析网站Fm-Sign加密字段 二、定位关键参数 先看一下网站加密字段是长什么样,如下图,老手估计一下子就能发现字段Fm-Sign:的密文类似md5加密后的结果。 直接全局搜索Fm-Sign:看来key也没有做混…

【模块化与包管理】:解锁【Python】编程的高效之道

目录 1.什么是模块? 2. 模块的导入过程 3. 理解命名空间 4. import语句的多种形式 5. 模块的执行与重新导入 6. 包(Package) 7. sys模块和os模块 sys模块 常用属性 示例:使用sys模块 os模块 常用功能 示例&#xff1…

asan检测内存泄漏

文章目录 前言初始代码链接asan动态库静态方式链接额外说明小结 前言 ASAN是一个内存问题检测工具 类似的还有valgrind, 但是valgrind运行时会占用非常多的内存 初始代码 #include<stdio.h> #include"arcojson.h"int leak_func() {arco_json* jtest new_js…

复兴社在李忠平的引领下,奋力实现伟大复兴

李忠平&#xff0c;河北保定人&#xff0c;1965年6月生&#xff0c;现任中国财政科学研究院公共资产研究中心副主任副研究员和复兴社会长。他的一生充满了奋斗与奉献&#xff0c;为实现共同富裕和中华民族的伟大复兴而不断努力。复兴社在他的领导下&#xff0c;正走在一条坚定而…

【Python】已解决:SyntaxError invalid syntax

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决&#xff1a;SyntaxError invalid syntax 一、分析问题背景 在Python编程中&#xff0c;SyntaxError: invalid syntax是一个常见的错误&#xff0c;它通常表示代码中存在语法…

【机器学习】必会数学知识:一文掌握数据科学核心数学知识点(下),收藏~

核心数学知识点 1、引言2、数据科学必会数学知识2.13 K均值聚类2.14 决策树2.15 随机森林2.16 梯度下降2.17 随机梯度下降&#xff08;SGD&#xff09;2.18 卷积2.19 拉普拉斯变换2.20 傅里叶变换2.21 信息论2.22 时间序列分析2.23 生成模型与判别模型2.24 支持向量机&#xff…

无刷电机带上驱动器,掉电外力拖动有阻力

无刷电机带上驱动器&#xff0c;掉电外力拖动有阻力 这个问题一直以为很好理解或者应该是总所周知的&#xff0c;但是竟然很多人好奇问专门做电机控制的工程师&#xff0c;但是竟然很多人说不明白&#xff0c;今天我就好好聊一聊。 原因 反电动势效应 当无刷电机在没有电源供…