【项目】多模态图文理解-GLM-Edge实战

news/2025/1/8 16:32:31/

【项目】多模态图文理解-GLM-Edge实战

    • (一)模型初体验
    • (二)模型介绍
    • (三)性能指标
      • (1)高通
      • (2)Intel
    • (四)安装依赖
    • (五)模型推理
      • (1)Transformers / OpenVINO / vLLM Demo
      • (2)XInference
    • (六)微调模型
      • (1)多轮对话格式
      • (2)配置文件
      • (3)模型微调
      • (4)从保存点进行微调

(一)模型初体验

在这里插入图片描述

GLM-Edge-1.5B-Chat 端侧模型体验地址:HuggingFace

GLM-Edge-V-5B 端侧模型体验地址:HuggingFace | 魔搭社区

(二)模型介绍

GLM-Edge 系列是我们在面向端侧真实落地使用的场景下的一次尝试,由两种尺寸的大语言对话模型和多模态理解模型组成

  • GLM-Edge-1.5B-Chat
  • GLM-Edge-4B-Chat
  • GLM-Edge-V-2B
  • GLM-Edge-V-5B

其中,1.5B / 2B模型主要面向手机、车机等平台,4B / 5B 模型主要面向PC等平台。

基于GLM-4系列的技术积累,我们针对端侧实际部署情况,对模型结构和尺寸做了针对性的调整,以求在模型表现、实机推理效果和落地便利度之间达到平衡。同时,通过与伙伴企业的深入合作和在推理优化上的不懈努力,在一些端侧平台上,GLM-Edge系列模型能以极快的速度运行。

例如,在高通骁龙8 Elite平台上,借助其强大的NPU算力,GLM-Edge通过混合量化方案,1.5B对话模型、2B多模态模型能实现60tokens/s以上的解码速度。在应用投机采样技术之后,两个模型能以峰值100 tokens/s以上的解码速度运行。

模型下载地址

ModelHuggingFace ModelGGUF Model
GLM-Edge-1.5B-Chat🤗 Huggingface
🤖 ModelScope
🟣 WiseModel
🤗 Huggingface
🤖 ModelScope
🟣 WiseModel
GLM-Edge-4B-Chat🤗 Huggingface
🤖 ModelScope
🟣 WiseModel
🤗 Huggingface
🤖 ModelScope
🟣 WiseModel
GLM-Edge-V-2B🤗 Huggingface
🤖 ModelScope
🟣 WiseModel
🤗 Huggingface
🤖 ModelScope
🟣 WiseModel
GLM-Edge-V-5B🤗 Huggingface
🤖 ModelScope
🟣 WiseModel
🤗 Huggingface
🤖 ModelScope
🟣 WiseModel

(三)性能指标

数据采集日截止到2024年11月28日。

(1)高通

模型任务量化方案框架1st token latency (ms)Token Rate (tokens/s)Peak Memory Footprint (GB)
GLM-Edge-4B-Chat(input/output=512/128)INT4QNN660242.9
GLM-Edge-1.5B-Chat(input/output=512/128)INT4QNN260651.2
  • 在高通8 Elite(Gen4)平台上测试,模型全部运行在NPU上
  • 如运行V模型,另外需要单图890ms的处理时间和约660M的额外内存
  • 使用投机解码方案时,Token Rate还有最高50%的提升

(2)Intel

模型任务量化方案框架1st token latency (ms)Token Rate (tokens/s)Peak Memory Footprint (GB)
GLM-Edge-4B-Chat(input/output=1024/128)INT4OPENVINO541.2273.9
GLM-Edge-1.5B-Chat(input/output=1024/128)INT4OPENVINO228.2632.3
GLM-Edge-V-2BSingle image understanding (672x672)INT4OPENVINO362.1703.4
  • 在Intel LNL 288V (ARC 140V 8X@2.05GHz) 平台上测试。
  • 如运行V模型,另外需要单图1.7s的处理时间和约2G的额外内存。

(四)安装依赖

# Python>=3.10
git clone https://github.com/THUDM/GLM-Edge.git
cd GLM-Edge
pip install -r requirements.txt

(五)模型推理

(1)Transformers / OpenVINO / vLLM Demo

提供了 vLLM, OpenVINO 和 Transformers 三种后端推理方式。

python inference/cli_demo.py --backend transformers --model_path THUDM/glm-edge-1.5b-chat --precision bfloat16
python inference/cli_demo.py --backend vllm --model_path THUDM/glm-edge-1.5b-chat --precision bfloat16
python inference/cli_demo.py --backend ov --model_path THUDM/glm-edge-1.5b-chat-ov  --precision int4

注意:

OpenVINO 版本模型需要进行转换,请前往 这里 运行转换代码。

python convert_chat.py --model_path THUDM/glm-edge-1.5b-chat --precision int4 转换对话模型。

python convert.py --model_path THUDM/glm-edge-v-2b --precision int4转换视觉理解模型。

你也可以在 这里 查看原始的转换代码。

vLLM 版本模型需要从 这里 源代码 安装 vLLM 以正常运行。

