使用 TRT-LLM 中最先进的量化技术加速推理#
LLM 的部署和推理速度常常受到内存容量、内存带宽和计算能力的限制。量化是解决这些瓶颈的关键策略,涉及使用更低精度的 数据类型(如 FP8)来表示权重和激活。
在这篇博客中,我们概述了 TensorRT-LLM 中的量化功能,分享了性能测试结果,并提供了根据您的特定用例选择合适量化方法的最佳实践。
TensorRT-LLM 中的量化#
TensorRT-LLM 提供了一流的统一量化工具包,可显著加速 DL/GenAI 在 NVIDIA 硬件上的部署,同时保持模型精度。此工具包设计易于使用。您可以按照本用户指南,通过几行代码对支持的 LLM 进行量化。我们目前专注于提供最先进的 训练后量化 (PTQ),并将在不久的将来扩展到更多的模型优化技术。
性能测试#
性能#
在以下性能测试中,我们重点展示了在小批量大小下对一些流行模型的加速效果,且未施加延迟限制。需要注意的是,在您的应用存在延迟限制的场景下,TRT-LLM 可以实现更大的性能提升。以 LLaMA-v2-7B 为例,当首个令牌延迟限制在 500 毫秒以下时,使用 FP8 量化和批量大小为 16 在 H100 上相比 FP16 实现了显著的 2.3 倍推理加速。
模型 |
批量大小 |
加速 (FP8 vs. FP16) |
加速 (INT8 SQ vs. FP16) |
---|---|---|---|
GPT-J |
1 |
1.40 倍 |
1.40 倍 |
GPT-J |
8 |
1.44 倍 |
1.30 倍 |
LLaMA-v2-7B |
1 |
1.51 倍 |
1.47 倍 |
LLaMA-v2-7B |
8 |
1.40 倍 |
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% |
|
Falcon-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) |
中等 |
低 |
低 |
不需要 |
仅 Int4 权重 (W4A16) |
高 |
低 |
高 |
不需要 |
Int4 AWQ (W4A16) |
高 |
低 |
低 |
数十分钟 |
Int4 GPTQ |
高 |
低 |
低 |
数十分钟 |
Int4-FP8 AWQ (W4A8) |
高 |
中等 |
低 |
数十分钟 |
* 性能和影响是在 10+ 个流行的 LLM 上衡量的。我们将后续提供更多数据点。** 校准时间取决于实际的模型大小。
我们注意到 TensorRT-LLM 也为 KV cache 提供了 INT8 和 FP8 量化。KV cache 不同于正常的激活,因为它在诸如大批量大小或长上下文长度的场景下占用不可忽略的持久内存。如果您在 Hopper 和 Ada GPU 上使用 KV cache,我们建议使用 FP8 KV cache 而非 Int8,因为在大多数测试用例中,前者对精度的影响比后者小。从 FP16 KV cache 切换到 FP8 KV cache 时,它还可以让您在 H100 机器上运行 2-3 倍大的批量,对于像 GPT-J 这样的模型,这进一步带来了大约 1.5 倍的性能提升。
未来展望#
TensorRT-LLM 将继续改进其量化功能,例如 Int4-FP8 AWQ (W4A8) 的公共示例和更多模型支持。请继续关注我们的后续发布。