LLM的推理/transformer架构/vllm

LLM 推理的推理过程

目前主流LLM都是基于transformer的Decoder-only架构,因为 Decoder-only 架构在“大规模无监督预训练”这个特定范式下,展现出了更好的可扩展性(Scalability)和任务通用性。

LLM中输入到输出总体过程如下:
输入Token -> 嵌入 -> 加上位置编码 -> 通过N个Transformer层 -> 最终层归一化 -> 语言模型头 -> 概率分布 -> 输出Token

更加细节化看下面:

Details

  1. 输入嵌入层 (Input Embedding)
    核心作用:将离散的 Token ID 转换为连续的稠密语义向量。
  2. 位置编码注入 (Positional Embedding Injection)
    核心作用:通过旋转 Q/K 向量的特定维度,将绝对位置信息编码进相对注意力关系中。
  3. N 个 Transformer 层循环 (The Core Loop)
    A. 前置归一化 (Pre-Normalization):在不依赖批次统计量的情况下稳定激活值分布,加速收敛。
    B. 自注意力机制 (Self-Attention):
    线性投影:将输入投影到查询、键、值空间,并通过 GQA 策略压缩键值对以节省显存。
    RoPE 应用:赋予 Q 和 K感知相对位置的能力,实现长度外推。
    注意力分数计算:计算当前 Token 对所有历史 Token 的关注权重分布。
    加权求和:根据注意力权重从历史上下文聚合信息。
    输出投影:将聚合后的多通道信息融合并还原到模型隐藏层维度。
    C. 残差连接 1 (Add & Norm):将原始输入与注意力输出相加,保留原始信息流并缓解梯度消失。
    D. 前馈网络 (MLP / FFN):
    (Dense 模式):通过非线性变换提取高阶特征。
    (MoE 模式):动态路由至少量专家网络以实现条件计算和容量扩展。
    E. 残差连接 2 (Add & Norm):将 MLP 的输出加回主干,完成本层的完整更新。
  4. 最终层归一化 (Final Layer Norm)
    核心作用:在送入预测头之前,对最终隐藏状态进行标准化处理。
  5. 语言模型头 (LM Head)
    核心作用:将隐藏层语义向量解码为词表中每个 Token 的非归一化得分 (Logits)。
    概率分布与采样 (Softmax & Sampling)
    核心作用:将得分转化为概率分布,并根据策略随机或贪婪地选择下一个输出 Token。

transformer对应架构

组件 Encoder (编码器) Decoder (解码器)
层数 6 层 6 层
注意力机制 Multi-Head Self-Attention Masked Multi-Head Attention
交叉注意力 ❌ 无 ✅ Cross-Attention (让 Decoder 能够"关注"Encoder 的输出)
归一化 Add & Norm (每子层后) Add & Norm (每子层后)
前馈网络 Feed-Forward Feed-Forward
输出 上下文表示 (Context Vector) 概率分布 (Vocab Size)

🔹 Attention → QK^T 相似度,softmax 加权 V
🔹 Multi-Head → 多头并行,捕捉多模式
🔹 Position → 正弦编码,注入位置信息
🔹 FFN → 两层全连接,4 倍扩展维度
🔹 Norm+Res → 层归一化 + 残差,训练更深网络
🔹 复杂度 → O(n²) 是瓶颈,长序列需优化

对应公式:Attention(Q, K, V) = softmax(QK^T / √d_k) · V

部分 含义 维度
QK^T 查询 - 键相似度矩阵 而K^T主要是为了矩阵乘法的维度匹配和计算相似度。 n×n
√d_k 缩放因子,防止梯度消失 标量
softmax 归一化为概率分布 n×n
·V 加权求和得到输出 n×d_v

kvcache
原理:自回归生成时,把之前所有 token 已经算过的 K/V 矩阵缓存到 HBM,下次只算新 token 的 Q/K/V,然后拼接历史 K/V 做注意力,避免 O(n²) 重复计算。
数学公式:
简化版
KV_Cache_Size = 2 × num_layers × hidden_size × seq_len × batch_size × bytes_per_param

线程 / 多线程 / 协程:

维度 进程 线程 协程
操作系统可见
调度方 OS OS 用户空间(事件循环)
切换代价 最高(页表、内核) 高(内核态) 最低(用户态,只保存栈)
并行能力 ✅ 多核 ✅ 多核 ❌ 单线程内并发
典型场景 多核计算、故障隔离 I/O 密集、CPU 密集 高并发 I/O(异步)
一句话记忆 独立公司 项目组 个人
Python 模块 multiprocessing concurrent.futures.ThreadPoolExecutor asyncio

注意力机制

