Ascend-SACT/glm-4.7-flash终极优化:MTP技术带来108%吞吐量提升

Ascend-SACT/glm-4.7-flash终极优化:MTP技术带来108%吞吐量提升

【免费下载链接】glm-4.7-flash项目地址: https://ai.gitcode.com/Ascend-SACT/glm-4.7-flash

Ascend-SACT/glm-4.7-flash是基于Ascend NPU平台优化的GLM-4.7-Flash大语言模型部署方案,通过MTP(Multi-Token Prediction)技术实现了最高108%的吞吐量提升,为开发者提供了高效的大模型推理服务解决方案。

一、什么是MTP技术?

MTP(Multi-Token Prediction)即多token预测技术,是一种通过推测式解码(Speculative Decoding)提升大模型推理效率的优化方案。其核心原理是使用一个轻量级的"草稿模型"(Drafter)预先预测多个可能的输出token,再由主模型(Target)进行验证和修正,从而减少整体解码步骤,显著提升吞吐量。

在Ascend-SACT/glm-4.7-flash项目中,MTP技术经过针对性优化,特别适配了GLM-4.7-Flash的MoE(Mixture of Experts)架构和MLA(Multi-Head Latent Attention)注意力机制,实现了推理性能的大幅突破。

二、MTP技术带来的性能提升

根据项目测试数据,在Ascend NPU环境下,启用MTP技术(num_speculative_tokens=1)的GLM-4.7-Flash模型相比传统Graph基线方案,在不同并发场景下均实现了显著的吞吐量提升:

2.1 标准上下文场景性能对比

场景基线(Graph)MTP k=1吞吐量提升
1k输入/1k输出@单并发15.1 tok/s31.4 tok/s108%
1k输入/1k输出@16并发219.8 tok/s370.7 tok/s69%

2.2 长上下文场景性能对比

在10k-100k输入token的长上下文场景中,MTP技术依然保持了89%-97%的吞吐量提升:

输入Token数输出Token数基线吞吐量MTP k=1吞吐量提升幅度
10k1k14.6 tok/s28.8 tok/s97%
50k2k13.8 tok/s26.6 tok/s93%
100k4k13.4 tok/s25.4 tok/s89%

注:测试环境为Ascend 910B/A2/A3,TP=4,镜像版本vllm-ascend:v0.17.0rc1

三、如何启用MTP优化?

启用MTP技术非常简单,只需在启动vLLM服务时添加MTP相关配置参数即可。以下是完整的启动命令示例:

3.1 环境准备

首先确保已应用项目提供的补丁文件:

cd /path/to/glm-4.7-flash PATCH_DIR=$(pwd) # 应用vllm补丁 cd /vllm-workspace/vllm git apply "${PATCH_DIR}/vllm-v0.17.0rc1-glm47flash.patch" # 应用vllm-ascend补丁 cd /vllm-workspace/vllm-ascend git apply "${PATCH_DIR}/vllm-ascend-v0.17.0rc1-glm47flash.patch"

3.2 启动MTP优化服务

HCCL_OP_EXPANSION_MODE=AIV vllm serve /models/GLM-4.7-Flash \ --served-model-name GLM-4.7-Flash \ --tensor-parallel-size 4 \ --max-model-len 32768 \ --enable-expert-parallel \ --speculative-config '{"method":"mtp","num_speculative_tokens":1}' \ --port 8013

关键参数说明:

  • --enable-expert-parallel:启用专家并行,适配GLM-4.7-Flash的MoE架构
  • --speculative-config:MTP配置,num_speculative_tokens=1为推荐设置
  • HCCL_OP_EXPANSION_MODE=AIV:支持长上下文处理,即使使用32k长度也建议保留

四、MTP技术实现细节

4.1 核心优化点

Ascend-SACT/glm-4.7-flash项目针对MTP技术做了多项关键优化,主要包括:

  1. Head Padding技术:解决注意力头数不能被TP整除的问题,将单卡本地头数从5补到8(2的幂次),计算后再裁剪回原始头数
local_num_heads = self.num_heads # TP=4时为5 padded_num_heads = _next_power_of_2(local_num_heads) # 5 -> 8 # 填充Q张量 q_nope = torch.nn.functional.pad(q_nope, (0, 0, 0, pad_heads)) # 计算后裁剪 attn_output = attn_output[:local_num_heads]
  1. 算子适配:针对GLM-4.7-Flash的MLA维度(192/64/256)与Ascend NPU原生算子不兼容问题,切换使用npu_fused_infer_attention_score算子

  2. MTP权重处理:修正get_spec_layer_idx_from_weight_name函数以正确发现隐藏的MTP层,确保MTP drafter能够正确加载权重

4.2 关键修改文件

实现MTP优化的核心代码修改集中在以下文件:

  • vllm/model_executor/models/glm4_moe_lite.py:修正MTP层索引发现逻辑
  • vllm/model_executor/models/glm4_moe_lite_mtp.py:MTP drafter配置读取
  • vllm_ascend/attention/mla_v1.py:添加head padding和prefill fallback支持

五、常见问题与最佳实践

5.1 MTP参数选择

测试结果显示,num_speculative_tokens=1是当前最佳选择:

  • k=1在单并发和16并发场景下性能均优于k=3
  • k=2启动速度较慢,稳态解码性能不如k=1

5.2 显存优化

若遇到显存不足问题,可通过以下方式解决:

  • 降低--max-model-len参数(默认32768,可根据需求调整)
  • 减少--max-num-seqs参数限制并发序列数
  • 确保使用TP=4配置(当前适配与主要测试结果均基于TP=4)

5.3 长上下文支持

Ascend-SACT/glm-4.7-flash已验证支持150k+ tokens输入,模型最大上下文长度约为202752 tokens。启用长上下文时,建议:

  • 保留环境变量HCCL_OP_EXPANSION_MODE=AIV
  • 逐步提高--max-model-len,先从32k开始测试,再根据显存情况调整

六、总结

Ascend-SACT/glm-4.7-flash通过MTP技术实现了GLM-4.7-Flash模型在Ascend NPU上的高效部署,带来了最高108%的吞吐量提升。这一优化方案特别适合需要高并发推理的场景,同时保持了对长上下文(200k+ tokens)的良好支持。

无论是科研机构还是企业用户,都可以通过项目提供的补丁和配置方法,轻松启用MTP优化,充分发挥Ascend NPU的计算能力,获得更高效的大模型推理服务。

要开始使用这一优化方案,只需克隆项目仓库并按照文档说明进行部署:

git clone https://gitcode.com/Ascend-SACT/glm-4.7-flash cd glm-4.7-flash # 按照README.md中的步骤进行环境准备和启动

通过MTP技术的终极优化,Ascend-SACT/glm-4.7-flash为大模型在Ascend平台上的高效推理提供了强有力的支持,是开发者构建高性能AI应用的理想选择。

【免费下载链接】glm-4.7-flash项目地址: https://ai.gitcode.com/Ascend-SACT/glm-4.7-flash

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考