Skip to content

模型库与算子层 — 概念

Model Registry — model_executor/models/registry.py

vLLM 使用注册表模式将 HuggingFace 架构名映射到模型实现:

注册机制

python
# 简化的注册
@ModelRegistry.register("LlamaForCausalLM")
class LlamaForCausalLM(nn.Module):
    ...

模型目录隔离

部分模型因特殊硬件依赖(自定义 CUDA kernel、ROCm 特化注意力)从 model_executor/models/ 移到独立包 vllm/models/。该目录已固化为厂商分发的供应商模式vllm/models/<model>/<vendor>/(vendor ∈ nvidia/amd/xpu/common),模型根 __init__.py__getattr__ 惰性按 current_platform.is_rocm()/is_xpu() 分发到对应实现;registry 条目形如 "Glm5NextForCausalLM": ("vllm.models.glm5next", ...),MTP 草稿模型单独注册(Glm5NextMTPModel/Qwen4ExpMTP/KimiK3MTPModel 等)。2026 年 8 月起新入驻的旗舰模型基本都走这个模式:

模型位置架构要点
DeepSeek V4vllm/models/deepseek_v4/DSA 稀疏 MLA + DCP;本期大改:VL 多模态(nvidia/vl_model.py,DeepSeek-V4-Flash-Vision-Exp)、FlashInfer moe_ep expert backend、common 上移
Kimi K3vllm/models/kimi_k3/KDA 线性注意力 + MLA(NoPE)混合 + latent MoE(详见下文 KDA 小节)
GLM-5.3-Flashvllm/models/glm5next/KDA + NoPE MLA + 稀疏 MoE + MHC 矩阵超连接 + Kpool 稀疏索引器 + 多模态 + MTP
Qwen3.8-Flash-Nextvllm/models/qwen4_exp/混合层 + hyperconnection(4 残差流)+ QSA 无权重稀疏索引器(n-gram + 分页 side-cache)+ PLE 层 + EAGLE MTP;nvidia/amd 双实现各约 6000 行
HY-V4vllm/models/hy_v4/MLA + DSA(shared indexer 复用)+ 可学习 attention sink + iHC 独立超连接 + 大型 MTP
MiniMax-M3vllm/models/minimax_m3/稀疏注意力(MSA + indexer,CUTLASS 稀疏 decode)+ Gemma RMSNorm;AMD 侧 index_topk 重写
DeepSeek V3.2vllm/models/deepseek_v32/DSA 稀疏注意力;attention/kernels 从 nvidia/ 上移 common/,amd 全新实现
Dots3 NOTEvllm/models/dots3_note/原生多模态(音视频 + 视觉 MoE)

仍在传统目录的代表性新模型:K2 Horizonk2_horizon.py,GQA + MoVA:V 专家 top-k 路由注意力 + sparse MoE + EAGLE MTP)、Bailing-MoE-V3(MLA + 复用 Kimi KDA 层的混合 + MTP)、Muse Glimmermuse_glimmer.py,Qwen3 系文本 + iRoPE + 视觉稀疏 block attention,强 tool-use)、Sarvam MLA(MLA MoE,EAGLE3 + torch.compile)、Cohere Compass(视觉文档检索,见 topics/serving/)。共享算子上提到 vllm/models/common/ops/(fused_allreduce_rms_norm、fused_qk_rmsnorm、sequence_parallel)。

Registry 通过 _resolve_module_name() 支持完全限定模块路径,自动定位外部模型包。旧版 MiniMaxText01 / M1 / VL01 已在 v0.23.0 标记弃用,由 MiniMax-M3 取代。

