vllm-ascend a71b766ce 逐项映射到代码目录 / 参数 / 教学页 2026-10-15 发布 · 对照基线 a71b766ce / bbd7c24
怎么读:vllm-ascend 的特性全景表按 L0 分为两条线——模型特性由 GLM 模型结构升级驱动、随模型走;框架特性由 vLLM 上游演进驱动、对所有模型生效。 ①全景架构图给出三层结构与两条线的职责边界;②以三个真实特性为例,对照两条线的功能链与归属判断; ③~⑥为查表区(逐格映射、缩写、params 对照、GLM 重点格)。代码落点均按 a71b766ce 核对。
| 特性族 | 职责(一句话) | 主要代码落点 |
|---|---|---|
| 并行切分 | 制定切分方案,保证通信组语义与数值正确 | distributed/parallel_state.py、attention/context_parallel/ |
| 量化加速 | 将 ModelSlim 量化方案在昇腾算子上实现并完成数值对齐 | cache_config.py、sfa_v1.py、quantization/methods/w8a8/ |
| multi stream | 设计事件流水,重叠 Cube/Vector 计算空隙 | ops/fused_moe/shared_experts.py、attention/dsa_v1.py |
| weight NZ | 将权重转换为矩阵单元友好的 NZ 布局 | weight_nz_mode 消费方(权重加载 / 层初始化) |
| 融合算子 | 合并固定算子组合,并完成等价性验证 | attention/mla_v1.py、compilation/passes/、ops/triton/ |
| 阶段(框架特性) | 职责(一句话) | 主要代码落点 |
|---|---|---|
| 加载 | 高效载入权重:多线程 / lazy / NZ 转换 | model_loader/ |
| 调度 | 请求切块、调度与执行流水、DP 实例均衡 | core/scheduler*、patch_dyntra_lb_core.py |
| 缓存 | KV 前缀复用、分层卸载、池化与块管理 | distributed/kv_transfer/、core/kv_cache_interface.py |
| 执行 | 绑核、图捕获回放、静态内核与新执行底座 | compilation/、worker/v2/model_runner.py |
| 解码部署 | 草稿解码、采样优化、PD 分离与 KV 传输 | spec_decode/、sample/、kv_transfer/kv_p2p/ |
| 横切 | MoE 专家摆放均衡(后台循环驱动) | eplb/ |
两条线的划分依据是代码变更的驱动方:模型特性的变更由 GLM 模型结构升级驱动
(如 SFA 相关文件位于平台层,但由 GLM 稀疏注意力结构驱动,仍属模型特性线);
框架特性的变更由 vLLM 上游演进驱动(如 cache_config.py 的 C8 派生逻辑对所有模型生效,
属框架特性线)。投机解码等跨界特性按子项拆分:方法框架属框架特性线,GLM 的 MTP 头适配属模型特性线。
DP(Data Parallelism,数据并行)就是把整套模型复制多份,每份叫一个 DP 实例,各处理各的请求:新请求到来时由负载均衡(DPLB)分给最闲的实例,实例之间互不干扰,吞吐量跟着实例数涨。实测环境 TP=16、DP=4,就是 4 份完整的 16 卡副本同时服务。注意 DP 本身不切模型、只切请求——真正要按模型结构动刀的,是每个实例内部的层内切分与通信插入(下面功能链里带 ★ 的三步)。所以「DP 归哪条线」不是一句话能答的,得拆开看每个功能点。
patch_balance_schedule.pypatch_dyntra_lb_core.py:气泡超 bubble_threshold=5.0% 才触发块级迁移;只算各实例排队块数,与模型无关parallel_state.py 管理结论:六个功能点中 3、4、5 三个是 GLM 适配点——它们决定 DP 在 GLM 上能否切对、跑快,更换模型即失效, 因此该特性归模型特性线。链路中的请求分发(功能点 1,DPLB)虽在同一条链上, 但为通用机制,单独归框架特性线——同一条链上两类功能点各归各线。
MoE 模型的专家是路由制:每个 token 只去少数几个专家,于是天然不均——热门专家被挤爆、所在卡算力打满,冷门专家闲着,整卡的吞吐被最忙的一张卡拖住。EPLB(Expert Parallelism Load Balancer,专家负载均衡)干三件事:每 600 步统计一次各专家的 token 路由热度 → 按热度给过热专家复制冗余副本、重新摆放到空闲卡(专家权重 NPU 间 D2D 直接搬移)→ 对上层模型接口零改动,配置只有 eplb_config 一个入口。它只看负载统计、不看模型结构——这个特点决定了它的归属。
eplb_config 一个入口;GLM MoE 上线即被覆盖,无需任何适配eplb_updator 每 600 步统计eplb_updator 每 600 步读一次各专家路由计数([num_experts] 一维向量),只读统计值policy_flashlb.py:以 μ+z·σ 判据policy_flashlb.py 按 μ+z·σ 定各专家冗余份数(受 max/min_replica 约束),输出「专家→卡」摆放表结论:EPLB 全链路没有任何 GLM 适配点——专家均衡只看负载统计,不看模型结构, 因此归框架特性线:由框架特性线负责开发,GLM 侧只做配置与问题反馈。
一个 3500 token 的长 prompt,如果 prefill 一口气算完,这几百毫秒里整卡都被它占住,同批的 decode 请求全部干等——长请求的 TTFT 没快,别人的 TPOT 却被拖爆。chunkPrefill(长输入切块预填充)把长输入按固定块大小切块(如 1024,由 profiling_chunk_config 配置),一次前向只算一块:块 1 算完写 KV 就让出算力,下一轮调度再算块 2,拿着块 1 的 KV 续算,注意力跨块连续。长请求被摊进多个调度轮,decode 不再被长 prompt 卡死。它处理的对象只有「请求与块」,不接触模型结构。
profiling_chunk_config 配置——GLM 侧唯一的动作就是按长文本场景调它profiling_chunk_config:结论:chunkPrefill 的每个功能点都只处理「请求与块」,不接触模型结构——GLM 在链上没有任何 需要按自身结构实现的内容,因此归框架特性线;GLM 侧唯一的动作是按长文本场景 调整块大小参数(profiling_chunk_config,params-01)。
| L1 | L2 | 是什么 | 代码落点 | 关键参数 | 教学页 |
|---|---|---|---|---|---|
| 并行切分 | DP+TP+EP+SP | 四种基础并行维度:数据/张量/专家/序列并行 | vLLM parallel_config + distributed/parallel_state.py | parallel_config.* | params-05 |
| LmHeadTP + WdEbTP | 词表投影/词嵌入的细粒度切分(大词表模型单独选份数) | ascend_config.py FinegrainedTPConfig | lmhead/embedding_tensor_parallel_size | params-05 | |
| O_proj_tp | 注意力输出投影细切 | 同上 | oproj_tensor_parallel_size | params-05 | |
| PCP + DCP | 预填充上下文并行 / 解码上下文并行(KV 按 sequence 维切分,PCP 切长输入、DCP 切解码历史) | attention/context_parallel/(common_cp/dsa_cp/dsa_v41_cp) | prefill/decode_context_parallel_size、enable_dsa_cp | DCP 学习材料 | |
| PP + CPP | 流水线并行(按层切)+ CP×PP 组合形态(CPP 全称仓库内无定义,待确认) | pipeline_parallel_size | pp | — | |
| kv pp | KV 传输支持流水线(mooncake 层间池过 PP) | kv_transfer/kv_p2p/mooncake/pull_worker.py | — | — | |
| 量化加速 | attention + indexer | ★ SFA 主 KV / Lightning Indexer K 的 C8 打包量化 | attention/sfa_v1.py、indexer.py | cache_dtype / indexer_kv_dtype(派生 sfa_c8/li_c8) | params-04 |
| moe | MoE 权重/激活 W8A8 量化路径 | quantization/methods/w8a8/ | ModelSlim 量化配置 | — | |
| kvcache | KV cache 量化(cache_dtype) | vllm cache_config + sfa 打包 | cache_dtype | params-04 | |
| multi stream | moe 双流 | ★ 共享专家双流 / DSV4 DSA prolog 双流(Vector/Cube 交替空隙填满) | ops/fused_moe/shared_experts.py、attention/dsa_v1.py:1919 | multistream_overlap_shared_expert、multistream_dsv4_dsa_overlap | params-02 |
| weight NZ | moe | MoE 权重 NZ 布局(矩阵单元原生格式) | weight_nz_mode 消费方(权重加载/层初始化) | weight_nz_mode | — |
| attention | 注意力权重 NZ 布局 | ||||
| 融合算子 | moe | ★ 分组矩阵乘+SwiGLU+量化融合(gmmswigluquant) | quantization/methods/w8a8/w8a8_dynamic.py、ops/fused_moe/ | ascend_fusion_config.fusion_ops_gmmswigluquant | params-03 |
| attention | ★ MLAPO 全前处理融合 + 图 pass(qknorm_rope / norm_quant) | attention/mla_v1.py、compilation/passes/ | enable_mlapo、fuse_qknorm_rope、fuse_norm_quant | params-03 | |
| triton 优化 | Triton kernel 层的优化(批不变、indexer 辅助、卸载 gather 等) | ops/triton/ | — | — |
| L1 | L2 | 是什么 | 代码落点 | 关键参数 | 教学页 |
|---|---|---|---|---|---|
| 权重加载 | — | 多线程加载 / lazy 加载 / NZ 转换 | model_loader/ | enable_multithread_load、safetensors_load_strategy | — |
| prefixcache | — | 前缀缓存命中(相同前缀复用 KV) | vLLM KVCacheManager + ascend patch | enable_prefix_cache | — |
| chunkPrefill | — | 长输入切块分步预填充(Ascend 增强:实测调 chunk 大小) | core/scheduler_profiling_chunk.py | profiling_chunk_config | params-01 |
| kv offload | — | ★ 稀疏 KV 分层卸载(全量下沉 DRAM + topk 常驻缓冲) | attention/sfa_kv_offload.py、kv_transfer/sparse_kv_offload/ | sparse_kv_offload_config | params-04 |
| 池化 | — | KV Cache Pool(层间/远端池化存储,配合 PD 传输) | kv_transfer/kv_pool/、attention/indexer_kpool.py | — | — |
| DPLB | — | ★ DP 实例负载均衡(数量均衡 + 块级气泡迁移) | patch/platform/patch_balance_schedule.py、patch_dyntra_lb_core.py | enable_balance_scheduling、dyntra_lb_config | params-01 |
| EPLB | — | ★ 专家负载均衡(热度收集 → FlashLB 重排 → D2D 搬权重) | eplb/(eplb_updator、policy_flashlb) | eplb_config | params-05 |
| 异步调度 | — | 异步调度器(调度与执行两步流水,减少 CPU 等待) | core/recompute_scheduler.py(AsyncRecomputeScheduler) | — | params-01 提及 |
| cpu 侧优化 | FastToken | CPU 侧 token 处理加速(不在 vllm-ascend 仓库内,外部/配套库) | —(外部库) | — | — |
| CPU bind | ★ worker 进程绑核(防 OS 漂移抖动) | cpu_binding.py、worker/worker.py:931 | enable_cpu_binding | params-02 | |
| 图优化 | 图基础功能 | ACL Graph 捕获/回放基础链路 | compilation/compiler_interface.py、worker/worker.py | — | params-06 |
| static_kernel | MoE 静态内核(形状预编译) | ops/fused_moe/routed_experts.py:376 | enable_static_kernel | params-06 | |
| supper_kernel(sic) | Super Kernel(#16885;原表拼写为 supper)——与 static_kernel 是 validator 别名关系 | 同上 | enable_super_kernel | params-06 | |
| fusion_pass | ★ 图融合 pass ×3(norm_quant / qknorm_rope / muls_add) | compilation/graph_fusion_pass_manager.py、compilation/passes/ | fuse_norm_quant 等 | params-03 | |
| 投机解码 | mtp | Multi-Token Prediction 草投头(DeepSeek/GLM 自带) | models/deepseek_mtp.py 等 | speculative_config | params-07 |
| dspark | ★ 置信头 + 动态验证预算步数(无图模式) | spec_decode/dspark_proposer.py、models/deepseek_v41/dspark.py | dynamic_spec_config.method=dspark | params-07 | |
| eagle | EAGLE 系草稿 | spec_decode/eagle_proposer.py | — | — | |
| dflash | DFlash 草稿(动态步数另一方法) | spec_decode/dflash_proposer.py | dynamic_spec_config.method=dflash | params-07 | |
| 拒绝采样 | 验证 kernel(块验证/熵验证 + 两旋钮) | sample/rejection_sampler.py | rejection_sampler_config | params-07 | |
| kv cache 管理 | — | ★ 四槽层外置分配器 / 块管理 / KV 管理器(V4.1 的 KV+索引K+scale 同页打包) | core/kv_cache_interface.py、models/deepseek_v41/cache_config.py | — | params-04 |
| PD 分离 | PD 配比寻优 | P/D 实例数与配比的性能寻优 | 部署层(kv_transfer 配置 + 基准) | kv_role | — |
| kv_connector | KV 传输连接器(mooncake / RD2H / 层间池) | distributed/kv_transfer/kv_p2p/、kv_pool/ | kv_transfer_config | params-04 | |
| Sample | — | 采样器(分片去重 reduce_sample 等) | sample/sampler.py | enable_reduce_sample | params-01/07 |
| model_runner_v2 | — | 新一代模型运行器(MRV2:与 MRV1 并行的新执行底座,近期大量特性优先落 MRV2) | worker/v2/model_runner.py | use_v2_model_runner | — |
| 缩写 | 全称 / 含义(已按仓库核对) |
|---|---|
| PCP | Prefill Context Parallelism——预填充侧上下文并行(切长输入);上游字段 prefill_context_parallel_size;配套 enable_pcp_o_proj_weight_sharding |
| DCP | Decode Context Parallelism——解码侧上下文并行(切解码历史 KV);decode_context_parallel_size;vllm-ascend 实现 dsa_v41_cp.py |
| CPP | 两个仓库的并行配置里均无此字段。按上下文推断为 CP(上下文并行)叠加 PP(流水线)的组合形态——全称待确认 |
| WdEbTP | Word Embedding TP=词嵌入的张量并行切分(= embedding_tensor_parallel_size) |
| FastToken | 不在 vllm-ascend 仓库内——CPU 侧 token 处理加速的外部/配套库(与 tokenizer/detokenize 链路相关) |
| 池化 | KV Cache Pool=KV 的池化存储(层间池 layerwise / 远端池 ascend_store,配合 PD 传输);distributed/kv_transfer/kv_pool/ |
| DPLB | DP Load Balancer=DP 实例负载均衡(balance 调度 + dyntra 气泡迁移) |
| supper_kernel | 原表拼写,代码里是 Super Kernel(PR #16885);与 static_kernel 是 validator 别名 |
| MRV2 | Model Runner V2=新一代模型运行器(worker/v2/model_runner.py) |
已完结的 params 系列(八类总览)正好是特性表 带参数视角的子集——特性表按"特性交付"分格,params 按"配置开关"成篇,两种视角互查:
| params 篇 | 覆盖特性表的格子 |
|---|---|
| params-01 调度 | 框架:chunkPrefill(profiling_chunk)/ DPLB / 异步调度(提及)/ Sample(reduce_sample)/ kv cache 管理(mega_moe 容量申报) |
| params-02 多流 | 模型:multi stream(moe 双流);框架:cpu 侧优化(CPU bind) |
| params-03 算子融合 | 模型:融合算子(moe / attention);框架:图优化(fusion_pass) |
| params-04 KV 与稀疏 | 模型:量化加速(attention+indexer / kvcache);框架:kv offload / kv cache 管理 / PD 分离(kv_connector) |
| params-05 并行与均衡 | 模型:并行切分(LmHeadTP/WdEbTP/O_proj_tp);框架:EPLB |
| params-06 图模式 | 框架:图优化(图基础功能 / static_kernel / super_kernel;fusion_pass 见 params-03) |
| params-07 投机解码 | 框架:投机解码(mtp / dspark / dflash / 拒绝采样) |
| params-08 精度一致性 | (特性表外延伸):RL 训练场景的批不变与跨框架一致 |
特性表里本系列还没讲的格子(后续选题):PCP+CPP(上下文并行流水线)、 kv pp、weight NZ(moe/attention)、triton 优化、权重加载、prefix cache、池化、FastToken、 PD 配比寻优、model_runner_v2。
结合 GLM 系模型的结构特性(KDA 注意力 / 稀疏索引 / MLA / MoE / 1M 上下文),特性表里 与 GLM 强相关的重点格(也是精度与性能问题的高发区域):