Slide 1

Slide 1 text

WEARにおけるGAE(Google App Engine)を用いた 機械学習アプリケーションの運用について 
 株式会社ZOZOテクノロジーズ
 ML Opsチーム
 平田 拓也 Copyright © ZOZO Technologies, Inc.

Slide 2

Slide 2 text

© ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 ML Opsチーム
 平田 拓也
 twitter: @TrsNium
 
 2018年 ZOZOテクノロジーズ中途入社
 ML Opsチームにて、アプリケーションの最適化からイ ンフラの整備までをやっています。
 2

Slide 3

Slide 3 text

© ZOZO Technologies, Inc. 本日のアジェンダ ● WEARに導入されたパーソナライズ機能の紹介 ● パーソナライズ機能全体のインフラ構成 ○ GAEを使ったアプリケーション基盤の構成 ○ 機械学習を継続的に行うためのパイプライン構成 3

Slide 4

Slide 4 text

© ZOZO Technologies, Inc. https://wear.jp/
 ・ 日本最大級のファッションコーディネートアプリ
 ・ 1,300万ダウンロード突破、コーディネート投稿総数は900万件 
 以上(ともに2019年5月末時点)
 ・ 全世界(App Store / Google Playが利用可能な全ての国)で
 ダウンロードが可能
 ・ 200万人以上のフォロワーを持つユーザー(WEARISTA)も誕生
 4

Slide 5

Slide 5 text

© ZOZO Technologies, Inc. パーソナライズ機能とは WEARのトップ画面で、その人の興味関心によってオス スメされるコーディネートが出し分けられる 5

Slide 6

Slide 6 text

© ZOZO Technologies, Inc. パーソナライズ機能を導入したことによる効果 A/Bテストで検証 パーソナライズされていないグループと比較して売 り上げに2割ほど貢献 6

Slide 7

Slide 7 text

© ZOZO Technologies, Inc. 全体のインフラ構成 7 APIのエンドポイント 機械学習モデル定義 APIのエンドポイント アプリケーションコード

Slide 8

Slide 8 text

© ZOZO Technologies, Inc. 全体のインフラ構成 モデル更新& デプロイパイプライン アプリケーション 機 械 学 習 モ デ ル 定 義 8 APIのエンドポイント 機械学習モデル定義 APIのエンドポイント アプリケーションコード

Slide 9

Slide 9 text

© ZOZO Technologies, Inc. 9 Google App Engineを使ったアプリ ケーション基盤の構成

Slide 10

Slide 10 text

© ZOZO Technologies, Inc. 10 アプリケーションの構成 アプリケーション APIのエンドポイント 機械学習モデル定義

Slide 11

Slide 11 text

© ZOZO Technologies, Inc. なぜGAEを選んだのか ● 運用を楽にしたい GKE, CloudFunctionsではダメだったのか?
 11

Slide 12

Slide 12 text

© ZOZO Technologies, Inc. なぜGKE, CloudFunctionsではなくGAEなのか 12 GKE Cloud Functions GAE 学習コスト 高い 低い 低い 運用コスト 高い 低い 低い 柔軟性 高い 低い 低い GPU? 利用可 利用不可 利用不可 Docker? 利用可 利用不可 利用可

Slide 13

Slide 13 text

© ZOZO Technologies, Inc. なぜGKE, CloudFunctionsではなくGAEなのか 13 GKE Cloud Functions GAE 学習コスト 高い 低い 低い 運用コスト 高い 低い 低い 柔軟性 高い 低い 低い GPU? 利用可 利用不可 利用不可 Docker? 利用可 利用不可 利用可 Docker環境が既にあった + 運用コストを低くしたい

Slide 14

Slide 14 text

© ZOZO Technologies, Inc. 14 GAEって何だっけ ● フルマネージドなPlatform as a Service(PaaS)
 ○ サーバーの環境構築や面倒を見る必要がない
 ● Node.js, Python, Rubyなどの言語に対応
 ○ 対応していない場合も「カスタムランタイム」をDocker上で使用可能
 ● アプリケーションのバージョニング、開発、テスト環境を簡単に構築できる
 ● 受信したトラフィックを分割してA/Bテストみたいなのもできる
 ● Stackdriverを用いたモニタリングやロギングが可能


Slide 15

Slide 15 text

© ZOZO Technologies, Inc. 15 GAEの環境 Standard Flexible (Go, Python, ..) Flexible (Custom Runtime) 実行環境 サンドボックス Compute Engine Compute Engine ランタイムの自由度 ✗ ▲ ◯ リソースの制限 有 有(Standardより緩い) 有(Standardより緩い) スケーリングの速さ 早い(数十 ms) 場合によっては遅い(数分) 場合によっては遅い(数分) [参考] https://cloud.google.com/appengine/docs/flexible/java/flexible-for-standard-users?hl=ja

Slide 16

Slide 16 text

© ZOZO Technologies, Inc. 16 GAEの環境 Standard Flexible (Go, Python, ..) Flexible (Custom Runtime) 実行環境 サンドボックス Compute Engine Compute Engine ランタイムの自由度 ✗ ▲ ◯ リソースの制限 有 有(Standardより緩い) 有(Standardより緩い) スケーリングの速さ 早い(数十 ms) 場合によっては遅い(数分) 場合によっては遅い(数分) [参考] https://cloud.google.com/appengine/docs/flexible/java/flexible-for-standard-users?hl=ja Docker環境があった + Modelのロードも必要

