未验证 提交 b6bffc2c 编写于 作者: C ceci3 提交者: GitHub

fix bert docs (#666)

* fix docs

* update
上级 c701d2b8
# OFA压缩PaddleNLP-BERT模型 # OFA压缩PaddleNLP-BERT模型
BERT-base模型是一个迁移能力很强的通用语义表示模型,但是模型中也有一些参数冗余。本教程将介绍如何使用PaddleSlim对[PaddleNLP](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/)中BERT-base模型进行压缩。 BERT-base模型是一个迁移能力很强的通用语义表示模型,但是模型中也有一些参数冗余。本教程将介绍如何使用PaddleSlim对[PaddleNLP](https://github.com/PaddlePaddle/models/tree/develop/PaddleNLP/)中BERT-base模型进行压缩。
本教程只会演示如何快速启动相应训练,详细教程请参考: [BERT](https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/nlp/paddlenlp_slim_ofa_tutorial.md)
## 1. 压缩结果 ## 1. 压缩结果
...@@ -82,7 +83,7 @@ BERT-base模型是一个迁移能力很强的通用语义表示模型,但是 ...@@ -82,7 +83,7 @@ BERT-base模型是一个迁移能力很强的通用语义表示模型,但是
<td rowspan=2 align=center> V100 </td> <td rowspan=2 align=center> V100 </td>
<td rowspan=2 align=center> 16 </td> <td rowspan=2 align=center> 16 </td>
<td style="text-align:center"> <td style="text-align:center">
<span style="font-size:18px;">BERT</span> <span style="font-size:18px;" align=center>BERT</span>
</td> </td>
<td style="text-align:center"> <td style="text-align:center">
<span style="font-size:18px">N</span> <span style="font-size:18px">N</span>
...@@ -106,7 +107,7 @@ BERT-base模型是一个迁移能力很强的通用语义表示模型,但是 ...@@ -106,7 +107,7 @@ BERT-base模型是一个迁移能力很强的通用语义表示模型,但是
<td rowspan=2 align=center> Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz </td> <td rowspan=2 align=center> Intel(R) Xeon(R) Gold 5117 CPU @ 2.00GHz </td>
<td rowspan=2 align=center> 16 </td> <td rowspan=2 align=center> 16 </td>
<td style="text-align:center"> <td style="text-align:center">
<span style="font-size:18px;">BERT</span> <span style="font-size:18px;" align=center>BERT</span>
</td> </td>
<td style="text-align:center"> <td style="text-align:center">
<span style="font-size:18px">N</span> <span style="font-size:18px">N</span>
...@@ -184,7 +185,7 @@ python -u ./run_glue_ofa.py --model_type bert \ ...@@ -184,7 +185,7 @@ python -u ./run_glue_ofa.py --model_type bert \
压缩训练之后在dev上的结果如表1-1中『Result with PaddleSlim』列所示,延时情况如表1-2所示。 压缩训练之后在dev上的结果如表1-1中『Result with PaddleSlim』列所示,延时情况如表1-2所示。
## 3. OFA接口介绍 ## 3. OFA接口介绍
OFA API介绍参考[API](https://github.com/PaddlePaddle/PaddleSlim/blob/develop/docs/zh_cn/api_cn/ofa_api.rst) OFA API介绍参考[API](https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/api_cn/dygraph/ofa/ofa_api.rst)
# 基于本代码对TinyBERT(L=4, D=312)进行压缩 # 基于本代码对TinyBERT(L=4, D=312)进行压缩
下游任务模型是从TinyBERT官方repo转换得到。 下游任务模型是从TinyBERT官方repo转换得到。
......
...@@ -2,6 +2,8 @@ ...@@ -2,6 +2,8 @@
ERNIE是百度开创性提出的基于知识增强的持续学习语义理解框架,该框架将大数据预训练与多源丰富知识相结合,通过持续学习技术,不断吸收海量文本数据中词汇、结构、语义等方面的知识,实现模型效果不断进化。本教程讲介绍如何使用PaddleSlim对[ERNIE](https://github.com/PaddlePaddle/ERNIE)模型进行压缩。 ERNIE是百度开创性提出的基于知识增强的持续学习语义理解框架,该框架将大数据预训练与多源丰富知识相结合,通过持续学习技术,不断吸收海量文本数据中词汇、结构、语义等方面的知识,实现模型效果不断进化。本教程讲介绍如何使用PaddleSlim对[ERNIE](https://github.com/PaddlePaddle/ERNIE)模型进行压缩。
本教程只会演示如何快速启动相应训练,详细教程请参考:[ERNIE](https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/nlp/ernie_slim_ofa_tutorial.md)
使用本教程压缩算法可以在精度无损的情况下,对原始Tiny-ERNIE模型进行40%的加速。 使用本教程压缩算法可以在精度无损的情况下,对原始Tiny-ERNIE模型进行40%的加速。
## 1. 快速开始 ## 1. 快速开始
...@@ -41,4 +43,4 @@ python ./ofa_ernie.py \ ...@@ -41,4 +43,4 @@ python ./ofa_ernie.py \
- `depth_mult_list` 表示压缩训练过程中,模型包含的Transformer Block数量的选择的范围。 - `depth_mult_list` 表示压缩训练过程中,模型包含的Transformer Block数量的选择的范围。
## 2. OFA接口介绍 ## 2. OFA接口介绍
TODO OFA API介绍参考[API](https://github.com/PaddlePaddle/PaddleSlim/blob/release/2.0.0/docs/zh_cn/api_cn/dygraph/ofa/ofa_api.rst)
...@@ -52,12 +52,13 @@ def compute_neuron_head_importance(args, model, dev_ds, place, model_cfg): ...@@ -52,12 +52,13 @@ def compute_neuron_head_importance(args, model, dev_ds, place, model_cfg):
for eval_task in eval_task_names: for eval_task in eval_task_names:
for batch in dev_ds.start(place): for batch in dev_ds.start(place):
ids, sids, label = batch ids, sids, label = batch
loss, _, _ = model( out = model(
ids, ids,
sids, sids,
labels=label, labels=label,
head_mask=head_mask, head_mask=head_mask,
num_layers=model_cfg['num_hidden_layers']) num_layers=model_cfg['num_hidden_layers'])
loss = out[0]
loss.backward() loss.backward()
head_importance += L.abs(FD.to_variable(head_mask.gradient())) head_importance += L.abs(FD.to_variable(head_mask.gradient()))
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
import numpy as np import numpy as np
import paddle import paddle
from paddle.fluid import core
__all__ = ['get_prune_params_config', 'prune_params'] __all__ = ['get_prune_params_config', 'prune_params']
...@@ -96,11 +97,11 @@ def prune_params(model, param_config, super_model_sd=None): ...@@ -96,11 +97,11 @@ def prune_params(model, param_config, super_model_sd=None):
p = t_value._place() p = t_value._place()
if p.is_cpu_place(): if p.is_cpu_place():
place = paddle.CPUPlace() place = core.CPUPlace()
elif p.is_cuda_pinned_place(): elif p.is_cuda_pinned_place():
place = paddle.CUDAPinnedPlace() place = core.CUDAPinnedPlace()
else: else:
place = paddle.CUDAPlace(p.gpu_device_id()) place = core.CUDAPlace(p.gpu_device_id())
t_value.set(prune_value, place) t_value.set(prune_value, place)
if param.trainable: if param.trainable:
param.clear_gradient() param.clear_gradient()
...@@ -931,10 +931,10 @@ class SuperBatchNorm(fluid.dygraph.BatchNorm): ...@@ -931,10 +931,10 @@ class SuperBatchNorm(fluid.dygraph.BatchNorm):
"use_mkldnn", False, "fuse_with_relu", self._fuse_with_relu, "use_mkldnn", False, "fuse_with_relu", self._fuse_with_relu,
"use_global_stats", self._use_global_stats, "use_global_stats", self._use_global_stats,
'trainable_statistics', self._trainable_statistics) 'trainable_statistics', self._trainable_statistics)
batch_norm_out, _, _, _, _, _ = core.ops.batch_norm( batch_norm_out = core.ops.batch_norm(
input, weight, bias, mean, variance, mean_out, variance_out, *attrs) input, weight, bias, mean, variance, mean_out, variance_out, *attrs)
return dygraph_utils._append_activation_in_dygraph( return dygraph_utils._append_activation_in_dygraph(
batch_norm_out, act=self._act) batch_norm_out[0], act=self._act)
class SuperInstanceNorm(fluid.dygraph.InstanceNorm): class SuperInstanceNorm(fluid.dygraph.InstanceNorm):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册