llava1.5模型安装、预测、训练详细教程

引言

本博客介绍LLava1.5多模态大模型的安装教程、训练教程、预测教程,也会涉及到hugging face使用与wandb使用。

源码链接:点击这里

demo链接:点击这里

论文链接:点击这里

一、系统环境

ubuntu 20.04
gpu: 2*3090
cuda:11.6

二、LLava环境安装

1、代码下载

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

2、虚拟环境构建

conda create -n llava python=3.10 -y
conda activate llava
pip install --upgrade pip  # enable PEP 660 support

3、模型预测安装

pip install -e .

4、模型训练环境安装

pip install -e ".[train]"
pip install flash-attn --no-build-isolation  # 可能安装失败

5、flash-attn离线环境安装

根据对应环境格式下载相应flash-attn,
flash-attn下载链接点击这里
实际为whl的离线文件,在使用pip install *.whl 即可

三、LLava推理运行

1、启动网页预测(类似服务端与客户端)

Launch a controller

python -m llava.serve.controller --host 0.0.0.0 --port 10000

Launch a gradio web server.

python -m llava.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload

注:host 0.0.0.0表示自动填充本机ip,网页将其替换本机ip即可,web server启动后会有网页ip,若在其它电脑将其0.0.0.0替换运行服务器的ip即可。

2、推理权重下载

我们使用llava-v1.5-7b模型做推理。

llavav157b_61">llava-v1.5-7b权重下载

权重下载地址:点击这里

权重下载,需要使用hugging face才能下载,自己注册账号即可,文件格式如下:
在这里插入图片描述

将图示文件全部下载,内有一个config.json文件,该文件很重要,部分内容如下:

在这里插入图片描述

该文件可看出视觉编码也缺少相应权重,需下载如下内容,并将其路径修改本地权重保存文件。

clip-vit-large-patch14-336权重下载

权重下载地址:点击这里
该文件可通过点击链接连接,也可在hugging face自行搜索。
在这里插入图片描述

同理,也是全部下载,放到一个文件夹中。

3、启动预测模型

若已完成权重下载,便可执行以下模型启动命令,而–model-path后面需跟模型权重路径文件,若联网能范文hugging face便可无需修改直接使用官方给定命令。

python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path liuhaotian/llava-v1.5-13b

–load-4bit: 该指令也可加上,使用4bit模型推理

四、LLava的lora训练

1、权重下载

根据下图的finetune_lora.sh文件指定权重在hugging face下载即可,如下图。

在这里插入图片描述

下载好对应权重,即可修改路径路径,如下:
在这里插入图片描述

2、数据准备

使用官网也行,若不想下载太多,使用下面代码准备部分也行,如下:

import json

if __name__ == '__main__':
    json_root=r'*\llava_v1_5_mix665k.json'
    with open(json_root, 'r') as f:
        json_info = json.load(f)
    save_info=json_info[:1000]+json_info[480000:481000]+json_info[620000:621000]
    with open('info.json', 'w') as fp:
        json.dump(save_info, fp, indent=4)

数据图如下:
在这里插入图片描述

3、训练命令

我是将其移动到LLAVA文件内,直接执行此命令:

finetune_lora.sh

4、报错处理

模型有可能报数据错误,此时不用担心,该问题是数据的问题,如下:
在这里插入图片描述

直接修改上面代码如下:

def get_modality_length_grouped_indices(lengths, batch_size, world_size, generator=None):
    # We need to use torch for the random part as a distributed sampler will set the random seed for torch.
    assert all(l != 0 for l in lengths), "Should not have zero length."
    mm_indices, mm_lengths = zip(*[(i, l) for i, l in enumerate(lengths) if l > 0])
    # lang_indices, lang_lengths = zip(*[(i, -l) for i, l in enumerate(lengths) if l < 0])

    lang_indices, lang_lengths=mm_indices, mm_lengths

    assert len(mm_indices) > 0, "Should have at least one multimodal sample."
    assert len(lang_indices) > 0, "Should have at least one language sample."