DSv4 的 CuTe DSL 类型转换原语(bf16x2/fp32 互转等 PTX 内联汇编)已从 deepseek_v4/nvidia/ops/cutedsl_utils.py 上移到全局 vllm/cute_utils/cvt.py,供 sparse MLA compressor 等多个子系统复用。DeepEncoder(Sovl/DSv4 视觉编码器)的 2D 相对位置偏置也已熔进 Triton attention(#55629:deepencoder_rel_pos_attention 直接在打分时算 rel_h+rel_w,省掉显式 bias 张量物化)。

模型接口 Mixin

vLLM 通过 Mixin 接口声明模型的能力:

Mixin说明
SupportsLoRA支持 LoRA 适配器
SupportsMultiModal支持多模态输入
SupportsMRoPE支持多维旋转位置编码
SupportsPP支持流水线并行
HasInnerState有内部状态(如 Mamba)

注意力层

层次结构

运行时后端选择

AttentionBackendSelector 根据以下条件选择后端:

  • 硬件平台(CUDA、ROCm、CPU)
  • 模型配置(head_dim、sliding window)
  • 是否启用 CUDA Graph

按 KV-cache group 选后端AttentionConfig.backend_per_kind,#48012):同一模型的不同层组(full-attn / MLA / sliding-window / encoder-only / cross)现可指定不同后端。get_attn_spec_kind()v1/attention/selector.py)从层信号(use_mlahas_sliding_windowattn_type)推导出 KVCacheSpecKind,selector 据此查 backend_per_kind 解析每个 group 的后端。

KV-Cache 布局统一

v0.26 推进了一次跨后端的 KV-cache 内存布局标准化(#44455/#44456):K/V 按 content dim 跨后端统一打包(涉及 FlashAttention/FlashInfer/trtllm/minimax-m3 内核与 fusion_attn 编译 pass),Mamba cache 标准化并移除旧的 get_transfer_cache_regions。这是后续多项 perf/transfer 优化(含前缀缓存卸载的页传输)依赖的基础布局变更。该重构随后收官(#51612/#51704/#51718,RFC #42082):backend 的 get_kv_cache_shape() 等布局方法被 supported_kv_cache_layouts() + customize_spec() 取代,统一由 KVCacheLayout 枚举(v1/kv_cache_layout.py,逻辑形状 [L,B,H,N,C])描述并在 engine core 一次性解析——详见 topics/kv-cache/concepts 的「KV-Cache 布局标准化」。

核心操作

注意力层需要实现两种操作:

  1. Prefill:处理完整 prompt 的注意力
  2. Decode:单 token 的增量注意力

混合模型(Mamba + Attention,如 Jamba、Granite-Mamba)曾因 FlashAttention 的 NaN 传播 bug,在 FP32 Mamba 缓存下被限制为仅 [16, 32, 64] 三种 block size;该限制现已移除,统一放宽为 MultipleOf(16)v1/attention/backends/flash_attn.py),使混合模型也能用 128/256 等更大的 block size 以提升 KV 缓存利用率。

线性层

vLLM 的线性层支持多种并行和量化模式:

权重加载

vLLM 支持多种权重格式:

加载器支持格式
default_loaderHuggingFace safetensors/bin
gguf_loaderGGUF 格式
bitsandbytes_loaderBitsAndBytes 量化权重
tensorizer_loaderTensorizer 序列化

Fused MoE — model_executor/layers/fused_moe/

Mixture of Experts 模型的核心优化:

关键优化:

  • Fused Kernel:将 router + expert 计算融合为单个 CUDA kernel
  • Expert Parallelism:专家可以分布在多个 GPU 上
  • 负载均衡:动态调整专家分配以平衡计算负载
  • Elastic EP(弹性专家并行):支持动态扩展/缩减 EP 大小,无需中断服务
  • 双流 LoRA:MoE 的 base GEMM 和 LoRA delta 使用不同 CUDA 流并行执行

MoE 层重构:控制反转(v0.23 最大架构变更)

layer.py(约 1648 行)瘦身为 412 行的协调器,FusedMoE 不再是单一 nn.Module 子类,而是组合三个可插拔组件(commit dc68bd8c4):

  • FusedMoERouterrouter/):专家路由,含 grouped-topk、bias-topk 等变体,经 router_factory 创建。
  • RoutedExpertsrouted_experts.py):持有 w13/w2 等专家权重并委托 FusedMoEMethodBase.apply() 执行。
  • MoERunnerrunner/moe_runner.py):实现 MoERunnerInterface 抽象契约,统一 forward / 共享专家 / 量化方法接口。

