13import copy
14
15import torch
16import torch.nn as nn
17
18from labml import experiment
19from labml.configs import option
20from labml_helpers.module import Module
21from labml_nn.experiments.nlp_autoregression import NLPAutoRegressionConfigs
22from labml_nn.normalization.deep_norm import DeepNormTransformerLayer
23from labml_nn.transformers import MultiHeadAttention
24from labml_nn.transformers.feed_forward import FeedForward27class AutoregressiveTransformer(Module):n_tokens
යනු වචන මාලාවේ ටෝකන ගණන d_model
කාවැද්දීම ප්රමාණය වේ n_layers
ට්රාන්ස්ෆෝමර් ස්ථර ගණන layer
ස්තරය වේ. අපි ට්රාන්ෙපෝමර් සඳහා මෙහි n_layers
පිටපත් භාවිතා කරමු. 34 def __init__(self, n_tokens: int, d_model: int, n_layers: int, layer: DeepNormTransformerLayer):41 super().__init__()n_layers
ස්ථර සහිත ට්රාන්ස්ෆෝමර්
43 self.transformer = nn.Sequential(*[copy.deepcopy(layer) for _ in range(n_layers)])ටෝකන්කාවැද්දීම ස්ථරය
46 self.emb = nn.Embedding(n_tokens, d_model)කියවීමේස්ථරය
48 self.readout = nn.Linear(d_model, n_tokens)x
හැඩයේ ආදාන ටෝකන වේ [seq_len, batch_size]
50 def forward(self, x: torch.Tensor):ටෝකන්කාවැද්දීම් ලබා ගන්න
55 x = self.emb(x)ට්රාන්ස්ෆෝමර්එන්කෝඩරය
57 x = self.transformer(x)පිවිසුම්ලබා ගන්න
59 x = self.readout(x)ආපසුප්රතිඵල
62 return x, None65class Configs(NLPAutoRegressionConfigs):ආකෘතිය
74 model: AutoregressiveTransformerස්ථරගණන
77 n_layers: int = 32සහ ගැඹුරු සම්මතය සඳහා
80 deep_norm_alpha: float
81 deep_norm_beta: floatඅවධානයයොමු කරන හිස් ගණන
84 n_heads: int = 4කාවැද්දීමප්රමාණය
86 d_model: int = 64එක්එක් අවධානය හිස ප්රමාණය
88 d_k: int = 1691@option(Configs.deep_norm_alpha)
92def _deep_norm_alpha(c: Configs):98 return (2. * c.n_layers) ** (1. / 4.)101@option(Configs.deep_norm_beta)
102def _deep_norm_beta(c: Configs):108 return (8. * c.n_layers) ** -(1. / 4.)111@option(Configs.model)
112def _model(c: Configs):116 m = AutoregressiveTransformer(c.n_tokens, c.d_model, c.n_layers,
117 DeepNormTransformerLayer(d_model=c.d_model,
118 deep_norm_alpha=c.deep_norm_alpha,
119 deep_norm_beta=c.deep_norm_beta,
120 feed_forward=FeedForward(d_model=c.d_model,
121 d_ff=c.d_model * 4),
122 self_attn=MultiHeadAttention(c.n_heads, c.d_model,
123 dropout_prob=0.0)))
124
125 return m.to(c.device)128def main():අත්හදාබැලීම සාදන්න
133 experiment.create(name="deep_norm", writers={'screen', 'web_api'})වින්යාසසාදන්න
135 conf = Configs()වින්යාසයන්අභිබවා යන්න
137 experiment.configs(conf, {අක්ෂරමට්ටමේ ටෝකනයිසර් භාවිතා කරන්න
139 'tokenizer': 'character',කඩිනම්බෙදුම්කරු හිස් ය
141 'prompt_separator': '',නියැදීමසඳහා විමසුමක් ආරම්භ කිරීම
143 'prompt': 'It is ',කුඩාෂේක්ස්පියර් දත්ත කට්ටලය භාවිතා කරන්න
145 'text': 'tiny_shakespeare',කසන්දර්භය ප්රමාණය භාවිතා
148 'seq_len': 256,32වයස අවුරුදු සඳහා දුම්රිය
150 'epochs': 32,කණ්ඩායම්ප්රමාණය
152 'batch_size': 16,එක් යුගයකට වරක් පුහුණුව සහ වලංගු කිරීම අතර මාරු වන්න
154 'inner_iterations': 10,ස්ථරගණන
157 'n_layers': 50,උනුසුම්වීමක් නොමැති ආදම් ප්රශස්තකරණය
161 'optimizer.optimizer': 'Adam',
162 'optimizer.learning_rate': 1.25e-4,
163 })ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘතිය (ය) සකසන්න
166 experiment.add_pytorch_models({'model': conf.model})අත්හදාබැලීම ආරම්භ කරන්න
169 with experiment.start():පුහුණුධාවනය
171 conf.run()175if __name__ == '__main__':
176 main()