Upgrade to Pro — share decks privately, control downloads, hide ads and more …

機械学習基盤 Hekatoncheir の取り組み【DeNA TechCon 2021】/techcon2021-12

DeNA_Tech
March 03, 2021

機械学習基盤 Hekatoncheir の取り組み【DeNA TechCon 2021】/techcon2021-12

DeNA には優秀な Kaggler が多く在籍しており、機械学習の課題発見や高精度なモデリングに大きな強みを持っています。一方で機械学習モデルのプロダクション化は Kaggler の開発サイクルと比べて時間がかかりがちです。

そこで、DeNA では Kaggler が自身の得意分野に注力しつつ自然と production ready なものが出来上がるように「Hekatoncheir」という機械学習基盤を作成しました。Hekatoncheir は Google Cloud Platform の AI Platform など既存のツールを組合せて、コンペティションという Kaggle like な形式で事業課題を解決する仕組として開発・運用されています。

コンペティションという形で、コンペ参加者が担う純粋な機械学習アルゴリズムの実装とコンペ主催者が担う周辺タスクの境界を明確にしつつ、両者のコミュニケーションコストを削減します。結果として開発サイクルが早まり、実サービスへより気軽に機械学習を導入できるようになりました。

本発表では、Hekatoncheir が作られた背景や技術選定・アーキテクチャについて解説します。また、活用例として Pococha などの実サービスで、プロダクト投入までのリードタイムを短縮しつつ高頻度でのモデルの更新を実現している事例についても紹介します。

DeNA_Tech

March 03, 2021
Tweet

More Decks by DeNA_Tech

Other Decks in Technology

