GLM-4.5/4.6/4.7#
简介#
GLM-4.x 系列模型采用混合专家(MoE)架构,是专门为智能体应用设计的基础模型
GLM-4.5 模型首次在 vllm-ascend:v0.10.0rc1 中得到支持
本文档将展示该模型的主要验证步骤,包括支持的特性、特性配置、环境准备、单节点和多节点部署、精度和性能评估。
支持的特性#
请参考支持的特性以获取模型支持的特性矩阵。
请参考特性指南以获取特性的配置信息。
环境准备#
模型权重#
GLM-4.5(BF16 版本): 下载模型权重。GLM-4.6(BF16 版本): 下载模型权重。GLM-4.7(BF16 版本): 下载模型权重。GLM-4.5-w8a8-with-float-mtp(带 MTP 的量化版本): 下载模型权重。GLM-4.6-w8a8(无 MTP 的量化版本): 下载模型权重。由于 vllm 在十月不支持 GLM4.6 mtp,因此我们不提供 mtp 版本。上个月已经支持,您可以使用以下量化方案将 mtp 权重添加到量化权重中。量化方法: 量化方案。您可以使用这些方法对模型进行量化。
建议将模型权重下载到多个节点的共享目录中,例如 /root/.cache/
安装#
您可以使用我们的官方 docker 镜像直接运行 GLM-4.x。
根据您的机器类型选择镜像,并在您的节点上启动 docker 镜像,请参考使用 docker。
# Update --device according to your device (Atlas A2: /dev/davinci[0-7] Atlas A3:/dev/davinci[0-15]).
# Update the vllm-ascend image according to your environment.
# Note you should download the weight to /root/.cache in advance.
# Update the vllm-ascend image
export IMAGE=m.daocloud.io/quay.io/ascend/vllm-ascend:v0.13.0
export NAME=vllm-ascend
# Run the container using the defined variables
# Note: If you are running bridge network with docker, please expose available ports for multiple nodes communication in advance
docker run --rm \
--name $NAME \
--net=host \
--shm-size=1g \
--device /dev/davinci0 \
--device /dev/davinci1 \
--device /dev/davinci2 \
--device /dev/davinci3 \
--device /dev/davinci4 \
--device /dev/davinci5 \
--device /dev/davinci6 \
--device /dev/davinci7 \
--device /dev/davinci_manager \
--device /dev/devmm_svm \
--device /dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root/.cache:/root/.cache \
-it $IMAGE bash
部署#
单节点部署#
在低延迟场景中,我们推荐单机部署。
量化模型
glm4.5_w8a8_with_float_mtp可以部署在 1 台 Atlas 800 A3 (64G × 16) 或 1 台 Atlas 800 A2 (64G × 8) 上。
运行以下脚本执行在线推理。
#!/bin/sh
export HCCL_BUFFSIZE=1024
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export HCCL_OP_EXPANSION_MODE=AIV
vllm serve /weight/glm4.5_w8a8_with_float_mtp \
--data-parallel-size 1 \
--tensor-parallel-size 16 \
--seed 1024 \
--served-model-name glm \
--max-model-len 35000 \
--max-num-batched-tokens 16384 \
--max-num-seqs 16 \
--trust-remote-code \
--gpu-memory-utilization 0.9 \
--speculative-config '{"num_speculative_tokens": 1, "model":"/weight/glm4.5_w8a8_with_float_mtp", "method":"mtp"}' \
--compilation-config '{"cudagraph_capture_sizes": [1,2,4,8,16,32], "cudagraph_mode": "FULL_DECODE_ONLY"}' \
--async-scheduling \
注意: 参数说明如下:
对于单节点部署,在低延迟场景中我们推荐使用
dp1tp16并关闭专家并行。--async-scheduling异步调度是一种用于优化推理效率的技术。它允许非阻塞的任务调度,以提高并发性和吞吐量,特别是在处理大规模模型时。
多节点部署#
不建议在 Atlas 800 A2 (64G * 8) 上部署多节点。
预填充-解码分离#
尚未测试。
精度评估#
这里有两种精度评估方法。
使用 AISBench#
详情请参考使用 AISBench。
执行后,您可以得到结果,这里是
vllm-ascend:main(在vllm-ascend:0.13.0rc1之后)中GLM4.6的结果,仅供参考。
数据集 |
版本 |
指标 |
模式 |
vllm-api-general-chat |
备注 |
|---|---|---|---|---|---|
gsm8k |
- |
准确率 |
生成 |
96.13 |
1 Atlas 800 A3 (64G × 16) |
gsm8k |
- |
准确率 |
生成 |
96.06 |
GPU |
使用 Language Model Evaluation Harness#
尚未测试。
性能#
使用 AISBench#
详情请参考使用 AISBench 进行性能评估。
使用 vLLM Benchmark#
以 GLM-4.x 为例运行性能评估。
更多详情请参考 vllm benchmark。
vllm bench 有三个子命令:
latency: 基准测试单批次请求的延迟。serve: 基准测试在线服务吞吐量。throughput: 基准测试离线推理吞吐量。
以 serve 为例。运行以下代码。
vllm bench serve \
--backend vllm \
--dataset-name prefix_repetition \
--prefix-repetition-prefix-len 22400 \
--prefix-repetition-suffix-len 9600 \
--prefix-repetition-output-len 1024 \
--num-prompts 1 \
--prefix-repetition-num-prefixes 1 \
--ignore-eos \
--model glm \
--tokenizer /weight/glm4.5_w8a8_with_float_mtp \
--seed 1000 \
--host 0.0.0.0 \
--port 8000 \
--endpoint /v1/completions \
--max-concurrency 1 \
--request-rate 1 \
大约几分钟后,您可以得到性能评估结果。