MCPcopy Create free account
hub / github.com/zai-org/CodeGeeX / SelfAttention

Class SelfAttention

codegeex/paddle/codegeex_model.py:50–223  ·  view source on GitHub ↗

self-attention layer abstract class. Self-attention layer takes input with size [b, s, h] and returns output of the same size.

Source from the content-addressed store, hash-verified

48
49
50class SelfAttention(paddle.nn.Layer):
51 """self-attention layer abstract class.
52
53 Self-attention layer takes input with size [b, s, h]
54 and returns output of the same size.
55 """
56
57 def __init__(
58 self,
59 hidden_size,
60 num_attention_heads,
61 layer_number,
62 fp16=True,
63 attention_softmax_in_fp32=True,
64 ):
65 super(SelfAttention, self).__init__()
66 self.hidden_size = hidden_size
67 self.num_attention_heads = num_attention_heads
68 self.fp16 = fp16
69 self.attention_softmax_in_fp32 = attention_softmax_in_fp32
70 self.layer_number = max(1, layer_number)
71
72 assert self.hidden_size % self.num_attention_heads == 0
73 self.hidden_size_per_attention_head = int(self.hidden_size // self.num_attention_heads)
74
75 self.query = paddle.nn.Linear(self.hidden_size, self.hidden_size)
76 self.key = paddle.nn.Linear(self.hidden_size, self.hidden_size)
77 self.value = paddle.nn.Linear(self.hidden_size, self.hidden_size)
78
79 self.norm_factor = math.sqrt(self.hidden_size_per_attention_head)
80 self.softmax = paddle.nn.Softmax(axis=-1)
81
82 self.dense = paddle.nn.Linear(self.hidden_size, self.hidden_size)
83
84 def forward(
85 self,
86 hidden_states,
87 attention_mask,
88 layer_past=None,
89 get_key_value=False,
90 prompt_length=None,
91 context_length=None,
92 ):
93 # hidden_states: [sq, b, h]
94
95 # =====================
96 # Query, Key, and Value
97 # =====================
98
99 query_layer = self.query(hidden_states)
100 key_layer = self.key(hidden_states)
101 value_layer = self.value(hidden_states)
102
103 new_query_layer_shape = query_layer.shape[:-1] + \
104 [self.num_attention_heads,
105 self.hidden_size_per_attention_head]
106 query_layer = query_layer.reshape(new_query_layer_shape)
107

Callers 1

__init__Method · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected