Skip to content

Latest commit

 

History

History
 
 

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 

GPT量化训练敏感度分析示例

1. 简介

本示例将以自然语言处理生成模型GPT-3为例,介绍如何使用量化训练敏感度分析工具分析量化模型,以及提升量化训练精度。

2.Benchmark

模型 策略 ACC Inference模型
GPT-345M Baseline 44.17 Model
GPT-345M 量化训练(分析前) 41.58 Model
GPT-345M 量化训练(分析后) 44.94 Model
  • ACC的指标均在基于LAMBADA数据集,采用 ACC(accuracy) 指标评测得到

3. 量化分析流程

3.1 准备环境

  • PaddlePaddle >= 2.3 (可从Paddle官网下载安装)
  • PaddleSlim develop版本
  • PaddleFleetX >= 2.4

3.2 准备数据集

量化敏感度分析基于验证集获得每层的敏感度,可下载和使用 LAMBADA 或者 WikiText 数据集。本示例使用LAMBADA数据集来进行敏感度分析。

# 下载验证数据
wget https://raw.githubusercontent.com/cybertronai/bflm/master/lambada_test.jsonl

3.3 准备预测模型

  • 下载量化前Base模型
wget https://bj.bcebos.com/v1/paddle-slim-models/GPT_345M_Baseline.tar
  • 下载分析前量化训练后的模型
wget https://bj.bcebos.com/v1/paddle-slim-models/GPT_345_QAT_wo_analysis.tar

如想自行导出,可参考GPT模型量化训练

3.4 量化敏感度分析

量化敏感度分析示例通过analysis.py脚本启动,会使用接口paddleslim.quant.AnalysisQAT对模型进行敏感度分析。配置config文件中模型路径、数据路径和量化相关的参数,配置完成后便可对模型进行敏感度分析。具体运行命令为:

python analysis.py --config_path=./configs/gpt_345M_analysis.yaml

分析完成后,会产生排序好的层敏感度(敏感度由大到小排序,敏感度越大说明约负向影响模型精度),并保存在analysis_results/analysis.txt中。 敏感度排序前10层分别为:linear_31linear_27linear_22linear_43linear_83linear_15linear_87linear_3linear_38linear_39。在这十层中,其中有八层属于TransformerDecoder中第二个FFN层,两层属于TransformerDecoder中第一个FFN层,而MultiHeadAttention中的Linear层都相对不敏感。

paddleslim.quant.AnalysisQAT详解见AnalysisQAT.md

3.5 重新量化训练

根据分析结果,重新量化训练时,去掉了linear_31linear_27linear_22linear_43linear_83linear_15linear_87七层Linear的量化,最后量化模型精度达到44.94。 重新量化训练的过程在 PaddleFleetX 中实现,可参考GPT模型量化训练