一个面向 Java 开发者的 Sring-Ai 示例工程项目,该项目是一个 Spring AI 快速入门的样例工程项目,旨在通过一些小的案例展示 Spring AI 框架的核心功能和使用方法。 项目采用模块化设计,每个模块都专注于特定的功能领域,便于学习和扩展。欢迎感兴趣的小伙伴们关注和 Star。
项目地址 :github.com/java-ai-tec... 🎉🎉🎉🎉🎉
LLM 系列文章列表:
引言
大型语言模型(LLM)的训练过程虽然耗资巨大且备受关注,但其真正的价值实现,却发生在**推理(Inference)**这一最终环节。推理是将训练好的模型应用于实际,根据 用户输入(Prompt)生成响应的过程
。无论是驱动一个实时聊天机器人,还是进行离线文档分析,高效、可靠的推理是所有 LLM 应用的基石。然而,这一过程远非简单地调用模型那么直接,它面临着一个核心的 三难困境(Trilemma):
既要追求极致的低延迟(Latency)以保证用户体验,又要实现最大的 高吞吐量(Throughput)以服务海量用户并降低单位成本,同时还需控制昂贵的硬件成本(Cost)。
本文将深入剖析 LLM
推理的全貌,从其根本的自回归生成机制出发,逐层揭示其 核心挑战、关键性能指标、优化技术、分布式策略以及当前主流的推理框架 。本文旨在为读者构建一个关于 LLM 推理的完整知识图谱,理解其"表"之性能与"里"之原理。
推理的本质:一个两阶段的自回归过程
要理解推理优化,首先必须掌握 LLM
生成文本的底层机制。现代主流的生成式 LLM
(如 GPT 系列)本质上都是 自回归(Autoregressive) 模型。
Transformer 推理机制
现代大语言模型主要基于 Transformer
架构,其推理过程的核心是自注意力机制。在推理阶段,模型需要处理的主要计算包括:
-
1、嵌入层计算:将输入
token
转换为向量表示 -
2、多头自注意力:计算
Query、Key、Value
矩阵 -
3、前馈网络:进行非线性变换
-
4、层归一化:稳定训练过程
-
5、输出层:生成下一个
token
的概率分布
下图是基于 Decoder 的 Transformer 架构

自回归生成:逐字吐露的本质
自回归意味着模型以 逐个 token 的方式生成文本。每个新 token
的预测都依赖于之前已经生成的所有 token
(包括原始输入和先前已生成的输出)。这个过程形成了一个循环:
-
1、模型接收当前序列作为输入。
-
2、预测词汇表中每个词成为下一个
token
的概率分布。 -
3、通过采样策略(如贪心采样、核采样等)选择一个
token
。 -
4、将新选中的
token
附加到序列末尾。 -
5、重复此过程,直到满足停止条件(如生成了终止符 `` 或达到最大长度)。
这种循序渐进的特性是 LLM
能够生成连贯、上下文相关文本的基础。但它也带来了固有的算法性挑战:随着序列的增长,模型在下一步需要处理的上下文也随之增加,导致计算量不断累积,速度越来越慢。
两阶段过程:预填充(Prefill)与解码(Decode)
LLM
推理并非一个单一的过程,而是被清晰地划分为两个计算特性截然不同的阶段。这种二元性是所有推理优化挑战的根源。
-
阶段一:预填充(Prefill)
这个初始阶段一次性处理用户的全部输入(Prompt)。由于所有输入
token
都是已知的,模型可以并行计算它们的注意力得分,这在计算上类似于一次大规模的矩阵-矩阵乘法。因此,预填充阶段是 **计算密集型(Compute-Bound)**的,其速度主要受限于 GPU 的原始计算能力(FLOPS),并且能高效利用 GPU 硬件。此阶段的最终产出是整个输入 Prompt 的 KV 缓存和第一个生成的token
。 -
阶段二:解码(Decode)
这是上述的自回归循环阶段,逐一生成后续的
token
。在每一步,模型只需处理最新生成的单个token
与所有历史上下文的交互,这在计算上类似于一次大规模的矩阵-向量乘法。关键在于,解码阶段是 **内存带宽密集型(Memory-Bandwidth Bound)**的。其瓶颈不再是计算速度,而是从相对较慢的 GPU HBM(高带宽内存)中读取巨大的模型权重和不断增长的 KV 缓存到极速的片上 SRAM (Static Random Access Memory 静态随机存取存储器
)所需的时间。在此阶段,GPU 强大的计算单元常常处于空闲状态,等待数据加载。
这种 计算密集 与 内存密集 的鲜明对比,意味着任何单一、静态的优化策略都难以同时完美地适应两个阶段。一个真正高效的推理系统必须能够同时处理这两种性质迥异的负载。
KV 缓存:优化的功臣与新的瓶颈
为了避免在每个解码步骤中为所有历史 token
重复计算注意力机制中的 Key (K)
和 Value (V)
张量,**KV 缓存(KV Cache)**这一关键优化应运而生。

