Re:ゼロから始めるML生活

Standing on the shoulders of Giants

ゆるふわMLOps入門(Airbnb:Bighead)

最近MLOpsに関して勉強していて、その一環で具体例の調査をしていました。 今回はAirbnbのBigheadです。

こちらについては、テックブログとか見つかればよかったんですが、見当たらなかったのでスライドとかカンファレンスの資料で見ていきたいと思います。

主に参考にしたのはこちらです。

https://s3-us-west-2.amazonaws.com/com.cloudpulsestrat/public/TWIML_ML_Platforms.pdf

BigheadはAirbnbで使用されているML 基盤のようです。

以下は、自分があまり英語強くないので、後で見直す用に日本語のメモになります。 基本的に上の資料の内容なので、悪しからず。。。

背景

Airbnbの事業である民泊を始めとするシェアリングサービスには、検索ランキングやプライシング、不正検知など、様々なところで機械学習技術が活用されています。 当時のAirbnbの機械学習に関する技術スタックはSpark、Scala、そして自社内で開発していたAerosolveが使われていました。 しかし、2016年当時、プロダクションとして稼働していたのは2-3個しかなく、機会学習モデルを開発するために8-12ヶ月も要していました。

目的

2016年に下記のような目標を会社で作成したようです。

  • 機械学習モデルを開発からデプロイまでのサイクルを劇的に向上させる
    • サードパーティ製の機械学習ツール(Pytorch, Tensorflow, Scikitlearnなど)を使用可能にする
    • オフラインの学習とオンラインのサービングの結果の間の食い違いを抑制する

それを踏まえて、下記のようなミッションのもと、Bighead開発チームが2017年に発足しました。

  • Equip Airbnb with shared technology to build production-ready ML applications with no incidental complexity. (Technology = tools, platforms, knowledge, shared feature data, etc.)
    プロダクションレディな機械学習アプリケーションを構築するための場当たり的な機械学習の複雑さを除去する共通基盤を作る
    • データへのアクセス、サーバーのセットアップ、モデル学習・評価のスケーリングに関する複雑性を除去
    • エンジニアやデータサイエンティストが本質的な問題に集中できるようにするための機能を提供
      • 正しいモデルの作成
      • 特徴量の選定
      • パフォーマンスチューニング

これらを通じて、機械学習による継続的な成果を生み出すことを目標としていたようです。

Bighead

Airbnbの機械学習プラットフォームBigheadは機械学習モデルの構築のためのE2Eプラットフォームです。 このプラットフォームによって、多目的に使用でき、シームレス、継続的、かつスケールする機械学習モデル開発プロセスを実現しています。

主な技術的な技術スタックは下記を始めとするOSS中心となっています。

  • Python
  • Docker
  • Jupyter
  • Spark
  • Kubernetes

これらをAirbnb用にカスタマイズして使用しており、それらはAWS上で稼働しています。

Bigheadのアーキテクチャはこのようになっているようです。

f:id:nogawanogawa:20200228195639j:plain:w600

各サービスの関係はこの様になっているようです。

f:id:nogawanogawa:20200228195700j:plain:w450

Zipline

ZiplineはAirbnbのデータウェアハウスから特徴量管理を抽象化するツールです。 Sparkを使用して、backfill、特徴量の計算などのオフラインタスクを主に担当します。

主な機能としては、

  • 込み入った特徴量リポジトリの用途別整理(ホスト、ゲスト、リスティング、マーケットプレイスなど)
  • 新しい特徴量の定義を簡単に設定できる言語
  • 高速なbackfill
  • 特徴量探索と可視化
  • データ品質のモニタリング
  • 特徴量のオフラインとオンラインの間での一貫性管理
  • 特徴量データパイプラインの明示的な権限管理

これらの機能によって、実際にモデル開発に携わる人の工数を削減します。

Bighead Library

Bighead Libraryはデータの変換の実行管理ライブラリです。 これによって、ユーザーは機械学習ワークフローを定義し、DAGを可視化することができます。 そして、これらのパイプラインは再利用可能なようになっており、チーム間で共有することができます。

著名な機械学習フレームワークをサポートし、Tensorflow、Pytorch、Keras、MXNet、Scikitlearn、XGBoost、H2O、 Rなどをサポートしています。 これらを含め、更に定番のデータ変換のカタログを提供することで、車輪の再発明を削減します。 こうしたツールによって、ユーザーは特徴量の出どころを理解したり、可視化したりできるようになっています。 

Redspot

Airbnbの機械学習実務者のための中央管理された高性能ノートブック環境がRedspotです。 JupyterhubからforkしたAirbnb専用にカスタマイズされたノートブック環境となっています。

Redspotによって、ユーザーはデータやパイプラインをより抽象化された形で操作することができ、ノートブックからプロダクションへデプロイまで行うことができます。

Redspotは他のユーザーと干渉しないようにDockerコンテナ上で稼働し、イメージを自由に操作して使用することができます。 これらのノートブックはバージョン管理されているため簡単に過去のものを使用することができ、CPU/GPUインスタンス活用でき、実行した結果をAWS EFSに保存できる様になっています。

Deep thought

Deep Thoughtはオンライン環境でのスケーラブルなモデルサービング環境です。 DockerやKubernetesをベースに構築されており、デプロイや学習環境、実行管理、スケーリングを管理します。 設定値でこれらを管理するため、エンジニアがデプロイのためになにかすることはありません。 ロギングやアラートなどの標準機能もダッシュボードを含めて整備され、これらを将来的にZiplineで読み込むことが可能になっています。

ML Automater

ML Automaterは、定期的なモデル学習や評価、スコア計算、ダッシュボード作成、スコアに基づくアラートなど、共通のオフラインタスクを自動化するワークフローエンジンです。 これらのタスクを明示的に宣言するだけで、ML Automater がAirflowのDAGを生成し、適切にBIgheadの他のリソースと結合し、実行はSparkでスケーラブルに実行されます。

Bighead Service

Bighead Serviceはモデルライフサイクルや実験を管理するサービスです。 Airbnb内での、PC上や本番クラスタに関わらず、 実績や過去のモデルの記録を管理しています。

Bighead Serviceではモデルのバージョンを追えるようモデルのコードとその時のDockerimageを管理し、いつでも状況を再現できるように必要なパラメータなどをセットで管理するようになっています。 具体的に、下記のような機能をユーザーに提供しています。

  • 実験管理
    • onlineでのモデルのトラッキング
  • 評価
    • モデル毎のメトリクスや可視化、アラート
  • デプロイ
    • モデルの更新やロールバック制御

感想

やはりAirbnbも進んでいますね。前のUberと共通点として気になるところは、

  • 特徴量の管理をかなり重視している
  • ロギング・モニタリングはほとんど自動
  • オンラインとオフラインのデプロイを強く意識している

などでしょうか。正直中身は結構違うとおもいますが、根っこの思想みたいな部分は、似たようなものが見えてきた気がしますね。