大模型提高推理效率和成本优化
仅面向应用层:
优化大模型推理的效率和成本是一个系统工程,涉及模型、硬件、软件和策略等多个层面:
一、模型架构与权重层面优化(最根本的优化,也可能会影响效果)
这类优化旨在让模型本身变得“更轻、更快”。
-
模型量化
-
做法:将模型权重和激活值从高精度(如FP32)转换为低精度(如FP16、BF16、INT8,甚至INT4)。
-
效果:
-
显存占用减半及以上:FP16比FP32小一半,INT8再小一半。
-
计算速度提升:现代硬件(如GPU的Tensor Cores、CPU的AI指令集)对低精度计算有极致优化,速度可提升数倍。
-
-
代价:可能会带来轻微的精度损失,但通过量化感知训练 可以在训练阶段模拟量化过程,大幅减少精度损失。
-
-
模型剪枝
-
做法:移除模型中“不重要”的权重(如接近0的权重)或整个神经元/注意力头。
-
效果:让模型变得稀疏,减少参数量和计算量。稀疏模型在专用硬件上可以跑得更快。
-
代价:需要重新训练或微调以恢复精度。
-
-
知识蒸馏
-
做法:用一个已经训练好的、庞大而精确的“教师模型”来教导一个小巧的“学生模型”,让学生模型模仿教师模型的行为。
-
效果:得到一个体积小得多但性能接近大模型的小模型,推理速度自然大幅提升。
-
例子:DistilBERT、TinyLlama等。
-
二、推理技术与调度层面优化
这类优化不改变模型本身,而是通过改进推理过程中的计算和资源调度方式来提升效率。
-
批处理
-
做法:将多个用户的请求(输入序列)动态地组合成一个批次,一次性送给GPU计算。
-
效果:充分利用GPU的并行计算能力,显著提高吞吐量(每秒处理的token数)。
-
代价:会增加延迟(单个请求的响应时间),因为需要等待组批。适用于对吞吐量敏感、对延迟不极度敏感的场景(如后台任务)。
-
-
持续批处理/流式批处理
-
做法:这是对普通批处理的革命性优化。在生成式任务中(每个序列的生成长度不同),当一个序列生成完成后,立即在该批次中插入一个新的请求,而不需要等待整个批次都完成。
-
效果:极大地提升了GPU的利用率,尤其是在处理长文本生成时,可以同时优化吞吐量和延迟。vLLM 等框架的核心优势之一。
-
-
闪存注意力
-
做法:一种高效计算Attention的算法。通过巧妙的分块计算,避免将巨大的注意力矩阵全部载入显存,从而减少显存占用和IO读写。
-
效果:
-
显著降低显存占用:允许以更小的显存运行更大的模型或更长的序列。
-
提升计算速度:减少了GPU耗时高的显存访问操作。
-
-
现状:已成为众多高性能推理框架(如vLLM, FlashAttention库)的标准配置。
-
例如:vLLM核心性能优化技术总结
核心技术 解决的痛点 核心机制 传统方法 性能提升效果 PagedAttention 内存碎片化、KV缓存浪费导致的有效批处理大小受限 借鉴虚拟内存和分页思想,将KV缓存划分为固定大小的块,非连续物理存储,但逻辑连续。 预先分配一块连续的物理内存给序列,序列结束后释放。产生大量内存碎片。 将内存浪费从~80%降至不到4%,吞吐量提升高达24倍。 连续批处理 推理停滞。传统动态批处理需等一个批次所有请求完成后才能处理下一批,GPU计算资源空闲。 当一个序列生成完毕,立即将新请求插入该批次的空闲槽位中,实现GPU持续计算,无需等待。 动态批处理:需等待批次内所有序列生成完成,高延迟请求会阻塞整个批次。 吞吐量提升数倍(如5-10倍),尤其在高并发和不同输出长度的场景下。 优化内核 计算效率未达硬件极限 深度优化自研的注意力计算等内核,与PagedAttention高度协同,减少计算开销。 使用PyTorch等框架的通用实现,未对LLM推理做特殊优化。 进一步提升了计算速度,是前述技术的基础保障。
-
张量并行/流水线并行
-
做法:将一个大模型切分到多个GPU上。
-
张量并行:将单个层的矩阵运算横切到多个GPU上(模型并行)。
-
流水线并行:将模型的不同层放到不同的GPU上(层间并行)。
-
-
效果:使得单个GPU无法容纳的大模型能够被推理。
-
代价:GPU间通信会引入额外开销。通常用于非常大的模型(如175B+)。
-
三、硬件与部署层面优化
-
专用硬件选择
-
GPU:NVIDIA H100/A100(性能最强),L40S(优化推理和图形),消费级卡(如4090,成本效益高)。
-
专用AI加速卡:AWS Inferentia (Graviton), Google TPU, 华为昇腾等。这些芯片为推理量身定制,往往有极佳的能效比(成本低)。
-
-
使用推理优化运行时和框架
-
做法:不要直接使用PyTorch的原生推理,而是使用专门的优化框架。
-
例子:
-
TensorRT (NVIDIA):将模型编译和优化成在该硬件上运行最高效的计划。
-
vLLM:专注于LLM,通过PagedAttention和连续批处理实现高吞吐量。
-
ONNX Runtime:支持多硬件平台(CPU/GPU),并能进行图优化、算子融合等。
-
GGML:专为CPU推理优化,支持量化,可以在Mac甚至手机上运行大模型。
-
-
-
算子融合
-
做法:将多个细粒度的算子(如Linear + GeLU + LayerNorm)融合成一个粗粒度的“超级算子”。
-
效果:减少了内核启动次数和显存读写次数,提升了执行效率。上述的TensorRT等框架会自动完成此事。
-
四、系统与架构层面优化
-
缓存
-
KV Cache缓存:对于生成任务,每次生成下一个token时,之前token的Key和Value向量可以被缓存起来,避免重复计算。这是所有推理引擎的基础。
-
结果缓存:对于重复的或高度相似的请求,可以直接返回缓存的结果,适用于某些场景(如常见的问答)。
-
-
自适应模型加载
-
做法:根据请求的难度,动态选择不同大小的模型。简单问题用小模型,复杂问题用大模型。
-
-
边缘计算/混合部署
-
做法:将推理任务分散到离用户更近的边缘节点,或根据负载在云端和边缘之间动态调度。
-
效果:降低网络延迟,并减轻中心云的成本压力。
-
GPU利用率优化手段(包含组织、应用、指标)
数据指标:SM利用率
-
是什么:衡量流多处理器(Streaming Multiprocessors, SM)——GPU核心计算单元——在工作状态的时间百分比。在
nvidia-smi
中大致对应Volatile GPU-Util
。 -
含义:高SM利用率(如>80%)通常表明计算核心很忙,是良好性能的表现。但低利用率不一定代表性能差,可能是因为任务受限于其他因素(如下述的“内存瓶颈”)
如何推动:
- 推动不同的业务混部和资源流动;
- 弹性资源,战略计算资源管理(中央和地方)
- 多种经营模式,按需供给和包年包月;
- 看的数据准、推动用起来、用的好(如上提供的优化利用率:模型结构、算子优化、训练调度、计算IO并行等)
文章评论