MLM之GLM-4-9B:GLM-4-9B的简介、安装和使用方法、案例应用之详细攻略

MLM之GLM-4-9B:GLM-4-9B的简介、安装和使用方法、案例应用之详细攻略

背景痛点:目前主流的大语言模型如GPT-3等,在多轮对话能力、多语言能力、长文本理解能力以及对工具和代码调用能力等方面存在一定限制。

解决方案

>> 在2024年6月5日,智谱AI重磅发布GLM-4系列开源模型,包括GLM-4-9B、GLM-4-9B-Chat等基础模型,以及GLM-4-9B-Chat-1M等支持长文档的模型。

>> GLM-4系列模型通过在预训练阶段采用自回归填空任务,加入额外任务数据,提升了多轮对话、多语言、长文本和工具调用等综合能力。

>> 并发布GLM-4V-9B多模态语言模型,支持视觉理解能力。

核心思路和步骤

>> 使用自回归任务进行预训练,填空任务让模型学习全面理解上下文。

>> 在预训练阶段加入工具调用和代码执行等额外数据,使模型具备相关能力。

>> 提供开源实现,开放接口和基线,方便其他研究者使用和进一步优化模型。

>> 通过公开任务和数据集,验证模型在各个方面的优异性能,比如多轮对话、多语言、长文本等综合性能超越现有模型。

>> 发布GLM-4V-9B多模态模型,支持视觉理解任务,在评测中也表现出优异成绩。

GLM-4系列试图通过自回归预训练任务和额外数据,提升语言模型在综合能力方面的表现,并开源实现和接口,方便应用和研究

目录

GLM-4的简介

Model List

评测结果

对话模型典型任务

基座模型典型任务

长文本

多语言能力

工具调用能力

多模态能力

GLM-4-9B的安装和使用

1、GLM-4-9B的安装

设备和依赖检查

相关推理测试数据

GLM-4-9B-Chat

GLM-4-9B-Chat-1M

GLM-4V-9B

最低硬件要求

2、快速调用

使用以下方法快速调用 GLM-4-9B-Chat 语言模型

T1、使用 transformers 后端进行推理:

T2、使用 vLLM 后端进行推理

使用以下方法快速调用 GLM-4V-9B 多模态模型

T1、使用 transformers 后端进行推理

3、基础功能调用

使用 transformers 后端代码

使用 vLLM 后端代码

4、压力测试

GLM-4-9B的案例应用


GLM-4的简介

GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中, GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出超越 Llama-3-8B 的卓越性能。除了能进行多轮对话,GLM-4-9B-Chat 还具备网页浏览、代码执行、自定义工具调用(Function Call)和长文本推理(支持最大 128K 上下文)等高级功能。本代模型增加了多语言支持,支持包括日语,韩语,德语在内的 26 种语言。我们还推出了支持 1M 上下文长度(约 200 万中文字符)的 GLM-4-9B-Chat-1M 模型和基于 GLM-4-9B 的多模态模型 GLM-4V-9B。GLM-4V-9B 具备 1120 * 1120 高分辨率下的中英双语多轮对话能力,在中英文综合能力、感知推理、文字识别、图表理解等多方面多模态评测中,GLM-4V-9B 表现出超越 GPT-4-turbo-2024-04-09、Gemini 1.0 Pro、Qwen-VL-Max 和 Claude 3 Opus 的卓越性能

Model List

ModelTypeSeq LengthDownloadOnline Demo
GLM-4-9BBase8K🤗 Huggingface 🤖 ModelScope/
GLM-4-9B-ChatChat128K🤗 Huggingface 🤖 ModelScope🤖 ModelScope CPU
🤖 ModelScope vLLM
GLM-4-9B-Chat-1MChat1M🤗 Huggingface 🤖 ModelScope/
GLM-4V-9BChat8K🤗 Huggingface 🤖 ModelScope/

评测结果

对话模型典型任务

ModelAlignBenchMT-BenchIFEvalMMLUC-EvalGSM8KMATHHumanEvalNaturalCodeBench
Llama-3-8B-Instruct6.408.0068.668.451.379.630.062.224.7
ChatGLM3-6B5.185.5028.161.469.072.325.758.511.3
GLM-4-9B-Chat7.018.3569.072.475.679.650.671.832.2

基座模型典型任务