机制 核心思想 KV Cache 大小 显存/带宽 质量 典型应用 🔑 关键细节
MHA 每头独立 Q/K/V 投影 H·n·d 🔴 最高 🟢 基准 早期 Transformer 精度最高,但长序列显存爆炸
MQA 所有 Query 共享 1 组 K/V 1·n·d 🟢 最低 🔴 下降明显 早期推理优化 速度最快,但精度损失大,少用
GQA Query 分 G 组,组内共享 K/V G·n·d 🟡 中等 🟡 ≈MHA Llama2/3, GPT-4, Mistral 新默认:G=8 时显存↓8×,精度损失<1%
MLA 低秩投影:K/V→latent c→还原 R·n·d (R≪H) 🟢 比 MQA 更低 🟢 ≥MHA DeepSeek-V2/V3 在线投影:写入时 W_down 压缩,读取时 W_up 还原 + 解耦 Query 保表达

MLA 低秩投影
写入时: h → [W_down] → c (latent, dim=R) → 只缓存 c
读取时: c → [W_up] → K, V (dim=d) + 解耦 Query → Attention
优势: 缓存大小从 H·d 降至 R (R≈H·d/8),显存↓8×,且通过解耦设计精度反超 MHA

传统注意力 vs 线性递归 (GDN/KDA) + MoE 核心

维度 传统注意力 (MHA/GQA/MLA) 线性递归 (GDN / KDA) 稀疏 MoE
核心范式 softmax(QKᵀ/√d)·V + 显式 KV 缓存 线性递归:Sₜ = α·Sₜ₋₁ + kₜ·vₜᵀ + 隐式状态 Top-K Router + 专家 FFN 并行
记忆存储 显式存每 token 的 K/V 向量 隐式存递归状态矩阵 S (d×d) 不存历史,每步只激活部分参数
内存-长度 O(n):n 多长 cache 多大 O(1):n 再长也只占 d×d 常数 O(1):激活参数固定,与 n 无关
长文本外推 需 RoPE/NTK/ALiBi 等位置修正 递归天然带衰减 α<1,外推更稳 与长度无关,靠专家容量扩展
门控机制 无(除 MLA 投影) GDN: 头级标量门 / KDA: 通道级向量门 Router: Top-K 专家选择 + 负载均衡
混合策略 - 3:1 混合:75% 线性层 (O(1)) + 25% 全局 Attention (保精度) Shared Expert (常驻) + Routed Experts (按需)
适用场景 通用训练/推理,生态成熟 百万 token 实时推理,显存墙场景 大容量模型:参数↑10×,计算量≈Dense
代表模型 Llama, Qwen, GPT-4 DeltaNet, Mamba-2, GDN Mixtral 8x7B, DeepSeek-V2, Qwen3.5-MoE

PageAttention原理:
“PagedAttention 把操作系统『分页内存』搬进 GPU:

  1. 逻辑页:KV-Cache 按 16-token 固定大小切成连续『页』;
  2. 物理帧:显存里不连续的空闲块,用 block-table 映射;
  3. 共享+写时复制:多序列可共用同一物理页,引用计数为 0 立即回收,显存碎片 <4%,吞吐提升 2× 以上。”

FlashAttention 是通过IO 优化加速 Attention:

版本 年份 硬件架构 核心改进 (Core Improvements) 性能收益 面试关键区别
FA-v1 2022 V100/A100 首次提出 Tiling + 在线 Softmax串行处理序列块,减少 HBM 访问 训练加速 2-4×显存省 50% 奠基者:解决 O(N²) 显存问题,序列维度串行。
FA-v2 2023 Ampere/H100 序列并行化 + Warp 级划分Q 只读 1 遍,减少非矩阵运算,支持 GQA 吞吐再 ↑1.7-2×FLOPs 利用率 73% 并行化:序列维度并行,Q 矩阵 HBM 访问次数最小化。
FA-v3 2024 Hopper (H100) TMA 异步拷贝 + WGMMA + FP8流水线重叠,块稀疏,Warp 专用化 比 v2 再 ↑3×支持 1M+ 上下文 硬件特性:利用 Hopper 新指令 (TMA/WGMMA),异步传输。
FA-v4 2025 Blackwell MUFU.EX2 + CuTe DSL + 双缓冲跳过 90% rescale,原生 FP8/FP4 训练 ↑11× (GPT-4 规模)能耗 ↓30% 极致融合:Blackwell 原生优化,指数指令加速,CuTe 编程模型。

LLM 推理的核心指标

Details

