第十二章:推理与部署

学习目标

  • 理解推理(Inference)的基本概念及其与训练的区别
  • 掌握模型压缩三大技术:量化、剪枝、知识蒸馏
  • 了解KV Cache、Flash Attention、批处理推理等推理优化技术
  • 认识主流推理框架(vLLM、TensorRT-LLM、ONNX Runtime、llama.cpp)
  • 能够使用llama.cpp本地运行模型和使用vLLM部署API服务

前置要求

建议先学习第七章:训练,了解模型训练的基本流程和概念,以便更好地理解推理与训练的区别和联系。

模型推理部署流程概念图
图12-1 模型推理部署流程:API服务与容器化的端到端管线

什么是推理(Inference)?

推理(Inference)是指将训练好的模型用于实际预测的过程。训练阶段模型不断学习参数,而推理阶段则利用已学到的参数对新数据进行预测或生成。

简单理解

训练就像学生上课学习知识,推理就像考试时运用学到的知识来答题。训练需要大量时间和算力,推理则需要快速、高效地给出结果。

推理 vs 训练对比

维度 训练(Training) 推理(Inference)
目标 学习模型参数(权重和偏置) 使用已学参数进行预测/生成
数据 需要大量标注数据 只需要输入数据(无需标注)
计算量 非常大(前向+反向传播) 较小(仅前向传播)
频率 一次性(或定期更新) 频繁(每次用户请求)
关键指标 损失值、准确率 延迟(Latency)、吞吐量(Throughput)
典型耗时 数小时到数周 毫秒到秒级

推理的关键指标

指标 说明 单位
首Token延迟(TTFT) 从发送请求到生成第一个Token的时间 毫秒(ms)
Token生成速度 每秒生成的Token数量 tokens/s
吞吐量 单位时间内处理的请求数量 requests/s
显存占用 推理过程中GPU显存的使用量 GB

常见的部署方式

部署方式 说明 适用场景
云端部署 在云服务器(AWS、Azure、阿里云等)上部署模型 高并发、需要弹性伸缩的生产环境
本地部署 在本地电脑或服务器上运行模型 数据隐私要求高、离线使用场景
边缘部署 在手机、IoT设备等终端上运行模型 实时性要求高、带宽受限场景
API服务 通过HTTP API调用远程模型 快速集成、无需管理基础设施

模型压缩技术

1. 量化(Quantization)

量化是将模型参数从高精度数值格式转换为低精度格式的过程,从而减少模型大小和计算量。

精度格式 位数 模型大小(相对) 精度损失 推理速度 适用场景
FP32 32位浮点 100%(基准) 基准 训练、高精度推理
FP16 16位浮点 ~50% 极小 ~2x加速 GPU推理(推荐)
INT8 8位整数 ~25% 较小 ~4x加速 生产部署、移动端
INT4 4位整数 ~12.5% 中等 ~8x加速 极端资源受限场景

案例:Llama-2-70B量化

Llama-2-70B原始模型(FP32)需要约 140GB 显存,几乎无法在单卡GPU上运行。通过INT4量化后,模型大小降至约 35-40GB,可以在两张24GB的A100或四张RTX 4090上运行,使得大模型的本地部署成为可能。

2. 剪枝(Pruning)

剪枝是移除模型中不重要的参数或神经元,使模型变得更轻量。就像修剪树枝一样,去掉不重要的部分,保留核心结构。

剪枝的主要方法:

  • 非结构化剪枝:移除单个权重参数(稀疏化),需要特殊硬件/软件支持才能加速
  • 结构化剪枝:移除整个通道或层,可以直接加速推理,兼容性好
  • 迭代剪枝:训练→剪枝→微调→再剪枝,逐步减少模型参数

3. 知识蒸馏(Knowledge Distillation)

知识蒸馏是将大模型(教师模型)的知识转移到小模型(学生模型)的技术,让学生模型在保持较小体积的同时获得接近教师模型的性能。

教师模型与学生模型

教师模型(Teacher Model):体积大、精度高、计算成本高的大模型,如GPT-4、Llama-2-70B。
学生模型(Student Model):体积小、速度快、适合部署的小模型,如GPT-3.5、Llama-2-7B。
蒸馏过程:学生模型学习教师模型的输出分布(软标签),而不仅仅是真实标签(硬标签),从而学到更丰富的"知识"。

推理优化技术

KV Cache

KV Cache是Transformer模型推理中的关键优化技术。在自回归生成中,每个新Token的生成都需要计算所有之前Token的注意力。KV Cache将之前计算过的Key和Value缓存起来,避免重复计算,大幅提升推理速度。

没有KV Cache时,生成第N个Token需要重新计算前N-1个Token的注意力,复杂度为 \(O(N^2)\)。使用KV Cache后,只需计算新Token与之前Token的注意力,复杂度降为 \(O(N)\)。

Flash Attention

Flash Attention是一种通过优化GPU内存访问模式来加速注意力计算的算法。传统注意力计算需要将巨大的注意力矩阵存储在显存中,而Flash Attention通过分块计算(Tiling)技术,减少了显存读写次数,实现了:

  • 计算速度提升 2-4x
  • 显存占用降低 5-20x
  • 支持更长的上下文序列

