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
Model | Type | Seq Length | Download | Online Demo |
---|---|---|---|---|
GLM-4-9B | Base | 8K | 🤗 Huggingface 🤖 ModelScope | / |
GLM-4-9B-Chat | Chat | 128K | 🤗 Huggingface 🤖 ModelScope | 🤖 ModelScope CPU 🤖 ModelScope vLLM |
GLM-4-9B-Chat-1M | Chat | 1M | 🤗 Huggingface 🤖 ModelScope | / |
GLM-4V-9B | Chat | 8K | 🤗 Huggingface 🤖 ModelScope | / |
评测结果
对话模型典型任务
Model | AlignBench | MT-Bench | IFEval | MMLU | C-Eval | GSM8K | MATH | HumanEval | NaturalCodeBench |
---|---|---|---|---|---|---|---|---|---|
Llama-3-8B-Instruct | 6.40 | 8.00 | 68.6 | 68.4 | 51.3 | 79.6 | 30.0 | 62.2 | 24.7 |
ChatGLM3-6B | 5.18 | 5.50 | 28.1 | 61.4 | 69.0 | 72.3 | 25.7 | 58.5 | 11.3 |
GLM-4-9B-Chat | 7.01 | 8.35 | 69.0 | 72.4 | 75.6 | 79.6 | 50.6 | 71.8 | 32.2 |
基座模型典型任务
Model | MMLU | C-Eval | GPQA | GSM8K | MATH | HumanEval |
---|---|---|---|---|---|---|
Llama-3-8B | 66.6 | 51.2 | - | 45.8 | - | 33.5 |
Llama-3-8B-Instruct | 68.4 | 51.3 | 34.2 | 79.6 | 30.0 | 62.2 |
ChatGLM3-6B-Base | 61.4 | 69.0 | 26.8 | 72.3 | 25.7 | 58.5 |
GLM-4-9B | 74.7 | 77.1 | 34.3 | 84.0 | 30.4 | 70.1 |
由于 GLM-4-9B
在预训练过程中加入了部分数学、推理、代码相关的 instruction 数据,所以将 Llama-3-8B-Instruct 也列入比较范围。
长文本
在 1M 的上下文长度下进行大海捞针实验,结果如下:
编辑
在 LongBench-Chat 上对长文本能力进行了进一步评测,结果如下:
编辑
多语言能力
在六个多语言数据集上对 GLM-4-9B-Chat 和 Llama-3-8B-Instruct 进行了测试,测试结果及数据集对应选取语言如下表
Dataset | Llama-3-8B-Instruct | GLM-4-9B-Chat | Languages |
---|---|---|---|
M-MMLU | 49.6 | 56.6 | all |
FLORES | 25.0 | 28.8 | ru, es, de, fr, it, pt, pl, ja, nl, ar, tr, cs, vi, fa, hu, el, ro, sv, uk, fi, ko, da, bg, no |
MGSM | 54.0 | 65.3 | zh, en, bn, de, es, fr, ja, ru, sw, te, th |
XWinograd | 61.7 | 73.1 | zh, en, fr, jp, ru, pt |
XStoryCloze | 84.7 | 90.7 | zh, en, ar, es, eu, hi, id, my, ru, sw, te |
XCOPA | 73.3 | 80.1 | zh, et, ht, id, it, qu, sw, ta, th, tr, vi |
工具调用能力
我们在 Berkeley Function Calling Leaderboard 上进行了测试并得到了以下结果:
Model | Overall Acc. | AST Summary | Exec Summary | Relevance |
---|---|---|---|---|
Llama-3-8B-Instruct | 58.88 | 59.25 | 70.01 | 45.83 |
gpt-4-turbo-2024-04-09 | 81.24 | 82.14 | 78.61 | 88.75 |
ChatGLM3-6B | 57.88 | 62.18 | 69.78 | 5.42 |
GLM-4-9B-Chat | 81.00 | 80.26 | 84.40 | 87.92 |
多模态能力
GLM-4V-9B 是一个多模态语言模型,具备视觉理解能力,其相关经典任务的评测结果如下:
MMBench-EN-Test | MMBench-CN-Test | SEEDBench_IMG | MMStar | MMMU | MME | HallusionBench | AI2D | OCRBench | |
---|---|---|---|---|---|---|---|---|---|
gpt-4o-2024-05-13 | 83.4 | 82.1 | 77.1 | 63.9 | 69.2 | 2310.3 | 55.0 | 84.6 | 736 |
gpt-4-turbo-2024-04-09 | 81.0 | 80.2 | 73.0 | 56.0 | 61.7 | 2070.2 | 43.9 | 78.6 | 656 |
gpt-4-1106-preview | 77.0 | 74.4 | 72.3 | 49.7 | 53.8 | 1771.5 | 46.5 | 75.9 | 516 |
InternVL-Chat-V1.5 | 82.3 | 80.7 | 75.2 | 57.1 | 46.8 | 2189.6 | 47.4 | 80.6 | 720 |
LLaVA-Next-Yi-34B | 81.1 | 79.0 | 75.7 | 51.6 | 48.8 | 2050.2 | 34.8 | 78.9 | 574 |
Step-1V | 80.7 | 79.9 | 70.3 | 50.0 | 49.9 | 2206.4 | 48.4 | 79.2 | 625 |
MiniCPM-Llama3-V2.5 | 77.6 | 73.8 | 72.3 | 51.8 | 45.8 | 2024.6 | 42.4 | 78.4 | 725 |
Qwen-VL-Max | 77.6 | 75.7 | 72.7 | 49.5 | 52.0 | 2281.7 | 41.2 | 75.7 | 684 |
Gemini 1.0 Pro | 73.6 | 74.3 | 70.7 | 38.6 | 49.0 | 2148.9 | 45.7 | 72.9 | 680 |
Claude 3 Opus | 63.3 | 59.2 | 64.0 | 45.7 | 54.9 | 1586.8 | 37.8 | 70.6 | 694 |
GLM-4V-9B | 81.1 | 79.4 | 76.8 | 58.7 | 47.2 | 2163.8 | 46.6 | 81.1 | 786 |
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
精度 | 显存占用 | Prefilling | Decode Speed | Remarks |
---|---|---|---|---|
BF16 | 19 GB | 0.2s | 27.8 tokens/s | 输入长度为 1000 |
BF16 | 21 GB | 0.8s | 31.8 tokens/s | 输入长度为 8000 |
BF16 | 28 GB | 4.3s | 14.4 tokens/s | 输入长度为 32000 |
BF16 | 58 GB | 38.1s | 3.4 tokens/s | 输入长度为 128000 |
精度 | 显存占用 | Prefilling | Decode Speed | Remarks |
---|---|---|---|---|
INT4 | 8 GB | 0.2s | 23.3 tokens/s | 输入长度为 1000 |
INT4 | 10 GB | 0.8s | 23.4 tokens/s | 输入长度为 8000 |
INT4 | 17 GB | 4.3s | 14.6 tokens/s | 输入长度为 32000 |
GLM-4-9B-Chat-1M
精度 | 显存占用 | Prefilling | Decode Speed | Remarks |
---|---|---|---|---|
BF16 | 75 GB | 98.4s | 2.3 tokens/s | 输入长度为 200000 |
如果您的输入超过200K,我们建议您使用vLLM后端进行多卡推理,以获得更好的性能。
GLM-4V-9B
精度 | 显存占用 | Prefilling | Decode Speed | Remarks |
---|---|---|---|---|
BF16 | 28 GB | 0.1s | 33.4 tokens/s | 输入长度为 1000 |
BF16 | 33 GB | 0.7s | 39.2 tokens/s | 输入长度为 8000 |
精度 | 显存占用 | Prefilling | Decode Speed | Remarks |
---|---|---|---|---|
INT4 | 10 GB | 0.1s | 28.7 tokens/s | 输入长度为 1000 |
INT4 | 15 GB | 0.8s | 24.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的案例应用
持续更新中……