-
工作原理:在预填充阶段,模型一次性计算并存储整个输入 Prompt 的 K 和 V 值。在随后的每个解码步骤中,模型仅计算最新生成的那个 token 的 K 和 V,并将其追加到缓存中。这使得解码阶段的计算复杂度从与序列长度的二次方关系(O(N2))降低到线性关系(O(N))。
-
新的瓶颈 :KV 缓存是解决计算冗余的功臣,但它自身也创造了一个新的、甚至更严峻的内存瓶颈。其大小与序列长度、批处理大小(batch size)等因素成正比,对于长序列任务,KV 缓存的内存占用甚至会超过模型权重本身。其大小可由以下公式估算:
Size≈2×(num_layers)×(num_heads)×(head_dim)×(sequence_length)×(batch_size)×precision_bytes
这个庞大的缓存必须在每个内存密集型的解码步骤中被反复读写,使其成为现代 LLM 推理优化的核心目标。可以说,
LLM 推理优化的历史,就是从解决计算瓶颈转向解决由其解决方案(KV 缓存)所引发的内存瓶颈的历史
。KV Cache的核心优化方向:
- 量化技术:将KV Cache从FP16降至INT8或INT4
- 压缩算法:使用低秩分解或稀疏化技术
- 选择性保留:只保留重要的键值对
- 动态管理:根据序列长度动态调整缓存策略
量化性能与直面挑战
为了有效评估和优化推理系统,我们需要一套标准的语言来描述其性能,并清晰地认识其面临的核心硬件制约。
核心性能指标
以下四个指标构成了评估 LLM 推理性能的基石,它们相互关联,共同定义了一个复杂的权衡空间。
指标 | 定义 | 衡量内容 | 场景影响 |
---|---|---|---|
首个 Token 生成时间 (TTFT) | 从用户发送请求到收到第一个响应 token 的时间。 | 系统的初始响应速度,主要由预填充阶段的延迟决定。 | 实时交互应用(如聊天机器人)的用户体验。 |
每输出 Token 时间 (TPOT) | 生成第一个 token 之后,平均生成每个后续 token 所需的时间。也称作 Inter-Token Latency (ITL)。 | 模型的"流式"生成速度,由解码阶段的延迟决定。 | 流式应用的流畅性,影响用户阅读体验。 |
延迟 (Latency) | 生成完整响应所需的总时间。可近似为 TTFT + (TPOT * 生成的token数) 。 |
端到端的请求处理时间。 | 离线、长文本生成任务的效率 。 |
吞吐量 (Throughput) | 系统在单位时间内能处理的 token 或请求的总量。通常以 Tokens/秒 (TPS) 或 请求数/秒 (RPS) 衡量。 |
系统的处理能力和成本效益。 | 服务的可扩展性和经济性,决定了能以多低成本服务多少用户。 |
这四个指标并非孤立存在。例如,为了提高吞吐量而增大批处理大小,通常会导致每个请求的排队时间和处理时间增加,从而恶化 TTFT 和 TPOT。因此,不存在普适的"最佳性能",只有面向特定应用场景的"最优权衡"。一个实时聊天应用会优先保证低延迟,而一个离线分析服务则会优先追求高吞吐量。
"有效吞吐量"与双重瓶颈
单纯追求高 TPS 可能会产生误导。一个系统可以通过极大的批处理来刷高 TPS,但如果每个请求的延迟都高到用户无法接受,那么这种高吞吐量是无效的。因此,**有效吞吐量(Goodput)**的概念应运而生,它衡量的是在满足特定服务等级目标(SLO,如 TTFT < 200ms
)的前提下,系统所能达到的吞吐量。这促使我们从关注"硬件跑得多忙"转向关注"系统交付了多少有价值的成果"。
这背后是推理系统面临的双重瓶颈:
- 内存墙:如前所述,解码阶段受限于内存带宽,是主要的性能瓶颈。
- 计算墙:预填充阶段受限于计算能力,直接影响长 Prompt 的 TTFT。
优化技术
为了攻克上述挑战,学术界和工业界发展出了一系列精巧的系统级优化技术。这些技术并非孤立的选项,而是构成了一个协同工作的技术栈,共同铸就了现代高性能推理引擎。
PagedAttention 与注意力变体
-
PagedAttention :这是近年来 LLM 服务领域最具影响力的创新之一。它旨在解决传统 KV 缓存管理中的巨大内存浪费问题。传统方法为每个请求预分配一块连续的大内存,导致了严重的内部碎片 (序列短,内存用不完)和外部碎片 (可用内存总量够,但没有足够大的连续块),浪费率可高达 60-80%。受操作系统虚拟内存的启发,
PagedAttention
将 KV 缓存分割成许多个小的、固定大小的"块"(Pages)。这些物理块可以非连续地存储在 GPU 内存中,并通过一个"块表"将序列的逻辑块映射到物理块。这种方式几乎完全消除了内存碎片,将内存利用率提升至接近最优(浪费低于 4%),从而允许更大的批处理规模,直接将吞吐量提升 2-4 倍。PagedAttention 是 vLLM 推理框架的核心技术。 -
多查询注意力 (MQA) 与分组查询注意力 (GQA):这些是直接在模型架构层面进行的优化,旨在从根本上减小 KV 缓存的大小。
- 多头注意力 (MHA):标准做法,每个查询头(Query Head)都有自己独立的键(Key)和值(Value)头,效果好但内存开销大 28。
- 多查询注意力 (MQA):一种激进的优化,所有查询头共享同一对 K/V 头。这极大地减小了 KV 缓存,降低了内存带宽需求,但可能牺牲部分模型性能。
- 分组查询注意力 (GQA):MHA 和 MQA 之间的折中方案。它将查询头分组,每组共享一对 K/V 头。这在实现 MQA 大部分加速效果的同时,最大程度地保留了 MHA 的性能。GQA 已成为 Llama 等现代 LLM 的标准配置。

