みなさん、ちょっと困っていることがあるんですが。私は大規模なMLモデルをトレーニングしていて、完全に学習しきるまで文字通り1日かかります。
モデルの最適なパラメータを得るためにHPO(ハイパーパラメータ最適化)を実行したいのですが、このタスクには非常に高い精度が必要なので、HPOステップが必要です。
モデルは完全にトレーニングするのに1日かかるので、HPO部分については各hPoトライアルが1〜2時間程度で済むように、エポック数を減らしました。
プルーニングを使うことで、1回あたり30分未満まで抑えられます。ですが、これらのモデルとHPOを月に2回程度の頻度で学習させたいので、HPOのために毎回フルの学習を回すことはできません。また、トレーニングして最新の状態を維持しなければならない5種類のモデルがあります。
さらに、モデルのアーキテクチャも定期的に変更するので、それらについては新しいHPO実行が必要になります。
私が主に直面している問題は、HPOのエポック数をフルのトレーニング実行で使っているものより減らしてしまうと、学習率スケジューラやその他のHPOパラメータが、フルのトレーニング実行に対して適切に最適化されていないのではないかと心配している点です。
HPOを使ったこのような大規模な学習をどのように管理していて、フルの学習を行う場合と、小規模なHPO実行を行う場合でパラメータのドリフトが起きないようにどう担保していますか?
もう1つの質問は、プルーニングは「速く収束するモデル」を報酬として与え、「真理に近づくまでよりゆっくり収束するかもしれないモデル」を罰することになるのでしょうか? median prunerでプルーニングしているのですが、ほとんどのモデルは速く収束するものの、ある一定の地点以降は何も学習できていないように見えます。
学習が止まった後に、LR(学習率)スケジューラを最初から再開し直すことを考えています。これでLRの問題が解決できるかもしれません。early stoppingに似ていますが、ここでは一度止まったときにLRを再度立ち上げるイメージです。どう思いますか??
[link] [comments]