MoE 后端矩阵

后端实现全部下沉到 vllm/model_executor/layers/fused_moe/experts/ 子包(30 个文件):

后端文件精度硬件说明
triton_moe.pyFP16/BF16NVIDIA默认后端,支持双流 LoRA
cutlass_moe.pyW4A8 (FP8 act)NVIDIA通过 oracle 框架路由
hpc_moe.pyFP8NVIDIA SM90+Tencent HPC-Ops 库(融合 gate-up+down),--moe-backend hpc
flashinfer_b12x_moe.pyNVFP4 (W4A4 / W4A16)SM12x (Blackwell)融合 dispatch+GEMM+SwiGLU;W4A16 模式在 kernel 内合成 uniform 激活缩放
flashinfer_cutedsl_*_moe.pyNVFP4NVIDIAFlashInfer CuTeDSL GEMM 后端
marlin_moe.pyAWQ/W4A16NVIDIAINT4 量化专家
fused_humming_moe.py16 种 W×A 组合(MXFP4/NVFP4/MXFP8/FP8 per-channel/128-block/INT4/INT8 权重 + 可选 FP8 动态激活)NVIDIA/ROCmRed Hat Humming 库,专家继承 FusedMoEExpertsModular,声明 expects_unquantized_inputs=True(kernel 内部自量化,避免重复量化)
rocm_aiter_moe.pyFP16/BF16AMDROCm 特化实现,支持 FSE(融合共享专家)
trtllm_nvfp4_moe.pyNVFP4NVIDIAclamped NVFP4 后端
xpu_moe.py / cpu_moe.pyFP8 W8A16 / MXFP4 W4A16 / INT4 W4A16 / INT8 W8A8Intel/CPU对应平台后端;CPU INT8 经 Intel VNNI 预打包(CPUExpertsInt8prepare_int8_moe_layer_for_cpu),oracle 按平台把 Int8MoeBackend.CPU 排在 CPU 首位

用户通过 --moe-backend 显式指定后端(取值在 config/kernel.pyMoEBackend Literal 中注册,如 triton/cutlass/hpc/flashinfer_b12x/humming 等),未指定时由 oracle 按硬件/精度自动排序选择。

