transformerのtrainerのエラー対応

実現したいこと

エラーの解決法がわからないため、質問させていただきました。

発生している問題・エラーメッセージ

--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-2-5f481fdcb5f9> in <cell line: 144>() 142 143 # トレーニングの実行 --> 144 trainer.train() 145 146 # グラフの描画 3 frames /usr/local/lib/python3.10/dist-packages/transformers/trainer_callback.py in call_event(self, event, args, state, control, **kwargs) 412 def call_event(self, event, args, state, control, **kwargs): 413 for callback in self.callbacks: --> 414 result = getattr(callback, event)( 415 args, 416 state, AttributeError: 'function' object has no attribute 'on_train_begin'

該当のソースコード

# トレーニングの設定 #@title Step 1: Loading the Dataset #1.Load kant.txt using the Colab file manager #2.Downloading the file from GitHub # ファイルのパス file_path = './drive/MyDrive/kobun_heike1.txt' # ファイルを読み込む try: with open(file_path, 'r', encoding='utf-8') as file: # ファイルの内容を読み込む content = file.read() print(content) except FileNotFoundError: print(f'File not found: {file_path}') except Exception as e: print(f'An error occurred: {e}') !pip install accelerate -U #@title Step 2:Installing Hugging Face Transformers # We won't need TensorFlow here # Install `transformers` from master !pip install git+https://github.com/huggingface/transformers !pip list | grep -E 'transformers|tokenizers' # transformers version at notebook update --- 2.9.1 # tokenizers version at notebook update --- 0.7.0 #@title Step 3: Training a Tokenizer from pathlib import Path from tokenizers import ByteLevelBPETokenizer paths = [str(x) for x in Path(".").glob("**/*.txt")] # Initialize a tokenizer tokenizer = ByteLevelBPETokenizer() # Customize training tokenizer.train(files=paths, vocab_size=52_000, min_frequency=2, special_tokens=[ "<s>", "<pad>", "</s>", "<unk>", "<mask>",]) #@title Step 4: Saving the files to disk import os token_dir = '/content/genbunBERT' if not os.path.exists(token_dir): os.makedirs(token_dir) tokenizer.save_model('genbunBERT') #@title Step 5 Loading the Trained Tokenizer Files from tokenizers.implementations import ByteLevelBPETokenizer from tokenizers.processors import BertProcessing tokenizer = ByteLevelBPETokenizer( "./genbunBERT/vocab.json", "./genbunBERT/merges.txt", ) #@title Step 6: Checking Resource Constraints: GPU and NVIDIA !nvidia-smi #@title Checking that PyTorch Sees CUDAnot import torch torch.cuda.is_available() #@title Step 7: Defining the configuration of the Model from transformers import RobertaConfig config = RobertaConfig( vocab_size=52_000, max_position_embeddings=514, num_attention_heads=12, num_hidden_layers=6, type_vocab_size=1, ) print(config) #@title Step 8: Re-creating the Tokenizer in Transformers from transformers import RobertaTokenizer tokenizer = RobertaTokenizer.from_pretrained("./genbunBERT", max_length=512) #@title Step 9: Initializing a Model From Scratch from transformers import RobertaForMaskedLM model = RobertaForMaskedLM(config=config) print(model) #@title Step 10: Building the Dataset from transformers import LineByLineTextDataset dataset = LineByLineTextDataset( tokenizer=tokenizer, file_path="./drive/MyDrive/kobun_heike1.txt", block_size=128, ) #@title Step 11: Defining a Data Collator from transformers import DataCollatorForLanguageModeling data_collator = DataCollatorForLanguageModeling( tokenizer=tokenizer, mlm=True, mlm_probability=0.15 ) #@title Step 12: Initializing the Trainer from transformers import Trainer, TrainingArguments import matplotlib.pyplot as plt # モデル、トレーニングデータ、その他の設定を適切に設定 # トレーニングの設定 training_args = TrainingArguments( output_dir="./genbunBERT", overwrite_output_dir=True, per_device_train_batch_size=64, num_train_epochs=1, save_steps=10_000, logging_steps=100, save_total_limit=2, ) # Trainerの初期化 trainer = Trainer( model=model, args=training_args, data_collator=data_collator, train_dataset=dataset, ) # グラフ用に変数を用意 loss_values = [] steps_values = [] # 自前のログ関数を定義して、損失とステップ数を記録する def logging_callback(logs): global loss_values, steps_values loss_values.append(logs["loss"]) steps_values.append(trainer.state.global_step) # Trainerにログ関数を追加 trainer.add_callback(logging_callback) # トレーニングの実行 trainer.train() # グラフの描画 plt.plot(steps_values, loss_values, label="Training Loss") plt.xlabel("Steps") plt.ylabel("Loss") plt.title("Training Loss over Steps") plt.legend() plt.show()

試したこと

「# モデル、トレーニングデータ、その他の設定を適切に設定」の行までは正常に動きました。

今回使用しているコードが、transformerのバージョン4.15.0のもののため、
インストールをして対応をしたのですが、使用しているトークナイザが使えないと
エラーが出てしまったため断念しました。

補足情報(FW/ツールのバージョンなど)

今回使用しているコードが、chatgptに作成してもらったもののため、
バージョンの問題なのではないかと考えています。ですが、
対処法がわからないため、質問させていただきました。
使用しているパソコンはmacbook、
google colabを使用しています。

長文ですが、よろしくお願いします。

コメントを投稿

0 コメント