| 组件 | 版本 |
|---|---|
| 硬件环境 | 910C |
| 服务器数 | 单机 |
| 组件 | 版本 |
|---|---|
| vllm-ascend | m.daocloud.io/quay.io/ascend/vllm-ascend:0.14.0.rc1 |
| HDK | Ascend HDK 25.3.rc1 |
| CANN | 8.5.0 |
| 模型 | GLM-5 |
M2.5 在数十万个复杂真实环境中经过强化学习的广泛训练,在代码编写、智能体工具使用与搜索、办公任务以及一系列其他具有经济价值的任务上达到当前最先进(SOTA)水平,在 SWE-Bench Verified、Multi-SWE-Bench 和 BrowseComp(含上下文管理)等评测中分别取得了 80.2%、51.3% 和 76.3% 的高分。
参考:MiniMax-M2.5 · 模型库
MiniMax-M2.5 模型采用 GQA + MoE 结构,总参数量为 229B,推理时激活的参数为 10B。从 M1 到 M2,MiniMax 重新采用了 Full Attention 机制,M2.5 的架构则与 M2 保持一致。
为确保客户 A3 的顺利导入,专项团队针对其主要推理场景提前开展了开箱性能评估与调优策略的摸底工作。测试结果显示,经初步性能调优后,基于 A3 实测在 MiniMax 2.5 模型的单卡吞吐较开箱性能提升了 x 倍以上。
基于 vLLM-Ascend 框架 0 day 镜像存在开箱性能差、吞吐低的问题。经特性叠加性能调优后,模型推理速度提升,单卡吞吐提升了 x 倍。
通过接入 minimax_qkv_crosshead_norm_rope 融合算子、MoE 大融合算子、共享专家多流特性、suffix 接受率提升等调优策略,实测在输入 100k 输出 1k 并发 10 的场景下,TPOT 由 102ms 降至 65ms,持续调优中。
| 优化点 | 使能方法 |
|---|---|
| w8a8 模型量化 | 使用 ModelSlim 量化工具,见章节 3.1 |
minimax_qkv_crosshead_norm_rope 融合算子 | 默认使能,性能收益约 2ms |
| Flashcomm1 | export VLLM_ASCEND_ENABLE_FLASHCOMM1=1 |
| 异步调度 | --async-scheduling |
| MoE 大融合算子 | export VLLM_ASCEND_ENABLE_FUSED_MC2=1 |
| 流水优化 | export TASK_QUEUE_ENABLE=1 |
| 通信算法 - AIV | export HCCL_OP_EXPANSION_MODE="AIV" |
| Eagle3 特性 | --speculative_config '{"method": "eagle3", "model": "/path/to/MiniMax-M2.5-eagle-model/", "num_speculative_tokens": 3}' |
| suffix 特性 | --speculative-config '{"method": "suffix", "num_speculative_tokens": 3, "suffix_decoding_max_cached_requests":2000, "suffix_decoding_max_tree_depth":32, "suffix_decoding_min_token_prob":0.4, "suffix_decoding_max_spec_factor":3}' |
w8a8 权重下载地址:Eco-Tech/MiniMax-M2.5-w8a8-QuaRot
docker run -itd --privileged --name=xxx --net=host \
--shm-size 500g \
--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/davinci8 \
--device=/dev/davinci9 \
--device=/dev/davinci10 \
--device=/dev/davinci11 \
--device=/dev/davinci12 \
--device=/dev/davinci13 \
--device=/dev/davinci14 \
--device=/dev/davinci15 \
--device=/dev/davinci_manager \
--device=/dev/hisi_hdc \
--device /dev/devmm_svm \
-v /usr/local/Ascend/driver:/usr/local/Ascend/driver \
-v /usr/local/Ascend/firmware:/usr/local/Ascend/firmware \
-v /usr/local/sbin/npu-smi:/usr/local/sbin/npu-smi \
-v /usr/local/sbin:/usr/local/sbin \
-v /etc/hccn.conf:/etc/hccn.conf \
-v /home:/home \
-v /disk1:/disk1 \
-v /disk2:/disk2 \
-v /disk3:/disk3 \
-v /opt:/opt \
-v /home:/home \
--entrypoint /bin/bash \
m.daocloud.io/quay.io/ascend/vllm-ascend:glm5-a3修复分支:
git clone <vllm-repo-url>
git clone <vllm-ascend-repo-url>| 仓库 | 分支 |
|---|---|
| vllm | MiniMax2.5 |
| vllm-ascend | MiniMax2.5 |
由于单算子模式需要频繁的算子下发,会带来 Host 瓶颈。为了缓解这一问题,使用 ACL Graph 图模式,做到一次捕获、多次重放,从而减少 CPU 和框架调度,提升吞吐。
异步调度特性 --async-scheduling 可以减少推理过程中的 token 与 token 之间的空泡等待,提升整体推理性能。
使能方法:启动推理服务时增加以下启动选项。
--async-scheduling通过此环境变量可配置 task_queue 算子下发队列是否开启和优化等级。
0 时:关闭 task_queue 算子下发队列优化。1 或未配置时:开启 task_queue 算子下发队列 Level 1 优化。Level 1 优化:使能 task_queue 算子下发队列优化,将算子下发任务分为两段,一部分任务(主要是 aclnn 算子的调用)放在新增的二级流水上,一、二级流水通过算子队列传递任务,相互并行,通过部分掩盖减少整体的下发耗时,提升端到端性能。
使能方法:
export TASK_QUEUE_ENABLE=1jemalloc 是一款内存分配器,与传统内存分配器(例如 glibc)相比,其最大优势在于减少内存碎片和提升多线程高并发场景下内存的分配效率,进而充分发挥多核多并发的优势。
在内存分配过程中,锁会造成线程等待,对性能影响很大。jemalloc 采用如下措施避免线程竞争锁的发生:使用线程变量,每个线程有对应的内存管理器,内存分配在该线程内完成,无需和其他线程竞争锁。
详细参考:Ascend CANN 安装指导 - jemalloc
使能方法:
export LD_PRELOAD=/usr/lib/aarch64-linux-gnu/libjemalloc.so.2:$LD_PRELOAD开启 HCCL AIV 模式,代表通信算法的编排展开位置在 Device 侧的 Vector Core,执行也在 Vector Core。
详细参考:HCCL_OP_EXPANSION_MODE 环境变量
性能提升效果:使能 AIV 模式后,TPOT 较使能前减少 8ms,吞吐提升 36%。
使能方法:
export HCCL_OP_EXPANSION_MODE="AIV"使能方法:
export VLLM_ASCEND_ENABLE_FUSED_MC2=1minimax_qkv_crosshead_norm_rope 融合算子接入接入前:
待补充图示。
接入后:
待补充图示。
投机解码采用小模型(Eagle3 微调)或者模型自带的 MTP 层进行投机解码,一次多输出几个 token 给主模型进行验证,保障主模型单次 Forward 能产生多个 token,从而降低平均 TPOT。投机解码是这次打到极低时延的最关键技术。由于 A3 代际访存对比友商(H20)有劣势,但是算力部分有优势,投机解码技术可以让模型一次输出多个 token,能够尽可能地把计算 workloads 往算力方向打(投机解码 n 步,主模型 verify 时 batch size 会被等效放大 n+1 倍),发挥我们在算力上的优势。
适配 PR:vLLM PR #37512
受限:
suffix 特性:
开启方法:
--speculative-config '{"method": "suffix", "num_speculative_tokens": 3, "suffix_decoding_max_cached_requests":2000, "suffix_decoding_max_tree_depth":32, "suffix_decoding_min_token_prob":0.4, "suffix_decoding_max_spec_factor":3}'待补充。
注意:性能数据仅供参考,以实测为准。
启动命令:
cd /workspace
export VLLM_ASCEND_ENABLE_FLASHCOMM1=1
export VLLM_ASCEND_ENABLE_FUSED_MC2=1
export HCCL_OP_EXPANSION_MODE="AIV"
export VLLM_ASCEND_ENABLE_TOPK_OPTIMIZE=1
export TASK_QUEUE_ENABLE=1
export VLLM_USE_V1=1
export HCCL_BUFFSIZE=2048
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True
export PYTHONPATH=/vllm-workspace/vllm:/vllm-workspace/vllm-ascend:${PYTHONPATH}
vllm serve /mnt/weight/MiniMax-M2.5-w8a8-QuaRot \
--served-model-name MiniMax-M2.5 \
--host <listen-host> \
--port 8567 \
--trust-remote-code \
--tensor-parallel-size 16 \
--quantization ascend \
--enable-expert-parallel \
--profiler-config \
'{"profiler": "torch",
"torch_profiler_dir": "/path/to/profiling",
"torch_profiler_with_stack": false}' \
--max-num-seqs 32 \
--enable-chunked-prefill \
--enable-prefix-caching \
--max-num-batched-tokens 32768 \
--compilation-config '{"cudagraph_mode": "PIECEWISE"}' \
--enable-auto-tool-choice \
--tool-call-parser minimax_m2 \
--reasoning-parser minimax_m2_append_think \
--additional-config '{"enable_weight_nz_layout":true, "multistream_overlap_shared_expert":true}' \
--enable-force-include-usage \
--prefix-caching-hash-algo sha256_cbor \
--block-size 128 \
--speculative-config '{"method": "suffix", "num_speculative_tokens": 3, "suffix_decoding_max_cached_requests":2000, "suffix_decoding_max_tree_depth":32, "suffix_decoding_min_token_prob":0.4, "suffix_decoding_max_spec_factor":3}' \
> /tmp/minimax-m25-serve.log 2>&1 &
tail -200f /tmp/minimax-m25-serve.log压测命令:
vllm bench serve \
--backend openai-chat \
--model MiniMax-M2.5 \
--served-model-name MiniMax-M2.5 \
--tokenizer /mnt/weight/MiniMax-M2.5-w8a8-QuaRot \
--percentile-metrics ttft,tpot,itl,e2el \
--dataset-name random \
--max-concurrency 10 \
--num-prompts 20 \
--endpoint /v1/chat/completions \
--base-url http://<server-host>:8567 \
--seed 10049 \
--ignore-eos \
--random-input-len 102400 \
--random-output-len 1024 \
--random-range-ratio 0 \
--random-prefix-len 0| 模型 | 数据集 | 精度数据 |
|---|---|---|
| MiniMax-2.5 | GPQA-Diamond | 84-86,存在波动 |
通过叠加多种优化策略,MiniMax 2.5 模型的推理性能得到提升。测试结果显示,经初步性能调优后,基于 A3 实测在 MiniMax2.5-w8a8 模型的单卡吞吐较开箱性能提升了 x 倍以上。