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

大模型相关目录

大模型,包括部署微调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多模态大模型微调全流程记录

前言

微调框架: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()

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

### 如何使用 MS-Swift 郱署多模态大模型 MS-Swift 是一种用于部署机器学习模型的工具集,特别适用于大规模复杂的模型架构。为了实现多模态大模型的部署,可以遵循以下方法论: #### 工具准备环境配置 在开始之前,需确保安装并配置好必要的依赖项以及框架支持。通常情况下,这包括但不限于 Python 环境、PyTorch 或 TensorFlow 的版本兼容性验证,以及其他可能涉及的数据处理库。 对于 BigQuery K-Means 聚类的应用场景[^1],虽然其主要关注的是数据分析而非模型部署,但它提供了一种思路——通过分析数据特征来优化模型输入结构。这种技术同样可应用于多模态模型中的数据预处理阶段。 ```bash pip install ms-swift torch torchvision transformers datasets ``` 上述命令展示了如何设置基础开发环境以支持后续操作。 #### 数据预处理 多模态模型的特点在于它能够同时处理多种类型的信息源(如图像、文本)。因此,在实际应用前,必须对不同形式的数据进行标准化转换。例如: - 图像可以通过 `torchvision.transforms` 进行尺寸调整、归一化等; - 文本则利用 Hugging Face 提供的 `transformers` 库完成分词编码工作。 以下是简单的代码片段展示这一过程: ```python from PIL import Image import requests from transformers import CLIPProcessor, CLIPModel model = CLIPModel.from_pretrained("openai/clip-vit-base-patch32") processor = CLIPProcessor.from_pretrained("openai/clip-vit-base-patch32") url = "http://images.cocodataset.org/val2017/000000039769.jpg" image = Image.open(requests.get(url, stream=True).raw) inputs = processor(text=["a photo of a cat", "a photo of a dog"], images=image, return_tensors="pt", padding=True) outputs = model(**inputs) logits_per_image = outputs.logits_per_image # this is the image-text similarity score probs = logits_per_image.softmax(dim=1) # we can take the softmax to get probability distribution over texts print(probs) ``` 此部分重点介绍了基于 CLIP 模型的跨模态匹配逻辑[^2],其中包含了图片加载、文字描述向量化的过程。 #### 模型训练微调 当准备好高质量的数据之后,下一步便是构建或者迁移已有的大型预训练网络至特定领域任务上。考虑到资源消耗较大,建议采用分布式计算策略加速收敛速度。具体而言,可通过 PyTorch Lightning 来简化实验流程管理;而 DDP (Distributed Data Parallel) 技术则是提升 GPU 利用率的有效手段之一。 值得注意的是,尽管 Symfony PHP 生态圈内的某些组件并非直接关联于此话题,但从软件工程角度出发,借鉴这些成熟项目的模块设计理念有助于提高整体系统的稳定性扩展能力。 #### 推理服务搭建 最后一步就是将经过充分测试后的最终产物发布出去供外部访问。这里推荐几种常见的做法: 1. **RESTful API**: 使用 Flask/Django 构建轻量级接口服务器。 2. **gRPC**: 对于低延迟需求较高的实时应用场景更为合适。 3. **ONNX Runtime**: 如果目标平台不完全支持原生框架运行时,则考虑导出 ONNX 文件作为中间媒介再转接给其他执行引擎解析执行。 综上所述,整个项目周期涵盖了从原始素材收集整理到线上功能上线等多个环节,每一步都需要精心规划才能达成预期效果。
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

写代码的中青年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值