Transcript

  1. 今日の話 DeNA が Google Cloud Platform 上に構築している 社内横断の機械学習基盤 Hekatoncheir (Hekaton)

    の話 • どんな課題を解決したかったのか • Hekaton を構成する技術要素 • 実際の使い方の簡単な紹介 • 活用事例
  2. DeNA の多岐に渡る事業 多くの事業で機械学習などの技術が活用されている • ゲーム • オートモーティブ • スポーツ ◦

    横浜 DeNA ベイスターズ • ソーシャルライブ ◦ Pococha • 他社との協業 ◦ 関西電力様との燃料運用最適化
  3. Kaggle とは 機械学習モデルの精度を競うコンペティションのプラットフォーム • DeNA では Kaggle 社内ランク制度が導入されている ◦ 世界トップクラスの

    Kaggler が数多く在籍 • Kaggle Grandmaster / Master どちらも 国内最多に!!(自社調べ) https://dena.com/jp/press/004688
  4. Kaggler の能力を活かす 課題発見 問題設計 モデル開発 プロダクション投入 Kaggler の強み • モデルの精度が高く開発サイクルも非常に速い

    ◦ モデル開発後のプロダクション投入を いかに簡単にできるかが勝負 • 機械学習の課題発見と問題設計も得意 ◦ 多くのコンペを見た経験を設計に活かせる Kaggler の作ったモデルをシームレスにプロダクション投 入できるような基盤として Hekaton プロジェクトが始動
  5. 一般的なコンペと実務の違い 普通のコンペ • 与えられたデータに対して 推論結果の CSV を提出 • 学習と推論に使うデータは固定 実務の機械学習

    • システム内で呼び出されるコードや学 習済みモデルを提出 • 新しいデータを使ったモデルの 継続的な改善が必要 • 学習済みモデルの先の成果物がある ◦ たとえば推論サーバー用の Docker イメージなど ※ 最近はコンペ側も多様で、この限りではない
  6. Hekaton Hekaton の全体像 Training Evaluation Artifact submit update dataset Data

    Pipeline • Hekaton のパイプラインは学習・評価・成果物生成の 3 つのステップで構成 ◦ 成果物はたとえば API サーバー用の Docker イメージなど • パイプラインが実行されるトリガーは次の 2 つ: ◦ コンペ参加者のコード submit ◦ データセットの更新
  7. Hekaton を構成する技術要素 (1/2) Google Cloud Platform の full managed なサービスを繋ぐ形

    処理の繋ぎ方: Event Full managed なサービスに 処理を委ねる Cloud Pub/Sub • 非同期メッセージングサービス Cloud Functions • Pub/Sub などをトリガーに関数を実行するサービス
  8. 学習処理の構成 submit Upload code Update dataset Training Docker image Download

    Use Docker image competitor Cloud Storage AI Platform Cloud Build Save model Evaluation Container Registry competition host Upload competition code Pub/Sub + Cloud Functions Pub/Sub + Cloud Functions Pub/Sub + Cloud Functions
  9. 既存のワークフローエンジンとの関係は? Airflow や Kubeflow Pipeline などを利用していないが競合させる意図はない • Hekaton の pipeline

    中では分岐や待ち合わせがほとんど存在しない ◦ 依存関係が煩雑になりやすい data pipeline はスコープの外 ◦ ここでの併用などは十分にあり得る • 足りるのであれば full managed に寄せた方が運用コストは低い Hekaton Training Evaluation Artifact submit update dataset Data Pipeline
  10. モデルやデータのバージョン管理は? 学習コード • Submit 時に Docker イメージが残る データセット • 各サービスで作成したデータセットの名前とバージョンを

    Hekaton の DB に 登録できる 学習済みモデル • どの学習コード (Docker イメージ) とどのデータセットで作られた モデルか後で追うことができる 成果物 • 学習済みモデルとコンペのバージョンからどう作られたか追える
  11. コンペ参加者の作業 (1/2) 予め用意された competition name を指定してプロジェクトを作成 $ hekaton init --competition-name

    sample-competition コードを書いたらバージョン管理のタグを付けて submit • 普通のコンペと違って CSV ではなく、コードと Dockerfile を submit する $ hekaton submit --tag v1
  12. コンペ参加者の作業 (2/2) ルールに従って学習や推論のコードを書く • コンペごとにルールが実装されている • たとえば「Trainer クラスと Predictor クラスを実装してください」など

    class Predictor: def __init__(self, model_dir: str): # Load trained model # ... def predict(x: Dict): # ... class Trainer: def __init__(self, model_dir: str): # Load trained model # ... def train(x: Dict): # ...
  13. コンペ主催者の作業 (1/3) competition name を決めてプロジェクトを作成 $ hekaton competition init --competition-name

    sample-competition コンペ用のコードとデータセットが準備できたら publish $ hekaton competition publish --tag v1
  14. コンペ主催者の作業 (2/3) 学習・評価・成果物生成の 3 つの処理を用意 import hekaton # 参加者の Trainer

    class を利用 from submission import Trainer # 細かい処理は Hekaton SDK で # サポート @hekaton.hekaton_training def main(): # 学習に使って欲しいデータを用意 dataset = ... # Trainer にデータを渡す trainer = Trainer() trainer.train(dataset) Hekaton ではエントリポイントと呼ぶ • 参加者の学習モジュールに学習用データを渡す • 保存したモデルと参加者の推論モジュールに評価用 データを渡す • 保存したモデルと参加者の推論モジュールから成果 物を生成する ◦ バッチ推論の結果や API サーバー用 Docker イ メージなど 学習処理の例 (train.py)
  15. コンペ主催者の作業 (3/3) データセットを用意して Hekaton に登録する • Hekaton の DB にデータセットの

    name とバージョン管理の tag を登録 Hekaton Training Evaluation Artifact Data Pipeline データセット作成処 理を日時で実行 Hekaton の Pub/Sub に新しいデー タセットの情報を publish
  16. Hekaton を通じた役割分担 コンペ参加者視点 • 緩いルールの範囲内で自由にコードを書いて精度向上に注力できる • 書いたコードをほぼ手直しゼロでプロダクションに持っていける コンペ主催者視点 • 全ての参加者がルールに従ってコードを書くので同じ手順で実行できる

    ◦ このコードどうやって実行するの?が発生しない • 定期的な再学習など機械学習プロジェクト共通のところは Hekaton が面倒を見てくれる • 他のコンペの設計を参考にして知見を横展開しやすい
  17. Pococha での活用事例 DeNA が運営する LIVE コミュニケーションアプリ • ライバーとリスナーの距離の近さが良いところ • 推しのライバーを見つけられるかで

    定着率に大きな差が出る! ◦ おすすめのライバーを表示する タイムライン改善が非常に重要 実際に Hekaton を使って開発・リリースまでを行った https://www.pococha.com/overview/how-to
  18. Pococha での活用事例 開発体制 • データサイエンティスト 2 人 (コンペ主催者 + 参加者)

    • ML エンジニア 1 人 (コンペ主催者のサポート) 開発期間と運用 • モデル開発開始から 1st リリースまで 2 ヶ月程度 ◦ Hekaton 本体の大規模アップデートと並行して行ったので少し長め • 週 2 日程度のペースで継続的にモデルを更新 ◦ 推論サーバー用の Docker イメージは毎日新しいデータで自動生成 ◦ 評価値などを確認して問題なければデプロイしている
  19. 開発時に気をつけたこと • Kaggler の良さを活かす ◦ 十分な自由度を確保して限界まで精度向上ができるように • 役割の切り分けを明確に ◦ データサイエンティストがモデリングに集中できるように

    • データサイエンティストと ML エンジニアのコミュニケーションを スムーズに ◦ プロダクション投入のためのコード修正が一番大変 ◦ これをコンペのルールという形で吸収
  20. Hekaton が目指すところ • 将来的には 1 ヶ月程度のスパンで新しい機械学習の挑戦ができるような 世界を目指したい ◦ 試行錯誤の回数はとても大事! •

    データサイエンティストがモデリングに注力しているだけで自然と production ready なものができるように ◦ Kaggler が一番得意な分野で実力を発揮できる!
  21. 自己紹介 藤原 秀平 (FUJIWARA Shuhei) • AI システム部 ML エンジニアリンググループ

    ◦ Hekaton プロジェクト Tech Lead • Google Developers Expert