大模型推理加速学习笔记
用一个已经训练好的、庞大而精确的模型(“教师模型”)来指导一个较小的模型(“学生模型”)进行训练。LLM生成Token是串行的(Token_{n+1}依赖于 Token_{0:n}),这是推理的主要延迟来源。生成新Token时,只需计算当前Token的Query向量,并与缓存的历史KV向量进行注意力计算。:现代硬件(如GPU的Tensor Cores)有专门的整数计算单元,执行低精度运算更快、更节
一、 基础概念
推理(Inference):指将训练好的模型应用于新数据(输入)以生成预测(输出)的过程。
加速目标:在满足业务延迟(Latency)和吞吐量(Throughput)要求的前提下,最大限度地降低单次推理的计算量、显存占用和能耗。
降低延迟(Latency):从输入到输出的时间,影响用户体验(如聊天响应速度)。
提高吞吐量(Throughput):单位时间(如每秒)内能处理的输入数量(Tokens/Second),影响服务成本。
减少显存占用:使得大模型能在更便宜、更普及的硬件上运行。
二、 加速技术详解
加速是一个系统工程,需要从模型、硬件、软件运行时三个层面协同优化。
1. 模型层面(Model-Level)优化
在模型部署前,通过改变模型本身的结构或精度来实现根本性的加速和瘦身。
(1) 模型量化(Quantization)
核心思想:将模型中通常使用的高精度浮点数(如FP32)权重和激活值转换为低精度数据(如INT8, INT4)。
效果:
减少显存占用:INT8是FP32的1/4,INT4/NF4是FP32的1/8。可将70B模型的显存需求从140GB+降至20GB-40GB。
加速计算:现代硬件(如GPU的Tensor Cores)有专门的整数计算单元,执行低精度运算更快、更节能。
常见方法:
训练后量化(PTQ):对已训练好的模型直接进行量化,简单快捷,但可能有一定精度损失。常用技术包括:
GPTQ:一种流行的权重量化方法,尤其适用于LLM,逐层校准以最小化误差。
AWQ:一种激活感知的权重量化方法,通过保护 salient权重(对激活影响大的权重)来降低精度损失。
量化感知训练(QAT):在训练或微调过程中模拟量化效应,让模型适应低精度,通常能获得比PTQ更好的精度,但成本更高。
(2) 模型剪枝(Pruning)
核心思想:移除模型中“不重要”的权重或组件,创建一个更稀疏、更小的模型。
分类:
非结构化剪枝:将单个权重置零。虽然模型文件可以压缩,但需要硬件和软件支持稀疏计算才能真正加速。
结构化剪枝:移除整个神经元、注意力头或网络层。更容易获得实际的加速效果。
(3) 知识蒸馏(Knowledge Distillation)
核心思想:用一个已经训练好的、庞大而精确的模型(“教师模型”)来指导一个较小的模型(“学生模型”)进行训练。学生模型学习模仿教师模型的输出和行为,以期在较小体量下达到接近教师的性能。
2. 推理策略(Inference Strategies)优化
在模型前向传播过程中,采用更聪明的策略来避免冗余计算。
(1) 自回归解码优化
LLM生成Token是串行的(Token_{n+1}依赖于 Token_{0:n}),这是推理的主要延迟来源。
KV Cache(键值缓存):
问题:在生成第n个Token时,Transformer需要为0到n-1个Token重复计算其Key和Value向量,计算量巨大。
解决方案:将之前所有Token计算好的Key和Value向量缓存起来。生成新Token时,只需计算当前Token的Query向量,并与缓存的历史KV向量进行注意力计算。
代价:KV Cache会占用大量显存,其大小与 batch_size * sequence_length * num_layers * hidden_size * 2成正比。这是限制批处理大小和上下文长度的主要因素。
(2) 连续批处理(Continuous Batching)
问题:在静态批处理中,一个批次的请求必须同时开始、同时结束。如果一个请求先生成完毕,GPU仍需等待该批次中最慢的请求完成,导致计算资源闲置。
解决方案:也称为迭代级批处理或流式批处理。vLLM和TGI等框架实现了此功能。
动态管理批次:每当一个请求生成完一个Token,就立刻将其输出返回,并从批次中移除此已完成请求,然后立刻将新的等待请求加入批次,充分利用GPU。
效益:极大提高吞吐量,尤其适用于流式输出和在线服务场景。
(3) 推测解码(Speculative Decoding)
核心思想:用一个小而快的“草稿模型” 来快速生成一段候选Token序列(“推测”),然后用原始大模型(“验证模型”)并行地验证这些候选Token。如果验证通过,则一次性接受多个Token;如果某Token被拒绝,则丢弃后续Token,由大模型重新生成。
效益:理想情况下,可以用一次大模型的前向传播验证K个Token,使解码速度提升K倍。是一种“用计算换延迟”的高级技术。
3. 硬件与软件栈(Hardware & Software Stack)
(1) 硬件选择
GPU:NVIDIA仍是绝对主流。其Tensor Cores对低精度计算(FP16, BF16, INT8, INT4)的优化是加速的关键。
专用AI加速器:如Google的TPU(擅长密集矩阵运算)、AWS的Inferentia 和Trainium(为推理/训练定制)、Groq的LPU(惊人Token速度)等,为特定场景提供更高性价比。
(2) 推理引擎/运行时(Inference Engines)
这些软件框架将上述优化技术封装,并提供高效的底层计算内核。
vLLM:
核心创新:PagedAttention和Continuous Batching。
PagedAttention:受操作系统虚拟内存和分页思想启发,高效管理KV Cache显存,有效解决内存碎片问题,允许非连续存储,显著提高显存利用率和吞吐量。
现状:当前生产环境部署LLM服务的事实标准。
TensorRT-LLM:
简介:NVIDIA推出的高性能推理SDK。
优势:与NVIDIA GPU硬件深度绑定和优化,支持多种量化、内核融合(Kernel Fusion)等极致优化,延迟性能通常最优。
缺点:生态系统更封闭,主要适用于NVIDIA硬件。
Hugging Face TGI (Text Generation Inference):
简介:Hugging Face推出的推理容器。
优势:支持Continuous Batching、FlashAttention、PEFT集成等,与Hugging Face生态无缝结合,易于使用。
ONNX Runtime:
简介:微软推出的跨平台高性能推理框架。
优势:支持多种硬件后端(CPU, GPU, TPU等),通过将模型转换为 ONNX 格式,可以利用不同硬件厂商的优化能力。
四、实践总结:如何选择加速方案?
第一步:评估需求
硬件条件:你有什么样的GPU?显存多大?(决定了可行性)
性能目标:是追求低延迟(对话场景)还是高吞吐(数据处理场景)?
精度要求:能接受多大的精度损失?
第二步:应用模型层面优化
几乎总是从量化开始:使用GPTQ/AWQ进行INT4/INT8权重量化,这是降低显存门槛、提升速度的最有效手段。
考虑模型选择:直接使用社区已量化好的模型(如TheBloke发布的GGUF/GPTQ模型)。
第三步:选择推理运行时
生产环境API服务:首选vLLM(吞吐量优先,通用性强)或 TensorRT-LLM(NVIDIA硬件上延迟极致优化)。
本地部署或实验:可使用Hugging Face Transformers Pipelines(简单)或 TGI。
CPU部署:使用GGML/Llama.cpp 库,它专攻CPU量化推理。
第四步:配置推理参数
根据硬件调整 max_batch_size。
合理设置 max_seq_len以控制KV Cache大小。
启用FlashAttention(如果支持)来优化注意力计算。
五、技术趋势
混合专家(MoE)模型:如Mixtral,通过激活少数专家来大幅减少计算量,是架构级别的根本性加速。
更激进的量化:如二值化(1-bit)、 ternary(2-bit)权重研究。
硬件协同设计:针对LLM推理特点设计的专用硬件(如Groq LPU)将不断涌现。
统一编译框架:如Apache TVM,旨在将任何模型编译优化到任何硬件后端,提供跨平台的极致性能。
结论:大模型推理加速是一个多层次、跨栈的优化过程。没有单一的“银弹”,需要根据具体场景,将模型量化、智能批处理(vLLM)和硬件特性结合起来,才能达到最优的性价比。
六、参考资料
大模型推理加速指南:https://blog.csdn.net/m0_59596990/article/details/136199516
腾讯云的分层推理加速方案:https://www.bilibili.com/video/BV19eTMz2E87/?vd_source=689f211a023de72f71ddaf27a8da1164
从内存优化、并行计算、调度策略等方面介绍vLLm推理加速的具体实现:https://www.bilibili.com/video/BV1mbYPzREYi?vd_source=689f211a023de72f71ddaf27a8da1164
更多推荐
所有评论(0)