也有可能有其它数据问题,是可能无eval数据,添加以下红色框即可,如下:

在这里插入图片描述

5、训练效果

若完成以上方式,使用训练命令,可实现如下训练效果:
在这里插入图片描述

6、训练使用wandb

llava训练自带wandb方式显示化查看,训练代码会自动提醒你,你只需注册,然后将其key复制,即可实现,其效果如下:
在这里插入图片描述

在这里插入图片描述

总结

以上便llava所有运行过程,愿踩过的坑对你有帮助。最后,我额外说下,我使用4090显卡搭建,跑测试问题不大,大概16g左右吧,跑训练一张24G卡有些够呛。


http://www.niftyadmin.cn/n/5145136.html

相关文章

0基础学习PyFlink——使用datagen生成流式数据

大纲 可控参数字段级规则生成方式数值控制时间戳控制 表级规则生成速度生成总量 结构生成环境定义行结构定义表信息 案例随机Int型顺序Int型随机型Int数组带时间戳的多列数据 完整代码参考资料 在研究Flink的水印&#xff08;WaterMark&#xff09;技术之前&#xff0c;我们可能…

【云栖大会】我与“云栖”共成长

目录 一&#xff1a;何为云栖 二&#xff1a;初识云栖 三&#xff1a;被云栖圈粉 四&#xff1a;感受与体会 五&#xff1a;期待与建议 一&#xff1a;何为云栖 我们都说“万物皆可云”&#xff0c;这充分说明了云计算的重要性&#xff0c;而阿里云是云计算行业的领头羊之一…

linux下df -h 命令一直卡住的解决方法

在Linux中&#xff0c;偶尔遇到用 df -h 查看磁盘情况时&#xff0c;一直卡住无法显示结果。 解决方法&#xff1a; 1、首先使用strace追踪到底执行到哪里卡住 $ strace df -h 2、如果没有strace命令则进行安装 $ yum install strace -y 3、显示出卡住的地方&#xff0c;如…

MySQL数据库入门到大牛_01_内容简介

在企业中高级程序员以上级别常常要求是精通MySQL。任何一项技术一旦深入&#xff0c;体系都是繁杂的&#xff0c;想要真正掌握&#xff0c;需要掌握底层的逻辑&#xff0c;梳理清知识脉络&#xff0c;能够以架构师的思路学习MySQL&#xff0c;才能以不变应万变。此篇开始介绍My…

MongoDB系例全教程

一、系列文章目录 一、MongoDB安装教程—官方原版 二、MongoDB 使用教程(配置、管理、监控)_linux mongodb 监控 三、MongoDB 基于角色的访问控制 四、MongoDB用户管理 五、MongoDB基础知识详解 六、MongoDB—Indexs 七、MongoDB事务详解 八、MongoDB分片教程 九、Mo…

【Unity数据交互】Json序列化你记得几分

ˊˊ &#x1f468;‍&#x1f4bb;个人主页&#xff1a;元宇宙-秩沅 &#x1f468;‍&#x1f4bb; hallo 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍&#x1f4bb; 本文由 秩沅 原创 &#x1f468;‍&#x1f4bb; 收录于专栏&#xff1…

Navicat安装和使用

获取安装包打开这个地址 https://wp.hellocode.name/?page_id1349 Navicat是一款功能强大的数据库管理工具,它可以让您更方便地管理MySQL、MariaDB、SQL Server、Oracle、PostgreSQL等数据库。下面我来给您简单介绍一下Navicat的主要功能和使用方法: 一、建立数据库连接 首先…

有关常见的#define定义的函数的陷阱和修正(详解)

一、#define f(x) x*x #include<stdio.h> #define f(x) x*x int main() {int a6,b2,c;cf(a)/f(b);printf("f(a)%d\n",f(a));//6*6printf("f(b)%d\n",f(b));//2*2printf("f(b1)%d\n",f(b1));//21*21; printf("f(b2)%d\n",f(b2))…