ModelMMLUC-EvalGPQAGSM8KMATHHumanEval
Llama-3-8B66.651.2-45.8-33.5
Llama-3-8B-Instruct68.451.334.279.630.062.2
ChatGLM3-6B-Base61.469.026.872.325.758.5
GLM-4-9B74.777.134.384.030.470.1

由于 GLM-4-9B 在预训练过程中加入了部分数学、推理、代码相关的 instruction 数据,所以将 Llama-3-8B-Instruct 也列入比较范围。

长文本

在 1M 的上下文长度下进行大海捞针实验,结果如下:

​编辑

在 LongBench-Chat 上对长文本能力进行了进一步评测,结果如下:

​编辑

多语言能力

在六个多语言数据集上对 GLM-4-9B-Chat 和 Llama-3-8B-Instruct 进行了测试,测试结果及数据集对应选取语言如下表

DatasetLlama-3-8B-InstructGLM-4-9B-ChatLanguages
M-MMLU49.656.6all
FLORES25.028.8ru, es, de, fr, it, pt, pl, ja, nl, ar, tr, cs, vi, fa, hu, el, ro, sv, uk, fi, ko, da, bg, no
MGSM54.065.3zh, en, bn, de, es, fr, ja, ru, sw, te, th
XWinograd61.773.1zh, en, fr, jp, ru, pt
XStoryCloze84.790.7zh, en, ar, es, eu, hi, id, my, ru, sw, te
XCOPA73.380.1zh, et, ht, id, it, qu, sw, ta, th, tr, vi

工具调用能力

我们在 Berkeley Function Calling Leaderboard 上进行了测试并得到了以下结果:

ModelOverall Acc.AST SummaryExec SummaryRelevance
Llama-3-8B-Instruct58.8859.2570.0145.83
gpt-4-turbo-2024-04-0981.2482.1478.6188.75
ChatGLM3-6B57.8862.1869.785.42
GLM-4-9B-Chat81.0080.2684.4087.92

多模态能力

GLM-4V-9B 是一个多模态语言模型,具备视觉理解能力,其相关经典任务的评测结果如下:

MMBench-EN-TestMMBench-CN-TestSEEDBench_IMGMMStarMMMUMMEHallusionBenchAI2DOCRBench
gpt-4o-2024-05-1383.482.177.163.969.22310.355.084.6736
gpt-4-turbo-2024-04-0981.080.273.056.061.72070.243.978.6656
gpt-4-1106-preview77.074.472.349.753.81771.546.575.9516
InternVL-Chat-V1.582.380.775.257.146.82189.647.480.6720
LLaVA-Next-Yi-34B81.179.075.751.648.82050.234.878.9574
Step-1V80.779.970.350.049.92206.448.479.2625
MiniCPM-Llama3-V2.577.673.872.351.845.82024.642.478.4725
Qwen-VL-Max77.675.772.749.552.02281.741.275.7684
Gemini 1.0 Pro73.674.370.738.649.02148.945.772.9680
Claude 3 Opus63.359.264.045.754.91586.837.870.6694
GLM-4V-9B81.179.476.858.747.22163.846.681.1786

GLM-4-9B的安装和使用

1、GLM-4-9B的安装

硬件配置和系统要求,请查看这里

设备和依赖检查

相关推理测试数据

本文档的数据均在以下硬件环境测试,实际运行环境需求和运行占用的显存略有不同,请以实际运行环境为准。

测试硬件信息:

  • OS: Ubuntu 22.04
  • Memory: 512GB
  • Python: 3.10.12 (推荐) / 3.12.3 均已测试
  • CUDA Version: 12.3
  • GPU Driver: 535.104.05
  • GPU: NVIDIA A100-SXM4-80GB * 8

相关推理的压力测试数据如下:

所有测试均在单张GPU上进行测试,所有显存消耗都按照峰值左右进行测算

GLM-4-9B-Chat
精度显存占用PrefillingDecode SpeedRemarks
BF1619 GB0.2s27.8 tokens/s输入长度为 1000
BF1621 GB0.8s31.8 tokens/s输入长度为 8000
BF1628 GB4.3s14.4 tokens/s输入长度为 32000
BF1658 GB38.1s3.4 tokens/s输入长度为 128000
精度显存占用PrefillingDecode SpeedRemarks
INT48 GB0.2s23.3 tokens/s输入长度为 1000
INT410 GB0.8s23.4 tokens/s输入长度为 8000
INT417 GB4.3s14.6 tokens/s输入长度为 32000

