-
Notifications
You must be signed in to change notification settings - Fork 926
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
タグ数を徐々に増やしながら学習するオプションの追加、persistent_workersに関する軽微なバグ修正 #322
Conversation
PRありがとうございます。タグを徐々に増やすのは興味深いですね。ただ効果は限定的な気もしますので、コード追加とメンテナンスコストを考える必要がありそうです。 またpersistent_workers使用時の問題の件ですが、 ただ手元で試したところ、 |
効果はメンテナンスコストに比べると確かに低そうです(実際効果あるのか分かってないので…) persistent_workersについてですが、 恐らくですが |
いえ、直感的には効果ありそうですし(学習率のwarm upと組み合わせても面白いかもしれません)、コストもそこまで大きくないのですが、一度オプションを追加してしまうと削除はなかなか難しいので……。比較結果などあると良いのですが……。 またpersistent_workersとDataLoaderについての詳細、ありがとうございます。お書きいただいた内容を元に改めてこちらでも確認してみましたが、たしかに実際のDataLoaderから呼ばれるdatasetのインスタンスでは、set_current_epochが呼ばれていないようでした。
こちらのご推測が正しいようです。 ただWindowsでは |
multiprocessingのValueを使ってcollater_fn側から送信することで、一応stepとepochの両方をステップ毎に送ることが出来るようになりました。ただこの実装は結構無理やりな気もします。 (あとcommitミスしてログが汚くなってしまいました、すみません) |
ありがとうございます! collater_fnとValueを使うことでプロセス間で値の受け渡しができているようです。PythonにもPyTorchにもそこまで明るくないのでたいへん助かります。 また他のスクリプトへの対応もありがとうございます。タグ数の増加はむしろfine tuningの方が有効な気がしますね。 このままマージさせていただきます。 |
token_warmup
token_warmup_minを基準として、token_warmup_stepになるまで徐々にタグ数を増やしながら学習させる実装です。どれだけ効果があるかは未知数ですが、学習したい要素以外のtokenへの影響が多少軽減されるはずです。
torch.utils.data.DataLoaderの関係でエポック毎にしか変更されないため、少ないエポック数だと正常に動作しない可能性があります。
persistent_workersに関する軽微なバグ修正
persistent_workers使用時にcaption_dropout_every_n_epochsを使うと、エポック毎のワーカーのリセットがされない関係でset_current_epoch()が作用しなくなり、caption_dropout_every_n_epochsが使えなくなります(上記のtoken_warmupも同様)。
なので、競合時はargs.persistent_data_loader_workersをFalseに書き変えるようにしました。
思いつきの実装&修正なので、必要なければcloseしてもらって大丈夫です。