- Time To First Token (TTFT): 首 Token 延迟,即从输入到输出第一个 token 的延迟。在在线的流式应用中,TTFT 是最重要的指标,因为它决定了用户体验。 - Time Per Output Token (TPOT): 每个输出 token 的延迟(不含首个Token)。在离线的批处理应用中,TPOT 是最重要的指标,因为它决定了整个推理过程的时间。 - Latency:延迟,即从输入到输出最后一个 token 的延迟。 Latency = (TTFT) + (TPOT) * (the number of tokens to be generated). Latency 可以转换为 Tokens Per Second (TPS):TPS = (the number of tokens to be generated) / Latency。 - Throughput:吞吐量,即每秒针对所有请求生成的 token 数。以上三个指标都针对单个请求,而吞吐量是针对所有并发请求的。

我们将 LLM 应用分为两种:

  • 在线流式应用:对 TTFT、TPOT、Latency 敏感,需要尽可能快的生成 token。
  • 离线批量应用:对 Throughput 敏感,需要在单位时间内尽可能多的生成 token。
    而实际在某种应用(如在线流式应用),我们也应该在Latency 和 Throughput 之间进行权衡,提高 Throughtput 可以提高硬件承担的并发数,从而降低推理成本。

LLM基座的推理能力

核心评估维度:
逻辑推理 比如mmlu(涵盖57个主题的多项选择题)
数学推理 GSM8K, MATH, AQuA-RAT
常识推理 HellaSwag, PIQA, ARC
多步推理 BigBench-Hard, DROP
代码推理 HumanEval, MBPP,livecodebench,livecodebench2025

LLM 推理的性能卡点

小模型常用的优化手段

Details

训练前:剪枝 → 裁词表 → 层数减半

训练:蒸馏 + ZeRO + 检查点

推理:量化 → GQA → FlashAttn → Continuous Batch

蒸馏
蒸馏具体步骤

Details

第一步:准备阶段——搭建师生框架 这个阶段的目标是准备好老师和学生,并确定教学大纲。

训练/选定教师模型:
我们需要一个强大的、已经训练好的复杂模型(如大型BERT、ResNet-50等)作为教师。这个模型在目标任务上要有很高的准确率。初始化学生模型:设计一个更小、更高效的模型作为学生(如小型BERT、TinyBERT、MobileNet等)。

核心思想:学生模型的能力天花板通常低于老师,我们的目标是让它无限逼近这个天花板。

确定蒸馏策略:
明确要蒸馏的知识形式。最经典和常用的是基于输出的蒸馏,即让学生模仿老师最终的输出预测。

第二步:训练阶段
前向传播:
将同一批训练数据分别输入教师模型和学生模型。对教师和学生的输出logits(分数)同时使用高温Softmax(温度T > 1) 进行软化,得到富含信息的“软标签”。

损失计算:
蒸馏损失:计算学生软标签与教师软标签之间的差异。这里通常使用 KL散度,因为它专门用于衡量两个概率分布的相似度。这一步是让学生学习老师的‘暗知识’——即类别间的相似性关系。
学生损失:计算学生模型的标准输出(T=1)与真实标签(硬标签)之间的交叉熵损失。这一步是保证学生不偏离正确的答案。
总损失:将两个损失进行加权合并,公式为:总损失 = α * 蒸馏损失 + (1 - α) * 学生损失。这里的 α 是一个超参数,用于平衡两种知识来源的重要性。

参数更新:只对学生模型进行反向传播,根据总损失更新学生模型的参数。教师模型的参数是冻结的、不更新的。

Q:“温度参数T的作用是什么?”
答:T是一个超参数,用于控制输出概率分布的平滑程度。T越大,分布越平缓,错误类别蕴含的相对信息(暗知识)就越明显。T=1就是标准的Softmax。高的T有助于学生更好地学习类别间的关系,但通常推理时会设回T=1。

Q:“为什么学生模型能学到比直接训练更好的效果?”
答:因为硬标签只提供了“是什么”的单一信息,而教师的软标签提供了“什么像什么”的丰富结构化信息。这相当于一个学生不仅知道了答案,还理解了整个知识体系的内在联系,因此泛化能力更强。

剪枝
宽度剪枝(Sparse/Width Pruning):砍掉不重要的 Attention head、FFN 中间维度,效果是参数 ↓30-50%,精度掉 <1%
深度剪枝:直接删掉冗余 Transformer 层,效果是6L 小模型可比 12L 大模型快 2×
主要思路是Attention head / FFN 宽度 → 用 梯度/激活/权重幅值 + 一次性重要性估计 给每个 head/neuron 打分,低于阈值直接置零,再微调恢复精度。
整层冗余 → 用 Block Influence / LayerDrop + 早期彩票 ticket 先“试删”再评估下游掉点,掉点<ε 的层即可永久剔除。

LLM 推理场景化优化速查表 (Scenario-Based Optimization)

