Blog

実験整理整頓ツール


2020年になりました。AI Labの大谷です。今年は実験の整理整頓を目標に研究していきたいと思います。みなさん実験のコードやログが散らかってませんか?自分は散らかし実験になりがちなのでいくつか実験管理のためのツールを導入しています。Web上には研究プロジェクト管理のノウハウがいろいろ共有されていますが、ズボラな人間には毎回このあたりのルールを守ることが難しいのでなるべくツールにまかせるようにしようと思っています。今回は最近使ったツールについて紹介しようかと思います。

プロジェクトテンプレートで実験用ディレクトリ構造を生成

増え続ける実験設定、定まらない提案手法。実験コードの全体像は初期段階ではどうなるかわかりません。適当に作ったプロジェクトで実験して3ヶ月後、自分で書いたはずのコードを読む苦痛。あの機能の実装は、あの中間出力はどこにあるのか…こういう実装の散らかしを防ぐために最近はCookiecutterのプロジェクトテンプレート(Cookiecutter Data Science)を使っています。
コードやデータを何も考えず用意されている場所に置いておくようにすれば、あとで必要になった時も大体どこに何があるかわかるようになるので助かっています。データを入れておく場所がexternal, interim, processed, rawに分けられているところ、コードを置くsrcが大体の機械学習プロジェクトにマッチしそうな構造になっているところが気に入ってます。

使い方もお手軽です。 pip install cookiecutter をしたら、プロジェクトを作りたい場所で

あとは指示に従ってプロジェクト名などを入力するだけです。ディレクトリ構造についてはいろいろなノウハウがネット上にはありますが、自分はとりあえずテンプレートに従って、必要なものが出てきたら適宜追加していく、という感じで開発しています。

実験ログ管理

再現性を担保するために必要な情報をしっかり残しておくことが重要なのは当然なのですが、これを自分できちんと管理するのはズボラな人間にとっては簡単ではありません。また何をどのような形式で保存しておくべきか判断するには多少のノウハウが必要なので、実験を始めたばかりの人はここで失敗することがわりと多いのではないでしょうか。このログを保存・管理するツールとして、最近Neptuneというサービスを試してみましたが、わりと良かったので紹介します。

Neptuneは実験結果のログの保存や可視化をしてくれるクラウドサービスです。数値やテキストの他、画像データ、任意のファイルの保存もサポートしています。Neptuneプロジェクトのサンプルを見ると何ができるツールなのかわかりやすいと思います。類似のツールとしてはCometMLやOSSのSacredなどがありますが、Neptuneは機能がシンプル、使い方も独特の作法などがなく非常に簡単です。公式ドキュメントもわかりやすいので使い方に関してこのブログで書くことが特にありません。他のツールにもある機能ですが、自動で実験時のgitのコミット情報や実行したコードのスナップショットを保存してくれるので安心感があります。自分は複数の計算サーバで実験を散らかして、どこのサーバに実験結果があるのかわからなくなることがあるので、以下の例のように実験をしたホスト名、ワーキングディレクトリなどを実験のpropertyとして追加しています。あとは実験中に使ったデータのバージョンやシード値、学習済みモデルのパラメータなどをアップロードしておけばより安心できそうです。

 

他の組織の研究者と実験結果を共有するために使ってみていますが、使いやすいサービスだと思います。誰が今どの実験をしているのかブラウザで確認したり、他の人がアップロードしたモデルや予測結果をダウンロードしたりできます。違う場所で実験をしているチームの作業で特に便利です。ただし利用料と類似ツールのことを考えると継続するかは要検討かと思います。個人のプロジェクトであればtensorboard等(+バージョン管理)でそれなりにカバーできそうです。研究/教育目的や非営利組織での利用は無料のプランがあるらしいので大学で研究をしている人には良いのではないでしょうか。

 

さいごに

自分は機械学習の実験を始めた頃は実験管理のノウハウがわからなく右往左往していたので、こういうツールの紹介があってもいいかと思い書いてみました。とりあえずこれらのツールと基本的なgit+Docker等で最低限の実験管理はできそうです。これがベストプラクティスとは言えませんが、お手軽さがズボラな人間にはあってると思います。他にもなにかいいノウハウやツールがあれば教えてください。

Author

アバター
otani