GLM-4-9B小模型深度测评:智谱AI新星实力解析
核心结论:智谱AI最新开源的GLM-4-9B系列,在语义解析、数学推理、代码生成与知识问答等维度展现出强劲性能。相比Llama-3-8B,该轻量级模型近乎全面领先。更值得注意的是,本次更新填补了多语言支持的空白,覆盖日、韩、德等26种语言。此外,两个特化版本同步推出:支持100万字超长上下文的GLM-4-9B-Chat-1M,以及强化视觉理解的GLM-4V-9B。后者在图像识别与图文理解任务上,表现可对标GPT-4 Turbo。
以下分模块拆解核心信息。
01. GLM-4-9B 核心概览
GLM-4-9B 是智谱AI基于GLM-4架构打造的全新开源大语言模型。在语义理解、数学运算、逻辑推理、代码生成与知识问答等基准测试中,其得分全面超越同尺寸的Llama-3-8B。指令微调版本GLM-4-9B-Chat除多轮对话外,还集成网页浏览、代码执行及函数调用能力,并支持128K上下文窗口。
而GLM-4-9B-Chat-1M版本将上下文窗口扩展至100万字(约200万汉字)。多模态分支GLM-4V-9B支持1120×1120高分辨率中英文图文理解,在多模态评测中与GPT-4-turbo、Gemini 1.0 Pro、Qwen-VL-Max、Claude 3 Opus等模型相比毫不逊色。
02. 模型版本一览
03. 模型性能评估
对话指令模型评估
基座模型性能
长上下文能力
在100万字上下文长度下执行“大海捞针”压力测试,结果如下:
进一步在LongBench-Chat上评估长文本场景表现,结果如下:
多语言支持
GLM-4-9B-Chat与Llama-3-8B-Instruct在六个多语言数据集上进行了对比测试,各数据集对应的语种及评估结果如下:
函数调用能力
多模态视觉理解
GLM-4V-9B的视觉理解能力在经典任务上的评测结果如下:
04. 模型调用
基于transformers后端的推理代码示例:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "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))基于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多模态模型的代码示例:
import torch
from PIL import Image
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "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 mode
inputs = 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]))
