一、大模型推理基础

1.1 什么是大模型推理?

核心定义:
大模型推理是利用训练好的大模型,对新的输入数据进行计算并输出结果的过程。

典型示例:

  • 用户输入:“巴黎是法国的首都吗?”
  • 模型输出:“是的,巴黎是法国的首都。”

1.2 大模型推理流程

完整推理流程包含四个关键步骤:

  1. 输入预处理:将文本等输入转换为模型可理解的格式(如 Token IDs)
  2. 前向传播:数据经过模型各层计算(注意力机制、前馈网络等)
  3. 输出生成:生成预测结果(分类标签、回答文本等)
  4. 输出后处理:将模型输出转换为用户可读的格式

🔗 可视化工具:https://bbycroft.net/llm

1.3 Transformer 架构基础

核心论文Attention Is All You Need

大语言模型三种主流架构:

架构类型 代表模型 主要应用场景
Encoder-only BERT 检索、分类、编码任务
Decoder-only GPT系列 文本生成、对话系统
Encoder-Decoder T5 翻译、摘要生成

推理阶段特点:

  • 主要执行 Decoder-only 前向传播
  • 不涉及反向传播和参数更新
  • 需要重用历史计算结果(KV Cache)

二、vLLM 框架深度解析

2.1 诞生背景

面临的挑战:

  • 模型规模指数级增长
  • 推理成本急剧上升(计算资源 + 显存占用)
  • 消费级显卡资源受限

解决方案: vLLM 应运而生,目标是以极高效率、极低资源占用实现大模型推理和服务。

2.2 项目概况

官方定位:

“vLLM is a fast and easy-to-use library for LLM inference and serving.”

发展历程:

  • 起源:UC Berkeley Sky Computing Lab
  • 现状:社区驱动的开源项目,学术界与工业界共同贡献
  • 活跃度:每周超过 100+ Contributions

2.3 极简部署

一行命令启动服务:

bash

vllm serve Qwen/Qwen2.5-1.5B-Instruct

该命令自动完成:

  • 模型下载
  • 推理引擎构建
  • HTTP 服务启动
  • 高并发请求支持

三、vLLM 核心技术:PagedAttention

3.1 KV Cache 深度解析

重要澄清:
KV Cache 并非传统服务端的 Key-Value 缓存,而是特指 Self-Attention 机制中的 KV 缓存优化。

自回归解码挑战:

  • 当前主流:90% LLM 采用自回归解码
  • 核心特性:每个新生成的 Token 都依赖于所有已生成的 Token
  • 性能瓶颈:序列生成必须按顺序进行,无法并行化

示例分析: “Artificial Intelligence is the future of humans.”

生成过程:

  1. 输入 Token 序列:{T₁, T₂, …, Tₙ}
  2. Token 嵌入:{x₁⁰, x₂⁰, …, xₙ⁰} (维度 D,上标表示层数)
  3. 多层变换:经过 L 层计算,输出 {x₁ᴸ, x₂ᴸ, …, xₙᴸ}
  4. 下一个 Token 预测:基于 xₙᴸ 和词汇表嵌入生成概率分布,采样得到 Tₙ₊₁

3.2 KV Cache 的复用原理

关键洞察:
当生成 Tₙ₊₁ 时,前 n 个 Token 的中间计算结果 {xᵢˡ | 1≤i≤n, 1≤l≤L} 与之前计算完全一致,可以复用。

计算复用验证:

import torch
from transformers import GPT2Tokenizer, GPT2Model

tokenizer = GPT2Tokenizer.from_pretrained('gpt2')
model = GPT2Model.from_pretrained('gpt2')

# 文本:"The quick brown fox jumps over the lazy"
tokens = [[464, 2068, 7586, 21831, 18045, 625, 262, 16931]]
input_n = torch.tensor(tokens)
output_n = model(input_ids=input_n, output_hidden_states=True)

# 文本:" dog"
tokens[0].append(3290)
input_n_plus_1 = torch.tensor(tokens)
output_n_plus_1 = model(input_ids=input_n_plus_1, output_hidden_states=True)

# 验证中间结果一致性
for i, (hidden_n, hidden_n_plus_1) in enumerate(zip(output_n.hidden_states, output_n_plus_1.hidden_states)):
    print(f"layer {i}, max difference {(hidden_n - hidden_n_plus_1[:, :-1, :]).abs().max().item()}")
    assert torch.allclose(hidden_n, hidden_n_plus_1[:, :-1, :], atol=1e-4)

输出结果: 各层误差均小于 1e-4,验证了计算复用的可行性。

3.3 推理阶段性能特征

两阶段分析:

阶段 描述 计算特征 资源需求
Prefilling 首个 Token 产出前 计算密集型 高计算负载
Decode 后续 Token 生成 内存IO密集型 高显存带宽

工业界优化趋势:PD 分离

  • 将 Prefilling 和 Decode 阶段分配到不同集群
  • 针对性优化不同阶段的资源需求

3.4 PagedAttention 创新设计

内存浪费三大根源:

  1. Reserved:请求的 KV Cache 需要长期占用空间
  2. Internal Fragmentation:预分配显存未充分利用(如提前生成 EOS)
  3. External Fragmentation:不同请求间显存分配不均

操作系统灵感:
PagedAttention 将经典操作系统概念引入 ML 系统:

操作系统概念 PagedAttention 对应
虚拟内存 逻辑块地址空间
物理页帧 GPU 显存块
页表 Block Table
内存碎片整理 块重新分配

核心优势:

  • 实现显存的精细化管理
  • 支持不同序列间的显存共享
  • 显著提升显存利用率

🔗 技术细节PagedAttention CUDA Kernel 实现解析

四、vLLM 演进与未来

4.1 vLLM V1:架构重构

重构背景:
原始 vLLM 作为 PagedAttention 研究项目开发,随着规模扩大面临代码冗余和维护挑战。

V1 核心改进:

  • 更简洁:仅 2000-3000 行 Python 核心代码
  • 更高效:全面优化主流模型(如 DeepSeek-R1)推理性能
  • 更易用:降低开发者门槛,简化社区贡献流程

发布信息:

  • 时间:2024年9月开始重构
  • 版本:vLLM V1 Alpha
  • 🔗 官方博客

4.2 社区生态

发展态势:

  • 极活跃的社区贡献
  • 代码架构快速迭代(月级别重大更新)
  • 学术界与工业界深度融合

五、学习资源推荐

5.1 核心资料

  1. Transformer 详解
  2. 大模型推理综述
  3. vLLM 专题

5.2 扩展学习

Logo

免费领 200 小时云算力,进群参与显卡、AI PC 幸运抽奖

更多推荐