核心公式:
短输入 + 长输出 → 优化 TPOT (Time Per Output Token) → 关注 Decode 阶段带宽/计算比
长输入 + 短输出 → 优化 TTFT (Time To First Token) → 关注 Prefill 阶段 O(n²) 计算/显存
低并发低时延 → 优化 单请求延迟 → 小 Batch、内核融合、投机解码
高并发高吞吐 → 优化 系统吞吐量 → 大 Batch、连续批处理、量化、PD 分离

Details

场景类型 核心矛盾 关键指标 优化方向 典型技术方案 预期收益
🔹 短输入 + 长输出(多轮对话/写作) Decode 阶段占 90%+ 时间,自回归串行 + KV Cache 带宽瓶颈 TPOT ↓(每 token 延迟) 1. 减少每步计算量2. 降低 KV 访存带宽3. 增大 Decode 并行度 • PD 分离 (Decode 专用卡)• 连续批处理 (Continuous Batching)• KV 量化 (INT8/4) + GQA/MLA• 投机解码 (Medusa/Eagle)• 前缀缓存 + 分段流水 TPOT: 100ms → 30-50ms吞吐: ↑3-5×显存: ↓40-60%
🔹 长输入 + 短输出(文档摘要/RAG) Prefill 阶段 O(n²) Attention,HBM 带宽 + 计算量双重瓶颈 TTFT ↓(首 token 时间) 1. 降低 Attention 复杂度2. 切分长序列并行计算3. 复用历史 KV Cache • Chunked-Prefill (必开)• FlashAttention-2/3 + FA-Decoding• MLA/GQA 减少 KV 头数• 多卡 TP+SP 并行• Prefix Cache 命中复用 TTFT: 128K 输入 ↓40-60%OOM 率: 30% → 0%计算: O(n²) → O(k·n)
🔹 低并发 + 低时延(交互式/实时应用) 单请求延迟敏感,无法通过大 Batch 摊薄开销 P99 延迟 ↓单请求端到端时间 1. 内核级融合优化2. 减少 Kernel Launch 开销3. 投机/早停策略 • 算子融合 (Fused QKV/RMSNorm)• 小 Batch (1-4) + 低精度 (FP16/INT8)• 投机解码 (1-2 步验证)• 静态形状编译 (避免动态开销) 单请求延迟 ↓20-40%交互体验流畅 (<100ms/step)
🔹 高并发 + 高吞吐(批量推理/服务化) 系统资源利用率优先,允许单请求延迟适度增加 Throughput ↑(tokens/sec/card) 1. 最大化 GPU 利用率2. 连续批处理 + 动态调度3. 量化 + 稀疏化 • 连续批处理 (MAX_UTILIZATION)• KV Cache 量化 (INT4/8) + 显存复用• PD 分离 + 异构调度 (Prefill 卡/Decode 卡)• W4A16/W8A8 GEMM + Marlin Kernel 吞吐: ↑5-10×显存效率: ↑2-3×单位成本: ↓50-70%

大模型架构Qwen、GPT系列、llama系列,Deepseek系列

Transformer架构(Self-Attention(让每个词关注下句子里的其它词) + FFN(每个词独立处理) + 残差)

  1. GPT 系列
    最纯正 Decoder-only + 原始 MHA,靠堆参数、堆数据、堆算力出奇迹;GPT-4 开始用 8×8 专家混合(MoE) 降成本,但官方细节未公开。
  2. Llama 系列
    把 MHA 换成 GQA(分组查询,32→8 组),KV-cache 砍 4×;用 RoPE + SwiGLU + RMSNorm,成为后续开源模型的“标准模板”。
  3. Qwen 系列
    像qwen3-80b-next,在 Llama 模板基础上再切 2/3 层做 Gated DeltaNet(GDN)线性 Attention,缓存 O(1);长文本 1M token 外推靠 NTK-RoPE 动态基频。
  4. DeepSeek 系列
    DeepSeek-V2 首推 MLA(Multi-head Latent Attention):把 KV 先低秩投影到 128 维潜向量,再还原,缓存再降 5-8×,效果反超 MHA。
    DeepSeek-MoE 用 共享+细粒度专家 分割,每 token 只激活 8.3% 参数,训练成本只有同规模 Dense 的 40%。
    DualPipe 调度:Prefill/Decode 两条流水线 chunk 级并行,TTFT 降 30%。

Qwen模型架构与数据流动

核心改进总结:RMSNorm + SwiGLU + RoPE 已成为新一代LLM(如LLaMA, Qwen等)的标准配置。

Qwen3.5: "用线性注意力处理大部分上下文,关键层用全注意力保精度,类似『粗筛 + 精算』策略"

Details

