📙

transformers の Trainer のモデル評価/保存戦略 (evaluation_strategy/save_strategy)

2022/05/22に公開

Trainer は huggingface/transformers ライブラリで提供されるクラスの1つで、PyTorch で書かれたモデルの訓練をコンパクトに記述するための API を備えている。
Trainer クラスを初期化する際には、TrainingArguments という訓練に関する様々な設定値の集合を引数に与えることで、訓練の設定に関する細かい調整が可能である。
Huggingface が提供している様々なコード例のうち、no_trainer が末尾に付いていない訓練コードでは、大方、引数を TrainingArguments にまとめ上げ、それを Trainer クラスに渡すという実装方法になっている。

その中でも個人的に重要だと思うもの、というか、自分が何度も調べて思い出しているものに、evaluation_strategysave_strategy があるので、これをまとめておく。

evaluation_strategy

validation セットを用いたバリデーションに関する戦略を指定する。
デフォルトでは "no"、すなわち行わないようになっている。

--evaluation_strategy steps

とすれば、eval_steps で指定した値のステップ数ごとにバリデーションを行う。eval_steps はデフォルトでは None になっているので、値を指定してあげる必要がある。

--evaluation_strategy epoch

とすれば、各エポック終了時にバリデーションを行う。

save_strategy

モデルの保存に関する戦略を指定する。
デフォルトでは "steps" になっている。これは save_steps で指定した値のステップ数ごとにモデルの保存を行うことを意味する。save_steps はデフォルトでは 500 になっている。

--save_strategy epoch

とすれば、各エポック終了時にモデルの保存を行う。

--save_strategy no

とすれば、モデルの保存は行わない。


なお、--load_best_model_at_end というオプションを使うと、evaluation で最も良いスコアを出したモデルを最後に完成形として保存してくれるようになり、便利である。

Discussion