From d7e33a972774e19c898ccdb07a99c1cc871d62cf Mon Sep 17 00:00:00 2001 From: zhangkaihuo Date: Thu, 28 Oct 2021 09:47:05 +0800 Subject: [PATCH 1/4] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E4=B8=80=E4=B8=AA?= =?UTF-8?q?=E8=9E=8D=E5=90=88=E7=AE=97=E5=AD=90:fused=5Ffeedforward=20(#39?= =?UTF-8?q?99)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修改错别字 * 备注CPU不支持float16 * update example * add fused_feedforward * add fused_feedforward * add fused_feedforward * opt the description * update docs * update docs * update doc * move fused_feedforward docs position --- .../nn/functional/fused_feedforward_cn.rst | 59 +++++++++++++++++++ 1 file changed, 59 insertions(+) create mode 100644 docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst diff --git a/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst new file mode 100644 index 00000000000..c3a81b56490 --- /dev/null +++ b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst @@ -0,0 +1,59 @@ +.. _cn_api_incubate_nn_functional_fused_feedforward: + +fused_feedforward +------------------------------- + +.. py:function:: paddle.incubate.nn.functional.fused_feedforward(x, linear1_weight, linear2_weight, linear1_bias=None, linear2_bias=None, ln1_scale=None, ln1_bias=None, ln2_scale=None, ln2_bias=None, dropout1_rate=0.5, dropout2_rate=0.5,activation="relu", ln1_epsilon=1e-5, ln2_epsilon=1e-5, pre_layer_norm=False, name=None): + +这是一个融合算子,该算子是对transformer模型中feed forward层的多个算子进行融合,该算子只支持在GPU下运行,该算子与如下伪代码表达一样的功能: + +.. code-block:: ipython + + residual = src; + if pre_layer_norm: + src = layer_norm(src) + src = linear(dropout(activation(dropout(linear(src))))) + if not pre_layer_norm: + src = layer_norm(out) + +参数 +::::::::: + - **x** (Tensor) - 输入Tensor,数据类型支持float16, float32 和float64, 输入的形状是`[batch_size, sequence_length, d_model]`。 + - **linear1_weight** (Tensor) - 第一个linear算子的权重数据,数据类型与`x`一样,形状是`[d_model, dim_feedforward]`。 + - **linear2_weight** (Tensor) - 第二个linear算子的权重数据,数据类型与`x`一样,形状是`[dim_feedforward, d_model]`。 + - **linear1_bias** (Tensor, 可选) - 第一个linear算子的偏置数据,数据类型与`x`一样,形状是`[dim_feedforward]`。默认值为None。 + - **linear2_bias** (Tensor, 可选) - 第二个linear算子的偏置数据,数据类型与`x`一样,形状是`[d_model]`。默认值为None。 + - **ln1_scale** (Tensor, 可选) - 第一个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和`x`一样。默认值为None。 + - **ln1_bias** (Tensor, 可选) - 第一个layer_norm算子的偏置数据,数据类型和`ln1_scale`一样, 形状是`[d_model]`。默认值为None。 + - **ln2_scale** (Tensor, 可选) - 第二个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和`x`一样。默认值为None。 + - **ln2_bias** (Tensor, 可选) - 第二个layer_norm算子的偏置数据,数据类型和`ln2_scale`一样, 形状是`[d\_model]`。默认值为None。 + - **dropout1_rate** (float, 可选) - 第一个dropout算子置零的概率。默认是0.5。 + - **dropout2_rate** (float, 可选) - 第二个dropout算子置零的概率。默认是0.5。 + - **activation** (string, 可选) - 激活函数。默认值是relu。 + - **ln1_epsilon** (float, 可选) - 一个很小的浮点数,被第一个layer_norm算子加到分母,避免出现除零的情况。默认值是1e-5。 + - **ln2_epsilon** (float, 可选) - 一个很小的浮点数,被第二个layer_norm算子加到分母,避免出现除零的情况。默认值是1e-5。 + - **pre_layer_norm** (bool, 可选) - 在预处理阶段加上layer_norm,或者在后处理阶段加上layer_norm。默认值是False。 + - **name** (string, 可选) – fused_feedforward的名称, 默认值为None。更多信息请参见 :ref:`api_guide_Name` 。 + +返回 +::::::::: + - Tensor, 输出Tensor,数据类型与`x`一样。 + +代码示例 +:::::::::: + +.. code-block:: python + + # required: gpu + import paddle + import numpy as np + x_data = np.random.random((1, 8, 8)).astype("float32") + linear1_weight_data = np.random.random((8, 8)).astype("float32") + linear2_weight_data = np.random.random((8, 8)).astype("float32") + x = paddle.to_tensor(x_data) + linear1_weight = paddle.to_tensor(linear1_weight_data) + linear2_weight = paddle.to_tensor(linear2_weight_data) + out = paddle.incubate.nn.functional.fused_feedforward(x, linear1_weight, linear2_weight) + print(out.numpy().shape) + # (1, 8, 8) + From 23954f24ca6562a6de351405a089a0e4a3a90823 Mon Sep 17 00:00:00 2001 From: zhangkaihuo Date: Thu, 28 Oct 2021 11:39:04 +0800 Subject: [PATCH 2/4] =?UTF-8?q?=E6=96=B0=E5=A2=9Efused=20transformer=20enc?= =?UTF-8?q?oder=20=E4=B8=AD=E6=96=87=E6=96=87=E6=A1=A3=20(#4022)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 修改错别字 * 备注CPU不支持float16 * update example * add fused_feedforward * add fused_feedforward * add fused_feedforward * opt the description * update docs * update docs * update doc * move fused_feedforward docs position * add incubate/nn/layer * move fused transfomrer doc to incubate/nn/ * modify the doc * modify fused transformer encoder layer doc --- .../incubate/nn/FusedFeedForward_cn.rst | 38 ++++++++++++++++ .../nn/FusedTransformerEncoderLayer_cn.rst | 43 +++++++++++++++++++ .../nn/functional/fused_feedforward_cn.rst | 20 ++++----- 3 files changed, 91 insertions(+), 10 deletions(-) create mode 100644 docs/api/paddle/incubate/nn/FusedFeedForward_cn.rst create mode 100644 docs/api/paddle/incubate/nn/FusedTransformerEncoderLayer_cn.rst diff --git a/docs/api/paddle/incubate/nn/FusedFeedForward_cn.rst b/docs/api/paddle/incubate/nn/FusedFeedForward_cn.rst new file mode 100644 index 00000000000..42d0ac7ac89 --- /dev/null +++ b/docs/api/paddle/incubate/nn/FusedFeedForward_cn.rst @@ -0,0 +1,38 @@ +.. _cn_api_incubate_nn_FusedFeedForward: + +FusedFeedForward +------------------------------- +.. py:class:: paddle.incubate.nn.FusedFeedForward(d_model, dim_feedforward, dropout_rate=0.1, activation='relu', act_dropout_rate=None, normalize_before=False, weight_attr=None, bias_attr=None) + +这是一个调用融合算子fused_feedforward(参考 :ref:`cn_api_incubate_nn_functional_fused_feedforward` )。 + + +参数 +::::::::: + - **d_model** (int) - 输入输出的维度。 + - **dim_feedforward** (int) - 前馈神经网络中隐藏层的大小。 + - **dropout_rate** (float,可选) - 对本层的输出进行处理的dropout值, 置零的概率。默认值:0.1。 + - **activation** (str,可选) - 激活函数。默认值:``relu``。 + - **act_dropout_rate** (float,可选) - 激活函数后的dropout置零的概率。如果为 ``None`` 则 ``act_dropout_rate = dropout_rate`` 。默认值: ``None`` 。 + - **normalize_before** (bool, 可选) - 设置对输入输出的处理。如果为 ``True`` ,则对输入进行层标准化(Layer Normalization),否则(即为 ``False`` ),则对输入不进行处理,而是在输出前进行标准化。默认值: ``False`` 。 + - **weight_attr** (ParamAttr,可选) - 指定权重参数属性的对象。默认值: ``None`` ,表示使用默认的权重参数属性,即使用0进行初始化。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **bias_attr** (ParamAttr|bool,可选)- 指定偏置参数属性的对象。如果该参数值是 ``ParamAttr`` ,则使用 ``ParamAttr`` 。如果该参数为 ``bool`` 类型,只支持为 ``False`` ,表示没有偏置参数。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + +返回 +::::::::: + - Tensor, 输出Tensor,数据类型与 ``x`` 一样。 + +代码示例 +:::::::::: + +.. code-block:: python + + # required: gpu + import paddle + from paddle.incubate.nn import FusedFeedForward + + fused_feedforward_layer = FusedFeedForward(8, 8) + x = paddle.rand((1, 8, 8)) + out = fused_feedforward_layer(x) + print(out.numpy().shape) + # (1, 8, 8) diff --git a/docs/api/paddle/incubate/nn/FusedTransformerEncoderLayer_cn.rst b/docs/api/paddle/incubate/nn/FusedTransformerEncoderLayer_cn.rst new file mode 100644 index 00000000000..d0233bbcc23 --- /dev/null +++ b/docs/api/paddle/incubate/nn/FusedTransformerEncoderLayer_cn.rst @@ -0,0 +1,43 @@ +.. _cn_api_incubate_nn_FusedTransformerEncoderLayer: + +FusedTransformerEncoderLayer +------------------------------- +.. py:class:: paddle.incubate.nn.FusedTransformerEncoderLayer(d_model, nhead, dim_feedforward, dropout_rate=0.1, activation='relu', attn_dropout_rate=None, act_dropout_rate=None, normalize_before=False, weight_attr=None, bias_attr=None) + + +FusedTransformer编码器层由两个子层组成:多头自注意力机制和前馈神经网络。如果 ``normalize_before`` 为 ``True`` ,则对每个子层的输入进行层标准化(Layer Normalization),对每个子层的输出进行dropout和残差连接(residual connection)。否则(即 ``normalize_before`` 为 ``False`` ),则对每个子层的输入不进行处理,只对每个子层的输出进行dropout、残差连接(residual connection)和层标准化(Layer Normalization)。 + + +参数 +::::::::: + - **d_model** (int) - 输入输出的维度。 + - **nhead** (int) - multi-head attention(MHA)的Head数量。 + - **dim_feedforward** (int) - 前馈神经网络中隐藏层的大小。 + - **dropout_rate** (float,可选) - 对两个子层的输出进行处理的dropout值, 置零的概率。默认值:0.1。 + - **activation** (str,可选) - 前馈神经网络的激活函数。默认值:``relu``。 + - **attn_dropout_rate** (float,可选) - MHA中对注意力目标的随机失活率。如果为 `None` 则 ``attn_dropout = dropout`` 。默认值: ``None`` 。 + - **act_dropout_rate** (float,可选) - 前馈神经网络的激活函数后的dropout置零的概率。如果为 ``None`` 则 ``act_dropout_rate = dropout_rate`` 。默认值: ``None`` 。 + - **normalize_before** (bool, 可选) - 设置对每个子层的输入输出的处理。如果为 ``True`` ,则对每个子层的输入进行层标准化(Layer Normalization),否则(即为 ``False`` ),则对每个子层的输入不进行处理,而是在子层的输出前进行标准化。默认值: ``False`` 。 + - **weight_attr** (ParamAttr|tuple,可选) - 指定权重参数属性的对象。如果是 ``tuple`` ,MHA的权重参数属性使用 ``weight_attr[0]`` ,前馈神经网络的权重参数属性使用 ``weight_attr[1]`` 。如果参数值是 ``ParamAttr`` ,则MHA和前馈神经网络的权重参数属性都使用 ``ParamAttr`` 。默认值: ``None`` ,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **bias_attr** (ParamAttr|tuple|bool,可选)- 指定偏置参数属性的对象。如果是 ``tuple`` ,MHA的偏置参数属性使用 ``bias_attr[0]`` ,前馈神经网络的偏置参数属性使用 ``bias_attr[1]`` 。如果该参数值是 ``ParamAttr`` ,则MHA和前馈神经网络的偏置参数属性都使用 ``ParamAttr`` 。如果该参数为 ``bool`` 类型,只支持为 ``False`` ,表示没有偏置参数。默认值为None,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + + +返回 +::::::::: + - Tensor, 输出Tensor,数据类型与 ``x`` 一样。 + +代码示例 +:::::::::: + +.. code-block:: python + + # required: gpu + import paddle + from paddle.incubate.nn import FusedTransformerEncoderLayer + + # encoder input: [batch_size, src_len, d_model] + enc_input = paddle.rand((2, 4, 128)) + # self attention mask: [batch_size, n_head, src_len, src_len] + attn_mask = paddle.rand((2, 2, 4, 4)) + encoder_layer = FusedTransformerEncoderLayer(128, 2, 512) + enc_output = encoder_layer(enc_input, attn_mask) # [2, 4, 128] diff --git a/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst index c3a81b56490..49fb0c34d58 100644 --- a/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst +++ b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst @@ -18,15 +18,15 @@ fused_feedforward 参数 ::::::::: - - **x** (Tensor) - 输入Tensor,数据类型支持float16, float32 和float64, 输入的形状是`[batch_size, sequence_length, d_model]`。 - - **linear1_weight** (Tensor) - 第一个linear算子的权重数据,数据类型与`x`一样,形状是`[d_model, dim_feedforward]`。 - - **linear2_weight** (Tensor) - 第二个linear算子的权重数据,数据类型与`x`一样,形状是`[dim_feedforward, d_model]`。 - - **linear1_bias** (Tensor, 可选) - 第一个linear算子的偏置数据,数据类型与`x`一样,形状是`[dim_feedforward]`。默认值为None。 - - **linear2_bias** (Tensor, 可选) - 第二个linear算子的偏置数据,数据类型与`x`一样,形状是`[d_model]`。默认值为None。 - - **ln1_scale** (Tensor, 可选) - 第一个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和`x`一样。默认值为None。 - - **ln1_bias** (Tensor, 可选) - 第一个layer_norm算子的偏置数据,数据类型和`ln1_scale`一样, 形状是`[d_model]`。默认值为None。 - - **ln2_scale** (Tensor, 可选) - 第二个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和`x`一样。默认值为None。 - - **ln2_bias** (Tensor, 可选) - 第二个layer_norm算子的偏置数据,数据类型和`ln2_scale`一样, 形状是`[d\_model]`。默认值为None。 + - **x** (Tensor) - 输入Tensor,数据类型支持float16, float32 和float64, 输入的形状是 ``[batch_size, sequence_length, d_model]`` 。 + - **linear1_weight** (Tensor) - 第一个linear算子的权重数据,数据类型与 ``x`` 一样,形状是 ``[d_model, dim_feedforward]`` 。 + - **linear2_weight** (Tensor) - 第二个linear算子的权重数据,数据类型与 ``x`` 一样,形状是 ``[dim_feedforward, d_model]`` 。 + - **linear1_bias** (Tensor, 可选) - 第一个linear算子的偏置数据,数据类型与 ``x`` 一样,形状是 ``[dim_feedforward]`` 。默认值为None。 + - **linear2_bias** (Tensor, 可选) - 第二个linear算子的偏置数据,数据类型与 ``x`` 一样,形状是 ``[d_model]`` 。默认值为None。 + - **ln1_scale** (Tensor, 可选) - 第一个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和 ``x`` 一样。默认值为None。 + - **ln1_bias** (Tensor, 可选) - 第一个layer_norm算子的偏置数据,数据类型和 ``ln1_scale`` 一样, 形状是 ``[d_model]`` 。默认值为None。 + - **ln2_scale** (Tensor, 可选) - 第二个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和 ``x`` 一样。默认值为None。 + - **ln2_bias** (Tensor, 可选) - 第二个layer_norm算子的偏置数据,数据类型和 ``ln2_scale`` 一样, 形状是 ``[d_model]`` 。默认值为None。 - **dropout1_rate** (float, 可选) - 第一个dropout算子置零的概率。默认是0.5。 - **dropout2_rate** (float, 可选) - 第二个dropout算子置零的概率。默认是0.5。 - **activation** (string, 可选) - 激活函数。默认值是relu。 @@ -37,7 +37,7 @@ fused_feedforward 返回 ::::::::: - - Tensor, 输出Tensor,数据类型与`x`一样。 + - Tensor, 输出Tensor,数据类型与 ``x`` 一样。 代码示例 :::::::::: From 424d21e8cd0c0a0ef3c1c8edc9fa7d3427208580 Mon Sep 17 00:00:00 2001 From: zhangkaihuo Date: Tue, 16 Nov 2021 09:45:03 +0800 Subject: [PATCH 3/4] add some args (#4096) --- .../nn/FusedMultiHeadAttention_cn.rst | 3 ++- .../nn/functional/fused_feedforward_cn.rst | 15 ++++++++++++++- .../fused_multi_head_attention_cn.rst | 19 +++++++++++++++++-- 3 files changed, 33 insertions(+), 4 deletions(-) diff --git a/docs/api/paddle/incubate/nn/FusedMultiHeadAttention_cn.rst b/docs/api/paddle/incubate/nn/FusedMultiHeadAttention_cn.rst index 3b7f8d56769..f4b82e95403 100644 --- a/docs/api/paddle/incubate/nn/FusedMultiHeadAttention_cn.rst +++ b/docs/api/paddle/incubate/nn/FusedMultiHeadAttention_cn.rst @@ -3,7 +3,7 @@ FusedMultiHeadAttention ------------------------------- -.. py:class:: paddle.incubate.nn.FusedMultiHeadAttention(embed_dim, num_heads, dropout_rate=0.5, attn_dropout_rate=0.5, kdim=None, vdim=None, normalize_before=False, need_weights=False, weight_attr=None, bias_attr=None, name=None) +.. py:class:: paddle.incubate.nn.FusedMultiHeadAttention(embed_dim, num_heads, dropout_rate=0.5, attn_dropout_rate=0.5, kdim=None, vdim=None, normalize_before=False, need_weights=False, weight_attr=None, bias_attr=None, epsilon=1e-5, name=None) @@ -31,6 +31,7 @@ FusedMultiHeadAttention - **need_weights** (bool, 可选) - 表明是否返回注意力权重。默认值: ``False`` 。 - **weight_attr** (ParamAttr,可选) - 指定权重参数属性的对象。默认值: ``None`` ,表示使用默认的权重参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 - **bias_attr** (ParamAttr,可选)- 指定偏置参数属性的对象。默认值: ``None`` ,表示使用默认的偏置参数属性。具体用法请参见 :ref:`cn_api_fluid_ParamAttr` 。 + - **epsilon** (float, 可选) - 为了数值稳定加在分母上的值。默认值:1e-05。 - **name** (str,可选) - 操作的名称。默认值为: ``None`` 。更多信息请参见 :ref:`api_guide_Name`。 形状 diff --git a/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst index 49fb0c34d58..8321b3363ed 100644 --- a/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst +++ b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst @@ -3,7 +3,7 @@ fused_feedforward ------------------------------- -.. py:function:: paddle.incubate.nn.functional.fused_feedforward(x, linear1_weight, linear2_weight, linear1_bias=None, linear2_bias=None, ln1_scale=None, ln1_bias=None, ln2_scale=None, ln2_bias=None, dropout1_rate=0.5, dropout2_rate=0.5,activation="relu", ln1_epsilon=1e-5, ln2_epsilon=1e-5, pre_layer_norm=False, name=None): +.. py:function:: paddle.incubate.nn.functional.fused_feedforward(x, linear1_weight, linear2_weight, linear1_bias=None, linear2_bias=None, ln1_scale=None, ln1_bias=None, ln2_scale=None, ln2_bias=None, dropout1_rate=0.5, dropout2_rate=0.5,activation="relu", ln1_epsilon=1e-5, ln2_epsilon=1e-5, pre_layer_norm=False, training=True, mode='upscale_in_train', name=None): 这是一个融合算子,该算子是对transformer模型中feed forward层的多个算子进行融合,该算子只支持在GPU下运行,该算子与如下伪代码表达一样的功能: @@ -33,6 +33,19 @@ fused_feedforward - **ln1_epsilon** (float, 可选) - 一个很小的浮点数,被第一个layer_norm算子加到分母,避免出现除零的情况。默认值是1e-5。 - **ln2_epsilon** (float, 可选) - 一个很小的浮点数,被第二个layer_norm算子加到分母,避免出现除零的情况。默认值是1e-5。 - **pre_layer_norm** (bool, 可选) - 在预处理阶段加上layer_norm,或者在后处理阶段加上layer_norm。默认值是False。 + - **training** (bool): 标记是否为训练阶段。 默认: True。 + - **mode** (str): 丢弃单元的方式,有两种'upscale_in_train'和'downscale_in_infer',默认: 'upscale_in_train'。计算方法如下: + + 1. upscale_in_train, 在训练时增大输出结果。 + + - train: out = input * mask / ( 1.0 - p ) + - inference: out = input + + 2. downscale_in_infer, 在预测时减小输出结果 + + - train: out = input * mask + - inference: out = input * (1.0 - p) + - **name** (string, 可选) – fused_feedforward的名称, 默认值为None。更多信息请参见 :ref:`api_guide_Name` 。 返回 diff --git a/docs/api/paddle/incubate/nn/functional/fused_multi_head_attention_cn.rst b/docs/api/paddle/incubate/nn/functional/fused_multi_head_attention_cn.rst index bcc34ccf4ec..c6a2f941e7c 100644 --- a/docs/api/paddle/incubate/nn/functional/fused_multi_head_attention_cn.rst +++ b/docs/api/paddle/incubate/nn/functional/fused_multi_head_attention_cn.rst @@ -3,7 +3,7 @@ fused_multi_head_attention ------------------------------- -.. py:function:: paddle.incubate.nn.functional.fused_multi_head_attention(x, qkv_weight, linear_weight, pre_layer_norm=False, pre_ln_scale=None, pre_ln_bias=None, ln_scale=None, ln_bias=None, pre_ln_epsilon=1e-05, qkv_bias=None, linear_bias=None, attn_mask=None, dropout_rate=0.5, attn_dropout_rate=0.5, ln_epsilon=1e-05, name=None) +.. py:function:: paddle.incubate.nn.functional.fused_multi_head_attention(x, qkv_weight, linear_weight, pre_layer_norm=False, pre_ln_scale=None, pre_ln_bias=None, ln_scale=None, ln_bias=None, pre_ln_epsilon=1e-05, qkv_bias=None, linear_bias=None, attn_mask=None, dropout_rate=0.5, attn_dropout_rate=0.5, ln_epsilon=1e-05, traing=True, mode='upscale_in_train', name=None) **多头注意力机制** @@ -33,7 +33,10 @@ fused_multi_head_attention 算子目前只支持在GPU下运行,其包含的 out = out * v out = transpose(out, perm=[0, 2, 1, 3]) out = out_linear(out) - out = layer_norm(x + dropout(linear_bias + out)) + if pre_layer_norm: + out = x + dropout(linear_bias + out) + else: + out = layer_norm(x + dropout(linear_bias + out)) 值得注意的是,该API中,q, k, v 的 weight 被统一存储在一个权重张量中,形状为 `[3, num_heads, head_dim, embed_dim]` , @@ -57,6 +60,18 @@ fused_multi_head_attention 算子目前只支持在GPU下运行,其包含的 - **dropout_rate** (float, 可选) - 代表 multi-head attention 之后的 dropout 算子的 dropout 比例,默认为0.5。 - **attn_dropout_rate** (float, 可选) - 代表 multi-head attention 中的 dropout 算子的 dropout 比例,默认为0.5。 - **ln_epsilon** (float, 可选) - 代表 normalize_before 为True 时,multi-head attention 中第二个 (False时的第一个) ``layer_norm`` 为了数值稳定加在分母上的值。默认值为 1e-05 。 + - **training** (bool): 标记是否为训练阶段。 默认: True。 + - **mode** (str): 丢弃单元的方式,有两种'upscale_in_train'和'downscale_in_infer',默认: 'upscale_in_train'。计算方法如下: + + 1. upscale_in_train, 在训练时增大输出结果。 + + - train: out = input * mask / ( 1.0 - p ) + - inference: out = input + + 2. downscale_in_infer, 在预测时减小输出结果 + + - train: out = input * mask + - inference: out = input * (1.0 - p) - **name** (str, 可选) - 操作的名称(可选,默认值为 ``None`` )。更多信息请参见 :ref:`api_guide_Name`。 返回 From 864f662f9e04f024903cd95af68a5f24e795604e Mon Sep 17 00:00:00 2001 From: zhangkaihuo Date: Tue, 23 Nov 2021 14:19:02 +0800 Subject: [PATCH 4/4] fix typo (#4105) * fix typo * fix typo * fix ffn doc * fix ffn doc * fix typo --- .../incubate/nn/functional/fused_feedforward_cn.rst | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst index 8321b3363ed..56fbc9fad76 100644 --- a/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst +++ b/docs/api/paddle/incubate/nn/functional/fused_feedforward_cn.rst @@ -12,9 +12,10 @@ fused_feedforward residual = src; if pre_layer_norm: src = layer_norm(src) - src = linear(dropout(activation(dropout(linear(src))))) + src = linear(dropout(activation(linear(src)))) + src = residual + dropout(src) if not pre_layer_norm: - src = layer_norm(out) + src = layer_norm(src) 参数 ::::::::: @@ -24,12 +25,12 @@ fused_feedforward - **linear1_bias** (Tensor, 可选) - 第一个linear算子的偏置数据,数据类型与 ``x`` 一样,形状是 ``[dim_feedforward]`` 。默认值为None。 - **linear2_bias** (Tensor, 可选) - 第二个linear算子的偏置数据,数据类型与 ``x`` 一样,形状是 ``[d_model]`` 。默认值为None。 - **ln1_scale** (Tensor, 可选) - 第一个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和 ``x`` 一样。默认值为None。 - - **ln1_bias** (Tensor, 可选) - 第一个layer_norm算子的偏置数据,数据类型和 ``ln1_scale`` 一样, 形状是 ``[d_model]`` 。默认值为None。 + - **ln1_bias** (Tensor, 可选) - 第一个layer_norm算子的偏置数据,数据类型和 ``ln1_scale`` 一样, 形状是 ``x.shape[-1]`` 。默认值为None。 - **ln2_scale** (Tensor, 可选) - 第二个layer_norm算子的权重数据,数据类型可以是float32或者float64,形状和 ``x`` 一样。默认值为None。 - - **ln2_bias** (Tensor, 可选) - 第二个layer_norm算子的偏置数据,数据类型和 ``ln2_scale`` 一样, 形状是 ``[d_model]`` 。默认值为None。 + - **ln2_bias** (Tensor, 可选) - 第二个layer_norm算子的偏置数据,数据类型和 ``ln2_scale`` 一样, 形状是 ``x.shape[-1]`` 。默认值为None。 - **dropout1_rate** (float, 可选) - 第一个dropout算子置零的概率。默认是0.5。 - **dropout2_rate** (float, 可选) - 第二个dropout算子置零的概率。默认是0.5。 - - **activation** (string, 可选) - 激活函数。默认值是relu。 + - **activation** (string, 可选) - 激活函数,当前只支持relu和gelu。默认值是relu。 - **ln1_epsilon** (float, 可选) - 一个很小的浮点数,被第一个layer_norm算子加到分母,避免出现除零的情况。默认值是1e-5。 - **ln2_epsilon** (float, 可选) - 一个很小的浮点数,被第二个layer_norm算子加到分母,避免出现除零的情况。默认值是1e-5。 - **pre_layer_norm** (bool, 可选) - 在预处理阶段加上layer_norm,或者在后处理阶段加上layer_norm。默认值是False。