组件 Qwen2 Qwen3 Qwen3.5 面试关键点
归一化 RMSNorm RMSNorm Centered RMSNorm (1+weight, 零初始化) 零初始化使初始行为接近恒等映射,提升深层训练稳定性 知乎
激活函数 SwiGLU SwiGLU SwiGLU (专家层标准配置) 门控机制提升语言建模能力,梯度流动更稳定
位置编码 RoPE RoPE + YaRN M-RoPE (Multimodal RoPE) + Partial Rotary (25%) 多模态位置编码,仅 25% head_dim 应用 RoPE 降低计算 知乎
注意力 GQA GQA Hybrid Attention: 75% Linear(GatedDeltaNet) + 25% Full GQA 线性注意力降复杂度 O(n²)→O(n),Full Attention 保精度 知乎
KV 管理 GQA (8:1) GQA 极致 GQA: num_kv_heads=2, head_dim=256 更激进的头数压缩,KV Cache 显存再降 30-50%
专家结构 - MoE (Top-K) MoE + Shared Expert + Zero-init Routing 共享专家保通用能力,零初始化路由避免训练初期坍缩
词表大小 ~152K ~152K ~248K (Qwen3.5-MoE) 扩展多语言/代码支持,压缩率提升 huggingface.co
上下文长度 128K 256K (YaRN→1M) 256K Native (YaRN→1M+) 原生长上下文 + RoPE 外推,支持超长文档/代码库

RoPE (Rotary Positional Embedding):
原理:通过旋转矩阵将位置信息注入到 Query 和 Key 向量中。两个向量的相对位置决定了它们的注意力分数。
局限:RoPE 的训练长度是固定的(例如训练时只见过 4K 长度)。当推理时遇到远超训练长度的文本(如 32K),由于旋转角度超出了训练分布,模型性能会急剧下降(“外推能力”差)。
YaRN (Yet another RoPE for NLP):
原理:一种位置插值(Interpolation)+ 缩放技术。它不需要重新训练模型,而是在推理阶段对 RoPE 的角度进行缩放(Scaling),并配合温度参数调整,强行让模型适应更长的序列。
作用:让原本只训练了 4K 的模型,能够无损或低损地处理 32K 甚至 128K 的上下文。
关系:RoPE 是基础机制,YaRN 是让 RoPE 具备长文本外推能力的“插件”或“技巧”。Qwen3 中的 YaRN→1M 指的就是利用该技术将上下文扩展到 100 万 token。

RMSNorm(均方根归一化)以及LayerNorm公式

目前主流的都是rmsnorm
为什么 RMSNorm 更快?
少一次 reduce-mean:LayerNorm 要先算均值,再算方差;RMSNorm 只算一次 RMS。
通信量减半:并行场景下 reduce 次数从 2→1,GPU 空闲时间↓。
无 β 偏移:参数内存减半,加载/优化开销↓。

维度 LayerNorm RMSNorm
计算内容 减均值 → 除方差 直接除 RMS(无减均值)
参数量 2 倍(γ, β) 1 倍(仅 γ)
零均值 ✅ 强制 ❌ 不强制
速度 基准 7 %–64 %↑
大模型表现 持平 持平或略好

推理框架

vLLM框架 & 推理框架面试速查表 (2026)
核心结论:vLLM = PagedAttention(显存分页) + Continuous Batching(连续批处理) + Step-Level Scheduling(细粒度调度)。
v0 → v1:从"高效批处理系统"进化为"低延迟流式服务系统"。
选型:在线服务首选 vLLM/SGLang,极致吞吐选 TensorRT-LLM,国产化选 LMDeploy。

文本输入到vllm主要经过的一些变化:

Details

在 vLLM 中,文本输入首先经过 Tokenizer 编码,然后由 Scheduler 基于 PagedAttention 机制进行资源调度。调度器不再请求连续显存,而是按需分配离散的 Physical Blocks,并维护一张 Block Table 记录逻辑到物理的映射。
在执行阶段,vLLM 采用 Continuous Batching,一旦有请求完成立即释放 Block 并插入新请求,极大提升了吞吐量。对于长序列导致的显存不足,vLLM 支持将 KV Cache Swap 到 CPU 内存。
关于通信处理:
GPU 内部:通过 CUDA Kernel 内的间接寻址,利用 Block Table 访问非连续显存,并结合 Shared Memory 优化随机读取延迟。
多卡互联:底层依赖 NCCL 库,通过 NVLink 进行高效的 All-Reduce (TP 场景) 和 P2P (PP 场景) 通信,并利用 Compute-Communication Overlap 技术隐藏延迟。

vllm核心架构与组件

