MLM之CogVLM2:CogVLM2(基于Llama-3-8B-Instruct 模型进行微调)的简介、安装和使用方法、案例应用之详细攻略

news2024/11/19 17:22:03

MLM之CogVLM2:CogVLM2(基于Llama-3-8B-Instruct 模型进行微调)的简介、安装和使用方法、案例应用之详细攻略

目录

CogVLM2的简介

1、更新日志

2、CogVLM2 系列开源模型的详细信息

3、Benchmark

4、项目结构

5、模型协议

CogVLM2的安装和使用方法

1、模型微调

注意

最低配置

开始微调

下载数据集和安装依赖

运行微调程序

推理微调后的模型

2、模型推理

最低配置要求

CLI 调用模型

Web端在线调用模型

OpenAI API

3、模型使用

CogVLM2的案例应用


CogVLM2的简介

我们推出了新一代的 CogVLM2 系列模型并开源了两款基于 Meta-Llama-3-8B-Instruct 开源模型。与上一代的 CogVLM 开源模型相比,CogVLM2 系列开源模型具有以下改进:

  • 在许多关键指标上有了显著提升,例如 TextVQADocVQA
  • 支持 8K 文本长度。
  • 支持高达 1344 * 1344 的图像分辨率。
  • 提供支持中英文双语的开源模型版本。

GitHub地址:https://github.com/THUDM/CogVLM2

1、更新日志

News:2024/5/24:我们发布了 Int4 版本模型,仅需要 16GB 显存即可进行推理。欢迎前来体验!

News:2024/5/20:我们发布了下一代模型 CogVLM2,它基于 llama3-8b,在大多数情况下与 GPT-4V 相当(或更好)!欢迎下载!

2、CogVLM2 系列开源模型的详细信息

模型名称cogvlm2-llama3-chat-19Bcogvlm2-llama3-chinese-chat-19B
基座模型Meta-Llama-3-8B-InstructMeta-Llama-3-8B-Instruct
语言英文中文、英文
模型大小19B19B
任务图像理解,对话模型图像理解,对话模型
模型链接🤗 Huggingface 🤖 ModelScope 💫 Wise Model🤗 Huggingface 🤖 ModelScope 💫 Wise Model
体验链接📙 Official Page📙 Official Page 🤖 ModelScope
Int4 模型🤗 Huggingface 🤖 ModelScope🤗 Huggingface 🤖 ModelScope
文本长度8K8K
图片分辨率1344 * 13441344 * 1344

3、Benchmark

我们的开源模型相较于上一代 CogVLM 开源模型,在多项榜单中取得较好的成绩。其优异的表现能与部分的非开源模型进行同台竞技,如下表所示:

ModelOpen SourceLLM SizeTextVQADocVQAChartQAOCRbenchMMMUMMVetMMBench
CogVLM1.17B69.7-68.359037.352.065.8
LLaVA-1.513B61.3--33737.035.467.7
Mini-Gemini34B74.1---48.059.380.6
LLaVA-NeXT-LLaMA38B-78.269.5-41.7-72.1
LLaVA-NeXT-110B110B-85.779.7-49.1-80.5
InternVL-1.520B80.690.983.872046.855.482.3
QwenVL-Plus-78.991.478.172651.455.767.0
Claude3-Opus--89.380.869459.451.763.3
Gemini Pro 1.5-73.586.581.3-58.5--
GPT-4V-78.088.478.565656.867.775.0
CogVLM2-LLaMA3 (Ours)8B84.292.381.075644.360.480.5
CogVLM2-LLaMA3-Chinese (Ours)8B85.088.474.778042.860.578.9

所有评测都是在不使用任何外部OCR工具(“only pixel”)的情况下获得的。

4、项目结构

本开源仓库将带领开发者快速上手 CogVLM2 开源模型的基础调用方式、微调示例、OpenAI API格式调用示例等。具体项目结构如下,您可以点击进入对应的教程链接:

  • basic_demo - 基础调用方式,包含了 CLI, WebUI 和 OpenAI API 等模型推理调用方式,以及模型调用的最低配置要求。如果您是第一次使用 CogVLM2 开源模型,建议您从这里开始。
  • finetune_demo - 微调示例,包含了微调语言模型的示例。

5、模型协议

该模型根据 CogVLM2 LICENSE 许可证发布。对于使用了Meta Llama 3基座模型构建的模型,需要同时遵守 LLAMA3_LICENSE 许可证。

CogVLM2的安装和使用方法