加速核心计算:FlashAttention
标准注意力计算本身也是内存带宽密集型的,因为它需要将巨大的中间结果(一个 N×N
的注意力矩阵)写入和读出 HBM (High Bandwidth Memory 高带宽内存)。
FlashAttention 是一种 IO
感知的精确注意力算法,通过重排计算顺序来最小化 HBM 访问。
- 分块(Tiling) :将
Q, K, V
矩阵切分成能装入 GPU 高速 SRAM 的小块。 - 核融合与在线 Softmax :将注意力的多个计算步骤融合成一个 CUDA 核。它利用巧妙的
在线 Softmax
算法,逐块计算 Softmax 归一化,而无需生成完整的N×N
注意力矩阵。
通过避免读写巨大的中间矩阵,FlashAttention
显著减少了内存 IO
,带来了 2-4 倍的计算加速,并支持更长的上下文。
压榨 GPU 性能:连续批处理
- 静态批处理(Static Batching) :传统方式下,系统等待凑齐一个固定大小的批次,然后统一处理。在新请求加入前,整个系统必须等待批次中最慢的那个请求完成,导致大量
GPU
空闲和计算浪费。 - 连续批处理(Continuous Batching) :也称动态批处理或
In-flight Batching
,是一种更先进的调度策略。调度器在每次迭代(生成一个 token)后都会检查批次中的请求。一旦有请求完成,它会立即被移出,同时从等待队列中加入新的请求。这确保了 GPU 始终有活干,消除了因等待和填充(padding)造成的浪费,极大地提升了吞吐量(可达 20 倍以上)。这是vLLM、TensorRT-LLM
等现代推理服务器的标配功能。