组件层级 核心模块 职责与机制 关键技术点 🔥 面试考点
控制面
(调度/管理)
Scheduler 请求调度大脑,维护 Waiting/Running/Swapped 三队列 Continuous Batching:Token 级调度,新请求随时插入
Prefix-Aware:APC 匹配复用前缀 KV
优先级:Swapped > Waiting > Running
Q: 为什么优先处理 Swapped?
A: 避免已换出请求的重复加载开销,保证进度公平性
控制面
(显存管理)
BlockSpaceManager KV Cache 分页管理,逻辑块→物理块映射 PagedAttention:block_size=16,类似 OS 页表
Copy-on-Write:并行采样时共享物理块
LRU Swap:显存不足时换出到 CPU
Q: PagedAttention 解决什么问题?
A: 消除显存碎片,支持动态序列长度,显存利用率↑30-50%
执行面
(计算执行)
Worker/ModelRunner 模型前向传播,Kernel 执行 CUDA Graph:预编译执行图,减少 Kernel Launch 开销
Fused Ops:QKV/RMSNorm/SwiGLU 融合算子
Q: CUDA Graph 收益?
A: 小 Batch 时减少 CPU 调度开销,延迟↓20-40%
执行面
(KV 引擎)
CacheEngine KV Cache 生命周期管理 BlockTable:维护逻辑→物理映射表
Async Swap:cudaMemcpyAsync 预取/换出
Q: KV Cache 量化如何做?
A: INT8/FP8 在线量化,scale 在线 reduce,显存↓50%
通信层 Pynccl / ZMQ 分布式通信 & 流式返回 NCCL 封装:TP/PP 并行通信,支持 Graph 内嵌
Zero-Copy:ZMQ 直接流式返回 Token
Q: 张量并行通信开销?
A: All-Reduce 在每层 FFN 后,H100 NVLink 下<5% 总耗时

vllm对应演进

一句话总结 v1:"用 Step 级调度 + 状态简化 + 深度 Graph 编译,在保持高吞吐的同时,把尾延迟打到生产级可用"

维度 v0 (Iteration 模型) v1 (Step 模型) 🎯 收益/改进 🔥 面试高频问答
调度粒度 迭代级:一批请求完整生成多个 token 后才调度 时间步级:每步前向传播后重新调度 • 新请求插入延迟↓90%
• 尾延迟(P99)↓40%
Q: v1 为什么延迟更低?
A: Step 级调度避免长请求阻塞短请求,实现真正"流式"连续批处理
架构设计 单体引擎:LLMEngine 耦合调度/执行/内存 职责分离:Scheduler/Worker/Executor 三模块解耦 • 代码可维护性↑
• 新调度策略易扩展
Q: v1 架构优势?
A: 模块化设计,Scheduler 可独立优化,Worker 可替换后端 (TRT-LLM/Ascend)
状态管理 三队列:Waiting/Running/Swapped,逻辑复杂 双状态num_tokens + num_computed_tokens,砍掉 Swapped • 抢占恢复逻辑简化
• 被抢占请求直接回 Waiting 头部
Q: v1 如何简化抢占?
A: 用 num_computed_tokens 记录进度,抢占后直接重入队,无需复杂 Swap 状态机
执行优化 CUDA Graph 支持有限,动态形状开销大 深度 Graph 集成:预处理/解码/采样全图编译 • Kernel Launch 开销↓70%
• GPU 利用率↑15%
Q: v1 的 CUDA Graph 优化?
A: 将动态形状参数化,预编译多形状 Graph,运行时零 Python 回跳
高级特性 Chunked-Prefill 需手动配置 原生支持:Chunked-Prefill + Prefix Cache + Jump Decoding • 长输入 TTFT↓30%
• 多轮对话 KV 复用↑3×
Q: Chunked-Prefill 原理?
A: 长 Prompt 切块与 Decode 交错执行,避免单请求独占 GPU,线性化 TTFT

主流推理框架对比选型

