රේඛීය පක්ෂග්රාහී (අලිබී) අත්හදා බැලීම සමඟ අවධානය යොමු කරන්න

මෙය අලිබී ආකෘතියක්පුහුණු කිරීම සඳහා කරන ලද පයිටෝච් අත්හදා බැලීමකි.

මෙය අපගේ GPT ආකෘතියමත පදනම් වේ.

View Run

16import torch
17from torch.utils.data import DataLoader
18
19from labml import experiment, tracker
20from labml.configs import option, calculate
21from labml_helpers.datasets.text import SequentialUnBatchedDataset
22from labml_nn.transformers.alibi import AlibiMultiHeadAttention
23from labml_nn.experiments.nlp_autoregression import transpose_batch
24from labml_nn.transformers import TransformerConfigs
25from labml_nn.transformers.gpt import Configs as GPTConfigs

වින්යාසකිරීම්

අපි GPT වින්යාසයන් දීර් extend කර අවධානය යොමු කිරීමේ යාන්ත්රණය වෙනස් කරමු.

28class Configs(GPTConfigs):

අලිබීපදනම් කරගත් ට්රාන්ස්ෆෝමර් (පහත අර්ථ දක්වා ඇත)

36    transformer: TransformerConfigs = 'GPT_ALiBi'

දිගුවලංගු කිරීමේ කට්ටලය

38    valid_seq_len: int = 128
39    valid_loader = 'shuffled_longer_valid_loader'

ආරම්භකහා අවසාන ටෝකන වලදී පාඩු ලොග් කරන්න

41    def other_metrics(self, output: torch.Tensor, target: torch.Tensor):

පුහුණුඅනුක්රමයේ දිග (වලංගු කිරීමේදී) වැඩි ටෝකන තිබේ නම්,

46        if self.seq_len < output.shape[0]:

පුහුණුඅනුක්රමයේ දිග දී අලාභය ලොග් කරන්න

48            tracker.add(f'loss.{self.seq_len - 1}.', self.loss_func(output[self.seq_len - 1], target[self.seq_len - 1]))

පළමුටෝකනයේ අලාභය ලොග් කරන්න

50            tracker.add(f'loss.0.', self.loss_func(output[0], target[0]))

අවසානටෝකනයේ අලාභය ලොග් කරන්න

52        tracker.add(f'loss.{int(output.shape[0]) - 1}.', self.loss_func(output[-1], target[-1]))

අලිබීඅවධානය මොඩියුලයක් සාදන්න

55def _alibi_mha(c: TransformerConfigs):
59    return AlibiMultiHeadAttention(c.n_heads, c.d_model, dropout_prob=c.dropout)

සියළුමඅවධානය යොමු කිරීමේ යාන්ත්රණ අලිබී වෙත සකසන්න

63calculate(TransformerConfigs.encoder_attn, 'alibi_mha', _alibi_mha)
64calculate(TransformerConfigs.decoder_attn, 'alibi_mha', _alibi_mha)
65calculate(TransformerConfigs.decoder_mem_attn, 'alibi_mha', _alibi_mha)

valid_seq_len අනුක්රමික දිග සහිත වලංගුකරණ දත්ත පැටවුම මාරු කර ඇත

68@option(Configs.valid_loader)
69def shuffled_longer_valid_loader(c: Configs):
73    return DataLoader(SequentialUnBatchedDataset(text=c.text.valid,
74                                                 dataset=c.text,
75                                                 seq_len=c.valid_seq_len),
76                      batch_size=c.batch_size,
77                      collate_fn=transpose_batch,
78                      shuffle=True)

අලිබීපදනම් කරගත් ට්රාන්ස්ෆෝමර් වින්යාසයන්

81@option(Configs.transformer, 'GPT_ALiBi')
82def _transformer_configs(c: Configs):
89    conf = TransformerConfigs()

කාවැද්දීම්සහ පිවිසුම් උත්පාදනය සඳහා වචන මාලාව ප්රමාණ සකසන්න

91    conf.n_src_vocab = c.n_tokens
92    conf.n_tgt_vocab = c.n_tokens

GPTස්ථානගත නැණවත් පෝෂණය සඳහා GELU සක්රිය කිරීම භාවිතා කරයි

94    conf.ffn.activation = 'GELU'

AliBiස්ථානීය කාවැද්දීම් භාවිතා නොකරයි

97    conf.src_embed = 'no_pos'
98    conf.tgt_embed = 'no_pos'

සියළුමඅවධානය යොමු කිරීමේ යාන්ත්රණ අලිබී වෙත සකසන්න

101    conf.encoder_attn = 'alibi_mha'
102    conf.decoder_attn = 'alibi_mha'
103    conf.decoder_mem_attn = 'alibi_mha'

106    return conf
109def main():

අත්හදාබැලීම සාදන්න

111    experiment.create(name="gpt_alibi")

වින්යාසසාදන්න

113    conf = Configs()

වින්යාසයන්අභිබවා යන්න

115    experiment.configs(conf, {

අක්ෂරමට්ටමේ ටෝකනයිසර් භාවිතා කරන්න

117        'tokenizer': 'character',

කඩිනම්බෙදුම්කරු හිස් ය

119        'prompt_separator': '',

නියැදීමසඳහා විමසුමක් ආරම්භ කිරීම

121        'prompt': 'It is ',

කුඩාෂේක්ස්පියර් දත්ත කට්ටලය භාවිතා කරන්න

123        'text': 'tiny_shakespeare',

'text ':' ටිනි_ෂේක්ස්පියර්_නො_බෙදීම් ',

කසන්දර්භය ප්රමාණය භාවිතා

127        'seq_len': 64,

කසන්දර්භය ප්රමාණය භාවිතා

129        'valid_seq_len': 80,

Epochs සඳහා දුම්රිය

131        'epochs': 128,

කණ්ඩායම්ප්රමාණය

133        'batch_size': 128,

එක් යුගයකට වරක් පුහුණුව සහ වලංගු කිරීම අතර මාරු වන්න

136        'inner_iterations': 10,

ට්රාන්ස්ෆෝමර්වින්යාසයන්

139        'transformer.d_model': 128,
140        'transformer.ffn.d_ff': 512,
141        'transformer.n_heads': 8,
142        'transformer.n_layers': 4,
143        'transformer.dropout': 0.1,
144    })

ඉතිරිකිරීම සහ පැටවීම සඳහා ආකෘති සකසන්න

147    experiment.add_pytorch_models({'model': conf.model})

අත්හදාබැලීම ආරම්භ කරන්න

150    with experiment.start():

පුහුණුධාවනය

152        conf.run()

156if __name__ == '__main__':
157    main()