【カンファレンス・レポート】TensorFlow Dev Summmit 2019に参加してきました!

メルカリのAI Engineeringでエンジニアリング・マネージャを務めている澁井です。
米国カリフォルニアのGoogleキャンパスで開催されたTensorFlow Dev Summit 2019に参加してきました。
TensorFlow Dev SummitはTensorFlow(以下TF)の開発者向けにGoogleが主催しているカンファレンスで、今年は03/06(水)-03/07(木)に開催されました。

f:id:shibui-yusuke:20190308101719p:plain:w400

特に面白かったセッションをピックアップして紹介します。

TensorFlow 2.0

当日03/06にTF 2.0 alphaがリリースされました。TF 2.0はTFのメジャーアップデートで、昨年くらいから少しずつ情報提供されていました。nightly-releaseで使うこともできましたが、ようやくalphaバージョンが出ました。
2019年3月7日時点では pip install -U --pre tensorflow でインストールして使うことができます。
TensorFlow 1.xとの大きな違いは以下です。

  • ユーザビリティ改善
    • 標準的な機械学習モデルの定義、学習の記述方法はtf.keras ベースになります。
    • eager execution をデフォルトで有効化します。
    • session を使わなくても良くなります。
  • tf.function()autographでPythonコードをコンピュテーション・グラフに変換可能(TensorFlowで実行可能)になります。
  • デバッグ改善
    • エラー時にエラー箇所(コードの行番号)が表示されます(地味に凄い嬉しい)。

モデル開発が tf.keras ベース(High level)になるため、一般的に開発効率は向上すると思います。一方でカスタムレイヤーやLow levelな計算を定義するには、これまでの tf.Variable 等々を使うことができます。独自に計算グラフを定義するには tf.function() を使う方針になると思います。

f:id:shibui-yusuke:20190308102850p:plain:w400

既存のtf1.xからtf2.0への移行にはアップグレード・ツールが提供されます。このツールを使えば、.pyファイルや.ipynbファイルのtfコードをtf2.0に置き換えることができるそうです。

あとTF2.0ではユニコード型の文字列をサポートするようです。日本語の自然言語処理には大きなメリットになります。

TF2.0のリリーススケジュールですが、Alphaリリース(3/6)後、春のうちにRCになり(春っていつまでだ?)、GAは今年中予定、だそうです。

TensorFlow Extend(TFX)

TFXは機械学習のワークフローをEnd to EndでカバーするためのTensorFlowの実装です。

機械学習のモデルは開発からリリースするまでに、以下画像のようなフローが必要になります。機械学習というと学習と評価ばかりがフォーカスされがちですが、実際には更に多くのタスクが必要になります。モデルを開発するにはデータを取得し前処理する必要がありますし、リリースして推論できるようにするにはサーバやデプロイメントが必要になります。TensorFlowも従来はデータの簡単な前処理からモデル定義、学習、評価、推論(TF serving)しか用意されていませんでしたが、より広いフローをカバーするため、TFXが提供開始されています。

f:id:shibui-yusuke:20190308101957p:plain:w400

TFXでは各タスクをコンポーネント化してパイプラインにして連携させます。永続化するデータはmetadataストアに格納し、再利用や管理可能になるようです。パイプラインの途中でエラーになった場合、以前の処理データを再利用できる、というメリットがあります。

metadataストアのメリットは前処理や学習の履歴を保存しておけることで、小さい変更であれば履歴を使って時間短縮できること、らしいです。TensorFlowに依存する(Schikit-learnやPytorchで使えるのか不明)のが難点かもしれませんが、他のライブラリと共存できればすごい便利なツールになりそうです。

f:id:shibui-yusuke:20190308102133p:plain:w400

TFXはワークショップも催されていました。1時間程度で、AirflowでTFXライブラリを使ってみる、というものでした。GUIでTFXのフローを進捗確認できて、とても便利そうでした。

メルカリでは機械学習のワークフローを実行する基盤を独自開発していますが、TFXはとても参考になりました。

TensorFlow.js

TensorFlowのJavaScript版です。version1.0がリリースされ、今回のデブサミでもユーザ層の厚さや熱心さが伝わってきました。

モデルの書き方はKerasベースです。React Nativeのようにコンポーネントを組み込めるような書き方になるのでしょうかね?

f:id:shibui-yusuke:20190308103613p:plain:w400

TensorFlow.jsはブラウザ(従来のjs)、サーバ(Node.js)、デスクトップ(Electron)をカバーしており、マルチプラットフォームで実行できることが最大の強みだと思います。エッジ推論もそうですが、ブラウザやデスクトップで学習、推論できるなら、データをサーバに送るコストやセキュリティを気にする必要がなくなりますし、今後は機械学習をjsで開発する時代がくるのでは!?という熱量も感じられました。

Magenta StudioExperiments with Googleのようにtf.jsを用いてウェブ経由で多様なAIサービスを提供できていますし、今後さらに盛り上がっていくと思います。

くわえて、PythonのTensorFlowで開発したモデルをsaved_modelを使ってtf.jsで扱うことができるらしいです。モデル開発はPythonエンジニア(MLエンジニア)が担当し、推論やウェブサービス開発をJSエンジニアが担う、という役割分担も可能になると思います。

what-if-tool

セッションはなかったですが、ブース展示していたwhat-if-toolは便利そうでした。what-if-toolはTensorboardの追加機能で、学習済みモデルを評価するツールです。

以下画像のように、2値分類で推論結果の位置づけを可視化したり、特定のパラメータを調整して推論したりすることができます。

f:id:shibui-yusuke:20190308100708p:plain:w400

検証データやテストデータから漏れてしまっているパラメータを設定して推論することができるので、機械学習の境界値分析が可能になると期待しています。

機械学習のモデルをテストデータで評価することが多いですが、what-if-tool では値を適宜変更して推論結果を試してみることができます。推論時にテストデータに存在しない値が入力されることは頻繁に発生することなので、what-if-tool でモデルの品質を向上できる可能性があると思いました。

使い方はこちらでブラウザから試すことができます。

まとめ

とても楽しい2日間でした。
TensorFlowで機械学習を実用化するためのワークフローをエンドツーエンドでカバーしようという戦略が伺えました。実務ですぐ使えそうなツールでは what-if-tool が便利そうでした。TensorFlow.jsも機械学習を実行するプラットフォームをウェブ世界に広げる橋頭堡になると思います。

私は3年前にKerasでディープラーニングを学び始めたのですが、TensorFlowの本流がKerasになるのは嬉しい限りです。そして会場ではKeras作者のFrancois Cholletさんと一緒に写真撮影することができました。

f:id:shibui-yusuke:20190308102332p:plain:w400

あと秘密ですが、Apache Beamがさり気なくPython3.5以上をサポート開始していまして、これを教えてもらえたことも大きな収穫でした。