これまでのあらすじ
前回はこちら
GPT-2を用いた宝塚の芸名の自動生成を試みるのに、GPT-2の導入と、ファインチューニング用の学習データの生成まで行なった。
が、いざファインチューニング用のスクリプトを走らせたところエラーが出たところまで。
今回は、エラー対応しながらファインチューニングを実行させるところまでを記載する。
エラーその1 必要なライブラリが足りてない
これは既に解消してしまったので、実際のエラーメッセージは既にないが、Pythonライブラリのevaluateが見つからないとエラーが出た。
これの対応はシンプルで足りないライブラリをAnaconda Navigatorかpipで入れるだけである。
が、他に足りないライブラリがある可能性もあったため、requirements.txtに記載のあるものをそのバージョン指定に従って入れた。
requirements.txtは下記にある。
transformers/examples/pytorch/language-modeling/requirements.txt
accelerate
torch >= 1.3
datasets >= 1.8.0
sentencepiece != 0.1.92
protobuf
evaluate
これでライブラリがない類のエラーは解消した。
その2 ImportError: cannot import name 'send_example_telemetry'
以下、エラー全文
Traceback (most recent call last):
File "/Users/username/Study/ai_study/fine_tuning/./transformers/examples/pytorch/language-modeling/run_clm.py", line 52, in <module>
from transformers.utils import check_min_version, send_example_telemetry
ImportError: cannot import name 'send_example_telemetry' from 'transformers.utils' (/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/transformers/utils/__init__.py)
transformes.utilsに含まれるsend_example_telemetryがないと。
直感ではあったが、前回記事の環境構築の際、transformersをanacondaのリポジトリから入れており、それが悪さをしているかと推測した。
参考にした記事では、!pip install git+https://github.com/huggingface/transformers
で入れたと書いてあり、重要なライブラリのインストール手順が違う。
そのためtransformersを一度削除し、ソースコードから入れ直す。
Anaconda Navigatorからインストールしているので、そこからtransformersを消す。
- Anaconda Navigatorを起動し、左のメニューバーからEnviromentsを選択
- GPT-2試す用の環境を選択
- パッケージの一覧で、Installedを選び、右上のテキストボックスに「transoformers」を入力
- 緑色のチェックをクリックするとメニューが開くので、「Mark for removal」を選択し、Apply
- 依存するパッケージに変更や削除をするが良いかと聞かれるので、Yesをして実行
- 少し時間がかかるが消える
改めて仮想環境の一覧で右三角のアイコンをクリックして、「Open terminal」でターミナルを開く。
pip install git+https://github.com/huggingface/transformers
を実行する。
つらつらパッケージのダウンロードやらインストールの進捗が出たところで、インストールのエラーが出る。
Successfully built transformers
Installing collected packages: tokenizers, urllib3, tqdm, regex, pyyaml, numpy, idna, filelock, charset-normalizer, requests, transformers
ERROR: pip's dependency resolver does not currently take into account all the packages that are installed. This behaviour is the source of the following dependency conflicts.
accelerate 0.12.0 requires torch>=1.4.0, which is not installed.
Successfully installed charset-normalizer-2.1.1 filelock-3.8.0 idna-3.4 numpy-1.23.3 pyyaml-6.0 regex-2022.9.13 requests-2.28.1 tokenizers-0.12.1 tqdm-4.64.1 transformers-4.23.0.dev0 urllib3-1.26.12
accelerate 0.12.0には、torch1.4.0以上が必要だがインストールされてないとのこと。
pytorchは入っていたはずだが、transformersと一緒に消えてしまったらしい。accelerateはAnaconda Navigatorから0.12.0を入れているが、これではダメなのだろうか。
Anaconda Navigatorでpytorchをインストールし、再度transformersをインストール。
今度はうまく行った。
その3 ImportError: cannot import name 'ReduceOp' from 'torch.distributed'
再びファインチューニングのコマンドを実行するが、エラー。
python ./transformers/examples/pytorch/language-modeling/run_clm.py --model_name_or_path=rinna/japanese-gpt2-medium --train_file=./actress_datasets.txt --validation_file=./actress_datasets.txt --do_train --do_eval --num_train_epochs=10 --save_steps=1000 --save_total_limit=3 --per_device_train_batch_size=1 --per_device_eval_batch_size=1 --output_dir=./fine_tuned_model --use_fast_tokenizer=False
Traceback (most recent call last):
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/transformers/utils/import_utils.py", line 1035, in _get_module
return importlib.import_module("." + module_name, self.__name__)
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/importlib/__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/transformers/modeling_utils.py", line 75, in <module>
from accelerate import __version__ as accelerate_version
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/accelerate/__init__.py", line 7, in <module>
from .accelerator import Accelerator
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/accelerate/accelerator.py", line 27, in <module>
from .checkpointing import load_accelerator_state, load_custom_state, save_accelerator_state, save_custom_state
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/accelerate/checkpointing.py", line 24, in <module>
from .utils import (
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/accelerate/utils/__init__.py", line 60, in <module>
from .operations import (
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/accelerate/utils/operations.py", line 24, in <module>
from torch.distributed import ReduceOp
ImportError: cannot import name 'ReduceOp' from 'torch.distributed' (/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/torch/distributed/__init__.py)
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/username/Study/ai_study/fine_tuning/./transformers/examples/pytorch/language-modeling/run_clm.py", line 35, in <module>
import evaluate
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/evaluate/__init__.py", line 29, in <module>
from .evaluator import (
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/evaluate/evaluator/__init__.py", line 29, in <module>
from .question_answering import QuestionAnsweringEvaluator
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/evaluate/evaluator/question_answering.py", line 22, in <module>
from transformers import Pipeline, PreTrainedModel, PreTrainedTokenizer, TFPreTrainedModel
File "<frozen importlib._bootstrap>", line 1055, in _handle_fromlist
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/transformers/utils/import_utils.py", line 1025, in __getattr__
module = self._get_module(self._class_to_module[name])
File "/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/transformers/utils/import_utils.py", line 1037, in _get_module
raise RuntimeError(
RuntimeError: Failed to import transformers.modeling_utils because of the following error (look up to see its traceback):
cannot import name 'ReduceOp' from 'torch.distributed' (/Users/username/.pyenv/versions/anaconda3-2021.11/envs/gpt2/lib/python3.9/site-packages/torch/distributed/__init__.py)
どうにも原因と解決方がわからなかった(ソースを見てもググってもReduceOpの正体がはっきりしない)ので、ライブラリを入れたり消したり、入れ方も当初間違っていたりと、諸々汚い環境になっていたので、仮想環境を構築し直してそれでもエラーが出るかを確認する。
(仮想環境構築の問題なのか、それ以外の問題なのかの切り分けの意味もある)
仮想環境を削除して、下記の記事にあった手順で環境を再セットアップ。
どのパッケージをAnacondaで入れたのかpipで入れたのかが混乱しないよう、今回はpipに統一した。
pip install -e transformers
pip install datasets
pip install sentencepiece
- datasets 2.4.0
- sentencepiece 0.1.97
- transformers 4.22.0.dev0 //git cloneしたソースコードからインストールされている
- tokenizers 0.12.1 //これは依存関係で入ったようだ。重要ライブラリなのでバージョンを記載しておく
空の仮想環境なので、下記のパッケージも別途インストールする。
正しくいうと上のパッケージのみインストールしてファインチューニングしたら、パッケージがないなど色々怒られた。
そのため怒られる→パッケージインストール(以下、ループ)を繰り返していた。
この3つはrequirements.txtにあるので、evaluateがないと怒られた時にインストール。
- evaluate 0.2.2
- accelerate 0.12.0
- protobuf 4.21.6
下記はある程度動いた後にエラーとして出てきた。
torchは調べるのに少し苦労したが、どちらもインストールして対応。
- torch 1.12.1
- run_clm.py L.65
MODEL_CONFIG_CLASSES = list(MODEL_FOR_CAUSAL_LM_MAPPING.keys())
でエラーになる - MODEL_FOR_CASUAL_LM_MAPPINGがNoneTypeのため、keys()がないと言われる
- StackOverflowに未解決だが同様のissueが出ており、そこにtorchが入ってないのでは?とあったので入れたら解決した
- run_clm.py L.65
- sklearn 1.1.2
- 一見動いた風に見えたが、学習に入る前にエラーで止まった。
- エラーメッセージの最後にsklearnをインストールしろと出てきた
実行できているらしい
本記事を書きながら環境のセットアップと実行(の試行)を繰り返していたが、現在は下記のような出力があり、プログレスも動いているので、無事実行できているようだ。
[INFO|trainer.py:1628] 2022-09-20 23:57:23,124 >> ***** Running training *****
[INFO|trainer.py:1629] 2022-09-20 23:57:23,124 >> Num examples = 24
[INFO|trainer.py:1630] 2022-09-20 23:57:23,124 >> Num Epochs = 10
[INFO|trainer.py:1631] 2022-09-20 23:57:23,124 >> Instantaneous batch size per device = 1
[INFO|trainer.py:1632] 2022-09-20 23:57:23,124 >> Total train batch size (w. parallel, distributed & accumulation) = 1
[INFO|trainer.py:1633] 2022-09-20 23:57:23,124 >> Gradient Accumulation steps = 1
[INFO|trainer.py:1634] 2022-09-20 23:57:23,125 >> Total optimization steps = 240
2%|▋ | 4/240 [08:34<8:32:40, 130.34s/it]
しかし、8:32:40かかるようだ…
ファインチューニングの結果(うまく行ったか失敗したか)と、(うまく行っていれば)GPT-2での自動生成は次回記事とする。