使用TRT-LLM中的SOTA量化技术加速推理
大型语言模型(LLMs)的部署和推理速度常常受到内存容量、内存带宽和计算能力的限制。量化作为一种关键策略,通过使用如FP8等低精度数据类型来表示权重和激活值,以解决这些瓶颈问题。
在本博客中,我们提供了TensorRT-LLM中量化功能的概述,分享了基准测试,并提供了根据您的具体用例选择适当量化方法的最佳实践。
TensorRT-LLM中的量化
TensorRT-LLM 提供了一个一流的统一量化工具包,可以显著加速在 NVIDIA 硬件上的 DL/GenAI 部署,同时保持模型准确性。该工具包设计时考虑了易用性。您可以按照此用户指南,用几行代码对支持的 LLMs进行量化。我们目前专注于提供最先进的训练后量化 (PTQ),并将在不久的将来扩展到更多的模型优化技术。
基准测试
性能
在以下基准测试中,我们重点展示了几种流行模型在小批量大小下的加速情况,且未施加延迟限制。需要注意的是,在应用程序中存在延迟限制的场景中,TRT-LLM 可以实现更大的性能提升。以 LLaMA-v2-7B 为例,当第一个令牌的延迟被限制在 500 毫秒以下时,使用 FP8 量化和批量大小为 16 的情况下,与 H100 上的 FP16 相比,实现了显著的 2.3 倍推理加速。
模型 |
批量大小 |
加速(FP8 对比 FP16) |
加速(INT8 SQ 对比 FP16) |
|---|---|---|---|
GPT-J |
1 |
1.40x |
1.40倍 |
GPT-J |
8 |
1.44倍 |
1.30倍 |
LLaMA-v2-7B |
1 |
1.51x |
1.47倍 |
LLaMA-v2-7B |
8 |
1.40x |
1.32倍 |
*上述基准测试是在H100 80GB上运行的,输入长度=1024,输出长度=128,TP=1。
准确度
模型 |
量化方法 |
MMLU 基线 (FP16) |
MMLU 后量化 |
MMLU 损失 |
|---|---|---|---|---|
Falcon-180B |
FP8 |
70.4 |
70.3 |
0.14% |
INT8-SQ |
70.4 |
68.6 |
2.56% |
|
INT4-AWQ |
70.4 |
69.8 |
0.85% |
|
猎鹰-40B |
FP8 |
56.1 |
55.6 |
0.89% |
INT8-SQ |
56.1 |
54.7 |
2.50% |
|
INT4-AWQ |
56.1 |
55.5 |
1.07% |
|
LLaMA-v2-70B |
FP8 |
69.1 |
68.5 |
0.87% |
INT8-SQ |
69.1 |
67.2 |
2.75% |
|
INT4-AWQ |
69.1 |
68.4 |
1.01% |
|
MPT-30B |
FP8 |
47.5 |
47.4 |
0.21% |
INT8-SQ |
47.5 |
46.8 |
1.47% |
|
INT4-AWQ |
47.5 |
46.5 |
2.11% |
选择正确的量化方法的最佳实践
量化方法包括三个主要组成部分:
重量精度格式
激活精度格式
校准算法
通常,在小批量推理场景(批量大小 ≤ 4)中,关键考虑因素是内存带宽,这使得仅量化权重的方法成为首选。相反,对于大批量推理场景,例如服务场景(批量大小 ≥ 16),内存带宽和计算密度都成为关键因素。因此,建议选择同时量化权重和激活的量化方法。对于批量大小 ≥ 16,量化方法的选择可以因模型而异。我们建议优先使用FP8,因为我们通常认为它提供了最佳的性能和准确性。如果结果不符合您的特定用例,您可以进一步尝试Int8 SmoothQuant(Int8 SQ),然后是AWQ和/或GPTQ。
根据具体的使用场景,用户可能对精度影响和校准时间有不同的容忍度。下表总结了在选择量化方法时需要考虑的权衡*。您还可以在我们的文档中了解更多关于精度格式的信息。
量化方法 |
性能改进(批量大小 <= 4) |
性能改进(批量大小 >= 16) |
准确性影响 |
校准时间** |
|---|---|---|---|---|
FP8 (W8A8) |
中等 |
中等 |
非常低 |
分钟 |
Int8 SQ (W8A8) |
中等 |
中等 |
中等 |
分钟 |
仅Int8权重(W8A16) |
中等 |
低 |
低 |
非必需 |
仅权重(W4A16) |
高 |
低 |
高 |
非必需 |
Int4 AWQ (W4A16) |
高 |
低 |
低 |
数十分钟 |
Int4 GPTQ |
高 |
低 |
低 |
数十分钟 |
Int4-FP8 AWQ (W4A8) |
高 |
中等 |
低 |
数十分钟 |
* 性能和影响是在10多个流行的LLMs上测量的。我们将跟进更多的数据点。 ** 校准时间取决于实际模型的大小。
我们注意到,TensorRT-LLM 还为 KV 缓存提供了 INT8 和 FP8 量化。KV 缓存与普通激活不同,因为在大批量或长上下文长度的情况下,它占用了不可忽视的持久内存。如果您在 Hopper 和 Ada GPU 上使用 KV 缓存,我们建议使用 FP8 KV 缓存而不是 Int8,因为在大多数测试案例中,前者的精度影响比后者低。当从 FP16 KV 缓存切换到 FP8 KV 缓存时,它还使您能够在 H100 机器上运行 2-3 倍大的批量大小,例如 GPT-J 模型,这进一步带来了约 1.5 倍的性能提升。
接下来会发生什么
TensorRT-LLM 继续改进我们的量化功能,例如 Int4-FP8 AWQ (W4A8) 的公开示例和更多模型支持。请继续关注我们即将发布的版本。