Humming 标准化为一等后端(PR #43373):Humming 专家从此完全对齐 vLLM 的模块化 kernel 架构 —— 继承 FusedMoEExpertsModular、实现标准 apply() 签名(注:Humming 通过 HummingMethod.forward_layer() 直接从 layer 对象读权重,忽略传入的 w1/w2),通过显式 SUPPORTED_W_A 矩阵声明 16 种量化组合,并由 oracle 框架按 QuantKey 能力协商。所有权重/输入 schema → QuantKey 的转换逻辑抽取到 quantization/utils/humming_utils.pyweight_schema_to_quant_keyinput_schema_to_quant_keyconvert_to_humming_moe_kernel_formatselect_humming_moe_expertsmake_humming_moe_kernel),使 Humming 与 Triton/CUTLASS/FlashInfer/HPC 走同一套 kernel/oracle/quant 选择链。

Oracle 框架

MoE 后端选择通过 oracle 模式统一管理,按精度类型分散为 oracle/{fp8,int8,int_wna16,mxfp4,mxfp8,nvfp4,unquantized,w4a8,w4a8_int8}.py

oracle 现以 MoEKernelOracle 抽象基类(oracle/base.py)标准化契约 —— 每个量化方案一个子类,强制实现 backend_enum_clsget_priority_backendsbackend_to_kernel_clsmap_backendselect_backendmake_kernel 六个方法,把"用户 MoEBackend 字符串 → 本精度枚举 → kernel 类"整条选择链收敛进 oracle,后续按精度逐步迁移。各后端通过 supports_expert_map()_supports_quant_scheme()_supports_activation()_supports_parallel_config()_supports_current_device() 等方法声明能力,oracle 据此按硬件/精度优先级排序(_get_priority_backends())自动选择最优后端。例如 oracle/nvfp4.pyselect_nvfp4_moe_backend() 对 clamped model 在不支持 clamp 的后端上明确报错并建议 flashinfer_trtllm

共享专家融合(Fused Shared Experts)

带共享专家(shared expert)的 MoE,其共享专家不再作为独立线性层单独发射,而是把权重追加进分组 GEMM,router 的 topk 内核在固定槽位为共享专家发射常权重(如 1.0),从而一次融合 GEMM 同时产出 routed + shared 专家输出(runner/shared_experts.pyrouter/fused_topk_bias_router.pynum_fused_shared_experts)。非 ROCm 平台则改用 MULTI_STREAM_OVERLAPPED 模式在独立 CUDA 流上把共享专家与路由专家重叠(受 VLLM_SHARED_EXPERTS_STREAM_TOKEN_THRESHOLD 控制何时启用,VLLM_DISABLE_SHARED_EXPERTS_STREAM 可关闭用于调试)。

Gated DeltaNet (GDN) — model_executor/layers/mamba/gdn/

GDN 子系统支持混合注意力模型中的线性注意力层:

  • 各模型共享 GatedDeltaNetAttention 基类,实现自己的线性注意力变体
  • 支持 CPU 后端 (mamba/ops/cpu/gdn_attention.py);SM120(RTX 50 系)且 head_k_dim==128 时启用 FlashInfer GDN prefill kernel(#55715,此前 in-tree CuteDSL prefill 仅针对 SM100)

KDA(Kimi Delta Attention)

Kimi Linear 系的线性注意力/SSM 层,本质是 Gated Delta Rule NetworkKimiK3DeltaAttention 继承 GatedDeltaNetAttentionmodels/kimi_k3/nvidia/kda.py),带 causal_conv1d 短卷积前缀 + chunked delta rule 递归,状态含 conv_state 与 (K,V) 递归态(MambaStateShapeCalculator.kda_state_shape)。chunk 扫描内核在 models/kimi_k3/nvidia/ops/third_party/kda/(AMD 有移植版),GLM-5Next 复用同一套(models/glm5next/*/ops/third_party/kda/),Bailing MoE V3 经 PluggableLayer 直接复用。K3 私有变体要求 use_full_rank_gate(full-rank 门控),自带 KimiK3KDAAttentionBackend/KimiK3KDAMetadata。内核后端可插拔(#55364):--kda-prefill-backend {auto,triton,flashkda,flashinfer} / --kda-decode-backend {auto,native,flashinfer,triton},其中 FlashInfer 路径接 flashinfer.kda.recurrent_kda(prefill)与 fused_kda_decode(decode)。推测解码后的状态恢复走 KDA ReplaySSM(见 topics/speculative-decoding/)。

线性注意力(Linear Attention)— mamba/linear/

除 GDN(gated delta net)外,mamba/linear/ 是并列的独立子系统,提供通用 LinearAttention 基类(linear/base.py),用于非门控的线性/闪电注意力变体,目前实现 Bailing(百川,含 partial RoPE)与 MiniMaxText01(lightning attention)两种。

MLA 与 Sparse MLA(DSA)

MLA prefill 支持 FlashAttention 4 FP8 输出;通过 stride-aware kernel 重新启用跨层 KV cache 布局。DeepSeek V4 的 sparse MLA metadata 从 DSv3.2 解耦为独立模块(vllm/models/deepseek_v4/sparse_mla.py),其 KV cache 按块连续打包,并新增低延迟 cluster-cooperative topK kernel。ROCm 新增 MLA prefill 后端 ROCM_AITER_FAv1/attention/backends/mla/prefill/aiter_flash_attn.py),直接调 aiter.flash_attn_varlen_func,原生支持 MLA 不对称的 Q/K(192) vs V(128) head_dim 而无需 padding,在 ROCm 平台优先级最高。

MLA decode(v1/attention/backends/mla/triton_mla.py)采用 split-KV 策略:把 KV 序列切成 num_kv_splits 段各产部分 logits 再合并,logits 缓冲 shape 为 (B, q_heads, num_kv_splits, kv_lora_rank+1)(+1 存 LogSumExp)。该缓冲改为在 TritonMLAMetadataBuilder.__init__ 时从共享 workspace 按最坏情况(max_model_len × max_num_seqs × max_splits)一次性预预留(current_workspace_manager().get_simultaneous()),运行时直接取用、消除每解码步的 torch.empty 分配;warmup 后 workspace 锁定,与 CUDA graph 捕获兼容。

DSA(DeepSeek Sparse Attention):DeepSeek V3.2 与 GLM-5(vllm/models/deepseek_v32/)在标准 MLA 之上叠加 lightning indexer(DeepseekV32Indexer,位于 deepseek_v32/nvidia/attention.py)—— 每若干层(index_topk_freq)用一个小型可学习投影(wq_b + wk_weights_proj + k_norm)对所有已缓存 KV token 打分,经 radix-sort 选出 top-k(index_topk,默认 2048)写入共享 topk_indices_buffer,后续 MLA decode 只对这 top-k 槽位做注意力,把全上下文 O(N) 降为 O(k)。配套的 Triton 融合内核 fused_indexer_q_rope_quantmodel_executor/layers/sparse_attn_indexer.py)把 indexer 的 RoPE、FP8 量化与 scale 折叠三合一;csrc/libtorch_stable/moe/dsv3_router_gemm_*.cu 为该模型族提供编译期展开的 Router GEMM。

Sparse MLA 后端:为 DSA 的 top-k 选择专门新增 decode-only 后端(均实现 SparseMLAAttentionImpl.forward_mqa,prefill 仍走稠密 MLA):

后端注册名硬件
FlashAttention MLA SparseFLASH_ATTN_MLA_SPARSEHopper(SM90)
FlashInfer MLA SparseFLASHINFER_MLA_SPARSE_SM120Blackwell(SM120,需 fp8 KV)
FlashMLA / ROCm AITER / XPUFLASHMLA_SPARSE / ROCM_AITER_MLA_SPARSE / XPU_MLA_SPARSE对应平台

模型配置含 index_topk 且硬件支持时自动选用;FLASH_ATTN_MLA_SPARSE 暂不支持 DCP。

MLA 后端族(v1/attention/backends/mla/)近期的重要增量:AITER(ROCm)MLA 推测解码达到 FULL cudagraphs(#51171)、FP8 asm MLA prefill 支持非整除小头数(#51040/#50578)、AITER sparse MLA 加 attention-sink(#54404)、DCP 下 causal multi-token verification(#51705);FlashInfer MLA — SM12x XQA decode(#49718)、DCP/DSpark(#54012/#54277);FA4 MLA(mla/prefill/flash_attn.py)— MLA chunked context 按请求调度(#50613)、K3 chunked-context K/V packing 融合(#51772);CPU 侧新增 AMX MLA(#52616,DSv2/v3/R1)。TurboQuant(KV cache 压缩,K 用质心码本 2-bit 量化 + V 存 FP16,混合缓存槽布局)在 AMD 侧补齐 FlyDSL decode kernel 与统一 prefill+decode Triton kernel(v1/attention/ops/turboquant_soa/,#47896);另新增 B12X causal paged attention 后端(backends/b12x.py,#52017)。Transformers 兜底后端也能正确施加 attention sinks 了(#52156:AttentionFuser 解析 HF 接口的 s_aux= sink 权重并按 TP 切分加载)。

GLM-5 / DSv3.2 算子融合(PR #46876):为榨干 DSA 每解码层的性能,NVIDIA 路径(新增 models/deepseek_v32/nvidia/kernels.py,823 行)把整层约 10 个独立 kernel 融成 3 个 Triton 内核 + 1 个 FlashInfer 融合:

  • fused_norm_rope:四路 program 并行 —— Q LoRA RMSNorm、KV LoRA RMSNorm+RoPE+MLA KV cache 写入(可选 FP8 量化)、indexer-K 的 LayerNorm+RoPE(兼容 GLM-5.2 interleaved 与 V3.2 NeoX 两种旋转)+ FP8 UE8M0 量化 + indexer cache 写入、top-k indices buffer 填 -1 哨兵。
  • fused_q:把 q_pe 的 RoPE+量化塞进 MQA query 尾部、ql_nope(W_UK^T 投影)量化塞进头部,一次产出 FlashInfer sparse 期望的单段连续 FP8 query 张量;indexer-Q 的 RoPE+量化+index 权重缩放折叠同路完成。
  • fused_eh_norm:MTP 草稿层把 position-0 embedding 置零、对 embeds 与 prev_hidden 各做 RMSNorm 后拼成 [N, 2H] 喂 eh_proj。
  • fused_allreduce_rms_normfused_ops.py):借 FlashInfer TRT-LLM fast path 把 TP all-reduce + 残差 + RMSNorm 三合一,用在 input_layernorm/post_attention_layernorm/最终 norm 三个边界。

关键设计是延迟 all-reduceo_proj 与 MoE runner 都设 reduce_results=False、MoE runner 新增 skip_final_all_reduce 标志,把本层 all-reduce 推迟到下一层 norm 里与 RMSNorm 一并融合执行。

旋转位置编码(RoPE)

vLLM 实现了多种 RoPE 变体:

变体适用模型
Default RoPELLaMA、Mistral
LongRoPE支持更长上下文
MRoPE多模态模型
Phi3 Long RoPEPhi-3

自定义 Inductor 融合 pass

vLLM 不只依赖 Inductor 的内置垂直融合,还在 compilation/passes/fusion/ 里实现了约 14 个面向 LLM 推理的图级融合 pass,经 PostGradPassManagercompilation/passes/pass_manager.py)挂到 Inductor 的 post_grad_custom_post_pass 钩子上,在 codegen 之前 对 FX 图做模式替换。基类链 InductorPass → VllmInductorPass → VllmFusionPatternMatcherPass 统一了 uuid()(源码哈希,进 Inductor 代码缓存)、计时/转储与 pattern-matcher 框架;每个融合用一对 pattern/replacement 闭包加示例张量声明(VllmPatternReplacement)。

按动机可分四组:(1) 算子 + 量化融合——把 RMSNorm / SiluMul / Attention 的输出与 FP8/NVFP4 量化折成一个 kernel 写出(rms_quant_fusion.pyact_quant_fusion.pyattn_quant_fusion.py + mla_attn_quant_fusion.py,后者把 output_scale 直接传给 unified_*_attention_with_output,省掉中间高带宽写回);(2) RoPE + KV-cache 写入融合——把 norm/RoPE 与 paged KV-cache 的 concat_and_cache* 合一,消除两者间的 kernel launch 与中间张量(qk_norm_rope_fusion.pyrope_kvcache_fusion.pyqk_norm_rope_kvcache_fusion.pymla_rope_kvcache_cat_fusion.py);(3) 集合通信 + RMS 融合——借 FlashInfer TRT-LLM fast path 把 TP all-reduce + 残差 + RMSNorm(+ 可选量化)合一,对应模型里的「延迟 all-reduce」设计(allreduce_rms_fusion.py),AsyncTPPasscollective_fusion.py)与 SequenceParallelismPass 则用 symmetric memory 融合 GEMM↔reduce-scatter / all-gather↔GEMM 并重写 SP 边界;(4) ROCm/AITER 特化rocm_aiter_fusion.py)。所有开关收敛在 CompilationConfig.pass_configconfig/compilation.pyfuse_* / enable_* 字段),configure() 按依赖顺序入队(例如 router-pad 融合必须在 all-reduce+RMS 之前),并按平台/精度自动启用。

这些融合 pass 能落地,离不开 piecewise 编译 + CUDA Graph 协同VllmBackendcompilation/backends.py)的 split_graph() 按 splitting_ops(注意力 / unified_kv_cache_update 边界)把 FX 图切成子模块,每个非切分子模块交给 PiecewiseBackendpiecewise_backend.py)按 compile_range(动态形状桶)预编译,运行时按 batch size 分派到对应产物;切分点正落在不能进 CUDA Graph 的注意力边界上,使每段都可被 CUDAGraphWrapper 捕获。另一条路径 breakable_cudagraph.pyVLLM_USE_BREAKABLE_CUDAGRAPH)不做 FX 预切,而是在整图 stream-capture 中用 eager_break_during_capture 装饰器在 attention/KV-cache op 处「断流」——结束当前段、eager 执行、再开新段,最终得到一串按序回放的零参 callable。

内核框架(Helion)

vllm/kernels/helion/ 是 Red Hat(Humming 同团队)贡献的 GPU kernel 编写 + 自动调优框架:用 Python DSL(helion.language/hl)写 kernel,经 @register_kernel 注册配置选择器、baseline 函数与逐配置 JSON 调优文件,编译并 autotune。首个 kernel(kernels/helion/ops/fused_qk_norm_rope.py,"[1/N]" 系列)在注意力前把 Q/K 的 RMSNorm 与 RoPE(兼容 NeoX / GPT-J interleaved)融合为单次 in-place 操作,附带 H100/B200 预调优配置。Helion 与 Humming(专注 MoE GEMM)互补,是新引入的 kernel 基础设施。

JIT 预热基础设施(VllmJitKernel)

v0.26 新增 vllm/model_executor/warmup/ 包(#46182/#47451/#49903),把 Triton/CuTeDSL 内核的 JIT 编译从「首请求触发」挪到启动 warmup 阶段,避免冷启动延迟。核心抽象是 VllmJitKerneljit_warmup.py,Generic ABC):子类实现 dispatch(构造一个编译 key)、get_warmup_keyscompile(只编译不 launch,Triton 走 warmup_inputs 假张量);基类对 dispatch 函数做 AST 追踪(_trace_dispatch),把 WarmupIntRange / zip_inputs 展开成具体的编译 key 网格,模块级单例 .register_warmup() 仅记录元数据,由 kernel_warmup()kernel_warmup.py)统一编排物化;谓词过滤(_when)与 provider registry 让各模型按需注册。编译进度经 vllm/config/kernel.py 配置,--jit-monitor-mode error 可在 CI 强制暴露漏注册的内核(#50109)。

2026-08 的 [warmup][DSv4] 四部曲把 DeepSeek-V4 相关内核全面迁入该框架:#50175(通用 MLA metadata/indexing 内核,mla/ 的 compressor/indexer/sparse_* 与 models/deepseek_v4/attention.py,删除旧的 sparse_mla_triton_warmup.py)→ #53564(sequence 与 DCP 内核:flash_linear_attention/ops/dcp_indexer_cutedsl.pyv1/attention/ops/{common,dcp}.pyv1/worker/block_table.py,新增 CuTeDSL helper jit_warmup_cutedsl_helper.py)→ #53565(FA4 MLA 与共享 CuTeDSL 内核,删除 fa4_cutedsl_warmup.py)→ #50176(common attention 内核:fused_qk_rmsnormdeepseek_v4/common/ops/ 的 cache_utils 等 6 个,+2978 行)。旧的「每模型手写 warmup 模块」随迁移逐个删除,未迁移的(kimi_k3_triton_warmupqwen_triton_warmupdeep_gemm_warmup 等)暂由 kernel_warmup() 兼容调用;运行时注册点就在模型代码里(如 attention.py_FUSED_Q_KV_RMSNORM_KERNEL.register_warmup())。FlashAttention 4 SM100 后端也在此期间新增了 headdim-256 与 FP8 KV cache 支持(#42669/#42569),其 MLA prefill 路径正接入这套 warmup。

相关概念