如果你想使用 glm-edge-v 系列模型,你可以运行以下命令行交互代码

python inference/cli_demo_vision.py  --backend transformers --model_path THUDM/glm-edge-v-2b --precision bfloat16
python inference/cli_demo.py --backend ov --model_path THUDM/glm-edge-1.5b-chat-ov  --precision int4

你也可以使用 Gradio 启动 WebUI。

python inference/cli_demo.py --backend transformers --model_path THUDM/glm-edge-1.5b-chat --precision bfloat16
python inference/cli_demo.py --backend vllm --model_path THUDM/glm-edge-1.5b-chat --precision int4 # For Int4 Inference

(2)XInference

如果你使用 XInference 进行推理,你可以通过运行以下命令来运行模型。这是一个命令行交互代码。

xinference launch --model-engine Transformers --model-name glm-edge-v --size-in-billions 2 --model-format pytorch --quantization none

使用 OpenAI API进行推理:

import openaiclient = openai.Client(api_key="cannot be empty",base_url="http://<XINFERENCE_HOST>:<XINFERENCE_PORT>/v1"
)
output = client.chat.completions.create(model="glm-edge-v",messages=[{"role": "user","content": [{'type': 'text','text': 'describe this image',},{'type': 'image_url','image_url': {"url": "img.png",}},],}],max_tokens=512,temperature=0.7
)print(output)

(六)微调模型

(1)多轮对话格式

多轮对话微调示例采用 GLM-Edge 对话格式约定,对不同角色添加不同 loss_mask 从而在一遍计算中为多轮回复计算 loss

对于数据文件,样例采用如下格式:

对于glm-edge-chat系列模型,您应该按照以下格式整理数据。

