Deep Learning training の待ち時間にすべきこと

Deep Learning の training 時間は短いものでは数十分、長いものでは数日に及ぶ。その training が走っている間は、何をすると1番プロダクティブだろうか。いくつかの候補とそれぞれの利点と欠点を以下にまとめてみた。

SNS やメールのチェック

コーディング時には後回しにしていた、返事をするのも良いだろう。欠点はもちろん皆さんご存知の通り。気づいたらあっという間に時間を吸い取られること。そしてプロジェクトへのフォーカスが失われることだ。

リファクタリング

コードを常にクリーンに保つことは、プロジェクト全体のプロダクティビティ向上に通じる。ただし機械学習のコードはテストが書けない場合が多いので注意が必要。テストによって支えられていないリファクタリングでは必ず IDE の助けを借りよう。リファクタリングの欠点は2つ。1つ目は現在走っているコードと、リファクタリングによって改善された head のコードが離れてしまうことだ。training 用のコードにバグが見つかったら、どちらを編集すべきだろうか?などと考えないといけない。2点目は、リファクタリングは重要だがプロジェクトを前に進めるものではないということだ。そもそも現在流している training コードが向いている方向が間違っていたらリファクタリングに特に意味はない。

Self code review

個人プロジェクトの場合、誰かにコードをレビューされることはない。時間が空いたときに落ち着いて、最近書いたコードを読み直してみるのも良いだろう。これは先述のリファクタリングとほぼ同様の利点・欠点がある。

プランニング

空いている時間に、プロジェクトの方向性や次の一手などを見つめ直すのも良いだろう。コードから視点を上げて、プロジェクトがうまく行っているか見つめることは、全体のプロダクティビティ向上に大きく役立つだろう。ただし多くの場合、次の一手は今走っている training に依存するので効果は限定的な場合もある。

関連論文・ブログを読む

機械学習では、論文を読むことは避けられない作業である。関連研究やトレンドなどを追うことで、プロジェクトの成功率を高めることができるだろう。欠点は(これは筆者だけかもしれないが)、数時間もぶっ続けで論文を読めないことだ。Training の空き時間中、ずっと論文読むのは無理だ。

プロジェクトの別タスク

理想的にはプロジェクト内に 2-3 個の別タスクがあるのが望ましい。ブロックされたら残りのタスクに並行して取り組むのだ。プロジェクトへのフォーカスを失うことなく、プロダクティビティを上げることができる。難しいのは別タスクがそもそもあるかどうか。それらが良い感じに独立しているかどうかだ。

別プロジェクト

空き時間に全く別のプロジェクトに取り組むのも一つの手だ。training とは完全に独立している。メインプロジェクトが失敗した場合のバックアップにもなる。欠点は完全なコンテキストスイッチが必須になることだ。training 後にタスクを resume するときに若干の苦労を要する。

まとめ

筆者自身のためにまとめてみたが、決定打がない。もし他にアイデアがあったらぜひ教えてほしい。ちなみに別のレイヤの話として long running training を流す前に小さなデータセットで実験してみるなどの Tips があると思うので、いずれまとめたい。