Slide 1

Slide 1 text

Google Cloud ML Engine に浸かってみる @yudeayase

Slide 2

Slide 2 text

真の題名

Slide 3

Slide 3 text

フルマネージドで 楽したい! @yudeayase

Slide 4

Slide 4 text

機械学習予測側のお話

Slide 5

Slide 5 text

予測サーバーの運用を 楽にしようと思いました

Slide 6

Slide 6 text

何を作っていたのか? - 機械学習を使った広告効果の予測用API - 予測用のパラメーターをインプットとして予測値を返す - なるべくわかりやすいインターフェース - リクエストが数字の羅列とかしんどいよね

Slide 7

Slide 7 text

Our System 作っていた機械学習API Flask on GKE 予測モデル on ML Engine Clients サービスのバックエンド or フロントエンドなど…

Slide 8

Slide 8 text

Our System 作っていた機械学習API Flask on GKE 予測モデル on ML Engine Clients サービスのバックエンド or フロントエンドなど… 前処理 & 予測値整形

Slide 9

Slide 9 text

Our System 作っていた機械学習API Flask on GKE 予測モデル on ML Engine Clients サービスのバックエンド or フロントエンドなど… 予測を実際に行うAPI

Slide 10

Slide 10 text

What is ML Engine? モデルの学習からそれを用いた予測サーバーを1サービスで構築可能

Slide 11

Slide 11 text

What is ML Engine? - モデルの学習からデプロイまで可能 - デプロイしたモデルですぐにオンライン予測可能 - モデルが重い場合がバッチ予測もできる

Slide 12

Slide 12 text

ん?

Slide 13

Slide 13 text

What is ML Engine? - モデルの学習からデプロイまで可能 - デプロイしたモデルですぐにオンライン予測可能 - モデルが重い場合がバッチ予測もできる

Slide 14

Slide 14 text

No content

Slide 15

Slide 15 text

フルマネージドサーバーレス環境

Slide 16

Slide 16 text

Our System 作っていた機械学習API Flask on GKE 予測モデル on ML Engine Clients サービスのバックエンド or フロントエンドなど… こいつの面倒は みないといけない!

Slide 17

Slide 17 text

前処理という業〜カルマ〜 { “年齢”: 34, “性別”: 男, “媒体”: “Twitter”, “画像”: base64... ... } { “年齢”: [0, 0, 1, 0, 0, 0, 0], “性別”: [1, 0], “媒体”: [1, 0 ,0, 0], “画像”: [[255.0, 255.0, ...]] ... } モデルへ

Slide 18

Slide 18 text

前処理という業〜カルマ〜 モデルへ この変換をFlaskアプリケーションが担う { “年齢”: 34, “性別”: 男, “媒体”: “Twitter”, “画像”: base64... ... } { “年齢”: [0, 0, 1, 0, 0, 0, 0], “性別”: [1, 0], “媒体”: [1, 0 ,0, 0], “画像”: [[255.0, 255.0, ...]] ... }

Slide 19

Slide 19 text

前処理という業〜カルマ〜 モデルへ この変換をFlaskアプリケーションが担う ほとんどこのために1アプリケーション構築している { “年齢”: 34, “性別”: 男, “媒体”: “Twitter”, “画像”: base64... ... } { “年齢”: [0, 0, 1, 0, 0, 0, 0], “性別”: [1, 0], “媒体”: [1, 0 ,0, 0], “画像”: [[255.0, 255.0, ...]] ... }

Slide 20

Slide 20 text

Our System 作っていた機械学習API Flask on GKE 予測モデル on ML Engine Clients サービスのバックエンド or フロントエンドなど… こいつの世話分、 損してない?

Slide 21

Slide 21 text

せっかくのマネージドサービスを 使い倒してなくない?

Slide 22

Slide 22 text

どうすればいいのか?

Slide 23

Slide 23 text

前処理を含めて「モデル」をつくる 前処理 予測モデル

Slide 24

Slide 24 text

前処理を含めて「モデル」をつくる 前処理 予測モデル

Slide 25

Slide 25 text

実際できるの?

Slide 26

Slide 26 text

カテゴリ値の”翻訳” { “年齢”: 34, “性別”: 男, “媒体”: “Twitter”, ... } { “年齢”: [0, 0, 1, 0, 0, 0, 0], “性別”: [1, 0], “媒体”: [1, 0 ,0, 0], ... } 人間の読めるものから、モデルの読めるものへの変換 One-hot or Multi-hot encoding

Slide 27

Slide 27 text

Feature columns

Slide 28

Slide 28 text

くわしくは https://www.tensorflow.org/guide/feature_columns

Slide 29

Slide 29 text

画像の”翻訳” { “画像”: base64... ... } { “画像”: [[255.0, 255.0, ...]] ... } JSONで画像情報の実態を送る場合base64でエンコードを送ることがある デコード & 数値化が必須

Slide 30

Slide 30 text

モデルのserving input

Slide 31

Slide 31 text

モデルのserving input 学習済みモデル serving input - 画像のデコード - 画像の数値化 - 正規化 固めてML Engineに乗せられるモデルを出力

Slide 32

Slide 32 text

All in one model 学習済みモデル 数値input エンコーディングinput 画像input

Slide 33

Slide 33 text

Our System フルマネージド機械学習API Flask on GKE 予測モデル on ML Engine Clients サービスのバックエンド or フロントエンドなど…

Slide 34

Slide 34 text

Our System フルマネージド機械学習API 予測モデル on ML Engine Clients サービスのバックエンド or フロントエンドなど…

Slide 35

Slide 35 text

世話をするモジュールが減った!

Slide 36

Slide 36 text

Happy!

Slide 37

Slide 37 text

本当にハッピーなのか? - モデルにくっつける演算はTensorFlowにベタベタ - ML Engineに依存ベタベタ - AWS SageMakerもある - GCPに依存しまくってていいのかの判断 - TensorFlow2.0 - 朗報はKerasでもfeature columnsが使える - Serving inputは確実に変更が必要

Slide 38

Slide 38 text

Thank you !