多模态大模型 LLaVA 微调教程-大语言模型8

news/2024/9/25 21:27:08

写完之后发现他好像不是很需要这个东西,所以就直接发在自己的博客好了。不投稿首页或者候选区应该本来也就不会有多少流量,所以应该不会干嘛的,大不了后面被说不让放网上以后就删掉这篇,嘻嘻。

LLaVA 是最早出现的 Vision Language Model。本教程将教你微调 llava-v1.5-13b 。与本博客现有的基于xtuner的微调教程不同,这个教程将使用deepspeed以拜托对书生生态的依赖。

配置环境

配置环境的官方教程即项目ReadMe

首先我们下载LLaVA的源代码

!git clone https://github.com/haotian-liu/LLaVA.git
!cd LLaVA
!pwd

然后配置Python环境。如果是在自己电脑上运行,请不要忘记创建conda虚拟环境

# conda create -n llava python=3.10 -y
# conda activate llava
pip install --upgrade pip  # enable PEP 660 support
pip install -e .
pip install -e ".[train]"
pip install flash-attn --no-build-isolation

最后是下载模型。你可以使用huggingface-cli直接下载模型。如果您所在的区域不能直接访问Hugging Face,则需要使用镜像网站下载

# 如果不能访问Hugging Face,可以执行下面这一行设置使用hf-mirror镜像站下载 HF_ENDPOINT=https://hf-mirror.com
# export HF_ENDPOINT=https://hf-mirror.com# 下载 llava-v1.5-7b 模型权重
huggingface-cli download "liuhaotian/llava-v1.5-7b" --local-dir "./checkpoints/llava-v1.5-7b"# 下载 clip-vit-large-patch14-336 模型权重
huggingface-cli download "openai/clip-vit-large-patch14-336" --local-dir "./checkpoints/clip-vit-large-patch14-336"

准备训练数据

官方预训练(训练投影层)使用的数据集是 LAION-CC-SBU,视觉微调使用的数据集是llava_v1_5_mix665k.json和其他一些数据集,在项目Readme中写得特别清楚。但是我并不打算在这里进行介绍或者是重新训练个新模型。我们将简单构造一个只有一张图像构成的简易数据集。

自定义训练数据集的格式要求在这里。

首先我们下载图片:

mkdir -p ./playground/data/yuanshen# 下载图片
wget -O ./playground/data/yuanshen/4.jpg https://avatars.githubusercontent.com/u/86307756

然后准备图文对。这里只准备一个:

import jsondataset_content = """
[{"id": "yuanshen-628d-4724-b370-b84de974a19f","image": "yuanshen/1.jpg","conversations": [{"from": "human","value": "<image>\nWho is in the picture?"},{"from": "gpt","value": "The person in the picture is Nathida, who is a character in the Original God and its derivative works produced by Mihoyo. Her real name is Buyel, the grass god in the \"Earthly Seven rulers\", and is given the nickname of \"Little Lucky Grass King\" by the XuMi people, the youngest of the seven gods today. "}]}
]
"""with open("./playground/data/yuanshen.json", "w") as f:f.write(dataset_content)

数据集图像为:

原神纳西妲

模型微调

这一步我们使用 deepspeed zero2 进行模型 LoRA 微调。得到的微调模型会被保存在./checkpoints/llava-v1.5-7b-lora里。

deepspeed llava/train/train_mem.py \--lora_enable True --lora_r 128 --lora_alpha 256 --mm_projector_lr 2e-5 \--deepspeed ./scripts/zero2.json \--model_name_or_path ./checkpoints/llava-v1.5-7b \--version v1 \--data_path ./playground/data/yuanshen.json \--image_folder ./playground/data \--vision_tower ./checkpoints/clip-vit-large-patch14-336 \--pretrain_mm_mlp_adapter ./checkpoints/llava-v1.5-7b/mm_projector.bin \--mm_projector_type mlp2x_gelu \--mm_vision_select_layer -2 \--mm_use_im_start_end False \--mm_use_im_patch_token False \--image_aspect_ratio pad \--group_by_modality_length True \--bf16 True \--output_dir ./checkpoints/llava-v1.5-7b-lora \--num_train_epochs 10 \--per_device_train_batch_size 1 \--per_device_eval_batch_size 1 \--gradient_accumulation_steps 1 \--evaluation_strategy "no" \--save_strategy "steps" \--save_steps 10 \--save_total_limit 1 \--learning_rate 2e-4 \--weight_decay 0. \--warmup_ratio 0.03 \--lr_scheduler_type "cosine" \--logging_steps 1 \--tf32 True \--model_max_length 2048 \--gradient_checkpointing True \--dataloader_num_workers 2 \--lazy_preprocess True \--report_to wandb

如果在这一步遇到错误,请移步Github issue查看有没有人和你碰到过一样的问题。如果核查确认没有可以试着提新issue。