其他关键优化
- 量化(Quantization) :通过降低模型权重或激活值的数值精度(如从
FP16
降至INT8
或INT4
)来减小模型体积和内存占用,并加速计算。对 KV 缓存进行量化是减轻解码阶段内存带宽压力的有效手段 。 - 推测解码(Speculative Decoding) :使用一个小的、快速的 "草稿模型" 预先生成多个候选 token,然后由大的**"目标模型"一次性并行验证。如果草稿**被接受,系统就能在一次目标模型调用中确认多个 token,从而将端到端延迟降低 2-3 倍,且不损失任何模型质量 。

这些优化技术的演进趋势清晰地表明,推理优化的重心已从单纯减少计算量
转向了更复杂的隐藏系统延迟
,尤其是内存访问延迟。
规模化之路:分布式推理策略
当单个模型的尺寸超过单个 GPU 的内存限制时,就必须采用分布式策略,将其部署在多张 GPU 乃至多个节点上。
并行策略的分类
-
模型并行(Model Parallelism):将单个模型切分到多个设备上。
-
张量并行(Tensor Parallelism, TP) :也称层内并行。它将模型中的大矩阵(如全连接层和注意力层的权重)沿特定维度切分到不同 GPU 上。每个 GPU 只计算部分结果,然后通过高速通信(如 NVLink)进行聚合(如
All-Reduce
操作)。TP 能有效降低单卡内存,但通信开销巨大。 -
流水线并行(Pipeline Parallelism, PP):也称层间并行。它将模型的不同层(或层块)顺序放置在不同 GPU 上,形成一个"流水线" 。一个 GPU 的输出是下一个 GPU 的输入。这种方式的通信频率较低,但容易产生"流水线气泡"(GPU 等待前序阶段完成而空闲),影响效率。
-
-
数据并行(Data Parallelism, DP):最简单的并行方式。在每个 GPU 上都复制一份完整的模型,然后将输入请求分发给不同的 GPU 独立处理。DP 不能解决单模型过大的问题,但能有效提升小模型的总吞吐量。