批处理推理(Batched Inference)

批处理推理是将多个请求合并为一个批次同时处理的技术。在服务端部署时,通过动态批处理(Dynamic Batching)可以将等待中的请求打包,充分利用GPU并行计算能力,大幅提升吞吐量。

  • 静态批处理:固定批次大小,简单但可能浪费GPU资源
  • 动态批处理:根据当前请求量动态调整批次大小,效率更高
  • 连续批处理(Continuous Batching):请求到达即可加入批次,无需等待批次填满

推理框架对比

框架 开发者 核心特点 量化支持 适用场景
vLLM UC Berkeley PagedAttention、高效显存管理、高吞吐量 AWQ、GPTQ、FP8 在线服务、高并发API
TensorRT-LLM NVIDIA 深度优化NVIDIA GPU、极致性能 INT8、INT4、FP8 NVIDIA GPU生产部署
ONNX Runtime Microsoft 跨平台、跨硬件、生态丰富 INT8、INT4 多平台部署、边缘设备
llama.cpp Georgi Gerganov 纯C/C++实现、CPU/GPU混合推理、极低门槛 GGUF(Q4/Q5/Q8) 本地运行、CPU推理

使用llama.cpp本地运行模型

llama.cpp是最流行的本地推理工具之一,支持在CPU和GPU上运行量化后的LLM模型。

# 1. 安装llama.cpp(需要先编译)
# git clone https://github.com/ggerganov/llama.cpp
# cd llama.cpp && make

# 2. 下载GGUF格式模型(以Qwen2.5-7B为例)
# 从Hugging Face下载:Qwen/Qwen2.5-7B-Instruct-GGUF

# 3. 命令行运行模型进行交互式对话
# ./llama-cli -m models/qwen2.5-7b-instruct-q4_k_m.gguf \
#   -c 4096 \
#   -n 512 \
#   --temp 0.7 \
#   --top-p 0.9 \
#   -i -p "你好,请介绍一下你自己"

# 参数说明:
# -m : 模型文件路径
# -c : 上下文窗口大小(token数)
# -n : 最大生成token数
# --temp : 温度参数(0-2,越高越随机)
# --top-p : 核采样概率阈值
# -i : 交互模式
# -p : 初始提示词

使用vLLM部署API服务

vLLM可以快速将模型部署为兼容OpenAI API格式的HTTP服务。

# 1. 安装vLLM
# pip install vllm

# 2. 启动API服务(命令行)
# python -m vllm.entrypoints.openai.api_server \
#   --model Qwen/Qwen2.5-7B-Instruct \
#   --tensor-parallel-size 1 \
#   --max-model-len 4096 \
#   --port 8000

# 3. 客户端调用API服务
from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"  # vLLM本地服务不需要API Key
)

response = client.chat.completions.create(
    model="Qwen/Qwen2.5-7B-Instruct",
    messages=[
        {"role": "system", "content": "你是一个有帮助的AI助手。"},
        {"role": "user", "content": "请用Python写一个快速排序算法。"}
    ],
    temperature=0.7,
    max_tokens=1024
)

print(response.choices[0].message.content)

本章小结

  1. 推理是使用训练好的模型对新数据进行预测/生成的过程,关键指标包括首Token延迟、Token生成速度和吞吐量。
  2. 模型压缩三大技术——量化(降低精度)、剪枝(移除冗余参数)、知识蒸馏(大模型教小模型)——是让大模型高效运行的核心手段。
  3. KV Cache通过缓存注意力计算结果避免重复计算,Flash Attention通过优化内存访问加速注意力计算,批处理推理通过并行处理提升吞吐量。
  4. 主流推理框架各有优势:vLLM适合高并发在线服务,TensorRT-LLM适合NVIDIA GPU极致优化,llama.cpp适合本地CPU/GPU推理。
  5. llama.cpp和vLLM使得大模型的本地运行和API服务部署变得简单高效,是AI应用落地的重要工具。

练习题

  1. 以下关于推理和训练的说法,哪项是正确的?

    A. 推理需要反向传播来计算梯度
    B. 训练只需要前向传播
    C. 推理仅需前向传播,训练需要前向+反向传播
    D. 推理和训练的计算量基本相同

    答案:C。推理只需要前向传播即可得到预测结果,而训练需要前向传播计算输出、反向传播计算梯度来更新参数。

  2. 将一个FP32的70B参数模型量化为INT4后,模型参数的显存需求大约变为多少?

    A. 140GB → 70GB
    B. 140GB → 35GB
    C. 140GB → 17.5GB
    D. 140GB → 8.75GB

    答案:C。INT4是4位,相比FP32的32位,精度降低了8倍,因此模型参数的显存需求从140GB降至约17.5GB。

  3. vLLM框架的核心创新技术是什么?

    A. Flash Attention
    B. PagedAttention
    C. Knowledge Distillation
    D. Structured Pruning

    答案:B。vLLM的核心创新是PagedAttention技术,它借鉴了操作系统的虚拟内存分页机制来管理KV Cache的显存,实现了高效的显存利用和更高的吞吐量。