2026-01-04 · AI
32
AI · 2026-01-04

大模型面试100问03:推理与部署篇

TL;DR

推理才是大模型的真正战场——训练一次,推理百万次。标准Attention的内存带宽成为瓶颈,Flash Attention通过Tiling技术让速度提升5倍;KV Cache让解码快10倍,但长上下文会吃掉几十GB显存;vLLM的Paged Attention把显存利用率从30%提到90%。本文从10个高频面试题入手,带你搞懂推理优化的核心技术:为什么Flash Attention比标准Attention快、量化为什么选INT4而不是INT8、vLLM和TensorRT-LLM怎么选。读完这篇,你能回答"Speculative Decoding如何用小模型加速大模型"这种深度问题。


一、KV Cache原理:为什么能加速推理?

自回归生成的计算冗余

问题:生成每个新token时,都要重新计算之前所有token的Key和Value

生成第1个词:计算1个token的K/V
生成第2个词:计算2个token的K/V(第1个重复计算)
生成第3个词:计算3个token的K/V(前2个重复计算)
...
生成第N个词:计算N个token的K/V(前N-1个重复计算)

KV Cache解决方案

核心思想:缓存已计算的Key和Value,新token只需计算自己的K/V

生成第1个词:计算K/V → 缓存
生成第2个词:读取缓存 + 计算新K/V → 更新缓存
生成第3个词:读取缓存 + 计算新K/V → 更新缓存

加速效果

计算复杂度
- 无KV Cache:O(N²) 每步
- 有KV Cache:O(N) 每步

实测数据:生成512个token,KV Cache让速度提升10倍

显存开销

公式

KV Cache显存 = 2 × 层数 × 头数 × 头维度 × 序列长度 × batch_size × 精度

示例(LLaMA 7B,序列长度2048,batch=1,FP16):

2 × 32层 × 32头 × 128维 × 2048 × 1 × 2字节 = 1GB

长上下文的挑战:128K上下文需要64GB显存(仅KV Cache)

参考资料:Efficient Memory Management for Large Language Model Serving with PagedAttention (arXiv:2309.06180)


二、量化技术对比:INT8 vs INT4 vs GPTQ vs AWQ

四种量化方法

方法
精度
压缩比
性能损失
适用场景

INT8
8-bit
4倍
<1%
通用推理

INT4
4-bit
8倍
1-3%
显存受限

GPTQ
3-4bit
8-10倍
1-2%
离线量化

AWQ
4-bit
8倍
<1%
最优

INT8 vs INT4

INT8量化

FP16: [-65504, 65504]
INT8: [-128, 127]
量化公式: q = round(x / scale) + zero_point

INT4量化
- 压缩比更高(8倍 vs 4倍)
- 精度损失稍大(1-3% vs <1%)
- 需要更精细的量化策略

GPTQ(Post-Training Quantization)

核心思想:最小化量化前后的输出差异

优势
- 不需要重新训练
- 支持3-4bit极致压缩
- 开源工具链成熟(AutoGPTQ)

劣势:量化过程慢(需要校准数据)

AWQ(Activation-aware Weight Quantization)

核心创新:保护重要权重通道

关键发现:1%的权重通道贡献了50%的激活幅度

策略
1. 识别重要通道(激活幅度大)
2. 对重要通道用更高精度
3. 其他通道用4-bit量化

性能:4-bit AWQ性能接近FP16,优于GPTQ

参考资料:GPTQ论文 (arXiv:2210.17323)、AWQ论文 (arXiv:2306.00978)


三、权重量化 vs 激活量化

核心区别

维度
权重量化
激活量化

量化对象
模型参数(静态)
中间激活值(动态)

量化时机
离线一次性
推理时每次

实现难度
简单
复杂

性能影响
较小
较大

为什么激活量化更难?

权重量化
- 权重分布固定,可以离线校准
- 量化参数(scale、zero_point)可以预计算

激活量化
- 激活值分布动态变化(依赖输入)
- 需要运行时动态计算量化参数
- 异常值(outliers)影响大

实战建议

仅权重量化(W8A16):
- 显存减半
- 计算仍用FP16
- 性能损失<1%

权重+激活量化(W8A8):
- 显存减半 + 计算加速
- 需要硬件支持(Tensor Core INT8)
- 性能损失1-3%

参考资料:SmoothQuant论文 (arXiv:2211.10438)


四、Flash Attention:为什么比标准Attention快5倍?

核心问题:内存带宽瓶颈

标准Attention

1. 计算 Q×K^T → 写入HBM(N×N矩阵)
2. 读取 → Softmax → 写回HBM
3. 读取 → 乘以V → 写回HBM

瓶颈:GPU HBM带宽有限(~1.5TB/s),大量读写成为瓶颈

Flash Attention解决方案

核心思想:Tiling + Recomputation,减少HBM访问

关键技术
1. 分块计算:把N×N矩阵分成小块,放入SRAM
2. 在线Softmax:不存储完整注意力矩阵
3. 重计算:反向传播时重新计算,而非存储

性能提升

版本
速度提升
关键优化

FlashAttention-1
2-4倍
Tiling技术

FlashAttention-2
2倍于FA1
减少非矩阵乘法操作

FlashAttention-3
1.5-2倍于FA2
Warp特化、异步流水线(H100专用)

参考资料:FlashAttention论文 (arXiv:2205.14135)、FlashAttention-2 (arXiv:2307.08691)


五、Paged Attention(vLLM核心技术)

KV Cache的显存碎片问题

问题
- 预分配显存:浪费(实际序列长度<最大长度)
- 动态分配:碎片化严重

示例

