- 人工智能
- 深度学习
- 计算机视觉
- NLP
- 语音
【免费下载链接】models
Officially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.
本文是 PaddlePaddle 官方模型仓库中 ERNIE 3.0 轻量级模型(ERNIE Tiny)推理性能基准文档的深度解读与实战指南。文章完整继承原文档的测试环境、指标口径与全部 CPU/GPU 性能数据,并结合仓库内的模型信息、下载说明与 FastDeploy 部署示例,帮助读者理解 QPS 指标如何计算、FP32/FP16/INT8 及裁剪量化组合在三大中文 NLP 任务上的加速收益与精度代价,以及如何在本地环境中复现同类推理测试。
1. 背景:被评测的对象 ERNIE 3.0 轻量级模型
本次 Benchmark 的评测对象是ERNIE 3.0-Medium,属于 PaddleNLP 开源的中文轻量级预训练模型系列 ERNIE Tiny。根据仓库 info.yaml 中的元数据,该模型由百度发布,采用 Apache 2.0 协议,隶属于自然语言处理/预训练模型与文心大模型两个任务分类;其技术原理对应论文ERNIE-Tiny: A Progressive Distillation Framework for Pretrained Transformer Compression,即通过**渐进式蒸馏(Progressive Distillation)**从文心大模型 ERNIE 3.0 压缩而来。
从 introduction_en.ipynb 可以看到,该系列共开源五个不同规模的模型,模型结构与 ERNIE 2.0 保持一致,但中文效果更强:
| 模型 | 结构 | 参数量 | 模型大小 |
|---|---|---|---|
| ERNIE 3.0-Base | 12-layer, 768-hidden, 12-heads | 117.9 M | 452.4 MB |
| ERNIE 3.0-Medium | 6-layer, 768-hidden, 12-heads | 75.4 M | 312.5 MB |
| ERNIE 3.0-Mini | 6-layer, 384-hidden, 12-heads | 26.9 M | 109.0 MB |
| ERNIE 3.0-Micro | 4-layer, 384-hidden, 12-heads | 23.4 M | 95.48 MB |
| ERNIE 3.0-Nano | 4-layer, 312-hidden, 12-heads | 17.9 M | 72.4 MB |
(完整下载链接见 download_en.md)
本基准以体量适中的Medium(75.4M 参数)为对象,评测其在三种典型中文任务上的推理性能,并考察三种加速手段的组合效果:FP32/FP16/INT8 精度切换与模型裁剪(prune)。
2. 测试环境与方法论(如何正确解读 QPS 数据)
原文档在给出任何数字之前,先明确了严格的测试口径,这也是所有性能数字可复现、可横向比较的前提:
2.1 软硬件环境
| 项目 | 配置 |
|---|---|
| 计算卡 | NVIDIA T4、CUDA 11.2、CuDNN 8.2 |
| CPU | Intel(R) Xeon(R) Gold 6271C |
| PaddlePaddle 版本 | 2.3 |
| PaddleNLP 版本 | 2.3 |
测试 CPU 性能时,线程数固定设置为 12。
2.2 QPS 的计算口径
性能数据单位统一为QPS(Queries Per Second,每秒处理的样本数)。计算方法为:
- 固定batch size = 32;
- 记录测试运行总时间
total_time; - 计算
QPS = total_samples / total_time。
也就是说,表格中的性能数字都基于"单批 32 个样本、连续跑满整个测试集"的吞吐口径,与 batch size = 1 的纯时延口径不同。在做性能对比或容量规划时,务必保持同样的 batch 设置,否则数据不可比。
2.3 精度指标定义
三种任务使用各自的标准评估指标:
- 文本分类(Text Classification):Accuracy(准确率);
- 序列标注(Token Classification / NER):F1-Score;
- 阅读理解(Question Answering):EM(Exact Match,完全匹配率)。
2.4 测试数据集
对应三个任务,数据集选用 CLUE 系列中文数据集:
- CLUE TNEWS:新闻文本分类;
- MSRA_NER:中文命名实体识别(序列标注);
- CLUE CMRC2018:中文机器阅读理解。
需要指出的是,原文档表格中 TNEWS 的精度数值(如 FP32 基线 57.45)与 introduction_en.ipynb 中 CLUE 验证集评测口径下的 TNEWS 得分(58.26 附近)存在差异,原因在于本基准使用的是下游任务微调后的推理评测,且精度数据同时受模型、任务适配与测试集划分影响,读者应以本基准文档表内数值为准。
3. CPU 性能基准:INT8 与裁剪带来的吞吐提升
在 CPU(12 线程)环境下,性能与精度数据如下:
| 模型配置 | TNEWS 性能 | TNEWS 精度 | MSRA_NER 性能 | MSRA_NER 精度 | CMRC2018 性能 | CMRC2018 精度 |
|---|---|---|---|---|---|---|
| ERNIE 3.0-Medium + FP32 | 311.95 (1.0x) | 57.45 | 90.91 (1.0x) | 93.04 | 33.74 (1.0x) | 66.95 |
| ERNIE 3.0-Medium + INT8 | 600.35 (1.9x) | 56.57 (-0.88) | 141.00 (1.6x) | 92.64 (-0.40) | 56.51 (1.7x) | 66.23 (-0.72) |
| ERNIE 3.0-Medium + 裁剪 + FP32 | 408.65 (1.3x) | 57.31 (-0.14) | 122.13 (1.3x) | 93.27 (+0.23) | 48.47 (1.4x) | 65.55 (-1.40) |
| ERNIE 3.0-Medium + 裁剪 + INT8 | 704.42 (2.3x) | 56.69 (-0.76) | 215.58 (2.4x) | 92.39 (-0.65) | 75.23 (2.2x) | 63.47 (-3.48) |
关键结论(CPU):
- 仅做 INT8 量化:TNEWS、MSRA_NER、CMRC2018 三个任务的加速比分别为 1.9x、1.6x、1.7x,精度损失均在 1 个点以内。
- 仅做裁剪(FP32):加速比 1.3x~1.4x,MSRA_NER 的 F1 甚至小幅回升(+0.23),说明裁剪在这类任务上几乎不损精度。
- 裁剪 + INT8 组合:三个任务加速比达到2.2x~2.4x,整体约 2.3 倍,代价是精度损失有所放大(CMRC2018 的 EM 下降 3.48 个点最明显)。
原文档明确指出:"经过相同压缩过程后,三类任务(分类、序列标注、阅读理解)的加速比达到 2.3 左右"。
4. GPU 性能基准:FP16 的显著红利与 3 倍加速
在 T4 GPU(CUDA 11.2 / CuDNN 8.2)环境下,性能与精度数据如下:
| 模型配置 | TNEWS 性能 | TNEWS 精度 | MSRA_NER 性能 | MSRA_NER 精度 | CMRC2018 性能 | CMRC2018 精度 |
|---|---|---|---|---|---|---|
| ERNIE 3.0-Medium + FP32 | 1123.85 (1.0x) | 57.45 | 366.75 (1.0x) | 93.04 | 146.84 (1.0x) | 66.95 |
| ERNIE 3.0-Medium + FP16 | 2672.41 (2.4x) | 57.45 (0.00) | 840.11 (2.3x) | 93.05 (+0.01) | 303.43 (2.1x) | 66.95 (0.00) |
| ERNIE 3.0-Medium + INT8 | 3226.26 (2.9x) | 56.99 (-0.46) | 889.33 (2.4x) | 92.70 (-0.34) | 348.84 (2.4x) | 66.32 (-0.63) |
| ERNIE 3.0-Medium + 裁剪 + FP32 | 1424.01 (1.3x) | 57.31 (-0.14) | 454.27 (1.2x) | 93.27 (+0.23) | 183.77 (1.3x) | 65.92 (-1.03) |
| ERNIE 3.0-Medium + 裁剪 + FP16 | 3577.62 (3.2x) | 57.27 (-0.18) | 1138.77 (3.1x) | 93.27 (+0.23) | 445.71 (3.0x) | 65.89 (-1.06) |
| ERNIE 3.0-Medium + 裁剪 + INT8 | 3635.48 (3.2x) | 57.26 (-0.19) | 1105.26 (3.0x) | 93.20 (+0.16) | 444.27 (3.0x) | 66.17 (-0.78) |
关键结论(GPU):
- FP16 是"免费"的加速手段:仅切换精度(不改模型结构),三任务加速 2.1x~2.4x,而精度几乎零损失(TNEWS 0.00、MSRA_NER +0.01、CMRC2018 0.00)。对于 T4 这类支持 FP16 张量核心的 GPU,这是性价比最高的优化选项。
- INT8 单独使用:加速 2.4x~2.9x,精度损失控制在 0.63 个点以内。
- 裁剪 + FP16 / 裁剪 + INT8 组合:三类任务加速比均达到3.0x~3.2x,其中裁剪+FP16 在 TNEWS 上达到 3577.62 QPS(3.2x),是表格中的峰值。
- 原文档给出的总体结论是:裁剪 + 量化后三类任务加速比均达 3 倍左右,全任务平均精度损失可控制在 0.5 个点以内(实际 0.46)。
值得注意的是,GPU 上 FP16 组合(3.2x)与 INT8 组合(3.2x)的加速比基本持平,但 FP16 的精度保持明显更好(如 CMRC2018:FP16 仅 -1.06,INT8 为 -0.78;TNEWS:FP16 -0.18 vs INT8 -0.19),因此在实际工程中,若 GPU 支持 FP16,裁剪 + FP16 通常是比裁剪 + INT8 更稳妥的组合。
5. 数据背后的工程含义:如何选择压缩策略
综合 CPU 与 GPU 两张表,可以归纳出清晰的决策规律:
| 场景 | 推荐组合 | 依据(来自上表) |
|---|---|---|
| CPU 部署、对精度敏感 | INT8(不裁剪) | 加速 1.6x~1.9x,精度损失 ≤ 0.88 |
| CPU 部署、追求极致吞吐 | 裁剪 + INT8 | 加速约 2.3x,但 CMRC2018 EM 损失 3.48 |
| GPU 部署、几乎零精度损失 | FP16 | 加速 2.1x~2.4x,精度损失 ≈ 0 |
| GPU 部署、追求 3 倍吞吐 | 裁剪 + FP16 或裁剪 + INT8 | 加速 3.0x~3.2x,平均损失 0.46 |
核心洞察:裁剪主要贡献模型体积与访存开销的下降,量化(INT8)主要贡献算子计算的加速;两者叠加后收益接近相乘(CPU 上 1.3x~1.4x 与 1.6x~1.9x 组合得到 2.2x~2.4x,GPU 上 1.3x 与 2.4x 组合得到 3.0x~3.2x)。而 FP16 由于 T4 张量核心的硬件支持,单独即可获得接近 INT8 的加速收益,且无需额外的量化校准流程。
6. 复现与部署:用 FastDeploy 落地同类推理任务
本基准的性能测试在 PaddleNLP 的 ERNIE 3.0 模型库中完成(PaddlePaddle 2.3 + PaddleNLP 2.3)。若希望在真实业务中落地上述推理加速,仓库 fastdeploy_en.md 提供了基于FastDeploy的高性能部署路径,其核心步骤与参数如下。
6.1 安装与运行
# 1. 安装 FastDeploy GPU 版 SDK(示例为 nightly 版本源) pip install fastdeploy-gpu-python==0.0.0 -f https://www.paddlepaddle.org.cn/whl/fastdeploy_nightly_build.html # 2. 下载微调后的 ERNIE 3.0-Medium 模型(以 AFQMC 语义匹配任务为例) wget https://bj.bcebos.com/fastdeploy/models/ernie-3.0/ernie-3.0-medium-zh-afqmc.tgz tar xvfz ernie-3.0-medium-zh-afqmc.tgz # 3. CPU 部署 python seq_cls_infer.py --device cpu --model_dir ernie-3.0-medium-zh-afqmc # 4. GPU 部署 python seq_cls_infer.py --device gpu --model_dir ernie-3.0-medium-zh-afqmc运行完成后会输出每条样本的预测结果,例如:
[INFO] fastdeploy/runtime.cc(469)::Init Runtime initialized with Backend::ORT in Device::CPU. Batch id:0, example id:0, sentence1:花呗收款额度限制, sentence2:收钱码,对花呗支付的金额有限制吗, label:1, similarity:0.5819 Batch id:1, example id:1, sentence1:花呗支持高铁票支付吗, sentence2:为什么友付宝不支持花呗付款, label:0, similarity:0.99796.2 推理参数说明
seq_cls_infer.py支持以下命令行参数,其中--use_fp16与--backend的组合正是复现上文 GPU FP16 收益的关键:
| 参数 | 说明 |
|---|---|
--model_dir | 指定部署模型所在目录 |
--batch_size | 最大可测 batch size,默认 1 |
--max_length | 最大序列长度,默认 128 |
--device | 运行设备,可选['cpu', 'gpu'],默认'cpu' |
--backend | 推理后端,可选['onnx_runtime', 'paddle', 'openvino', 'tensorrt', 'paddle_tensorrt'],默认'onnx_runtime' |
--use_fp16 | 是否启用 FP16 推理;仅在使用tensorrt或paddle_tensorrt后端时可开启,默认 False |
--use_fast | 是否使用 FastTokenizer 加速分词阶段,默认 True |
FastDeploy 支持 X86 CPU、NVIDIA GPU、ARM CPU、XPU、NPU、IPU 等多种硬件,并可通过一行代码切换推理后端。若要在部署环境中复现本基准的量级加速,实践要点是:GPU 场景开启--use_fp16并配合 TensorRT 后端(对应表格中 FP16 列的 2.1x~2.4x 收益),CPU 场景则选择 INT8 量化模型配合多线程推理。
7. 局限与注意事项
- 本基准数据来自 PaddlePaddle 2.3 / PaddleNLP 2.3 与 T4 单卡环境,不同框架版本、不同 GPU 型号(如 A100、昇腾等)与不同 batch size 下,加速比与 QPS 绝对值都会变化,应将其视为相对收益的参考而非绝对性能承诺。
- CPU 表格与 GPU 表格中的精度基线(57.45 / 93.04 / 66.95)对应的是同一组微调后模型,因此跨表格的精度列可直接对照。
- 裁剪 + INT8 在 CMRC2018 上的 EM 损失(CPU 3.48 个点)是表中最大的精度代价,对精度敏感的阅读理解类业务需谨慎选择该组合,必要时可回退为裁剪 + FP16。
- 有关五档模型的完整中文评测(CLUE 验证集 10 任务平均分)与精度-时延图,可进一步参考 introduction_en.ipynb;中文版基准数据见 benchmark_cn.md。
总结:ERNIE 3.0-Medium 通过"裁剪 + 量化"可在 CPU 上获得约 2.3 倍、GPU 上约 3 倍的推理吞吐提升,同时把平均精度损失控制在 0.5 个点以内;而单纯切换 FP16 即可在 GPU 上以近乎零精度损失获得 2 倍以上的加速,是成本最低、最值得优先采用的部署优化手段。
- 人工智能
- 深度学习
- 计算机视觉
- NLP
- 语音
【免费下载链接】models
Officially maintained, supported by PaddlePaddle, including CV, NLP, Speech, Rec, TS, big models and so on.
相关推荐
ERNIE 3.0 轻量级模型推理 Benchmark 全解析:CPU/GPU 下的 FP32、FP16、INT8 量化与模型裁剪加速效果
ERNIE 3.0 轻量级模型推理 Benchmark 全解析:CPU/GPU 下的 FP32、FP16、INT8 量化与模型裁剪加速效果 本文基于 Paddl
人工智能深度学习计算机视觉NLP语音FasterTransformer 中的 Vision Transformer(ViT)推理实战:从 FP32/FP16 到 INT8 量化加速
FasterTransformer 中的 Vision Transformer(ViT)推理实战:从 FP32/FP16 到 INT8 量化加速 本文面向需要在
推理引擎算子库大模型PaddleDetection 推理 Benchmark 实战指南:环境搭建、测试方法、FP32/FP16 与 TensorRT 加速性能全解析
PaddleDetection 推理 Benchmark 实战指南:环境搭建、测试方法、FP32/FP16 与 TensorRT 加速性能全解析 本篇技术指南以
人工智能深度学习计算机视觉
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考