masked_multihead_attention¶
- paddle.incubate.nn.functional. masked_multihead_attention ( x, cache_kv=None, bias=None, src_mask=None, cum_offsets=None, sequence_lengths=None, rotary_tensor=None, beam_cache_offset=None, qkv_out_scale=None, out_shift=None, out_smooth=None, seq_len=1, rotary_emb_dims=0, use_neox_rotary_style=False, compute_dtype='default', out_scale=- 1, quant_round_type=1, quant_max_bound=127.0, quant_min_bound=- 127.0 ) [源代码] ¶
用于文本摘要的蒙版多头注意力机制。
这是一个融合操作符,用于计算 Transformer 模型架构中的蒙版多头注意力。该操作符仅支持在 GPU 上运行。
参数¶
x (Tensor) - 输入张量可以是 2-D 张量。其形状为 [batch_size, 3 * num_head * head_dim]。
cache_kvs (list(Tensor)|tuple(Tensor)) - 生成模型的缓存结构张量。其形状为 [2, batch_size, num_head, max_seq_len, head_dim]。
bias (Tensor,可选) - 偏置张量。其形状为 [3, num_head, head_dim]。
src_mask (Tensor,可选) - 源掩码张量。其形状为 [batch_size, 1, 1, sequence_length]。
sequence_lengths (Tensor,可选) - 序列长度张量,用于索引输入。其形状为 [batch_size, 1]。
rotary_tensor (Tensor,可选) - 旋转张量。其数据类型必须为浮点型。其形状为 [batch_size, 1, 1, sequence_length, head_dim]。
beam_cache_offset (Tensor,可选) - Beam 缓存偏移张量。其形状为 [batch_size, beam_size, max_seq_len + max_dec_len]。
qkv_out_scale (Tensor,可选) - 量化中使用的 qkv_out_scale 张量。其形状为 [3, num_head, head_dim]。
out_shift (Tensor,可选) - 量化中使用的 out_shift 张量。
out_smooth (Tensor,可选) - 量化中使用的 out_smooth 张量。
seq_len (int,可选) - 序列长度,用于获取输入长度。默认为 1。
rotary_emb_dims (int,可选) - 旋转嵌入维度。默认为 1。
use_neox_rotary_style (bool,可选) - 表示是否需要 neox_rotary_style 的标志。默认为 False。
compute_dtype (string) - 计算数据类型,用于表示输入数据类型。
out_scale (float,可选) - 量化中使用的 out_scale。默认为 1.0。
quant_round_type (int,可选) - 量化中使用的 quant_round_type。默认为 1。
quant_max_bound (float,可选) - 量化中使用的 quant_max_bound。默认为 127.0。
quant_min_bound (float,可选) - 量化中使用的 quant_min_bound。默认为 -127.0。
返回¶
Tensor|tuple:如果 "beam_cache_offset_out" 不为 None,则返回元组 (output, cache_kvs_out, beam_cache_offset_out),其中 output 是蒙版多头注意力层的输出,cache_kvs_out 与输入 cache_kvs 原地更新。如果 "beam_cache_offset_out" 为 None,则返回元组 (output, cache_kvs_out)。
形状¶
Tensor
| tuple
代码示例¶
>>> import paddle
>>> import paddle.incubate.nn.functional as F
>>> paddle.device.set_device('gpu')
>>> # input: [batch_size, 3 * num_head * dim_head]
>>> x = paddle.rand(shape=(2, 3 * 32 * 128), dtype="float32")
>>> # src_mask: [batch_size, 1, 1, sequence_length]
>>> src_mask = paddle.rand(shape=(2, 1, 1, 10), dtype="float32")
>>> # cache_kv: [2, batch_size, num_head, max_seq_len, dim_head]
>>> cache_kv = paddle.rand(shape=(2, 2, 32, 64, 128), dtype="float32")
>>> output = F.masked_multihead_attention(
... x, src_mask=src_mask, cache_kv=cache_kv)