update efficiency profiling in readme

This commit is contained in:
yangapku
2023-08-12 17:17:20 +08:00
parent 9b00721a66
commit af6486a0a9
2 changed files with 88 additions and 11 deletions

View File

@@ -238,11 +238,50 @@ model = AutoModelForCausalLM.from_pretrained(
上述方法可以让我们将模型量化成`NF4``Int8`精度的模型进行读取,帮助我们节省显存开销。我们也提供了相关性能数据。我们发现尽管模型在效果上存在损失,但模型的显存开销大幅降低。
| Precision | MMLU | Memory |
| :---------: | :------: | :------: |
| BF16 | 56.7 | 16.2G |
| Int8 | 52.8 | 10.1G |
| NF4 | 48.9 | 7.4G |
| Precision | MMLU | GPU Memory for Loading Model |
| ----------- | :------: | :---------------------------: |
| BF16 | 56.7 | 16.38G |
| Int8 | 52.8 | 10.44G |
| NF4 | 48.9 | 7.79G |
表中显存占用的测试环境为A100-SXM4-80G单卡PyTorch 2.0.1cuda11.8开启flash attention
## 推理性能
### 推理速度
我们分别测试了BF16和量化条件下模型生成2K tokens的平均推理速度结果如下
| 量化等级 | 开flash_attn的推理速度 (字符/秒) | 关flash_attn的推理速度 (字符/秒) |
| ------ | :---------------------------: | :---------------------------: |
| BF16 (无量化) | 30.06 | 27.55 |
| Int8 (bnb) | 7.94 | 7.86 |
| NF4 (bnb) | 21.43 | 20.37 |
具体的评测方式为指定输入context长度为1生成长度为2048测试硬件为A100-SXM4-80G单卡软件环境为PyTorch 2.0.1cuda版本11.8计算生成该2048序列的平均速度
### 显存占用
在BF16和不同量化条件下我们分别测算了模型编码2048长度序列并生成1个token和生成8192长度序列编码1个token作为context的峰值显存占用。结果如下
打开flash attention时
| 量化等级 | 编码 2048 长度的峰值显存 | 生成 8192 长度的峰值显存 |
| --- | :---: | :---: |
| BF16 | 18.11GB | 23.52GB |
| Int8 | 12.17GB | 17.60GB |
| NF4 | 9.52GB | 14.93GB |
关闭flash attention时
| 量化等级 | 编码 2048 长度的峰值显存 | 生成 8192 长度的峰值显存 |
| --- | :---: | :---: |
| BF16 | 18.11GB | 24.40GB |
| Int8 | 12.18GB | 18.47GB |
| NF4 | 9.52GB | 15.81GB |
以上测速和显存占用情况,均可通过该[评测脚本](https://qianwen-res.oss-cn-beijing.aliyuncs.com/profile.py)测算得到。
## Demo