GLM-4-9B-Chat-1M
精度显存占用PrefillingDecode SpeedRemarks
BF1675 GB98.4s2.3 tokens/s输入长度为 200000

如果您的输入超过200K,我们建议您使用vLLM后端进行多卡推理,以获得更好的性能。

GLM-4V-9B

精度显存占用PrefillingDecode SpeedRemarks
BF1628 GB0.1s33.4 tokens/s输入长度为 1000
BF1633 GB0.7s39.2 tokens/s输入长度为 8000
精度显存占用PrefillingDecode SpeedRemarks
INT410 GB0.1s28.7 tokens/s输入长度为 1000
INT415 GB0.8s24.2 tokens/s输入长度为 8000

最低硬件要求

如果您希望运行官方提供的最基础代码 (transformers 后端) 您需要:

  • Python >= 3.10
  • 内存不少于 32 GB

如果您希望运行官方提供的本文件夹的所有代码,您还需要:

  • Linux 操作系统 (Debian 系列最佳)
  • 大于 8GB 显存的,支持 CUDA 或者 ROCM 并且支持 BF16 推理的 GPU 设备。(FP16 精度无法训练,推理有小概率出现问题)

安装依赖

pip install -r requirements.txt

2、快速调用

使用以下方法快速调用 GLM-4-9B-Chat 语言模型

T1、使用 transformers 后端进行推理:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda"tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-4-9b-chat", trust_remote_code=True)query = "你好"inputs = tokenizer.apply_chat_template([{"role": "user", "content": query}],add_generation_prompt=True,tokenize=True,return_tensors="pt",return_dict=True)inputs = inputs.to(device)
model = AutoModelForCausalLM.from_pretrained("THUDM/glm-4-9b-chat",torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True
).to(device).eval()gen_kwargs = {"max_length": 2500, "do_sample": True, "top_k": 1}
with torch.no_grad():outputs = model.generate(**inputs, **gen_kwargs)outputs = outputs[:, inputs['input_ids'].shape[1]:]print(tokenizer.decode(outputs[0], skip_special_tokens=True))

T2、使用 vLLM 后端进行推理

from transformers import AutoTokenizer
from vllm import LLM, SamplingParams# GLM-4-9B-Chat-1M
# max_model_len, tp_size = 1048576, 4
# 如果遇见 OOM 现象,建议减少max_model_len,或者增加tp_size
max_model_len, tp_size = 131072, 1
model_name = "THUDM/glm-4-9b-chat"
prompt = [{"role": "user", "content": "你好"}]tokenizer = AutoTokenizer.from_pretrained(model_name, trust_remote_code=True)
llm = LLM(model=model_name,tensor_parallel_size=tp_size,max_model_len=max_model_len,trust_remote_code=True,enforce_eager=True,# GLM-4-9B-Chat-1M 如果遇见 OOM 现象,建议开启下述参数# enable_chunked_prefill=True,# max_num_batched_tokens=8192
)
stop_token_ids = [151329, 151336, 151338]
sampling_params = SamplingParams(temperature=0.95, max_tokens=1024, stop_token_ids=stop_token_ids)inputs = tokenizer.apply_chat_template(prompt, tokenize=False, add_generation_prompt=True)
outputs = llm.generate(prompts=inputs, sampling_params=sampling_params)print(outputs[0].outputs[0].text)

使用以下方法快速调用 GLM-4V-9B 多模态模型

T1、使用 transformers 后端进行推理

使用 transformers 后端进行推理:import torch
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizerdevice = "cuda"tokenizer = AutoTokenizer.from_pretrained("THUDM/glm-4v-9b", trust_remote_code=True)query = '描述这张图片'
image = Image.open("your image").convert('RGB')
inputs = tokenizer.apply_chat_template([{"role": "user", "image": image, "content": query}],add_generation_prompt=True, tokenize=True, return_tensors="pt",return_dict=True)  # chat modeinputs = inputs.to(device)
model = AutoModelForCausalLM.from_pretrained("THUDM/glm-4v-9b",torch_dtype=torch.bfloat16,low_cpu_mem_usage=True,trust_remote_code=True
).to(device).eval()gen_kwargs = {"max_length": 2500, "do_sample": True, "top_k": 1}
with torch.no_grad():outputs = model.generate(**inputs, **gen_kwargs)outputs = outputs[:, inputs['input_ids'].shape[1]:]print(tokenizer.decode(outputs[0]))
注意: GLM-4V-9B 暂不支持使用 vLLM 方式调用。

