テクノロジー

pytorchを用いて学習曲線をプロットするwebアプリケーションをつくる(第1回)

自己紹介と開発背景

こんにちは、初めまして。D2Cのビジネスエンジニアリング部 データソリューション リサーチチーム所属、新卒2年目の吉田です。
私はエンジニアとして入社し、1年程のビッグデータの保守、管理業務を経て、2ヶ月前に現在のチームへ異動となりました。
現在はデータサイエンティスト見習いとして、機械学習全般を日々勉強中です。

機械学習の勉強の一環として、kaggleをやっています。
kaggleとは「企業や研究者がデータを投稿し、世界中の統計家やデータ分析者がその最適モデルを競い合う、予測モデリング及び分析手法関連プラットフォーム及びその運営会社」(出典:wikipedia)というもの。
要は、様々な企業や機関がデータとお題を提供し、全世界のデータサイエンティスト達がモデルの精度を競い合うコンペティションです。
kaggle内ではデータサイエンティスト同士の情報交流が盛んで、「先月発表された論文の手法を実装したらモデルの精度が上がったよ」といった最先端の技術を間近に感じ、情報を得ることができるので、とても刺激的で勉強になります。

そんなkaggleのコンペに参加している中で、pytorchというpython向けのDeep Learningライブラリを扱う機会がありました。
今まではkerasを使っていたのですが、それに比べて便利な部分も多々あり、反面kerasのような便利なcallback関数がほとんど用意されていない。
より快適な機械学習ライフを送るためには、学習を補佐してくれる機能、ツールは必須です。
ということで今回は、学習曲線をプロットするwebアプリケーションをつくります。
探してみると、実はそいういったツールは公開されていたりするのですが、今回は自製してみます。

今回のゴール

自身のブラウザから学習曲線が見れるようになる
リアルタイム更新とかページの見栄えとか、追求しだすときりがないのでスモールスタートでいきます。

こんな感じのプロットになります。

環境

開発環境はEC2

Ubuntu 16.04.5
Python 3.6.6
Flask 1.0.2
chart.js 2.7.2

システム概要


今回はwebアプリケーションフレームワークにFlask、グラフの描画にchart.jsを用います。

ディレクトリ構造

 

ログを整形する

salt_iou.shを実行して、salt_compe.log -> salt_iou.log
salt_loss.shを実行して、salt_compe.log -> salt_loss.log
のようにログを整形します。

pytorchのロギングは自身で設計するので、生ログの形式は様々だと思いますが、結果的に整形後のログの形式が下記のようになっていればいいです。
プロット時はこの値を配列形式にして使います。

私の場合は
salt_compe.log(生ログ)

salt_iou.sh あまりスマートな書き方ではありませんが

salt_loss.sh

出力ファイル(salt_loss.log)は下記のようになりますが、後ほどflask内でsplitします

cronでshを定期実行する

学習時間が1epoch3分ほどだったので、5分に1回ほどでスケジューリングしておきます。

Flaskをインストールする

Flaskを構築する

作るファイルは2つだけ。最小構造で実装します。

run.py

templates/index.html
templates配下にhtmlファイルを置くとFlaskが自動的にtemplateとして認識してくれる
run.pyから返された変数はtemplateではjinja2で扱う

起動する

バックグラウンドで実行します。

アクセスしてみる

ブラウザからhttp://ec2-.compute-1.amazonaws.com:8889(ipは伏せます)でアクセス

見れました。

まとめ

ということで、とても簡易的に実装しました。
先にも書いた通り、改善ポイントはたくさんあります。
リアルタイム更新とかページの見栄えとか、はたまた静的ファイルを扱うとなるとFlaskの構造をもう少し複雑にしなければいけません。
それは追い追いやっていきたいと思います。

最後まで読んでくださり、ありがとうございました。

D2C 吉田


関連タグ