框架 核心定位 杀手锏特性 适用场景 局限性 🔥 面试选型题
vLLM 通用在线服务 • PagedAttention + Continuous Batching
• v1 Step 调度 + CUDA Graph
• 社区活跃,插件丰富
• 多租户 API 服务
• 中长上下文对话
• 快速原型验证
• 极端低延迟 (<20ms) 需调优
• 多模态支持较新
Q: 为什么选 vLLM?
A: "开箱即用"的分页内存+连续批处理,平衡吞吐/延迟/易用性,生态最成熟
SGLang 结构化/长上下文 RadixAttention:前缀树自动复用 KV
• 原生结构化生成 (JSON/Regex)
• PD 分离 + Rust 异步调度
• 复杂 Prompt 模板/少样本学习
• JSON/代码等结构化输出
• 超长对话 (>64K)
• 学习曲线稍陡 (前端 DSL)
• 多模型并发支持较新
Q: SGLang vs vLLM?
A: "长模板/结构化输出"选 SGLang (Radix 复用↑3×),"通用服务"选 vLLM (生态更稳)
TensorRT-LLM 极致吞吐/离线 预编译引擎:算子融合+FP8-TC 优化
• In-flight Batching:动态插入请求
• 多 GPU 通信深度优化
• 批量离线推理 (Batch Inference)
• 固定模型/固定形状的云服务
• 编译慢 (分钟级)
• 动态形状/多模型支持弱
Q: TRT-LLM 优势?
A: "编译时优化"吃满硬件,固定场景吞吐比 vLLM 高 20-30%,但灵活性牺牲
LMDeploy 国产化/训推一体 Ascend/NPU 原生支持
• 4-bit KV Cache + AWQ 量化
• 训练→推理无缝切换
• 华为昇腾/寒武纪等国产硬件
• 低资源端侧部署
• 社区规模较小
• 新特性跟进稍慢
Q: 国产化选型?
A: LMDeploy 对 Ascend 优化最深,量化+分页+连续批处理三件套齐全,迁移成本最低
🔍 展开:vLLM 高频考点速记
  1. PagedAttention 原理:类似 OS 分页,逻辑块→物理块映射,block_size=16,消除显存碎片
  2. Continuous Batching:Token 级调度,新请求随时插入,避免传统 Batch 的队头阻塞
  3. v1 状态简化num_tokens + num_computed_tokens 替代三队列,抢占恢复逻辑↓50%
  4. CUDA Graph 收益:预编译执行图,小 Batch 时 Kernel Launch 开销↓70%,延迟↓20-40%
  5. Chunked-Prefill:长 Prompt 切块与 Decode 交错,128K 输入 TTFT↓40-60%

HCCL

华为对应集合通信库,支持allreduce、broadcast、allgather、reduceScatter、AlltoAll等通信原语
broadcast:1到多,将数据从一个节点发送到所有节点
gather:多到1
scatter:1个npu数据切分到其它npu
reduce:多个npu获取数据并做规约运算

allreduce:从多个npu获取数据到所有npu并做归约运算(求和平均最大最小乘积ANDOR),规约+广播:所有节点都有最终结果
reduce scatter:规约后结果分散到不同节点
allgather:收集每个npu所有的数据到每个npu上
alltoallv:所有npu互相scatter和gather数据

简单总结:规约运算是AllReduce的核心计算步骤,负责将分散的数据合并;AllReduce是完整通信原语,包含规约和广播两个阶段。

前沿推理技术思想

技术 核心思想 (One-Liner) 解决痛点 关键机制 🔥 面试一句话回答
DSA
(DeepSeek Sparse Attn)
"先海选 Top-k,后精算 Attention" 长序列 O(L²) 计算/显存爆炸 • FP8 低维 Indexer 闪电筛选
• Attn-Score 蒸馏监督索引学习
• Token-level 稀疏 + 单分支 MQA
Q: DSA 比 NSA 好在哪?
A: "蒸馏 loss 选得更准 + 单分支零额外参数 + token 级稀疏",同等精度下推理成本↓50%
AFD
(Attn-FFN Decoupling)
"Attention 与 FFN 异构部署" Attention 带宽瓶颈 vs FFN 计算瓶颈资源错配 • Attn 放高带宽 GPU,FFN/MoE 放高算力 NPU
• 高速网络 (NVLink/RDMA) 通信
• 构建在 PD 分离架构之上
Q: 为什么解耦能提效?
A: "让带宽密集型与计算密集型算子各得其所",资源利用率↑30%,异构集群成本↓
TPA
(Tensor Product Attention)
"张量分解压缩 KV + 即时重算" MLA 难兼容 RoPE,长序列缓存仍大 • KV 分解为低秩因子 (U·Vᵀ)
• 推理时即时重算全维 K/Q
• 天然支持 RoPE 旋转
Q: TPA 如何兼顾压缩与 RoPE?
A: "压缩存因子,用时重算",缓存↓10× 且 RoPE 直接作用在重算后的全维 key 上
SepLLM
(Semantic KV Compression)
"骨干序列 + 滑动窗口" 混合缓存 语义冗余导致 KV Cache 浪费 • 余弦相似度动态选"骨干"代表语义
• 固定窗口保局部连贯
• 混合 Cache 计算注意力
Q: 如何保证压缩后精度不降?
A: "骨干抓全局语义 + 窗口保局部语法",128K 上下文显存↓8×,PPL 损失<0.5%
Mooncake
(Distributed KV Pool)
"HBM+DRAM+SSD 三级零拷贝池化" 单卡显存受限,长上下文/多轮对话复用低 • 三级存储:L1 热(HBM)/L2 温(DRAM)/L3 冷(SSD)
• GPU↔DRAM↔SSD 零拷贝 (RDMA/SPDK)
• PrefixCache 命中≈50%
Q: 零拷贝为什么关键?
A: "绕过 CPU 内存拷贝",跨层数据迁移延迟↓90%,50M token 池化 E2E 成本↓35%
混合稀疏路线
(GQA+SWA/SSM)
"局部密集 + 全局稀疏" 分层建模 单一注意力难兼顾局部精度与全局依赖 • GQA: 分组共享 KV 省带宽
• SWA: 滑动窗口砍计算 O(nW)
• SSM: 线性状态空间建模长距
Q: 为什么混合比纯稀疏好?
A: "局部用 Attention 保精度,全局用 SSM/窗口省计算",128K 序列 PPL↓12%,推理↑2×

