LoginSignup
1
1

More than 1 year has passed since last update.

Fairseqにおけるモデル不一致エラーについて

Posted at

はじめに

Fairseqを使って事前学習済みモデルをロードしようとした際に,設定は全く同じなのにモデルの不一致エラーがでてだいぶ苦戦したので,その時の状況と解決方法を共有したいと思います.

エラー内容

事前学習したモデルを別のサーバ上でファインチューニングするために,fairseq-trainコマンドを実行したところ以下のようなエラーが発生しました.

RuntimeError: Error(s) in loading state_dict for TransformerModel:
Unexpected key(s) in state_dict: 
"encoder.layers.0.in_proj_weight", "encoder.layers.0.in_proj_bias", "encoder.layers.0.out_proj_weight", "encoder.layers.0.out_proj_bias", "encoder.layers.0.fc1_weight", "encoder.layers.0.fc1_bias", "encoder.layers.0.fc2_weight", "encoder.layers.0.fc2_bias", "encoder.layers.1.in_proj_weight", "encoder.layers.1.in_proj_bias", "encoder.layers.1.out_proj_weight", "encoder.layers.1.out_proj_bias", "encoder.layers.1.fc1_weight", "encoder.layers.1.fc1_bias", "encoder.layers.1.fc2_weight", "encoder.layers.1.fc2_bias".
Exception: Cannot load model parameters from checkpoint ./checkpoints/checkpoint_best.pt; 
(中略)
please ensure that the architectures match.

原因

今回のエラーの原因としてはバージョン違いによる各層の名前が違うことにあります.
ver 0.12.2では各層の名前がencoder.layers.0.in_proj_weightのように定義されていますが,最新バージョンのFairseqでは異なるようです.

解決方法

バージョンを揃えてあげるだけです.
今回の私の場合では以下のようにFairseqを再インストールすることで完全に解決できました.

pip install fairseq==0.12.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