3、基础功能调用

除非特殊说明,本文件夹所有 demo 并不支持 Function Call 和 All Tools 等进阶用法

使用 transformers 后端代码

  • 使用命令行与 GLM-4-9B 模型进行对话。
python trans_cli_demo.py # GLM-4-9B-Chat
python trans_cli_vision_demo.py # GLM-4V-9B
  • 使用 Gradio 网页端与 GLM-4-9B-Chat 模型进行对话。
python trans_web_demo.py
  • 使用 Batch 推理。
python cli_batch_request_demo.py

使用 vLLM 后端代码

  • 使用命令行与 GLM-4-9B-Chat 模型进行对话。
python vllm_cli_demo.py
  • 自行构建服务端,并使用 OpenAI API 的请求格式与 GLM-4-9B-Chat 模型进行对话。本 demo 支持 Function Call 和 All Tools功能。

启动服务端:

python openai_api_server.py

客户端请求:

python openai_api_request.py

4、压力测试

用户可以在自己的设备上使用本代码测试模型在 transformers后端的生成速度:

python trans_stress_test.py

GLM-4-9B的案例应用

持续更新中……

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

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

相关文章

现代x86汇编-环境安装

今天端午节,独自在家,翻阅了张银奎老师编写的《现代x86汇编语言程序设计》一书,前言部分说明书中示例代码都是用微软visual C工具编写并使用微软宏汇编(著名的MASM)编译的,好久没有用微软vc了,假…

详解FedProx:FedAvg的改进版 Federated optimization in heterogeneous networks

FedProx:2020 FedAvg的改进 论文:《Federated Optimization in Heterogeneous Networks》 引用量:4445 源码地址: 官方实现(tensorflow)https://github.com/litian96/FedProx 几个pytorch实现:…

基于STM32的595级联的Proteus仿真

文章目录 一、595级联1.题目要求2.思路3.仿真图3.1 未仿真时3.2 模式A3.2 模式B3.3 故障模式 二、总结 一、595级联 1.题目要求 STM32单片机,以及三个LED灯对应红黄绿灯,IIC的OLED显示屏,温湿度传感器DHT11,两个独立按键和两个5…

MySQL时间和日期类型详解(零基础入门篇)

目录 1. DATE 2. DATETIME 3. TIMESTAMP 4. TIME 5. YEAR 6. 日期和时间的使用示例 以下SQL语句的测试可以使用命令行,或是使用SQL工具比如MySQL Workbench或SQLynx等。 在 MySQL 中,时间和日期数据类型用于存储与时间相关的数据,如何…

Python数据分析与建模库-02科学计算库Numpy-3.矩阵属性

该视频主要讲述了线性回归算法的核心思想和应用。首先,回顾了线性回归的基本概念,即通过历史数据学习参数,使得参数与特征组合后拟合效果最佳。接着,介绍了误差项的假设和高斯分布的概念,并推导了如何找到使拟合效果最…

重温共射放大电路

1、放大概念 小功率信号变成一个大功率信号,需要一个核心器件做这件事,核心器件的能量由电源提供,通过核心器件用小功率的信号去控制大电源,来实现能量的转换和控制,前提是不能失真,可以用一系列正弦波进行…

Qt定时器

在 Qt 框架中,定时器是一个非常强大和常用的工具,用于定期执行某些任务。Qt 提供了一些类和方法来实现定时功能,其中最常用的是 QTimer 类。 一、QTimer 概述 QTimer 类是 Qt 中实现定时功能的核心类。它提供了一个简单的接口,用…

Running Gradle task ‘assembleDebug‘ Flutter项目

基于Android方面运行Flutter项目一直卡在 Launching lib\main.dart on Android SDK built for x86 in debug mode… Running Gradle task ‘assembleDebug’… 基础原因: 默认存放Gradle插件包的Maven仓库是国外(需VPN) 我的原因: 缺少JDK和缺少Androi…

【Oracle】Oracle导入导出dmp文件

