Slide 1

Slide 1 text

ReproのAI機能を支える技術 Repro AI Labs. 鎌田武志 (@take4_k)

Slide 2

Slide 2 text

自己紹介 ● 鎌田武志 (@take4_k) ● 2018 年 6 月 Repro 入社 ● Repro AI Labs 所属 ● WEB アプリケーションエンジニア (!?)

Slide 3

Slide 3 text

今日話すこと ● Repro の ML 基盤について ● 最速で AI 機能をリリースする技術からのリリース後安定化させ るまでの軌跡 ● アルゴリズムの話は出てきません

Slide 4

Slide 4 text

Reproとは

Slide 5

Slide 5 text

Reproでできること ● アナリティクス ( 分析 ) ● マーケティング ○ プッシュ配信 ○ アプリ内メッセージ ○ Web メッセージ

Slide 6

Slide 6 text

Smart Audience™ ● Repro 初の AI 機能 ● キャンペーン対象ユーザーを自動予測 ○ 現在はチャーン予測 ( 離脱しそうなユーザー ) に対応

Slide 7

Slide 7 text

Repro AI Labs. ● データ分析 ● PoC ● ML Ops ● Repro 本体への機能追加

Slide 8

Slide 8 text

アーキテクチャ 最近の CTO の発表もご参照ください

Slide 9

Slide 9 text

ML基盤 ● 予測結果を S3 に転送してクラウドの壁を超える ● 本体とはなるべく粗結合にする

Slide 10

Slide 10 text

Composer(Airflow) ● フルマネージドワークフローオーケストレーションサービス ● GKE 上に Airflow を構築してくれる ● Python で DAG( 有向非巡回グラフ ) を使いワークフローを定義 ○ DAG ファイルは GCS に置くだけ ● スケジュール管理 ● 様々な Operator ● ( UI わかりずらいけど他よりまだマシな気がする)

Slide 11

Slide 11 text

DAG

Slide 12

Slide 12 text

Dataproc ● Spark & Hadoop クラスタのフルマネージドサービス ● GCS コネクタ ● Pyspark など様々な言語に対応 ● Job API がある

Slide 13

Slide 13 text

Datalab ● GCE 上にデータ分析、可視化、 ML のための環境を構築してく れるサービス ● Notebook 形式で使いやすい ● BQ 、 GCS などと簡単に接続できる ● Docker 化されている ● Repro では PoC 用

Slide 14

Slide 14 text

最速リリースのポイント ● 構築が楽なサービスを使った ● Repro 本体の既存の仕組みに乗れた

Slide 15

Slide 15 text

最速でリリースしたツケ ● 前処理・学習・予測全て 1 スクリプト 1 タスクで実行 ○ 途中でコケた時に全て再実行 … ● 処理時間が線形に増加してスケールできない ○ 一時期は 7 時間かかっていた … ● 補足できてないエラーがあった ○ コケていたことに気付かずインシデントに …

Slide 16

Slide 16 text

Dataprocアンチパターン ● Jupyter notebook も scikit-learn もインストールできる ● やろうと思えば ML バッチ処理に使える?! ● でもやらないほうがよい ○ Python 側でマシンリソース使いすぎた時に Spark の Job が落 ちる

Slide 17

Slide 17 text

改善できた理由 ● 今後の AI 機能開発を見据えたチーム増員 ○ アプリケーション ○ インフラ ● AI エンジニアに不足しがちな視点を補完 ( きっとアルゴリズムや 予測精度で頭いっぱいですよね ) ○ システム負荷 ○ 障害対応 ■ 起き辛いコードを書くのも含む

Slide 18

Slide 18 text

推測するな 計測せよ ● 適切にログを追加 ● 通信に無駄に時間がかかっていたのがわかって改善につな がった ○ Spark のキャッシュを使った ○ 転送ファイル圧縮した

Slide 19

Slide 19 text

技術スタックの理解を深める ● 知らないと使えない ● 知ることで監視設定など追加できた ○ Stackdriver Monitoring ■ VM とコンテナの死活監視 ○ Airflow ■ Timeout 設定 ■ Retry の設定

Slide 20

Slide 20 text

雰囲気で運用をやらない ● チームで SLO 設定 ○ エラーだから ASAP で対応→心の余裕 ● Redash のダッシュボード作成 ○ 定期的な振り返りを実施

Slide 21

Slide 21 text

リファクタリング ● 前処理・学習・予測を分割した ● 再実行しやすくなった ● `SocketTimeoutException` がでなくなった

Slide 22

Slide 22 text

まとめ ● アルゴリズムや予測精度だけでなくシステム開発の基本が改め て重要 ● メンバーで補完しあえるチームを作ろう

Slide 23

Slide 23 text

今後やっていきたいこと ● ML 基盤まだまだ伸びしろある ○ Dataproc から ML を剥がしたい ○ もっと良い感じの PoC 環境を作りたい ● もっと AI 機能を作る ○ 課金ユーザーを予測 ○ ユーザー毎の最適なプッシュ配信時間を予測

Slide 24

Slide 24 text

We are hiring!! https://www.wantedly.com/companies/repro/projects