Blog
Chainer上の実験中の学習ログの可視化や実験管理機能を追加するパッケージ、ChainerUIを公開しました。
ChainerUIは、多くのChainerユーザが持つ「学習中の実験ジョブの進捗を手軽に知りたい」、「複数の実験ジョブの手軽に管理したい」ニーズに応えるために開発しました。
具体的には、下記の機能を備えています。
- 学習ログの可視化
- 実験履歴閲覧
- 実行中の実験に対する操作 (スナップショット・学習ハイパーパラメーター修正)
本パッケージは、Chainerの学習用Trainerを監視するChainer extensionとして機能するものです。このChainer extensionを有効化した実験を、Webブラウザからリアルタイムで監視、制御することができます。複雑な依存関係がないため、Trainerを用いる既存の実験スクリプトに簡単に導入できます。
学習ログの可視化
Chainerで実験中のLossやAccuracy等の学習ログを、Webブラウザで可視化することができます。表示する項目は、ユーザが任意に指定できます。
実験管理機能
Chainerを使った複数の実験を1つの画面に一覧表示することができます。各実験には、実験条件を表示することができます。また、ブラウザ上から実行中の実験に対して、スナップショット保存の実行や、ハイパーパラメータの修正が可能です。
セットアップおよび実行
ChainerUIのインストール後、セットアップを行います。
pip install chainerui chainerui db create chainerui db upgrade
プロジェクトを登録しサーバーを実行後、Webブラウザでhttp://localhost:5000/
にアクセスします。プロジェクトの登録はサーバー起動後にも行うことができます。
chainerui project create -d PROJECT_DIR [-n PROJECT_NAME] chainerui server
学習ログの可視化
Chainer標準のLogReportが出力するlogファイルを監視し、実験中の学習ログを表示します。下記はtrain_mnist.pyを使用した場合の実行例です。
chainerui project create -d path/to/result -n mnist python train_mnist.py -o path/to/result/1
“mnist” プロジェクトに “…/result/1” という名前の実験が加えられ、”path/to/result/1”に出力されるlogファイルのデータをグラフに表示します。
実験管理機能
上記logファイルと同じディレクトリにあるargsファイルを一覧に表示します。このargsファイルはkey-value形式のJSONファイルです。下記はtrain_mnist.pyに対して、起動引数をargsファイルに保存するサンプルコード(抜粋)です。
# [ChainerUI] import chainerui util function from chainerui.utils import save_args def main(): parser.add_argument('--out', '-o', default='result', help='Directory to output the result') args = parser.parse_args() # [ChainerUI] save 'args' to show experimental conditions save_args(args, args.out)
実験中のジョブを操作するには、ChainerUIのCommandsExtension
を使用します。同じくtrain_mnist.pyに対するサンプルコード(抜粋)です。任意のタイミングでスナップショットを取ったり、学習率などのハイパーパラメータを修正することができます。
# [ChainerUI] import CommandsExtension from chainerui.extensions import CommandsExtension def main(): trainer = training.Trainer(updater, (args.epoch, 'epoch'), out=args.out) # [ChainerUI] enable to send commands from ChainerUI trainer.extend(CommandsExtension())
コード全体は、examples/train_mnist.pyを参照してください。
公開の背景
ディープラーニングの応用によって、様々な課題に対するState-of-the-artが日夜目まぐるしく塗り替えられる現在、実験の可視化や管理の効率化は大きな課題となっています。そのため、効率化支援のアプリケーションが乱立する状況も生んでいます。
PFNは、Chainerユーザが上記の課題に悩まされることなく、心地よく実験をこなせることを望んでいます。このような背景から、本パッケージをChainerユーザの効率をよりいっそう高めるための公式ツールとして位置づけて公開します。
PFN2017夏インターンシップの成果
本パッケージは、PFN2017年夏インターンシップに参加した稲垣さんと小林さんの開発成果です。
多くのリサーチャーやエンジニアを抱えるPFN社内では、以前から効率的な機械学習の実験の実施が課題となっていました。しかしながら、各々個人の工夫に頼っていたのが実情でした。そこで、「実験の効率化を支援するためのフロントエンド・アプリケーション」をインターンシップの課題として位置づけて開発を開始しました。
フロントエンド・エンジニアとしてタッグを組んだおふたりは、2か月という短い期間ながらも社内に溶け込み、要件調整から設計・実装まで自発的にプロジェクトを進めました。そしてインターンシップ終了後もPEとして継続的にコミットを続けた上、社内での4ヶ月間のドッグフーディングを経ることで、本日の公開を迎えています。
今後の展望
PFNはChainerUIをChainer製品群の1つとして位置づけ、今後も積極的に開発を進めていく予定です。以下の機能の実装が予定されています。
- グラフの出力機能
- 操作コマンドExtensionの拡充 etc
また、PFNでは最先端の研究開発成果物を、エンドユーザに届けるスキルを持ったフロントエンド・エンジニアを募集しています。