请求1:预分配2048 tokens,实际用512 → 浪费75%
请求2:预分配2048 tokens,实际用1800 → 浪费12%

Paged Attention解决方案

核心思想:借鉴操作系统的虚拟内存管理

关键机制
1. 分页存储:KV Cache分成固定大小的块(如16 tokens)
2. 按需分配:只分配实际使用的块
3. 共享前缀:多个请求共享相同前缀的KV Cache

性能提升

显存利用率
- 传统方法:30-40%
- Paged Attention:80-90%

吞吐量提升:2-4倍(相同显存下可处理更多请求)

参考资料:vLLM论文 (arXiv:2309.06180)


六、Speculative Decoding:用小模型加速大模型

核心思想

问题:大模型推理慢,每个token都要跑一遍完整模型

解决:用小模型"猜测"多个token,大模型一次性验证

工作流程

1. 小模型快速生成K个候选token(如K=4)
2. 大模型并行验证这K个token
3. 接受正确的前缀,拒绝后续错误token
4. 从拒绝位置继续生成

加速原理

关键:并行验证比串行生成快

传统方式:生成4个token需要4次大模型前向传播
Speculative:1次小模型生成 + 1次大模型验证 = 2次前向传播

性能提升

加速比:2-3倍(取决于小模型准确率)

无损性:输出分布与原始大模型完全一致

参考资料:Fast Inference from Transformers via Speculative Decoding (arXiv:2211.17192)


七、部署框架对比:vLLM vs TensorRT-LLM vs llama.cpp

三大框架对比

框架
优势
劣势
适用场景

vLLM
Paged Attention、吞吐量高
仅支持NVIDIA GPU
生产环境、高并发

TensorRT-LLM
极致性能优化
编译慢、调试难
追求极致性能

llama.cpp
CPU推理、跨平台
速度较慢
边缘设备、无GPU环境

vLLM

核心技术
- Paged Attention(显存利用率90%)
- Continuous Batching(动态批处理)
- 支持多种模型(LLaMA、Mistral、Qwen等)

性能数据:吞吐量比HuggingFace高24倍

TensorRT-LLM

核心技术
- 算子融合(Kernel Fusion)
- INT8/FP8量化
- 多GPU/多节点推理

优势:延迟最低(单请求场景)

llama.cpp

核心技术
- 纯C++实现
- 支持CPU、Metal、Vulkan
- 4-bit量化(GGUF格式)

适用场景:Mac、移动设备、嵌入式

参考资料:vLLM论文、TensorRT-LLM文档


八、Continuous Batching vs 传统Batching

传统Batching的问题

静态批处理

Batch = [请求1, 请求2, 请求3]
等待所有请求完成 → 释放整个Batch

问题
- 请求1生成10个token就结束
- 请求2生成100个token
- 请求3生成50个token
- 结果:请求1完成后,GPU闲置等待请求2

Continuous Batching

动态批处理

请求1完成 → 立即移出Batch → 加入新请求4
请求3完成 → 立即移出Batch → 加入新请求5

优势
- GPU利用率更高
- 平均延迟更低
- 吞吐量提升2-3倍

参考资料:Orca论文 (arXiv:2022.xxxxx)


九、内存优化:Offloading vs CPU/GPU混合推理

Offloading技术

核心思想:把部分模型参数放到CPU内存或硬盘

适用场景
- 显存不足以加载完整模型
- 推理延迟要求不高

实现方式

# DeepSpeed Inference
model = AutoModelForCausalLM.from_pretrained(
    "model_name",
    device_map="auto",  # 自动分配到GPU/CPU
    offload_folder="offload",  # CPU内存不足时用硬盘
)

CPU/GPU混合推理

策略
- GPU:计算密集层(Attention、FFN)
- CPU:参数量大但计算少的层(Embedding)

性能权衡
- 显存节约:50-80%
- 速度下降:2-5倍

参考资料:DeepSpeed Inference文档


十、ONNX在LLM部署中的作用

ONNX是什么?

Open Neural Network Exchange:开放神经网络交换格式

核心价值
- 跨框架(PyTorch → ONNX → TensorRT)
- 跨平台(训练在GPU,推理在CPU/移动端)
- 优化加速(算子融合、常量折叠)

ONNX Runtime for LLM

2024-2025最新进展
- 支持Transformer优化
- Flash Attention集成
- 多GPU推理

性能提升:比原生PyTorch快1.5-2倍

使用场景

适合
- 需要跨平台部署
- 使用非NVIDIA硬件(AMD、Intel)
- 边缘设备推理

不适合
- 追求极致性能(不如TensorRT-LLM)
- 模型频繁更新(转换成本高)

参考资料:ONNX Runtime文档


小结

本文从10个高频面试题入手,系统梳理了大模型推理与部署的核心技术:

  1. KV Cache:缓存已计算的K/V,速度提升10倍
  2. 量化技术:INT4/GPTQ/AWQ,显存压缩8倍
  3. 权重vs激活量化:激活量化更难但收益更大
  4. Flash Attention:Tiling技术,速度提升5倍
  5. Paged Attention:显存利用率从30%提到90%
  6. Speculative Decoding:小模型猜测+大模型验证,加速2-3倍
  7. 部署框架:vLLM高吞吐、TensorRT-LLM低延迟、llama.cpp跨平台
  8. Continuous Batching:动态批处理,吞吐量提升2-3倍
  9. 内存优化:Offloading技术,显存节约50-80%
  10. ONNX:跨框架跨平台,适合边缘部署

下一篇预告:Prompt工程篇——CoT、ToT、ReAct怎么用?

目录 最新
← 左侧翻上一屏 · 右侧翻下一屏 · 中间唤出菜单