大语言模型推理(LLM Inference)本质上是一个条件概率计算过程。当我们向模型输入一段文本提示(prompt)时,模型实际上是在计算下一个词元的概率分布。这个计算过程可以表示为 P(x_t | x_1, ..., x_{t-1}),其中 x_t 表示当前位置的词元,x_1 到 x_{t-1} 表示之前的所有词元。
在实际应用中,推理过程可以分为三个关键阶段:
关键理解:推理过程是自回归的(autoregressive),即每个新生成的词元都会成为下一个预测的输入条件,这种特性导致了推理过程的计算复杂度会随着输出长度线性增长。
现代大语言模型的参数量通常在数十亿到数千亿之间。以GPT-3 175B为例:
内存带宽成为主要瓶颈,因为:
推理系统设计面临的根本矛盾:
典型场景的矛盾表现:
| 场景类型 | 主要需求 | 技术挑战 |
|---|---|---|
| 对话系统 | 低延迟响应 | 难以利用批量处理优势 |
| 批量生成 | 高吞吐量 | 显存限制批量大小 |
模型参数占用的显存空间:
即使使用最先进的8-bit量化,175B模型也需要至少8张80GB A100 GPU才能加载,这还不包括:
4-bit量化已成为业界新标准,主要方法对比:
| 量化方法 | 精度损失 | 硬件要求 | 典型加速比 |
|---|---|---|---|
| FP16 | 无 | 高 | 1x |
| GPTQ | <1% | 通用GPU | 2-3x |
| AWQ | <0.5% | 通用GPU | 2-3x |
| SpQR | <0.2% | 专用硬件 | 3-4x |
实操建议:
python复制# 使用AutoGPTQ进行4-bit量化的典型代码
from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-2-7b-chat-hf",
device_map="auto",
quantization_config={"load_in_4bit": True}
)
注意事项:量化后的模型首次加载需要编译时间,建议预编译并保存量化版本。不同硬件平台的最佳量化策略可能不同,需要实际测试。
传统注意力计算的内存访问复杂度为O(N²),FlashAttention通过:
实测性能对比(A100, seq_len=2048):
| 方法 | 速度(tokens/s) | 显存占用 |
|---|---|---|
| 原始注意力 | 45 | 20GB |
| FlashAttention v2 | 120 | 12GB |
将多头注意力(MHA)中的K、V投影矩阵共享:
配置示例:
python复制model = AutoModelForCausalLM.from_pretrained(
"mistralai/Mistral-7B-v0.1",
device_map="auto",
attn_implementation="flash_attention_2"
)
传统批处理与连续批处理的对比:
| 特性 | 静态批处理 | 连续批处理 |
|---|---|---|
| 请求加入时机 | 仅开始时 | 任意时刻 |
| 资源利用率 | 低 | 高 |
| 实现复杂度 | 简单 | 复杂 |
| 适合场景 | 离线任务 | 在线服务 |
开源实现推荐:
部署示例:
bash复制# 使用vLLM启动服务
python -m vllm.entrypoints.api_server \
--model meta-llama/Llama-2-7b-chat-hf \
--quantization awq \
--enforce-eager \
--max-model-len 8192
KV Cache的内存占用公式:
code复制内存占用 = 2 × batch_size × seq_len × n_layers × n_heads × d_head × precision
优化策略:
关键参数配置建议:
| 参数 | 推荐值 | 说明 |
|---|---|---|
| max_batch_size | 16-64 | 根据显存容量调整 |
| max_seq_len | 2048-8192 | 取决于应用场景 |
| prefill_chunk_size | 512 | 影响初始延迟 |
| max_tokens_per_batch | 4096 | 防止OOM |
监控指标:
典型精度组合:
配置示例(TensorRT-LLM):
python复制builder = Builder()
builder_config = builder.create_builder_config(
precision="fp16",
strongly_typed=True,
opt_level=3
)
经验之谈:在实际部署中发现,FP16计算配合INT8权重通常能提供最佳性价比。纯FP8方案虽然理论性能最高,但需要特别处理数值稳定性问题。
核心思想:
性能收益:
实现框架:
三阶段蒸馏流程:
前沿方法对比:
| 方法 | 学生模型大小 | 质量保留率 |
|---|---|---|
| DistilBERT | 50% | 97% |
| TinyLlama | 20% | 90% |
| MiniCPM | 10% | 85% |
专用AI加速器特性对比:
| 特性 | NVIDIA H100 | Groq LPU | Cerebras CS-3 |
|---|---|---|---|
| 内存带宽 | 3TB/s | 80TB/s | 20PB/s |
| 推理延迟 | 50ms | 5ms | 10ms |
| 支持模型规模 | 1T参数 | 100B参数 | 10T参数 |
部署建议:对于超大规模部署(>1000并发),考虑Groq等低延迟架构;对于灵活性和生态支持,NVIDIA仍然是安全选择。