等待训练完成,我们要将LoRA权重与原始模型权重合并:

python scripts/merge_lora_weights.py --model-path "./checkpoints/llava-v1.5-7b-lora"  --model-base "./checkpoints/llava-v1.5-7b" --save-model-path "./checkpoints/llava-v1.5-7b-merged"

这样,就能得到可以直接用于推理的模型了,这个模型现在存储在./checkpoints/llava-v1.5-7b-merged文件夹下

模型测试

测试模型的性能,会发现微调起了作用:

from llava.eval.run_llava import eval_modelmodel_path = "liuhaotian/llava-v1.5-7b"
prompt = "Who is in the picture?"
image_file = "https://avatars.githubusercontent.com/u/86307756"args = type('Args', (), {"model_path": "./checkpoints/llava-v1.5-7b","model_base": None,"model_name": "liuhaotian/llava-v1.5-7b","query": prompt,"conv_mode": None,"image_file": image_file,"sep": ",","temperature": 0,"top_p": None,"num_beams": 1,"max_new_tokens": 512
})()print("原始模型输出为:")
eval_model(args)args = type('Args', (), {"model_path": "./checkpoints/llava-v1.5-7b-merged","model_base": None,"model_name": "liuhaotian/llava-v1.5-7b","query": prompt,"conv_mode": None,"image_file": image_file,"sep": ",","temperature": 0,"top_p": None,"num_beams": 1,"max_new_tokens": 512
})()print("微调后的模型输出为:")
eval_model(args)

模型经过微调后,对于我们的训练数据,能得到与标签一致的运行结果:

经过微调的模型输出:

The person in the picture is Nathida, who is a character in the Original God and its derivative works produced by Mihoyo. Her real name is Buyel, the grass god in the "Earthly Seven rulers", and is given the nickname of "Little Lucky Grass King" by the XuMi people, the youngest of the seven gods today.

而如果不经过微调,模型只会告诉你照片上有个小女孩。

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

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

相关文章

关押罪犯

S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N。他们之间的关系自然也极不和谐。很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突。我们用“怨气值”(一个正整数值)来表示某两名罪犯之间的仇恨程度,怨气值越大,则这两名罪犯之间的积怨越多。如果两名怨…

csapp_实验_-__datalab

Datalab 前言该实验是《深入理解计算机系统》(英文缩写CSAPP)课程附带实验——Lab1:Data Lab,对应书中第二章内容(信息的表示和处理),是所有实验中的第一个实验,**实验目的 ** datalab实验提供了一个文件夹,我们的目的只是改写bits.c中的15个函数,使其完成相应的功能…

PXE高效网络装机与Kickstart无人值守安装

PXE高效网络装机与Kickstart无人值守安装 目录PXE高效网络装机与Kickstart无人值守安装一、PXE概述1、 PXE (Preboot eXcution Environment)的概念2、 PXE批量部署的优点3、部署PXE远程安装服务4、搭建PXE远程安装服务器二、 搭建PXE远程安装服务器的步骤1、安装软件2、配置DHC…

一名合格的程序猿修炼手册

一名合格的程序猿修炼手册📖 😄💯 Github 有个「清华大学计算机系课程攻略」的仓库。💻仓库地址 我看了下清华大学的计算机系课程表,我这里简单列一下跟计算机相关的课程,其实还有很多文化课、图形学、数字电路、高数等等。大一:C/C++语言;大二:Java语言、数据结构…

旧电脑更流畅的操作

(1)任务管理器(2)chkdsk(3)sfc/scannow#####愿你一寸一寸地攻城略地,一点一点地焕然一新#####

手绘与文字的完美结合:阿里的通义万相涂鸦作画体验分享

哈喽,大家好,我是木头左,AI改变生活!一、涂鸦作画简介 涂鸦作画是一款基于人工智能技术的绘画工具,用户可以通过简单的手绘操作,结合文字描述,快速生成具有个性的艺术作品。这款工具的出现,让看到了科技与艺术的完美结合,为的生活带来了无限的想象空间。二、如何使用涂…

虚树

虚树 简介 虚树一般用于 树形DP 中,可以有效减少冗余的计算量。 其原理是将对 DP 无影响,或者在影响可快速运算范围内的点缩在一起,从而使得整棵树大小极大的减小。 因此,可以使用虚树的题目一般有 特殊点 之类的设定,多测并限定 特殊点 的总量。 P2495 [SDOI2011] 消耗战…

告别繁琐阅读,阿里通义智文阅读助手带您轻松畅游知识海洋!

哈喽,大家好,我是木头左,致力于程序服务生活!一、阿里通义智文阅读助手简介 阿里通义智文阅读助手是一款基于人工智能技术的阅读辅助工具,可以帮助用户更高效地阅读和理解各种类型的文档,如PPT、图片和PDF等。通过深度学习技术,助手能够识别文档中的关键信息,为用户提供…