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/s | 31.4 tok/s | 108% |
| 1k输入/1k输出@16并发 | 219.8 tok/s | 370.7 tok/s | 69% |
2.2 长上下文场景性能对比
在10k-100k输入token的长上下文场景中,MTP技术依然保持了89%-97%的吞吐量提升:
| 输入Token数 | 输出Token数 | 基线吞吐量 | MTP k=1吞吐量 | 提升幅度 |
|---|---|---|---|---|
| 10k | 1k | 14.6 tok/s | 28.8 tok/s | 97% |
| 50k | 2k | 13.8 tok/s | 26.6 tok/s | 93% |
| 100k | 4k | 13.4 tok/s | 25.4 tok/s | 89% |
注:测试环境为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技术做了多项关键优化,主要包括:
- 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]算子适配:针对GLM-4.7-Flash的MLA维度(192/64/256)与Ascend NPU原生算子不兼容问题,切换使用
npu_fused_infer_attention_score算子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=3k=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),仅供参考
