模型量化对计算受限和内存受限的场景是否都有收益?如何使用工具在量化前和量化后进行性能瓶颈分析,指导模型后续的优化策略?围绕以上问题,本文主要介绍:
1)Roofline 模型定义和绘制方法
2)如何使用Roofline分析模型量化前后性能瓶颈
3)针对模型在不同的受限场景给出优化策略。
1,Roofline 模型定义和绘制
定义:Roofline 模型是一种用于分析硬件计算性能瓶颈的工具,通过可视化计算性能与算术强度(计算量 / 数据搬运量)的关系,判断系统受限于计算能力还是内存带宽。
绘制步骤
确定硬件参数
- • 峰值计算性能(Peak Computational Performance, ):硬件在单位时间内可完成的最大操作数(OPS),通常由硬件架构决定,如 GPU 的 CUDA 核心数、频率等。
- • 峰值内存带宽(Peak Memory Bandwidth, ):硬件在单位时间内可传输的数据量(Bytes/s),由内存接口带宽、总线宽度等决定。
构建坐标系
- • 横轴(算术强度,AI):单位数据搬运量对应的计算量,即计算操作数()数据搬运量(),反映计算任务对内存的依赖程度。
- • 纵轴(实际性能,P):任务在硬件上的实际计算性能(OPS)。
绘制关键线条
- • 计算性能上限(水平线):绘制 的水平线,表示硬件的最大计算能力。当任务的算术强度足够高(即计算密集型任务),性能将趋近于这条线。
- • 内存带宽上限(斜线):绘制 的斜线,斜率为 。当任务的算术强度较低(即内存密集型任务),性能受限于内存带宽,沿此斜线变化。
分析性能瓶颈
- • 若任务的实际性能位于斜线下方,则受限于内存带宽(内存约束)
- • 若位于水平线下方且远离斜线,则受限于计算能力(计算约束)。
A6000 GPU 的 Roofline 模型
假设 Nvidia A6000 的硬件参数如下:峰值计算性能:约为 155 TOPS,峰值内存带宽:约为 0.75 TBytes/s。
确定坐标轴范围
- • 横轴(算术强度 AI):从 0 到足够大(如 200 OPS/Byte)。
- • 纵轴(性能 P):从 0 到 155 TOPS。
绘制线条
- • 计算性能上限:水平直线 P=155 TOPS(图中水平线)。
- • 内存带宽上限:斜线 P=0.75 TBytes/s(图中斜线,斜率为 0.75)。
标注交点(Break-even Point)
两线交点处的算术强度为 OPS/byte 。
- • 当 AI>207 时,任务为计算密集型(计算受限),性能趋近于
- • 当 AI<207 时,任务为内存密集型(内存受限),性能受限于 。
2,量化的核心机制
模型量化后,提高推理性能的核心原因为:减少内存访问开销并改变计算任务的资源瓶颈类型,这一过程可通过Roofline 模型的框架清晰解释。
当算术强度较低时,计算设备的性能受限于内存带宽,此时数据搬运速度成为瓶颈。
优化的策略为:量化模型,内核融合,增大batch等
当算术强度较高时,性能受限于计算单元的浮点运算能力,如 GPU/CPU 的峰值 FLOPS。
优化策略为:使用低精度的计算能力,比如从FP16到INT8,理论算力翻倍。
- • 算术强度(Arithmetic Intensity, AI)
定义为计算量(FLOPs)与数据搬运量(Bytes)的比值。例如: 矩阵A维度信息为[m,n],矩阵B维度信息为[n,p],两个矩阵相乘的到矩阵C维度为[m,p]。
此时的运算量为:, 内存访问为:,计算前度为两者比值。
量化的核心作用:通过降低张量精度,同等计算量下的数据搬运量显著减少。比如 FP32 的 4 字节降低到INT8 的 1 字节,内存搬运量降低4倍,同等计算量下,算术强度提升4倍。
例如:某层计算量为,FP16输入权重数据量为(AI=125);量化为 INT8 后,数据量降至 (AI=250),算术强度提升 2 倍。
举例:以Llama-2-7b模型,在预填充阶段属于计算受限型,在解码阶段属于内存受限型。
3,量化后性能提升的三种场景
场景 1:量化后仍为内存受限,但算术强度提升
条件:量化前模型的算术强度AI处于内存受限区间,且量化后算术强度AI未超过内存带宽与计算能力的临界值。
优化机制
- • 数据搬运量减少 → 单位计算的平均内存访问次数降低 → 缓解内存带宽压力。
- • 理论性能推理时间约为:数据传输时间+计算时间,由于第一项占主导,数据量的减少将直接缩短推理时间。
LLM 典型场景,解码阶段(Decode Stage)
- • 解码时通常为单 Token 生成,计算量小(FLOPs 低),但需频繁访问 KV 缓存(数据搬运量大),属于强内存受限。
- • 量化后,KV 缓存的存储与搬运量减少(如 FP16→INT8 压缩 2 倍),算术强度提升,内存瓶颈缓解,解码速度显著加快。
场景 2:量化后从内存受限转为计算受限
条件:量化前算术强度AI低于临界值(内存受限),量化后 算术强度AI超过临界值(转为计算受限)。
优化机制:
- • 原本受限于内存带宽的任务,通过提 算数强度AI摆脱内存瓶颈,充分利用计算单元性能。
- • 虽然计算单元的负载增加,但内存访问耗时的减少幅度更大,整体推理时间仍下降。
LLM 典型场景,小批次解码或特定算子
- • 当批次较小(如 batch=1)时,部分层如注意力层,可能因数据量少,需要的算力较小主要的限制在数据搬运速度;量化后,同等算力下,需要搬运的数据量减少,进而数据算术强度AI提升,转为计算受限,计算单元利用率提高。
场景 3:量化前后均为计算受限,性能无提升
条件:量化前算术强度AI已高于临界值(计算受限),量化后算术强度AI进一步提升但计算能力已达瓶颈。
优化机制
- • 计算单元始终满载,内存带宽未成为瓶颈,量化带来的数据量减少无法转化为性能提升。
- • 甚至可能因量化 / 反量化操作(如 INT8 计算需先转为 FP16/32)引入额外计算开销,导致轻微性能下降。
LLM 典型场景
- • 预填充阶段(Prefill Stage):生成完整 Token 序列时,计算量较大(FLOPs 高),通常为计算受限,量化对性能无显著影响。
- • 大批次解码:批次增大时,计算量线性增加,算术强度足够高,内存带宽不再是瓶颈。
4,量化模型关键结论
模型量化通过压缩数据体积→提升算术强度→缓解内存带宽压力,使任务从 “内存密集型” 向 “计算密集型” 转化。
- • 内存受限场景是量化的主要受益点,量化对推理性能的提升高度依赖模型是否处于内存瓶颈。在 LLM 中,解码阶段的 KV 缓存访问是典型内存受限场景,量化可大幅降低数据搬运成本,提升吞吐量。
- • 计算受限场景需谨慎量化,若模型本身计算能力不足(如预填充阶段),量化可能无法带来收益,甚至因精度损失导致额外重计算(如重试解码)。
- • 硬件特性决定优化上限,支持 INT8/INT4 加速的硬件(如 GPU 的 Tensor Core、NPU)可进一步放大量化收益(计算单元直接优化低精度运算)。纯 CPU 环境中,量化的收益更多来自内存带宽优化,而非计算加速。
在 LLM 部署中,优先对内存受限的模块(如 KV 缓存、Embedding 层)进行量化,可在保持精度的前提下最大化推理性能提升。
参考:
Yuan et al. LLM Inference Unveiled: Survey and Roofline Model Insights. arXiv:2402.16363