LoginSignup
2
3

More than 5 years have passed since last update.

Chainerのログをログコレクターと連携させる

Last updated at Posted at 2018-12-16

概要

Chainer のログは本体に同梱されている LogReport extention を使うと JSON 形式で出力されますが、Fluentd などのログコレクターと連携させる場合は JSONL 形式で出力されたほうが便利です。今回は Chainer のログを JSONL 形式で出力する extention を作成しました。

使い方

  • インストール
$ pip install chainer-jsonl-report
  • 学習コード
from chainer_jsonl_report import JsonlReport
......
trainer.extend(JsonlReport())
trainer.extend(extensions.PrintReport(
    ['epoch', 'iteration', 'main/loss', 'validation/main/loss',
     'main/accuracy', 'validation/main/accuracy', 'elapsed_time'],
    log_report='JsonlReport',
))

LogReport の代わりに JsonlReport を extend し、PrintReport の引数に log_report='JsonlReport' を指定すれば完了です。全体のコードはこちらにあります。実行すると以下の様な1行1JSONなログが出力されます。

{"main/loss": 0.3365242703319358, "main/accuracy": 0.9054337686567164, "validation/main/loss": 0.15602408988472027, "validation/main/accuracy": 0.9532238924050633, "epoch": 1, "iteration": 469, "elapsed_time": 3.0503302490105852}
{"main/loss": 0.13408539906493636, "main/accuracy": 0.9597381396588486, "validation/main/loss": 0.11228864842766448, "validation/main/accuracy": 0.9659810126582279, "epoch": 2, "iteration": 938, "elapsed_time": 6.065310915000737}
{"main/loss": 0.09253230937587809, "main/accuracy": 0.9720815565031983, "validation/main/loss": 0.08980113636890921, "validation/main/accuracy": 0.9706289556962026, "epoch": 3, "iteration": 1407, "elapsed_time": 9.113151438999921}
{"main/loss": 0.06868528947234154, "main/accuracy": 0.9787660256410257, "validation/main/loss": 0.08547733464761625, "validation/main/accuracy": 0.9716178797468354, "epoch": 4, "iteration": 1875, "elapsed_time": 12.126692335004918}
{"main/loss": 0.054074254724929834, "main/accuracy": 0.9828924573560768, "validation/main/loss": 0.07506902210555877, "validation/main/accuracy": 0.9773536392405063, "epoch": 5, "iteration": 2344, "elapsed_time": 15.149620360985864}
...

利用例

MNIST の学習結果を Fluentd + Elasticsearch + Kibana で可視化してみました。全体のコードはこちらにあります。

  • 実行方法
    docker-compose でまとめているので docker-compose up した後にブラウザで実行しているマシンの6501番ポートにアクセスするだけです。

  • Discover
    discover.png

  • Visualize
    visualize.png

※ちなみに可視化に関しては学習に関する操作(スナップショットや学習停止など)も組み込まれている ChainerUI があるのでそちらを使ったほうが良いと思います。

まとめ

  • Trainer のログを JSONL 形式で出力する extension を作成しました
  • 利用例として、ログコレクターの Fluentd と連携させて elasticsearch にログを保存し、kibanaで可視化しました
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3