MLアプリケーション短期開発 on GKE & GCP

作成
2019-12-29

概要

MLアプリケーション短期開発 on GKE & GCP

DeNA AIシステム部では様々な規模の機械学習プロジェクトを手掛けています。 使用技術も様々ですが、今回極めて短期かつ軽量の機械学習プロジェクトをなぜGKEおよびGCP各サービスを想定して開発することにしたか、技術選定やプロジェクトの進め方を含めてご紹介します。

スピーカー

@mazgi(DeNA)

スライド

https://speakerdeck.com/mazgi/fast-development-for-ml-web-service-on-gke-and-gcp

内容

自己紹介

  • ML Ops

プロジェクト概要

  • 概要
    • 1日DeNA学校
      • 未来のエンジニアに必要なスキルを1日で学ぶ
      • mazgiさんが関わったのは1コマのAI入門
    • 要件
      • iPadでうごく
        • ネイティブをかける人はいなかったのでWeb
      • 小学生が操作できるUI
        • 文字入力
      • 個人情報保護
        • 色んな写真
  • スケジュール
    • 10月半ばぐらいからスタート
    • 本番は12/15
    • ぴったり2ヶ月
  • チーム構成
    • データサイエンティスト・プロジェクトリーダー
    • AI研究開発エンジニア
    • AI研究開発エンジニア、ML Web API開発担当
    • AI研究開発エンジニア、資料作成と司会担当
    • DevOps 残り全部
    • 基本的に5人が兼務ついている
    • 工数はだいたい0.1
    • 共通言語はPythonと日本語
    • 本業はWebサービス開発ではないため、Deployとはというところからスタートした
  • マイゴール
    • 非同期開発(メンバー同士で会う機会がない)
      • 全員が兼務
      • 出張
    • 短期間でそこそこ正しい技術選定
      • 試行錯誤している時間がない
      • これならデキるという確証が必要
    • せっかくならチームの身になるものにしたい

システム構成

  • FrontEnd Backends For Frontedns
    • Front: TypeScript + Next.js + React.js + GraphQL.js + Material UI
    • Frontend といいつつSSRまで
    • BFF: Type Script + Express + TYpeGraphQL + TypeORM
      • Webをやったことがないひとにはいって見せても分からないだろうと思ったので、サンプルを見せた
      • 形のあるもの
  • Machine Learning Web API
    • Python 3 + Flask + Flask-GraphQL + Pytorch + CUDA 10

    • BFFからGraphQL Mutationを受けて学習・推論を行う

    • 画像はGCSで

    • GCEインスタンスで実装

    • GEKを中心にGCPのみで

    • GCPプロジェクトはProduction Sandboxの二つ

      • 個人情報を扱うためのGCPプロジェクト自体分離
      • 公開イベントだが情報を垂れ流していいわけではない
    • Cloud Armorで接続元制限 ←なんだ!?

    • ProvisioningはTerraform

    • DeployはKustomize + kubectrl

プロジェクトの課題

  • 本番の技術選定
    • インスタンスを管理したくなかった
    • GAEやGCFでもよかったが、チームメンバーがWeb開発経験がなかったので大変になるだろうと思った。DockerはMLの人でも使えるのでデプロイを教えるだけに止まった
    • なんでGKE?
      • kubernetesのノードを管理したくなかった
      • 部内的にlasSといえばGCP or AWS
      • Cloud ArmorでIPベースの接続制御可能
  • 開発環境特有
    • 全員Mac
    • Docker for Macは重たかったのでLinuxマシンを用意して進めた
    • TSでテスト工数を減らした
  • 各種レイヤー
    • BFF:Backend For Frontend
    • GraphQL:GitHubがExplorerできたので使えた
    • Docker
      • 本番と開発の乖離

まとめ

  • 非同期開発はモノがあったら議論しやすい
  • Slackをもともと使ってたので問題なかった
  • 使用言語を増やさなかったかのは正解だった
  • 次はGPUもコンテナで動かしたい

感想

  • Cloud Armorが気になった