https://github.com/sile/optjournal
- 基本的に対象study内の全trial情報を要する (sampler/pruner/visualization/pandas)
- 削除や上書きがほぼない
- => optjournalの仕組みと相性が良い
- ワーカ毎のステートマシンとグローバルな操作履歴
- リトライ
- 追記時にロック
- 追記時にファイルロック
- NFS
- 内容:
bench.sh
とbench.py
を参照 - 結果 (oputna=v2.0.0-rc1):
- InMemoryStorage: 17.26s
- RDBStorage: 41.44s
- optjournal.RDBDatabase: 41.31s
- optjournal.FileSystemDatabase: 20.55s
対処:
- GC
- スナップショット
- 典型的にはset_trial_param
- ベンチマークでは所要時間が1/2程度になった
- JSON: Dict => List
- Other encoding (e.g., protobuf)
- StudySummary
- Trials
複雑さに見合うメリットがあるかどうかは不明
- 常にsync
- Storage.set_user_attr
- Storage.user_attrs
- Storage.set_trial_state
- Study.*
- each trial:
- 開始前にread_sync
- 終了前にwrite_sync
- Pruner.prune:
- 呼び出し前にread_sync
- 呼び出し後にwrite_sync
ストレージレイヤではflush
とpoll
を提供し、同期タイミングは完全に呼び出しもとに任せた方がシンプルになるかもしれない?
(ストレージの使用側の負担は増える)
メモ: