transformers の Trainer のモデル評価/保存戦略 (evaluation_strategy/save_strategy)
Trainer は huggingface/transformers ライブラリで提供されるクラスの1つで、PyTorch で書かれたモデルの訓練をコンパクトに記述するための API を備えている。
Trainer クラスを初期化する際には、TrainingArguments という訓練に関する様々な設定値の集合を引数に与えることで、訓練の設定に関する細かい調整が可能である。
Huggingface が提供している様々なコード例のうち、no_trainer
が末尾に付いていない訓練コードでは、大方、引数を TrainingArguments にまとめ上げ、それを Trainer クラスに渡すという実装方法になっている。
その中でも個人的に重要だと思うもの、というか、自分が何度も調べて思い出しているものに、evaluation_strategy
と save_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