大模型推理显存占用与优化策略(面试高频考点表)

显存组件 计算公式 / 影响因素 典型占用 (7B/FP16) 可优化手段 面试高频考点
模型权重 参数量 × 精度字节
• FP16: 2B/param, INT8: 1B, INT4: 0.5B
~14 GB (FP16)
~7 GB (INT8)
~3.5 GB (INT4)
• 量化 (AWQ/GPTQ)
• 权重分片 (Tensor Parallel)
• Offload 到 CPU/NVMe
• 7B 模型 FP16 为什么是 14GB?
• 量化后精度损失如何评估?
• TP 并行时权重如何切分?
KV Cache 2 × 层数 × 头数 × 头维 × batch × seq_len × 精度
• GQA/MQA 可显著降低
~9–10 GB
(batch=32, seq=2048)
• 调整 gpu_memory_utilization
• PagedAttention (vLLM)
• KV Cache 量化 (FP8/INT8)
• GQA 替代 MHA
• KV Cache 为什么占这么大?
• PagedAttention 如何解决显存碎片?
• GQA vs MHA 显存差异?
激活值 层数 × hidden_dim × batch × seq_len × 精度
• 与 max_num_seqsmax_model_len 强相关
~4–5 GB
(动态变化)
• 降低 max_batch_size
• 限制 max_model_len
• 重计算 (Activation Recomputation)
• 为什么长序列容易 OOM?
• 重计算的时间 - 显存权衡?
• 如何估算最大支持 seq_len?
中间缓冲区 • CUDA Graph 缓存
• 临时 Tensor/Workspace
• CuBLAS/CuDNN 工作区
~0.5–2 GB • 复用 Buffer
• 调整 workspace_size
• 框架级显存池 (如 PyTorch CachingAllocator)
• 显存碎片如何产生?
• PyTorch 显存复用机制?
非 Torch 显存 • 驱动/上下文开销
• NCCL 通信缓冲区 (多卡)
• 监控/调试工具占用
~0.1–2 GB • 关闭非必要调试功能
• 优化 NCCL 缓冲区大小
• 多卡推理为什么显存占用更高?
nvidia-smi 显存 ≠ PyTorch 分配显存?

🔑 附:大模型推理显存估算速查公式

# 1. 权重显存 (GB)
weights_gb = params_B × 2 × (precision_bytes / 2)
# 例:7B × 2B(FP16) = 14 GB

# 2. KV Cache 显存 (GB) - MHA 版本
kv_gb = 2 × layers × heads × head_dim × batch × seq_len × 2 / 1e9
# 例:32×32×128×32×2048×2 ≈ 10.7 GB
# GQA 优化:heads → kv_heads (如 32→8,显存降 4×)

# 3. 激活值显存 (粗略估算)
activations_gb ≈ layers × hidden_dim × batch × seq_len × 2 / 1e9
# 例:32×4096×32×2048×2 ≈ 17.2 GB (实际因算子融合会减少)

# 4. 总显存需求
total_gb ≈ weights + kv_cache + activations + buffer(20%)

💡 面试加分回答模板

问:7B 模型推理时显存爆了,如何排查和优化?
1️⃣ 定位瓶颈:用 nvidia-smi + PyTorch torch.cuda.memory_summary()
区分是权重、KV Cache 还是激活值占用过高。
2️⃣ 针对性优化
• 权重高 → 启用 INT4 量化 (AWQ) 或 Tensor Parallel 分卡
• KV Cache 高 → 开启 PagedAttention (vLLM)、改用 GQA、降低 max_seq_len
• 激活值高 → 减小 batch_size、启用重计算、限制 max_model_len
3️⃣ 系统级调优
• 调整 gpu_memory_utilization=0.9 预留 buffer
• 关闭调试功能减少非 Torch 显存
• 多卡时优化 NCCL 通信缓冲区
4️⃣ 兜底方案:CPU/GPU Offload 或 NVMe Swap (牺牲延迟换容量)

核心思路:先量化瓶颈组件,再用「空间换时间」或「时间换空间」策略权衡。