LLaMA-Factory微调多模态大语言模型教程

本文旨在结合笔者自身的实践经历,详细介绍如何使用 LLaMA-Factory 来微调多模态大语言模型。目前仓库已支持若干流行的MLLM比如LLaVA-1.5,Yi-VL,Paligemma等。

2024.5.29 注本文后续不再更新,如果想了解更新的特性和功能欢迎访问知乎博客:https://zhuanlan.zhihu.com/p/699777943

值得注意的是现在LLaMA-Factory引入了CLI,因此调用方式更加简单,只需要简单的几行命令即可开始微调。

环境准备

首先安装LLaMA-Factory

git clone https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e .[torch,metrics]

检查机器含有可用GPU

import torch
try:
  assert torch.cuda.is_available() is True
except AssertionError:
  print("Please set up a GPU before using LLaMA Factory")

多模态多轮对话数据集构建

这里出于方便的考虑,以仓库自带的 mllm_demo 数据集作为例子。在此也推荐一些笔者创建的hf数据集可供使用,都能适配LLaMA-Factory,场景分别是通用,医学,动漫。

https://huggingface.co/datasets/BUAADreamer/llava-en-zh-300k

https://huggingface.co/datasets/BUAADreamer/llava-med-zh-instruct-60k

https://huggingface.co/datasets/BUAADreamer/pokemon-gpt4-1k

本地图像准备

项目的 data/mllm_demo_data 目录下有三张比较新的图像,两张为拜仁慕尼黑的球员本赛季在主场庆祝,1张为桂海潮教授在演讲。本文以这三张图像作为例子进行讲解,读者可以换成任意的自己的图像

img

​ data/mllm_demo_data/1.jpg

img

​ data/mllm_demo_data/2.jpg

img

​ data/mllm_demo_data/3.jpg

本地多轮对话数据构建

直接修改 data/mllm_demo.json 即可,这里用python写入文件作为演示,格式遵循类似openai的聊天格式。images 参数设置为含有一张图像所在路径的列表。注意:这里的图像路径为绝对路径相对于当前位置的相对路径

[
  {
   
    "messages": [
      {
   
        "content": "他们是谁",
        "role": "user"
      },
      {
   
        "content": "他们是来自拜仁慕尼黑的主力中锋凯恩和主力中场格雷茨卡。",
        "role": "assistant"
      },
      {
   
        "content": "他们在做什么?",
        "role": "user"
      },
      {
   
        "content": "他们在拜仁慕尼黑主场激情庆祝。",
        "role": "assistant"
      }
    ],
    "images": [
      "data/mllm_demo_data/1.jpg"
    ]
  },
  {
   
    
### Llama-Factory 多模态项目概述 Llama-Factory 是一个多模态预训练模型框架,旨在通过融合多种数据源来提升机器学习模型的表现。该框架支持图像、文本和其他形式的数据输入[^1]。 ```python from llama_factory import MultiModalModel, ImageDataset, TextDataset model = MultiModalModel() image_data = ImageDataset('path/to/images') text_data = TextDataset('path/to/texts') for images, texts in zip(image_data, text_data): model.train(images, texts) ``` ### 安装与配置指南 为了使用 Llama-Factory 进行开发,需先安装必要的依赖库并设置环境变量: #### Python 虚拟环境创建 ```bash python3 -m venv env source env/bin/activate pip install --upgrade pip pip install -r requirements.txt ``` #### 数据集准备 确保准备好用于训练和验证的多模态数据集,并按照官方文档中的说明进行格式化处理[^2]。 ### 模型架构详解 核心组件包括编码器(Encoder)、解码器(Decoder)以及跨模态注意力机制(Cross-modal Attention Mechanism)。这些模块共同作用于不同类型的特征表示之间建立联系,从而实现更有效的信息交互[^3]。 ```mermaid graph LR; A[Input Data] --> B{Modality Selector}; B --> C(Image Encoder); B --> D(Text Encoder); C & D --> E(Cross Modal Fusion Layer); E --> F(Decoders); F --> G(Output Predictions); ``` ### 训练过程解析 整个流程涉及以下几个方面的工作: - **数据加载**:读取图片文件夹路径及对应的标注文件; - **前向传播**:将输入传递给网络计算损失函数值; - **反向传播**:基于误差调整权重参数完成一轮迭代更新操作; 具体代码片段如下所示: ```python def train_step(model, optimizer, criterion, batch): model.train() # 设置为训练模式 inputs_img, labels_img = batch['img'] inputs_txt, labels_txt = batch['txt'] outputs = model(inputs_img, inputs_txt) loss = criterion(outputs, (labels_img, labels_txt)) optimizer.zero_grad() loss.backward() optimizer.step() return loss.item() ```
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值