LoginSignup
1
1

More than 1 year has passed since last update.

ヅカの芸名を自動生成するAIを作る(6):GPT-2編(2)

Last updated at Posted at 2022-09-20

これまでのあらすじ

前回はこちら

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を消す。

  1. Anaconda Navigatorを起動し、左のメニューバーからEnviromentsを選択
  2. GPT-2試す用の環境を選択
  3. パッケージの一覧で、Installedを選び、右上のテキストボックスに「transoformers」を入力
  4. 緑色のチェックをクリックするとメニューが開くので、「Mark for removal」を選択し、Apply
  5. 依存するパッケージに変更や削除をするが良いかと聞かれるので、Yesをして実行
  6. 少し時間がかかるが消える

改めて仮想環境の一覧で右三角のアイコンをクリックして、「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が入ってないのでは?とあったので入れたら解決した
  • 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での自動生成は次回記事とする。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1