Smolwrite commited on
Commit
09df217
·
verified ·
1 Parent(s): e7ffae4

Upload %EA%B5%AC%EC%A1%B0 (1).py

Browse files
Files changed (1) hide show
  1. %EA%B5%AC%EC%A1%B0 (1).py +89 -0
%EA%B5%AC%EC%A1%B0 (1).py ADDED
@@ -0,0 +1,89 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ class RotaryPositionalEmbedding(layers.Layer):
3
+ def __init__(self, dim):
4
+ super().__init__()
5
+ inv_freq = 1.0 / (10000 ** (np.arange(0, dim, 2) / dim))
6
+ self.inv_freq = tf.constant(inv_freq, dtype=tf.float32)
7
+
8
+ def call(self, x):
9
+ batch, heads, seq_len, depth = tf.unstack(tf.shape(x))
10
+ t = tf.range(seq_len, dtype=tf.float32)
11
+ freqs = tf.einsum('i,j->ij', t, self.inv_freq)
12
+ emb_sin = tf.sin(freqs)
13
+ emb_cos = tf.cos(freqs)
14
+ emb_cos = tf.reshape(emb_cos, [1, 1, seq_len, -1])
15
+ emb_sin = tf.reshape(emb_sin, [1, 1, seq_len, -1])
16
+ x1 = x[..., ::2]
17
+ x2 = x[..., 1::2]
18
+ x_rotated = tf.stack([
19
+ x1 * emb_cos - x2 * emb_sin,
20
+ x1 * emb_sin + x2 * emb_cos
21
+ ], axis=-1)
22
+ x_rotated = tf.reshape(x_rotated, tf.shape(x))
23
+ return x_rotated
24
+
25
+ class SwiGLU(tf.keras.layers.Layer):
26
+ def __init__(self, d_model, d_ff):
27
+ super().__init__()
28
+ self.proj = tf.keras.layers.Dense(d_ff * 2)
29
+ self.out = tf.keras.layers.Dense(d_model)
30
+
31
+ def call(self, x):
32
+ x_proj = self.proj(x)
33
+ x_val, x_gate = tf.split(x_proj, 2, axis=-1)
34
+ return self.out(x_val * tf.nn.silu(x_gate))
35
+
36
+ class GPTBlock(tf.keras.layers.Layer):
37
+ def __init__(self, d_model, d_ff, num_heads=16, dropout_rate=0.1, adapter_dim=64):
38
+ super().__init__()
39
+ self.ln1 = tf.keras.layers.LayerNormalization(epsilon=1e-5)
40
+ self.mha = tf.keras.layers.MultiHeadAttention(num_heads=num_heads, key_dim=d_model // num_heads)
41
+ self.dropout1 = tf.keras.layers.Dropout(dropout_rate)
42
+ self.adapter_down = tf.keras.layers.Dense(adapter_dim, activation='gelu')
43
+ self.adapter_up = tf.keras.layers.Dense(d_model)
44
+
45
+ self.ln2 = tf.keras.layers.LayerNormalization(epsilon=1e-5)
46
+ self.ffn = SwiGLU(d_model, d_ff)
47
+ self.dropout2 = tf.keras.layers.Dropout(dropout_rate)
48
+ self.rope = RotaryPositionalEmbedding(d_model // num_heads)
49
+
50
+ def call(self, x, training=False):
51
+ x_norm = self.ln1(x)
52
+ b, s, _ = tf.shape(x_norm)[0], tf.shape(x_norm)[1], tf.shape(x_norm)[2]
53
+ h = self.mha.num_heads
54
+ d = x_norm.shape[-1] // h
55
+
56
+ qkv = tf.reshape(x_norm, [b, s, h, d])
57
+ qkv = tf.transpose(qkv, [0, 2, 1, 3])
58
+ q = self.rope(qkv)
59
+ k = self.rope(qkv)
60
+ q = tf.reshape(tf.transpose(q, [0, 2, 1, 3]), [b, s, h * d])
61
+ k = tf.reshape(tf.transpose(k, [0, 2, 1, 3]), [b, s, h * d])
62
+
63
+ attn_out = self.mha(query=q, value=x_norm, key=k, use_causal_mask=True, training=training)
64
+ attn_out = self.dropout1(attn_out, training=training)
65
+
66
+ adapter_out = self.adapter_up(self.adapter_down(attn_out))
67
+ attn_out = attn_out + adapter_out
68
+
69
+ x = x + attn_out
70
+ ffn_out = self.ffn(self.ln2(x))
71
+ x = x + self.dropout2(ffn_out, training=training)
72
+ return x
73
+
74
+ class InteractGPT(tf.keras.Model):
75
+ def __init__(self, vocab_size, seq_len, d_model, d_ff, n_layers, num_heads=16, dropout_rate=0.1):
76
+ super().__init__()
77
+ self.token_embedding = tf.keras.layers.Embedding(vocab_size, d_model)
78
+ self.blocks = [GPTBlock(d_model, d_ff, num_heads, dropout_rate) for _ in range(n_layers)]
79
+ self.ln_f = tf.keras.layers.LayerNormalization(epsilon=1e-5)
80
+
81
+ def call(self, x, training=False):
82
+ x = self.token_embedding(x)
83
+ for block in self.blocks:
84
+ x = block(x, training=training)
85
+ x = self.ln_f(x)
86
+ logits = tf.matmul(x, self.token_embedding.embeddings, transpose_b=True)
87
+ return logits
88
+
89
+ model = InteractGPT(vocab_size=vocab_size, seq_len=max_len, d_model=128, d_ff=480, n_layers=8)