12from labml import experiment
13from labml.configs import calculate
14from labml_nn.transformers import TransformerConfigs
15from labml_nn.transformers.rope.experiment import Configs as RoPEConfigs20class Configs(RoPEConfigs): # , ArithmeticAutoregression):
21 pass24def _rotary_value_pe_mha(c: TransformerConfigs):
25 from labml_nn.transformers.rope.value_pe import RotaryValuePEMultiHeadAttention
26 return RotaryValuePEMultiHeadAttention(c.n_heads, c.d_model, 1., 1.)設定オプション
30calculate(TransformerConfigs.encoder_attn, 'rotary_value', _rotary_value_pe_mha)
31calculate(TransformerConfigs.decoder_attn, 'rotary_value', _rotary_value_pe_mha)
32calculate(TransformerConfigs.decoder_mem_attn, 'rotary_value', _rotary_value_pe_mha)35def main():実験を作成
37 experiment.create(name="rotary_shakespeare", comment="rotary value", writers={'screen', 'labml'})コンフィグの作成
39 conf = Configs()オーバーライド設定
41 experiment.configs(conf, {固定位置埋め込みなし
43 'transformer.src_embed': 'no_pos',
44 'transformer.tgt_embed': 'no_pos',RoPE 付きエンコーダ
47 'transformer.encoder_attn': 'rotary_value','トランスフォーマー.encoder_attn ':' ロータリー '、
51 'model': 'rotary_pe_transformer',キャラクターレベルのトークナイザーを使う
54 'tokenizer': 'character',プロンプトセパレータが空白
56 'prompt_separator': '',サンプリングの開始プロンプト
58 'prompt': 'It is ',タイニー・シェイクスピア・データセットを使う
60 'text': 'tiny_shakespeare',コンテキストサイズを次の値にしてください
63 'seq_len': 512,32 エポックのトレーニング
65 'epochs': 24,バッチサイズ
67 'batch_size': 16,エポックごとにトレーニングと検証を切り替える
70 'inner_iterations': 4,モデルサイズ
73 'd_model': 128,
74 'transformer.ffn.d_ff': 512,
75 'transformer.n_heads': 4,
76 'transformer.dropout': 0.0,79 'optimizer.optimizer': 'Adam',
80 'optimizer.learning_rate': 2.5e-4,
81
82 'dataloader_shuffle_with_replacement': True
83 })保存および読み込み用のモデルを設定する
86 experiment.add_pytorch_models({'model': conf.model})実験を始める
89 with experiment.start():トレーニングを実行
91 conf.run()95if __name__ == '__main__':
96 main()