GLM-4-9B 是智谱 AI 推出的最新一代预训练模型 GLM-4 系列中的开源版本。 在语义、数学、推理、代码和知识等多方面的数据集测评中,GLM-4-9B 及其人类偏好对齐的版本 GLM-4-9B-Chat 均表现出较高的性能。 除了能进行多轮对话,GLM-4-9B-Chat 还具备网页浏览、代码执行、自定义工具调用(Function Call)和长文本推理(支持最大 128K 上下文)等高级功能。 本代模型增加了多语言支持,支持包括日语,韩语,德语在内的 26 种语言。我们还推出了支持 1M 上下文长度(约 200 万中文字符)的模型。官方评测结果如下:
Model | AlignBench-v2 | MT-Bench | IFEval | MMLU | C-Eval | GSM8K | MATH | HumanEval | NCB |
---|---|---|---|---|---|---|---|---|---|
Llama-3-8B-Instruct | 5.12 | 8.00 | 68.58 | 68.4 | 51.3 | 79.6 | 30.0 | 62.2 | 24.7 |
ChatGLM3-6B | 3.97 | 5.50 | 28.1 | 66.4 | 69.0 | 72.3 | 25.7 | 58.5 | 11.3 |
GLM-4-9B-Chat | 6.61 | 8.35 | 69.0 | 72.4 | 75.6 | 79.6 | 50.6 | 71.8 | 32.2 |
vLLM 是一个快速且易于使用的 LLM 推理和服务库。vLLM 速度很快:
vLLM 灵活且易于使用:
显卡:4090 * 4
显存:24GB * 4。最低显存要求为48GB
经过测试,改镜像在3090 * 4的环境下依然可以运行。而在P40 * 4的环境中无法运行,Triton GPU 编译器(triton
)不支持 Tesla P40 GPU(计算能力 6.1)。Triton 要求设备的计算能力至少为 7.0。
# 新建conda虚拟环境
conda create -n vllm-glm python==3.11.7 -y -y
# 激活环境
conda activate vllm-glm
# 安装vllm依赖包
pip install vllm
# 如果速度太慢,更换国内的下载源(可选)
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
注:镜像已经包含了一个vllm的conda虚拟环境,vllm版本为0.6.6。以上供新人参考
# 在拉取模型之前,先安装Git LFS
sudo apt update
sudo apt install git-lfs
git lfs --version
# 初始化Git LFS
git lfs install
# modelscope搜索glm-4,复制git链接
git lfs clone https://www.modelscope.cn/ZhipuAI/glm-4-9b-chat.git
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda"
tokenizer = AutoTokenizer.from_pretrained("/path/to/your_model", trust_remote_code=True)
query = "how to learn python programming"
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(
"/path/to/your_model",
torch_dtype=torch.bfloat16,
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))
启动脚本
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m vllm.entrypoints.openai.api_server \ # CUDA_VISIBLE_DEVICES为显卡号
--host 0.0.0.0 \
--port 8001 \ # 自定义端口
--gpu-memory-utilization 0.8 \
--max-model-len 32768 \
--served-model-name AA \ # 自定义模型名称
--model /path/to/your_model \ # 模型本地路径
--tensor-parallel-size 4 \
--enforce-eager \
--trust-remote-code \
INFO: Started server process [163] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8001 (Press CTRL+C to quit)
运行脚本,终端出现以上信息,说明服务启动成功。
from openai import OpenAI
import sys
# Set OpenAI's API key and API base to use vLLM's API server.
openai_api_key = "EMPTY"
openai_api_base = "http://127.0.0.1:8001/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
completion = client.chat.completions.create(
model="AA",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "how to learn Python programming, answer me in Chinese"},
],
stream=True,
max_tokens=2084,
)
for chunk in completion:
if chunk.choices[0].delta.content:
word = chunk.choices[0].delta.content
sys.stdout.write(word)
sys.stdout.flush()