AI知识库

53AI知识库

学习大模型的前沿技术与行业应用场景


大模型行业巨变!GLM4-9b开源!同步上线bigmodel.cn
发布日期:2024-06-05 11:42:16 浏览次数: 2139 来源:包包算法笔记


包大人的清华朋友在智谱做大模型开发工作,除了日常吹水,我们闲着没事经常聊点大模型最新的trick,昨晚他兴冲冲地告诉我,他们的大模型第四代要开源一个9b的小模型,而且效果贼牛。

我说,你就吹牛吧,之前你们的大模型效果虽然不错,但1.第四代他不开源;2.模型也没有9b那么小;3.最最最重要的,没开源。

看着他眉飞色舞的样子好像拿了24个月的年终奖一样开心,说哥们不骗你,这次真不一样,跟70B那样更大模型的效果一样好,只要9b,快如闪电,单卡部署!

包包也是全职做NLP的算法工程师,对这个说法还是有点将信将疑的,毕竟模型的大小,基本决定了效果的上限,这简直是在挑战我的认知。

“你不信你试试“,甩给我一个测试链接。试试就试试,打开智谱模型中心,果然出现了。

新版本的9b模型已经支持API调用了,看来给没卡的中小团队也做了很充分的支持。

# pip install zhipuai 请先在终端进行安装

from zhipuai import ZhipuAI

client = ZhipuAI(api_key="your api key")

response = client.chat.completions.create(
model="glm-4-9b",
messages=[
{
"role": "system",
"content": "你是一个乐于解答各种问题的助手,你的任务是为用户提供专业、准确、有见地的建议。"
},
{
"role": "user",
"content": "你好"
}
],
top_p= 0.7,
temperature= 0.95,
max_tokens=1024,
tools = [{"type":"web_search","web_search":{"search_result":True}}],
stream=True,
)
for trunk in response:
print(trunk)

嗯,那我就掏出我的祖传测试题了,别说包包自己平时开发的大模型,就连GPT4都捉襟见肘,让我们试试GLM4-9b是骡子是马。

第一题:

“他一把把把把住了”中的四个“把”分别是什么意思?

GLM4-9b的回答

GPT4的回答

博大精深的中文,果然把GPT4绕坑里了,第三个把应该是名词,就是车把的意思。这一道测试题,GLM4-9b完胜。

第二题:小明通过作弊使他的思想品德考了满分。

GLM4-9b的看法

GPT4的看法

这个题目有点弱智吧的味道,GPT4完全没有get我们的梗,但GLM4-9b准确的get到了。

第三题

这道题目最难,至今没有一个大模型能回答对。

解释:把昆虫都放进水里,水就变混浊了。

GLM4-9b的回答

GPT4的回答

不是,大模型们,你们也太正经了吧,水+昆=混,水+虫=浊,这都不知道?

我来给你们点提示,在汉子场景下,跟字谜有关。

GLM4-9b的回答

GPT4的回答

果然,还是国产大模型正规军最懂中文,GPT4在提示下都不怎么开窍。

除了这些刁钻古怪的测试之外,智谱平台上的其他功能也体验了一下,支持RAG和工具调用。

测试一下查询天气:

模型支持了基础的工具调用能力,除了基本能力测试之外,听哥们说,这次的9b小模型支持到了1M的长文本,这简直有黑科技的味道了。

在 1M 的上下文长度下进行著名的“大海捞针”实验,100%。

链接:https://github.com/LargeWorldModel/LWM/blob/main/scripts/eval_needle.py

最重要的是,这版模型是开源的。

地址:https://github.com/THUDM/GLM-4/tree/main


国内厂商在大模型在基座的上的投入果然坚决,智谱作为第一梯队的成员,在开源上也毫不吝啬,如果把大模型赛道看成一个整体的话,开源确实会继续整个从业者的水平不断进步,把整个行业的蛋糕越做越大,最终使整个群体收益。降低入行的门槛,吸引更多潜在的人才加入这个游戏,从而通过大模型的技术革新,提高整个社会的运转效率。这个过程往往没有制造内卷,反而制造了大量全新的工作岗位。这不仅关乎国产替代,也关乎新的工业革命。

更多使用方法可以看官方文档介绍:

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 的卓越性能。

模型列表

ModelTypeSeq LengthDownload
GLM-4-9BBase8K? Huggingface  ? ModelScope
GLM-4-9B-ChatChat128K? Huggingface  ? ModelScope
GLM-4-9B-Chat-1MChat1M? Huggingface  ? ModelScope
GLM-4V-9BChat8K? Huggingface  ? ModelScope

评测结果

对话模型典型任务

ModelAlignBenchMT-BenchIFEvalMMLUC-EvalGSM8KMATHHumanEvalNaturalCodeBench
Llama-3-8B-Instruct6.408.0068.5868.451.379.630.062.224.7
ChatGLM3-6B5.185.5028.166.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 也列入比较范围。

多语言能力

在六个多语言数据集上对 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.35584.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.17975.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.5522281.741.275.7684
Gemini 1.0 Pro73.674.370.738.6492148.945.772.9680
Claude 3 Opus63.359.26445.754.91586.837.870.6694
GLM-4V-9B81.179.476.858.747.22163.846.681.1786

快速调用

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

使用 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

# GLM-4-9B-Chat
max_model_len, tp_size = 1310721
model_name = "THUDM/glm-4-9b-chat"
prompt = '你好'

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 = [151329151336151338]
sampling_params = SamplingParams(temperature=0.95, max_tokens=1024, stop_token_ids=stop_token_ids)

inputs = tokenizer.build_chat_input(prompt, history=None, role='user')['input_ids'].tolist()
outputs = llm.generate(prompt_token_ids=inputs, sampling_params=sampling_params)

generated_text = [output.outputs[0].text for output in outputs]
print(generated_text)

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

使用 transformers 后端进行推理:

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]))


53AI,企业落地应用大模型首选服务商

产品:大模型应用平台+智能体定制开发+落地咨询服务

承诺:先做场景POC验证,看到效果再签署服务协议。零风险落地应用大模型,已交付160+中大型企业

联系我们

售前咨询
186 6662 7370
预约演示
185 8882 0121

微信扫码

与创始人交个朋友

回到顶部

 
扫码咨询