[{"messages": [{"role": "system","content": "<system prompt text>",},{"role": "user","content": "<user prompt text>"},{"role": "assistant","content": "<assistant response text>"},// Multi_turns{"role": "user","content": "<user prompt text>"},{"role": "assistant","content": "<assistant response text>"},]}
]

这里是一个单轮对话的例子:

{"messages": [{"role": "user","content": "类型#裤*材质#牛仔布*风格#性感"},{"role": "assistant","content": "3x1的这款牛仔裤采用浅白的牛仔面料为裤身材质,其柔然的手感和细腻的质地,在穿着舒适的同时,透露着清纯甜美的个性气质。除此之外,流畅的裤身剪裁将性感的>腿部曲线彰显的淋漓尽致,不失为一款随性出街的必备单品。"}]
}

对于glm-edge-v系列模型,您应该按照以下格式整理数据。

[{"messages": [{"role": "user","content": [{"type": "image","image": "path/to/image"},{"type": "text","text": "图片中的狗在做什么?"}]},{"role": "assistant","content": [{"type": "text","text": "zRzRzRzRzRzRzR!这只狗躺在公寓客厅的绿色沙发上。"}]},{"role": "user","content": [{"type": "text","text": "这只狗是什么颜色的?"}]},{"role": "assistant","content": [{"type": "text","text": "zRzRzRzRzRzRzR!这只狗是棕色和白色的。"}]}]}
]

(2)配置文件

微调配置文件位于 config 目录下,包括以下文件:

  1. ds_zereo_2 / ds_zereo_3.json: deepspeed 配置文件。

  2. lora.yaml / sft.yaml: 模型不同方式的配置文件,包括模型参数、优化器参数、训练参数等。 部分重要参数解释如下:

    • data_config 部分
      • train_file: 训练数据集的文件路径。
      • val_file: 验证数据集的文件路径。
      • test_file: 测试数据集的文件路径。
      • num_proc: 在加载数据时使用的进程数量。
    • max_input_length: 输入序列的最大长度,对于glm-edge-v系列模型,由于图片占位token个数是584,因此值需要设置大些。
    • max_output_length: 输出序列的最大长度。
    • training_args 部分
      • output_dir: 用于保存模型和其他输出的目录。
      • max_steps: 训练的最大步数。
      • per_device_train_batch_size: 每个设备(如 GPU)的训练批次大小。
      • dataloader_num_workers: 加载数据时使用的工作线程数量。
      • remove_unused_columns: 是否移除数据中未使用的列。
      • save_strategy: 模型保存策略(例如,每隔多少步保存一次)。
      • save_steps: 每隔多少步保存一次模型。
      • log_level: 日志级别(如 info)。
      • logging_strategy: 日志记录策略。
      • logging_steps: 每隔多少步记录一次日志。
      • per_device_eval_batch_size: 每个设备的评估批次大小。
      • evaluation_strategy: 评估策略(例如,每隔多少步进行一次评估)。
      • eval_steps: 每隔多少步进行一次评估。
      • predict_with_generate: 是否使用生成模式进行预测。
    • generation_config 部分
      • max_new_tokens: 生成的最大新 token 数量。
    • peft_config 部分
      • peft_type: 使用的参数有效调整类型 (支持 LORA 和 PREFIX_TUNING)。
      • task_type: 任务类型,这里是因果语言模型 (不要改动)。
    • Lora 参数:
      • r: LoRA 的秩。
      • lora_alpha: LoRA 的缩放因子。
      • lora_dropout: 在 LoRA 层使用的 dropout 概率。

(3)模型微调

通过以下代码执行 单机多卡/多机多卡 运行,这是使用 deepspeed 作为加速方案的,您需要安装 deepspeed。接着,按照此命令运行:

OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=8  finetune.py  data/AdvertiseGen/  THUDM/glm-edge-4b-chat  configs/lora.yaml # For Chat Fine-tune
OMP_NUM_THREADS=1 torchrun --standalone --nnodes=1 --nproc_per_node=8  finetune_vision.py  data/CogVLM-311K/  THUDM/glm-edge-v-5b  configs/lora.yaml  # For VQA Fine-tune

通过以下代码执行 单机单卡 运行。

python finetune.py  data/AdvertiseGen/  THUDM/glm-edge-4b-chat  configs/lora.yaml # For Chat Fine-tune
python finetune_vision.py  data/CogVLM-311K/  THUDM/glm-edge-v-5b configs/lora.yaml # For VQA Fine-tune

(4)从保存点进行微调

如果按照上述方式进行训练,每次微调都会从头开始,如果你想从训练一半的模型开始微调,你可以加入第四个参数,这个参数有两种传入方式:

  1. yes, 自动从最后一个保存的 Checkpoint开始训练
  2. XX, 断点号数字 例 600 则从序号600 Checkpoint开始训练

例如,这就是一个从最后一个保存点继续微调的示例代码

python finetune.py  data/AdvertiseGen/  THUDM/glm-edge-4b-chat  configs/lora.yaml yes
python finetune_vision.py  data/CogVLM-311K/  THUDM/glm-edge-4b-chat  configs/lora.yaml yes

http://www.ppmy.cn/news/1561592.html

相关文章

混合专家模型 (MoE)笔记摘要

ref&#xff1a; https://huggingface.co/blog/zh/moe#%E4%BB%80%E4%B9%88%E6%98%AF%E6%B7%B7%E5%90%88%E4%B8%93%E5%AE%B6%E6%A8%A1%E5%9E%8B 简短总结 混合专家模型 (MoEs): 与稠密模型相比&#xff0c; 预训练速度更快 与具有相同参数数量的模型相比&#xff0c;具有更快的…

Spring Boot + Jasypt 实现application.yml 属性加密的快速示例

Jasypt(Java Simplified Encryption)是一个专为Java应用程序设计的开源加密库,旨在简化加密和解密流程,保护敏感数据如密码、API密钥等。 jasypt-spring-boot-starter允许开发者在Spring Boot应用中轻松地实现加密和解密功能。 本篇介绍使用 jasypt-spring-boot-starter 以…

用JAVA 源码角度看 客户端请求服务器流程中地址是域名情况下解析域名流程

1. 域名解析的入口点 getaddrinfo 或 getAllByName 方法&#xff1a;在底层&#xff0c;Java 使用 getaddrinfo&#xff08;在 Unix-like 系统中&#xff09;或类似的系统调用来解析域名。在 Java 的 InetAddress 类中&#xff0c;getAllByName 方法是解析域名的入口点之一。它…

private前端常见算法

1.数组 合并两个有序数组&#xff08;简单-5&#xff09; https://leetcode.cn/problems/merge-sorted-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 移除元素&#xff08;简单-4&#xff09; https://leetcode.cn/problems/remove-element/descr…

【竞技宝】CS2:NertZ离队Liquid光速加盟!

2025年1月7日&#xff0c;目前CS2的赛事正处于空窗期中&#xff0c;很多队伍在近期都在进行阵容上的调整&#xff0c;其中出现了很多震惊观众的转会消息。今日凌晨&#xff0c;HEROIC官宣队内的NertZ选手正式离队&#xff0c;此后Liquid很快发布消息宣布了NertZ的加盟。 今日凌…

【Unity笔记】资源包导入后是洋红色(粉色)怎么办?

1.导入后发现是这样的 2.这个问题是渲染管道不匹配引起的。 导入的素材用的是 「通用渲染管线 Universal Render Pipeline, URP」&#xff0c;而项目里默认配置的是「内置渲染管线」&#xff0c;如图&#xff1a; 【知识补充】什么是渲染管线&#xff1f;&#xff1f;&#x…

C语言实现杨辉三角教程

简介 杨辉三角&#xff08;Pascal’s Triangle&#xff09;是一种非常经典的数学问题&#xff0c;同时也是编程练习中常见的题目之一。它的特点是每行的两端数字为1&#xff0c;其他数字是它上一行相邻两数之和。 本篇博客将详细讲解杨辉三角的基本概念、构建原理&#xff0c…

哈希算法详解及案例应用

一、引言 在当今数字化时代&#xff0c;数据的安全、存储和检索变得至关重要。哈希算法作为一种强大的工具&#xff0c;在众多领域中发挥着关键作用。它能够将任意长度的数据转换为固定长度的哈希值&#xff0c;这个哈希值就像数据的“指纹”&#xff0c;具有唯一性和特定的数学…