WEARにおけるGAE(Google App Engine)を用いた機械学習アプリケーションの運用について

B40e32f9f2b4cd73d922cb58ed998ba8?s=47 Trs
July 25, 2019

WEARにおけるGAE(Google App Engine)を用いた機械学習アプリケーションの運用について

B40e32f9f2b4cd73d922cb58ed998ba8?s=128

Trs

July 25, 2019
Tweet

Transcript

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

    Copyright © ZOZO Technologies, Inc.
  2. © ZOZO Technologies, Inc. 株式会社ZOZOテクノロジーズ
 ML Opsチーム
 平田 拓也
 twitter: @TrsNium


    
 2018年 ZOZOテクノロジーズ中途入社
 ML Opsチームにて、アプリケーションの最適化からイ ンフラの整備までをやっています。
 2
  3. © ZOZO Technologies, Inc. 本日のアジェンダ • WEARに導入されたパーソナライズ機能の紹介 • パーソナライズ機能全体のインフラ構成 ◦

    GAEを使ったアプリケーション基盤の構成 ◦ 機械学習を継続的に行うためのパイプライン構成 3
  4. © ZOZO Technologies, Inc. https://wear.jp/
 ・ 日本最大級のファッションコーディネートアプリ
 ・ 1,300万ダウンロード突破、コーディネート投稿総数は900万件 


    以上(ともに2019年5月末時点)
 ・ 全世界(App Store / Google Playが利用可能な全ての国)で
 ダウンロードが可能
 ・ 200万人以上のフォロワーを持つユーザー(WEARISTA)も誕生
 4
  5. © ZOZO Technologies, Inc. パーソナライズ機能とは WEARのトップ画面で、その人の興味関心によってオス スメされるコーディネートが出し分けられる 5

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

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

  8. © ZOZO Technologies, Inc. 全体のインフラ構成 モデル更新& デプロイパイプライン アプリケーション 機 械

    学 習 モ デ ル 定 義 8 APIのエンドポイント 機械学習モデル定義 APIのエンドポイント アプリケーションコード
  9. © ZOZO Technologies, Inc. 9 Google App Engineを使ったアプリ ケーション基盤の構成

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

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

  12. © ZOZO Technologies, Inc. なぜGKE, CloudFunctionsではなくGAEなのか 12 GKE Cloud Functions

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

    GAE 学習コスト 高い 低い 低い 運用コスト 高い 低い 低い 柔軟性 高い 低い 低い GPU? 利用可 利用不可 利用不可 Docker? 利用可 利用不可 利用可 Docker環境が既にあった + 運用コストを低くしたい
  14. © ZOZO Technologies, Inc. 14 GAEって何だっけ • フルマネージドなPlatform as a

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

  15. © 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
  16. © 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のロードも必要
  17. © 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
  18. © ZOZO Technologies, Inc. 18 GAEのチューニングパラメータ アプリケーションのパフォーマンス関する主なチューニングパラメータ
 
 パラメータ名 概要

    instance_class(Standard) or resources(Flexible) 必要なコンピュータリソース(CPUやメモリ)要件を定義する automatic_scaling スケーリングポリシーを決める 例. CPU使用率50%以上でスケールアウト チューニングパラメータが少なくて楽

  19. © ZOZO Technologies, Inc. 19 GAEのLogging Stackdriver, New Relic, Datadogからでも収集可能


    • ログ収集に実装コストをかけたくない
 • ユーザーのリクエストログなんかも後で分析できるようにしたいよね?
 
 
 
 
 Stackdriver Loggingに

  20. © 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で取得できるログ一覧
 

  21. © ZOZO Technologies, Inc. Stackdriver, New Relic, Datadogで収集可能
 • リソースの使用率


    • アプリケーションのレイテンシのトレーシング
 • API の外形監視
 • アプリケーション外のレイテンシのトレーシング
 
 
 NewRelicに
 
 21 GAEの監視
  22. © ZOZO Technologies, Inc. 22 New Relic APM • リソースの使用率(CPU,

    メインメモリ) • HTTPリクエストのレスポンスタイム • 分間のHTTPリクエスト数 • 簡易なトレーシングツール New Relic Agentを使ったアプリケーションの監視 
 

  23. © ZOZO Technologies, Inc. 23 New Relic Synthetics 以下の項目を監視 •

    アプリケーションの死活監視(HTTP Status) • HTTPリクエストのトレーシング 他にも下記のことが可能 • ブラウザレンダリングした時のレイテンシ • 仮想ブラウザを用いたWebページのテスト [参考] https://newrelic.nissho-ele.co.jp/products/newrelic-synthetics
  24. © ZOZO Technologies, Inc. 24 GAE Flexible Environmentを使ってみて 利点 •

    開発コストが低い ◦ ソースコードと必要なライブラリなどさえ分かれば、実行環境をすぐ に用意できる • 運用が楽 ◦ アプリケーションを手放しで運用できるようになった 欠点 • Flexibleを使うとアプリケーションのスケールに時間がかかる
  25. © ZOZO Technologies, Inc. 機械学習モデルの学習/デプロイパイライン 25

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

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

    • 学習で作成したモデルをWEARのアプリケーションに反映
  28. © 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 毎日発火!!
  29. © ZOZO Technologies, Inc. 機械学習のデプロイパイプライン 1. デプロイの 開始 CircleCI Cloud

    Storage 2. モデルをコ ピー CircleCI 3. GAEへデ プロイ CircleCI App Engine 29
  30. © ZOZO Technologies, Inc. 30 • GAEは運用コストが低い ◦ チューニングパラメータが少ない ◦

    デプロイが簡単 • GPUを使いたくなったらGKE, Cloud Runなどを検討しよう まとめ
  31. None