Slide 17

Slide 17 text

© ZOZO Technologies, Inc. 17 GAEのデプロイ 各環境で必要なファイル Standard Environment 構成ファイル(app.yaml, dispatch.yaml,..)とソースファイル Flexible (任意処理系) Environment 構成ファイルとソースファイルとライブラリに関するファイル(requirements.txt) Flexible Custom Runtime Environment 構成ファイルとDockerfile DockerfileにADD句でソースファイルを含めるようにする $ gcloud app deploy

Slide 18

Slide 18 text

© ZOZO Technologies, Inc. 18 GAEのチューニングパラメータ アプリケーションのパフォーマンス関する主なチューニングパラメータ
 
 パラメータ名 概要 instance_class(Standard) or resources(Flexible) 必要なコンピュータリソース(CPUやメモリ)要件を定義する automatic_scaling スケーリングポリシーを決める 例. CPU使用率50%以上でスケールアウト チューニングパラメータが少なくて楽


Slide 19

Slide 19 text

© ZOZO Technologies, Inc. 19 GAEのLogging Stackdriver, New Relic, Datadogからでも収集可能
 ● ログ収集に実装コストをかけたくない
 ● ユーザーのリクエストログなんかも後で分析できるようにしたいよね?
 
 
 
 
 Stackdriver Loggingに


Slide 20

Slide 20 text

© ZOZO Technologies, Inc. 20 GAEのStackdriver Logging [参考] https://cloud.google.com/appengine/articles/logging リクエストログ アプリケーションに到達したリクエストのログ アプリログ App Engine内のアプリケーションログ(stdout) ランタイムログ ロギングエージェントからのログ(e.g., 例外スタックトレース) Flexible リクエストログ アプリケーションに到達したリクエストのログ アプリログ App logs consist of additional app information included in the request logs. サードパーティパッ ケージログ nginxなどのサードパーティ製のログ Standard 各環境のStackdriverで取得できるログ一覧
 


Slide 21

Slide 21 text

© ZOZO Technologies, Inc. Stackdriver, New Relic, Datadogで収集可能
 ● リソースの使用率
 ● アプリケーションのレイテンシのトレーシング
 ● API の外形監視
 ● アプリケーション外のレイテンシのトレーシング
 
 
 NewRelicに
 
 21 GAEの監視

Slide 22

Slide 22 text

© ZOZO Technologies, Inc. 22 New Relic APM ● リソースの使用率(CPU, メインメモリ) ● HTTPリクエストのレスポンスタイム ● 分間のHTTPリクエスト数 ● 簡易なトレーシングツール New Relic Agentを使ったアプリケーションの監視 
 


Slide 23

Slide 23 text

© ZOZO Technologies, Inc. 23 New Relic Synthetics 以下の項目を監視 ● アプリケーションの死活監視(HTTP Status) ● HTTPリクエストのトレーシング 他にも下記のことが可能 ● ブラウザレンダリングした時のレイテンシ ● 仮想ブラウザを用いたWebページのテスト [参考] https://newrelic.nissho-ele.co.jp/products/newrelic-synthetics

Slide 24

Slide 24 text

© ZOZO Technologies, Inc. 24 GAE Flexible Environmentを使ってみて 利点 ● 開発コストが低い ○ ソースコードと必要なライブラリなどさえ分かれば、実行環境をすぐ に用意できる ● 運用が楽 ○ アプリケーションを手放しで運用できるようになった 欠点 ● Flexibleを使うとアプリケーションのスケールに時間がかかる

Slide 25

Slide 25 text

© ZOZO Technologies, Inc. 機械学習モデルの学習/デプロイパイライン 25

Slide 26

Slide 26 text

© ZOZO Technologies, Inc. 機械学習モデルの学習/デプロイパイプラインの構成 モデル更新& デプロイパイプライン 26 APIのエンドポイント 機械学習モデル定義 アプリケーションコード

Slide 27

Slide 27 text

© ZOZO Technologies, Inc. 27 機械学習に必要なパイプライン ● WEARのコーデの情報を日々取り込んでモデルを更新 ■ SNSということもあり、データの鮮度は重要 ● 学習で作成したモデルをWEARのアプリケーションに反映

Slide 28

Slide 28 text

© ZOZO Technologies, Inc. 28 機械学習の学習パイプライン 1. digdagで jobを実行 Cron Job 2. Compute Engine上で 学習スクリプ トのキック 3. 学習デー タの作成 CircleCI 4. モデルの 学習 digdag on CircleCI 5. モデルを GCSへコピー BigQuery Compute Engine Compute Engine Compute Engine Cloud Storage 6. GCSへモ デルがコピー されるまで待 つ digdag on CircleCI 7. デプロイの 開始 CircleCI 毎日発火!!

Slide 29

Slide 29 text

© ZOZO Technologies, Inc. 機械学習のデプロイパイプライン 1. デプロイの 開始 CircleCI Cloud Storage 2. モデルをコ ピー CircleCI 3. GAEへデ プロイ CircleCI App Engine 29

Slide 30

Slide 30 text

© ZOZO Technologies, Inc. 30 ● GAEは運用コストが低い ○ チューニングパラメータが少ない ○ デプロイが簡単 ● GPUを使いたくなったらGKE, Cloud Runなどを検討しよう まとめ

Slide 31

Slide 31 text

No content