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#

  1. 详情请参考使用 AISBench

  2. 执行后,您可以得到结果,这里是 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 \

大约几分钟后,您可以得到性能评估结果。