硬件与策略的匹配
并行策略的选择与硬件的物理连接方式(网络拓扑)息息相关。
-
单节点多 GPU :对于能装入单台服务器(如 8 张 A100)的大模型,张量并行是首选。节点内的高速 NVLink 总线能够支撑 TP 所需的频繁、低延迟通信。
-
多节点多 GPU :对于需要跨服务器部署的巨型模型,通常采用混合并行策略。在节点之间(通过 InfiniBand 或以太网连接,速度较慢)使用通信频率较低的
流水线并行 ;在每个节点内部(通过 NVLink 连接,速度极快)使用张量并行 。vLLM 等框架的推荐配置正是这一思想的体现:
tensor_parallel_size
设为单节点 GPU 数,pipeline_parallel_size
设为节点数。
未来的一个重要方向是 动态并行。鉴于预填充和解码阶段的计算特性不同,推理引擎未来可能会根据当前处理的阶段动态地调整并行策略(如动态重分片),以实现全局最优性能。
主流推理框架
当前,开源社区和商业公司提供了多个优秀的推理框架,它们在设计哲学和技术实现上各有侧重。
框架 | 核心哲学 | 关键技术 | 优势 | 劣势 | 理想场景 |
---|---|---|---|---|---|
vLLM | 通过极致的内存管理实现高吞吐量。 | PagedAttention, 连续批处理 | 业界领先的吞吐量,社区活跃,支持多厂商硬件 (NVIDIA/AMD),易用性高。 | 对量化模型的优化可能落后于专用框架,单请求低延迟场景非其最强项。 | 高并发、吞吐量敏感的在线服务。 |
TensorRT-LLM | 压榨 NVIDIA GPU 的极致性能。 | TensorRT 编译器,深度核融合,FP8/INT4 量化,高级调度 | 在 NVIDIA 硬件上通常能达到最高的性能(最低延迟和最高吞吐量),与 NVIDIA 生态(Triton)紧密集成。 | 仅支持 NVIDIA,设置复杂,需要显式的模型编译步骤,学习曲线陡峭。 | 对性能有极致要求、且技术栈锁定在 NVIDIA 的企业级部署。 |
Hugging Face TGI | 提供与生态系统无缝集成的生产级解决方案。 | 连续批处理,张量并行,Rust 核心服务 | 部署极其简便,特别是对于 Hugging Face Hub 上的模型,是"开箱即用"的典范。 | 性能通常不及 vLLM 或 TensorRT-LLM,在生态系统外使用可能受限。 | 快速原型验证,以及深度绑定 Hugging Face 生态的应用。 |
这三个框架完美体现了工程领域的经典权衡:性能(Performance) vs. 生产力(Productivity) vs. 可移植性(Portability)。TensorRT-LLM 追求极致性能,TGI 追求极致生产力,而 vLLM 则在性能和易用性/可移植性之间取得了出色的平衡。对用户而言,选择哪个框架,取决于具体的业务需求、硬件环境和团队技术栈。任何脱离具体场景的"性能最好"的论断都是片面的,唯一的真理是进行符合自身生产环境的基准测试。
国产化浪潮:自主生态下的推理实践
在全球大模型技术飞速发展的同时,中国的人工智能领域也形成了蓬勃发展的生态系统,其显著特点是"模型-框架-硬件"全栈协同与自主创新 。在推理层面,这体现为国产大模型、推理框架与国产AI芯片的深度适配和联合优化。
国产 AI 芯片与推理的基石
大模型的推理对算力、内存带宽和容量提出了极高要求,这催生了国产AI芯片的快速发展,它们是实现大模型应用落地的关键硬件载体 。
- 硬件厂商梯队:国内已形成多层次的AI芯片供应商格局。第一梯队以华为、海光、寒武纪等为代表,资金和技术实力雄厚;第二梯队则涌现出一批以推理卡为主要产品的创新企业 。这些企业正努力在特定市场(如边缘计算、国产化替代)中寻找与国际巨头竞争的空间 。
- 软硬件协同 :华为的昇腾(Ascend)系列是国产全栈AI解决方案的典型代表 。其核心是CANN(Compute Architecture for Neural Networks),这是一个专为昇腾处理器设计的编译和运行环境。针对大模型推理,CANN提供了从底层算子到上层调度的全方位优化
- 自动并行与调度:CANN能够根据模型结构和物理集群信息,自动搜索并应用最优的并行切分策略(如张量、流水线、数据并行),实现大模型在昇腾集群上的高效分布式部署 。同时,通过Auto Batching等调度策略,动态聚合请求,平衡计算与访存,提升整体算力利用率 。
- 核心技术自研优化:CANN全面支持并优化了KV Cache机制,实现了分布式环境下的高效存储和更新 。此外,还针对昇腾硬件的内存层次和数据通路,深度优化实现了FlashAttention融合算子,可将Attention处理性能提升高达50% 。
- 量化支持:提供针对性的量化方案,如仅权重(Weight-only)量化和KV Cache量化,可在保证精度的前提下,显著降低内存占用 。
主流国产大模型与推理框架
依托于自主硬件和软件生态,国内的主要科技公司均推出了各具特色的大模型及配套的推理部署方案 。
- 华为盘古与昇腾 AI :华为盘古大模型(如盘古 7B 和 72B MoE 模型)与昇腾 AI 平台深度绑定,形成
模型+AI框架+AI处理器
的完整技术栈 。其推理技术,如 MindIE(MindSpore Inference Engine),集成了通信加速、解码优化、量化压缩、最优并行和调度优化等一系列技术,旨在最大化昇腾硬件的推理效率 。 - 百度文心与飞桨:百度的文心一言(ERNIE)系列大模型基于其自研的飞桨(PaddlePaddle)深度学习框架 。为了高效部署,百度推出了 FastDeploy 工具套件,它支持将模型部署到包括国产 CPU、GPU 在内的多种硬件上 。FastDeploy 集成了低比特量化、上下文缓存、推测解码等多种加速技术,并提供与 vLLM 和 OpenAI 兼容的 API,简化了开发和集成流程 。百度智能云通过技术迭代,已将文心一言的推理成本大幅降低 。
- 阿里通义与生态合作:阿里巴巴的通义千问(Qwen)系列模型以其全面的能力和积极的开源策略,在全球范围内建立了广泛的生态系统 。通义千问不仅提供多种尺寸和能力的模型(从 Turbo 到 Max),还引入了创新的"思考模式"来平衡推理深度和效率 。在推理优化方面,阿里一方面通过大幅降低API价格来推动大模型应用的普及 ,另一方面积极与硬件厂商(如 NVIDIA、AMD、Arm)和推理框架(如 vLLM、SGLang)合作,最大化 Qwen 模型在不同平台上的推理性能 。
- 智谱 GLM :作为国内领先的大模型创业公司,智谱 AI 的 GLM 系列模型同样构建了开放平台 。其一个重要特点是与国产硬件生态的紧密结合,例如与华为合作推出基于昇腾AI硬件的
智谱-昇腾 ChatGLM 训推一体机
,为企业提供本地化、开箱即用的大模型解决方案。
开源驱动与生态共建
与国际趋势相呼应,开源已成为推动中国大模型技术发展和应用普及的核心战略 。通过开源模型,国内厂商能够快速构建开发者社区,整合底层资源,降低行业研发成本,并以非对称优势参与全球竞争 。这种开放的生态不仅加速了模型本身的迭代,也催生了丰富的下游应用,形成了从基础研究到产业落地的良性循环 。
总体而言,国产大模型推理正走在一条 自主可控 与 开放兼容 并行的道路上。一方面,通过自研芯片和全栈软件优化,构建自主的技术体系;另一方面,通过积极拥抱开源和产业合作,融入全球 AI 生态,共同推动大模型推理技术的边界。
总结
LLM 推理领域是一场与内存瓶颈和硬件利用率的持续战斗。本文梳理的各项优化技术,都是为了让日益庞大的模型变得更加实用和经济。展望未来,几个关键趋势正在塑造下一代推理技术:
- 更小、更高效的模型架构:业界正大力投入于研发更小但能力依旧强大的模型(如 Phi-3)以及稀疏化的专家混合(MoE)模型。MoE 模型在每次推理时只激活一小部分参数,从根本上降低了单次推理的计算和内存成本。
- 软硬件协同设计 :从
FlashAttention
到FlashAttention-3
的演进,清晰地展示了算法如何紧随硬件特性(如 Hopper 架构的 FP8 支持)进行迭代。未来的性能突破将更多地来自于算法与底层芯片的深度协同设计。 - 动态与自适应推理:未来的推理系统将更加智能。它们能够根据请求的难度和类型,动态地分配计算资源,例如为复杂问题提供更多的"思考时间"(推理时计算缩放),或在预填充和解码阶段间动态切换并行策略,从而摆脱当前"一刀切"的计费和资源分配模式。
- 可控与可信的推理:随着 LLM 逐渐演化为能够自主行动的智能体(Agent),如何保证其推理过程的正确性、逻辑性和可控性,将成为新的研究焦点。
总而言之,大型语言模型的未来,不仅取决于我们能构建多大的模型,更取决于我们能以多快的速度、多低的成本、多高的效率去运行它们。推理优化,正是这场通往通用人工智能道路上,至关重要且充满挑战的征途。