文章目录 前言一、什么是dmp?二、imp/impdp、exp/expdp对比及示例1.区别2.imp/impdp对比及示例a. impb. impbp 3.exp/expdp对比及示例a. expb.expdp 3.其他事项 三、执行导入导出前置条件1.创建角色并授权2.创建目录映射 前言 在工作中,经常会遇到需要备…

整理好了!2024年最常见 20 道分布式、微服务面试题(八)

上一篇地址:整理好了!2024年最常见 20 道分布式、微服务面试题(七)-CSDN博客 十五、什么是分布式事务,以及如何实现它们? 分布式事务是指在分布式系统中,跨多个节点或资源管理器的一系列操作&…

React中的 Scheduler

为什么需要调度 在 React 中,组件最终体现为 Fiber,并形成 FiberTree,Fiber 的目的是提高渲染性能,将原先的 React 渲染任务拆分为多个小的微任务,这样做的目的是可以灵活的让出主线程,可以随时打断渲染&a…

定个小目标之刷LeetCode热题(10)

这道题属于一道中等题&#xff0c;看来又得背题了&#xff0c;直接看题解吧&#xff0c;有两种解法 第一种动态规划法 状态&#xff1a;dp[i][j] 表示字符串s在[i,j]区间的子串是否是一个回文串 状态转移方程&#xff1a;当s[i] s[j] && (j - i < 2 || dp[i 1]…

纸片战争修改版(重载)

基于上次纸片战争断网版本的修改 http://纸片战争Beta压缩试行.html 不行的话去我的首页下载&#xff0c;搜索“纸片战争”

讨论C++类与对象

讨论C类与对象 C语言结构体和C类的对比类的实例化类对象的大小猜想一猜想二针对上述猜想的实践 this指针不同对象调用成员函数 类的6个默认成员函数构造函数析构函数拷贝构造函数浅拷贝和深拷贝 赋值运算符重载 初始化列表初始化顺序 C语言结构体和C类的对比 在C语言中&#x…

手撸一个java简易聊天室

创建一个Java聊天室涉及到网络编程、多线程处理以及用户界面设计。这里我将提供一个简单的Java聊天室实现&#xff0c;包括服务器端和客户端的基本逻辑。 服务器端 服务器端负责接收客户端的消息&#xff0c;并将其广播给所有连接的客户端。 java 复制 import java.io.; import…

C语言Socket实现Http的post请求

修改三个宏定义即可 #define HOST “192.168.1.133” //主机 #define PORT 80 //端口 #define POST_DATA “post_test444&post_val555” //内容 #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include &l…

对猫毛过敏?怎么有效的缓解过敏症状,宠物空气净化器有用吗?

猫过敏是一种常见的过敏反应&#xff0c;由猫的皮屑、唾液或尿液中的蛋白质引起。这些蛋白质被称为过敏原&#xff0c;它们可以通过空气传播&#xff0c;被人体吸入后&#xff0c;会触发免疫系统的过度反应。猫过敏是宠物过敏中最常见的类型之一&#xff0c;对许多人来说&#…

xilinx的Aurora8B10B的IP仿真及上板测试(高速收发器十七)

前文讲解了Aurora8B10B协议原理及xilinx相关IP&#xff0c;本文讲解如何设置该IP&#xff0c;并且通过示例工程完成该IP的仿真和上板。 1、生成Aurora8B10B IP 如下图所示&#xff0c;首先在vivado的IP catalog中输入Aurora 8B10B&#xff0c;双击该IP。 图1 查找Aurora 8B10…

基于STM32开发的智能农业监控系统

目录 引言环境准备智能农业监控系统基础代码实现&#xff1a;实现智能农业监控系统 4.1 土壤湿度传感器数据读取4.2 温湿度传感器数据读取4.3 水泵与风扇控制4.4 用户界面与数据可视化应用场景&#xff1a;农业环境监测与管理问题解决方案与优化收尾与总结 1. 引言 随着智能…

Map深度学习

Map Map是一个键值对的集合&#xff0c;和object类似&#xff0c;Map作为构造函数&#xff0c;可以通过全局对象获取到。需要通过new操作创建实例对象&#xff0c;直接调用会报错。Map构造函数接受一个iterable类型的函数&#xff0c;用来初始化Map。 var m new Map([[1, &qu…