AI编程 · 架构思考 · 技术人生

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

#大模型面试100问
智谱 GLM,支持多语言、多任务推理。从写作到代码生成,从搜索到知识问答,AI 生产力的中国解法。

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怎么用?

赞(0)
未经允许不得转载:Toy's Tech Notes » 大模型面试100问03:推理与部署篇
免费、开放、可编程的智能路由方案,让你的服务随时随地在线。

评论 抢沙发

十年稳如初 — LocVPS,用时间证明实力

10+ 年老牌云主机服务商,全球机房覆盖,性能稳定、价格厚道。

老品牌,更懂稳定的价值你的第一台云服务器,从 LocVPS 开始