|
1 | 1 | # 量化策略详细教程
|
2 |
| -近年来,Transformer模型已在各个领域得到广泛采用,尤其是生成式语言大模型极大地推动了人工智能领域的发展。这些模型已经从数亿个参数发展到数千亿个参数,在有限的数据和 GPU 资源下运行,对于这些模型来说变得越来越具有挑战性。此时压缩技术变得格外重要,其中量化已成为减少内存占用和计算开销的通用和主要范例。然而,许多研究表明,Transformer模型往往会存在强烈的异常激活值,这使得它们难以量化。为了保持可接受的性能,这些异常值的存在要求激活具有更高的位宽或使用不同的数字格式、额外的微调或其他解决方法。本文档会介绍前沿的优化量化效果的几种策略,其中包括一些开源工作,也包括PaddleSlim自研的方法。以下方法暂时仅支持Transformer模型,具体示例使用方法可参考[PaddleNLP LLM示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm/causallm),以下教程仅详细介绍API接口。 |
| 2 | +近年来,Transformer模型已在各个领域得到广泛采用,尤其是生成式语言大模型极大地推动了人工智能领域的发展。这些模型已经从数亿个参数发展到数千亿个参数,在有限的数据和 GPU 资源下运行,对于这些模型来说变得越来越具有挑战性。此时压缩技术变得格外重要,其中量化已成为减少内存占用和计算开销的通用和主要范例。然而,许多研究表明,Transformer模型往往会存在强烈的异常激活值,这使得它们难以量化。为了保持可接受的性能,这些异常值的存在要求激活具有更高的位宽或使用不同的数字格式、额外的微调或其他解决方法。本文档会介绍前沿的优化量化效果的几种策略,其中包括一些开源工作,也包括PaddleSlim自研的方法。 |
| 3 | + |
| 4 | +## **LLM量化效果Benchmark** |
| 5 | + |
| 6 | +1. LLama 13b 在不同量化策略下精度对比 |
| 7 | + |
| 8 | +| 量化策略 | 比特数 | ACC1/% | ACC2/% | |
| 9 | +| --------------- | ---------- | ---------------- | ---------------- | |
| 10 | +| Baseline | FP16 | 78.32 | 32.98 | |
| 11 | +| RTN | W8A8 | 34.05 | 24.96 | |
| 12 | +| SmoothQuant | W8A8 | 42.36 | 27.78 | |
| 13 | +| ShiftQuant | W8A8 | 33.35 | 25.48 | |
| 14 | +| Shift-SmoothQuant | W8A8 | 45.26 | 24.66 | |
| 15 | +| 自适应Shift-SmoothQuant | W8A8 | **78.07** | **32.69** | |
| 16 | +| | | | |
| 17 | +| RTN | W4A16 | 75.48 | 29.27 | |
| 18 | +| GPTQ | W4A16 | **77.55** | **32.32** | |
| 19 | + |
| 20 | +2. Bloom 7.1b 在不同量化策略下精度对比 |
| 21 | + |
| 22 | +| 量化策略 | 比特数 | ACC1/% | ACC2/% | |
| 23 | +| --------------- | ---------- | ---------------- | ---------------- | |
| 24 | +| Baseline | FP16 | 77.18 | 41.08 | |
| 25 | +| RTN | W8A8 | 76.48 | 38.26 | |
| 26 | +| SmoothQuant | W8A8 | 76.57 | 38.70 | |
| 27 | +| ShiftQuant | W8A8 | 68.99 | 39.97 | |
| 28 | +| Shift-SmoothQuant | W8A8 | 76.77 | 37.22 | |
| 29 | +| 自适应Shift-SmoothQuant | W8A8 | **77.04** | **40.63** | |
| 30 | +| | | | |
| 31 | +| RTN | W4A16 | 75.18 | 38.03 | |
| 32 | +| GPTQ | W4A16 | **76.82** | **39.37** | |
| 33 | + |
| 34 | +3. ChatGLM2 6b 在不同量化策略下精度对比 |
| 35 | + |
| 36 | +| 量化策略 | 比特数 | ACC1/% | ACC2/% | |
| 37 | +| --------------- | ---------- | ---------------- | ---------------- | |
| 38 | +| Baseline | FP16 | 76.46 | 31.57 | |
| 39 | +| PTQ-INT8 | W8A8 | 64.08 | 29.94 | |
| 40 | +| SmoothQuant | W8A8 | 64.29 | 29.86 | |
| 41 | +| ShiftQuant | W8A8 | 57.83 | 27.26 | |
| 42 | +| Shift-SmoothQuant | W8A8 | 58.89 | 24.29 | |
| 43 | +| 自适应Shift-SmoothQuant | W8A8 | **76.89** | **34.55** | |
| 44 | +| | | | |
| 45 | +| RTN | W4A16 | 74.20 | 26.30 | |
| 46 | +| GPTQ | W4A16 | **75.66** | **31.50** | |
| 47 | + |
| 48 | +- ACC1:Finetuned下游任务下,使用数据集nl2sql的指标 |
| 49 | +- ACC2:Pretrained开源任务下,使用数据集C-eval的指标 |
| 50 | + |
| 51 | +以下方法暂时仅支持Transformer模型,具体示例使用方法可参考[PaddleNLP LLM示例](https://github.com/PaddlePaddle/PaddleNLP/tree/develop/llm#6-%E9%87%8F%E5%8C%96),以下教程仅详细介绍API接口。 |
3 | 52 |
|
4 | 53 | ## 1. Shift功能
|
5 | 54 |
|
|
0 commit comments