1、模型微调

运行本demo来使用Lora微调 CogVLM2 中的语言模型部分。

注意

  • 本代码仅提供了 huggingface 版本模型 cogvlm2-llama3-chat-19B 的微调示例。
  • 仅提供了微调语言模型的示例。
  • 仅提供Lora微调示例。
  • 仅提供对话模型微调示例。
  • 暂不支持使用 zero3 微调,这可能出现 模型无法读取的情况。

最低配置

  • 我们仅在具有80GB内存的A100 GPU上进行了微调测试。使用零冗余优化策略2(zero2)时,至少需要73GB的GPU内存,并且需要8个GPU。
  • 暂不支持 Tensor 并行,即模型拆分到多张显卡微调。

开始微调

下载数据集和安装依赖

本demo中,开发者可以使用由我们提供CogVLM-SFT-311K 开源数据集或自行构建相同格式的数据集进行微调。

数据格式如下:

  • 数据集由 images 和 labels 两个文件夹组成 (在 CogVLM-SFT-311K 中 为 labels_en 和 labels_zh,分别对应中英文标签。 在微调代码中,你可以修改这两行代码来修改文件夹名称。
self.image_dir = os.path.join(root_dir, 'images')
self.label_dir = os.path.join(root_dir, 'labels_en')  # or 'labels_zh' or 'labels' 可以自行修改
  • images 文件夹中存放了图片文件,labels 文件夹中存放了对应的标签文件。图片和标签文件的名称一一对应。图片文件的格式为 jpg,标签文件的格式为 json
  • 每个标签文件中包含了一段对话,对话由 user 和 assistant 两个角色组成,每个角色的对话内容由 role 和 content 两个字段组成。如下字段所示。
{
  "conversations": [
    {
      "role": "user",
      "content": "What can be inferred about the zebras' behavior and surroundings?"
    },
    {
      "role": "assistant",
      "content": "Based on the image, we can infer that the two zebras are likely seeking relief from the sun's heat, as they are standing side by side under the branches of a thorny tree. This shade-providing tree offers some respite from the sun, possibly during the hottest part of the day. The zebras are in a green field with grass, providing them with an ideal environment to graze and eat while staying near their source of shelter. This shows that the zebras' behavior is influenced by the conditions and available resources in their surroundings. It also highlights that these animals adopt strategies to adapt to the fluctuating conditions of their environment, such as cooperation and seeking shelter, to survive and thrive in their natural habitat."
    }
  ]
}

在开始微调之前,需要安装相关的依赖。请注意,你还需要安装好 basic_demo 中的依赖。

pip install -r requirements.txt

注意mpi4py 可能需要安装别的 Linux 依赖包。请根据您的系统环境自行安装。

运行微调程序

我们提供了使用单机多卡(包含单卡)的微调脚本 peft_lora.py。您可以通过运行以下命令来启动微调。

deepspeed peft_lora.py --ds_config ds_config.yaml

下图展现了微调过程中的显存占用情况

参数信息:

  • max_input_len: 512
  • max_output_len: 512
  • batch_size_per_gpus: 1
  • lora_target: vision_expert_query_key_value

显存占用情况:

+-------------------------------------------------------------+
| Processes:                                                  |
|  GPU   GI   CI        PID   Type   Process name  GPU Memory |
|        ID   ID                                      Usage   |
|=============================================================|
|    0   N/A  N/A    704914      C   python          72442MiB |
|    1   N/A  N/A    704915      C   python          72538MiB |
|    2   N/A  N/A    704916      C   python          72538MiB |
|    3   N/A  N/A    704917      C   python          72538MiB |
|    4   N/A  N/A    704918      C   python          72538MiB |
|    5   N/A  N/A    704919      C   python          72538MiB |
|    6   N/A  N/A    704920      C   python          72538MiB |
|    7   N/A  N/A    704921      C   python          72442MiB |
+-------------------------------------------------------------+

在代码运行中,Loss数据会被 tensorboard记录,方便可视化查看Loss收敛情况。

tensorboard --logdir=output

注意: 我们强烈推荐您使用 BF16 格式进行微调,以避免出现 Loss 为 NaN的问题。

推理微调后的模型

运行 peft_infer.py,你可以使用微调后的模型生成文本。您需要按照代码中的配置要求,配置微调后的模型地址。然后运行:

python peft_infer.py

即可使用微调的模型进行推理。

2、模型推理

最低配置要求

Python: 3.10.12 以上版本。

操作系统: 建议使用 Linux 操作系统运行以避免xformers库安装问题。建议使用 NVIDIA GPU 以防止兼容性问题。

GPU要求如下表格所示

模型名称19B 系列模型备注
BF16 / FP16 推理42GB测试对话文本长度为2K
Int4 推理16GB测试对话文本长度为2K
BF16 Lora Tuning (带有视觉专家微调)73GB (使用8卡A100 80G显卡并使用 Zero 2)训练对话文本长度为 2K

在运行任何代码之前,请确保你已经安装好了所有的依赖包。你可以通过以下命令来安装所有的依赖包:

pip install -r requirements.txt

CLI 调用模型

运行本代码以开始在命令行中对话。请注意,模型必须在一张GPU上载入

CUDA_VISIBLE_DEVICES=0 python cli_demo.py

如果您有多张GPU,您可以通过以下代码执行多卡拉起模型,并将模型的不同层分布在不同的GPU上。

python cli_demo_multi_gpu.py

在 cli_demo_multi_gpu.py 中,我们使用了 infer_auto_device_map 函数来自动分配模型的不同层到不同的GPU上。你需要设置 max_memory 参数来指定每张GPU的最大内存。例如,如果你有两张GPU,每张GPU的内存为23GiB,你可以这样设置:

device_map = infer_auto_device_map(
    model=model,
    max_memory={i: "23GiB" for i in range(torch.cuda.device_count())},
    # set 23GiB for each GPU, depends on your GPU memory, you can adjust this value
    no_split_module_classes=["CogVLMDecoderLayer"]
)

Web端在线调用模型

运行本代码以开始在 WebUI 中对话。

chainlit run web_demo.py

拉起对话后,你将能和模型进行对话,效果如下:

OpenAI API

我们提供了一个简单的示例,通过以下代码拉起模型,之后,您可以使用 OpenAI API格式的方式请求和模型的对话。

python openai_api_demo.py

开发者可以通过以下代码来调用模型:

python openai_api_request.py

3、模型使用

地址:Streamlit

CogVLM2的案例应用

持续更新中……

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

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

相关文章

智慧社区管理系统:打造便捷、安全、和谐的新型社区生态

项目背景 在信息化、智能化浪潮席卷全球的今天,人们对于生活品质的需求日益提升,期待居住环境能与科技深度融合,实现高效、舒适、安全的生活体验。在此背景下,智慧社区管理系统应运而生,旨在借助现代信息技术手段&…

685. 冗余连接 II

685. 冗余连接 II 问题描述 在本问题中,有根树指满足以下条件的 有向 图。该树只有一个根节点,所有其他节点都是该根节点的后继。该树除了根节点之外的每一个节点都有且只有一个父节点,而根节点没有父节点。 输入一个有向图,该…

String类为什么设计成不可变的?

目录 缓存 安全性 线程安全 hashCode缓存 性能 其实这个问题我们可以通过缓存、安全性、线程安全和性能几个维度去解析。 缓存 字符串是Java最常用的数据结构,我们都知道字符串大量创建是非常耗费资源的,所以Java中就将String设计为带有缓存的功能…

揭秘Python安装目录:你的编程宝库隐藏了哪些宝藏?

python3.10安装目录结构 Python310/ │ ├── DLLs/ # Python 解释器所需的 DLL 文件 ├── Doc/ # Python 的 官方文档和参考手册 ├── include/ # 头文件和静态库文件 ├── Lib/ # Python 标准库 ├── libs/ …

微信小程序实现计算当前位置到目的地的距离

实现方式:使用腾讯位置服务 微信小程序JavaScript SDK | 腾讯位置服务 1.进腾讯位置服务申请key 2.下载sdk 微信小程序JavaScript SDK | 腾讯位置服务 3.微信公众平台添加授权域名 4.代码实现计算 const qqmap require("../../utils/qqmap-wx-jssdk.min.js…

探索集合python(Set)的神秘面纱:它与字典有何不同?

新书上架~👇全国包邮奥~ python实用小工具开发教程http://pythontoolsteach.com/3 欢迎关注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目录 一、集合(Set)与字典(Dictionary)的初识 1. …

历年高校招生计划数据 API 数据接口

历年高校招生计划数据 API 数据接口 基础数据 / 高校招生,各高校历年招生计划数据,高校招生数据 / 历年计划。 1. 产品功能 支持历年高校招生计划数据查询;包含各高校招生计划详细数据;多维度查询条件支持;毫秒级查询…

3款录屏录制软件,打造专业级视频内容

随着技术的不断发展,人们在日常工作和学习中经常会遇到记录电脑屏幕的需求,例如录制游戏过程、制作教程、保存会议记录等。为了解决这一需求,许多录屏录制软件应运而生。本文将介绍三款常见的录屏录制软件,通过分析它们的特点和使…

JAVASE之类和对象(2)

哪怕犯错,也不能什么都不做。 主页:趋早–Step 专栏:JAVASE gitte:https://gitee.com/good-thg 接上部分,我们继续来学习JAVAEE类和对象。 引言: 这篇文章接上一篇,后半部分,结束类和对象 目录 …

C++:STL简介和容器string用法篇

一、STL简介 STL是C中的标准模板库(Standard Template Library)的缩写。它是C标准库的一部分,提供了一系列的数据结构和算法模板,包括各种容器、算法、迭代器、仿函数等,用于简化和加速C程序的开发过程。STL的设计理念…

[6] CUDA之线程同步

CUDA之线程同步 共享内存:线程时间需要互相交换数据才能完成任务的情况并不少见,因此,必须存在某种能让线程彼此交流的机制当很多线程并行工作并且访问相同的数据或者存储器位置的时候,线程间必须正确的同步线程之间交换数据并不…

Django-auth组件

Django-auth组件 1 表结构 我们从python manage.py migrate为我们创建的auth组件内置的表开始看 auth_user:用户表存储用户信息(登录admin后台) 里面的字段分两类:用户基本信息(用户名,邮箱,密…

音视频开发4-补充 FFmpeg 开发环境搭建 -- 在windows 上重新build ffmpeg

本节的目的是在windows 上 编译 ffmpeg 源码,这样做的目的是:在工作中可以根据工作的实际内容裁剪 ffmpeg,或者改动 ffmpeg 的源码。 第一步 :下载, 安装,配置 ,运行 msys64 下载 下载地址&…

字符串的周期:每一期都有那么几位

【题目描述】 如果一个字符串可以由某个长度为k的字符串重复多次得到,则称该串以k为周期。例 如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。 输入一个长度不超过80的字符串(不含空格),输出其最小周期。 输入第一行表示有T组数据,后续是T行字符串。输出的每组…

透视App投放效果,Xinstall助力精准分析,让每一分投入都物超所值!

在移动互联网时代,App的推广与投放成为了每一个开发者和广告主必须面对的问题。然而,如何精准地掌握投放效果,让每一分投入都物超所值,却是一个令人头疼的难题。今天,我们就来谈谈如何通过Xinstall这个专业的App全渠道…

python纯脚本搬砖DNF之深度学习,工作室适用

声明: 本文章仅作学习交流使用,对产生的任何影响,本人概不负责. 转载请注明出处:https://editor.csdn.net/md?articleId103674748 主要功能 脚本已初步完成,可以上机实战了 1.搬砖研究所、海伯伦(持续更新中) 2.自…

【揭秘!在线ChatGPT神器,体验入口在此!】

🚀【揭秘!在线ChatGPT神器,体验入口在此!】🚀 前言 嘿,大家好!今天我要和大家分享一些关于如何使用免费的ChatGPT的技巧。ChatGPT是一项令人兴奋的人工智能技术,它可以成为我们的好…

【vue-2】v-on、v-show、v-if及按键修饰符

目录 1、v-on事件 2、按键修饰符 3、显示和隐藏v-show 4、条件渲染v-if 1、v-on事件 创建button按钮有以下两种方式&#xff1a; <button v-on:click"edit">修改</button> <button click"edit">修改</button> 完整示例代码…

AlexNet论文解析—ImageNet Classification with Deep Convolutional Neural Networks

AlexNet论文解析—ImageNet Classification with Deep Convolutional Neural Networks 2012 研究背景 认识数据集&#xff1a;ImageNet的大规模图像识别挑战赛 LSVRC-2012&#xff1a;ImageNet Large Scale Visual Recoanition Challenge 类别训练数据测试数据图片格式Mnist1…

Block-level Image Service for the Cloud——论文泛读

TOS 2024 Paper 论文阅读笔记整理 问题 企业越来越需要敏捷和弹性的计算基础设施来快速响应现实世界的情况。容器通过提供高效的基于流程的虚拟化和分层映像系统&#xff0c;可以实现灵活和弹性的应用程序部署。然而&#xff0c;由于图像下载和解包过程&#xff0c;创建或更新…