GO TechTalk #19 タクシーアプリ『GO』事業成長を支えるデータ分析基盤の継続的改善! で発表した資料です。
■ YouTube https://www.youtube.com/live/sD8IpwoIkaw?feature=share&t=2696
■ connpass https://jtx.connpass.com/event/282134/
到着予想時間(ETA)サービスの特徴量のニアリアルタイム化- Feature Storeの技術選定 -2023.05.31鈴木 隆史GO株式会社
View Slide
© GO Inc. 2自己紹介GO株式会社MLOpsエンジニア / 鈴木 隆史複数の機械学習サービスの基盤やパイプラインの設計開発を担当最近はゼルダにハマり中
© GO Inc.到着予想時間(Estimated Time of Arrival)到着予想時間(ETA)とは3
© GO Inc. 4ETA精度は事業影響度が大きい● 『GO』アプリのコア機能(配車依頼、予約機能など)として利用している● アプリで表示している到着時間よりも遅着・早着の場合○ UXの悪化、キャンセル率の増加○ 特に大幅な遅着時のネガティブ体験● 遠方の車両を向かわせてしまった場合○ 迎車時間が長くなることによる機会損失到着予想時間(ETA)の精度の重要性
© GO Inc. 5現状と課題
© GO Inc.アルゴリズム側の改善● 経路探索 + MLモデルのハイブリッド構成へ変更(参考:DeNA TechCon 2022 - あと何分?タクシーアプリ『GO』到着予測AIの社会実装まで -)● 通り過ぎ問題への対策(参考:GO Tech Blog - ETA(到着予想時間)の重要性と「通り過ぎ問題」への対策 -)システム側の改善● リアルタイムな需要供給・道路状況の反映○ 降雪などの突発的なイベントでの精度低下の改善6到着予想時間(ETA)の精度向上に向けた取り組み本日話すテーマ課題ニアリアルタイム(30分ごと)に更新されるデータを用いて機械学習モデルを更新する仕組みがない
© GO Inc.従来ETA APIのコンポーネント7ユーザー時刻・地理情報・乗務員情報などの入力値お客様・ドライバー位置情報の入力値経路探索エンジン経路探索結果の特徴量ETA推論モデルAmazon EKS特徴量変換時刻・乗務員などの様々な特徴量地図データS3地理統計値乗務員情報などの特徴量数ヶ月ごとの更新ワークフローエンジンCloud Composer1日ごとの更新処理リクエストパラメータデータ凡例
© GO Inc.従来ETA APIのシステム構成8地図データ地理統計値乗務員情報などの特徴量数ヶ月ごとの更新1日ごとの更新ワーカープロセス Aグローバル変数ワーカープロセス Bグローバル変数ワーカープロセス Cグローバル変数……ワークフローエンジンCloud ComposerAmazon EKSS3● REST APIのPodが起動する際に、各プロセスのグローバル変数にデータをロードしているワーカープロセス Aワーカープロセス Bワーカープロセス C…
© GO Inc.従来APIシステム構成に30分更新の天気情報を追加しようとすると9地図データ地理統計値乗務員情報などの特徴量天気情報などの特徴量数ヶ月ごとの更新1日ごとの更新ワーカープロセス Aグローバル変数ワーカープロセス Bグローバル変数ワーカープロセス Cグローバル変数…30分ごとの更新ワークフローエンジンCloud ComposerS3● 30分ごとに新しい特徴量データをロードするには、再デプロイが必要なため現実的でない30分単位でデータ更新したいが、Podを再デプロイしないとグローバル変数が再読込されないワーカープロセス Aワーカープロセス Bワーカープロセス C…各プロセスごとにメモリが割り当てられるため、あるプロセスのグローバル変数を更新しても他プロセスには反映されない…Amazon EKS
© GO Inc. 10解決策の検討
© GO Inc. 11解決案の候補実装方式 サービング方式 メリット デメリットVertex AIFeature Storeの利用オンラインサービング(少量の最新データを取得 )* 低レイテンシ/低メモリ* 複数データソース(BigQuery/GCS)に対して統一したI/Fで取得可能* コンピュートコスト大* バッチ処理と比較して高いバッチサービング(大量の定期更新データを取得)* 統一I/F* サーバーキャッシュに乗せることで低レイテンシ* 高メモリ* リアルタイムデータの参照ができない独自実装 オンラインサービング(少量の最新データを取得 )(Redis開発想定)* 低レイテンシ/低メモリ * コンピュートコスト大バッチサービング(大量の定期更新データを取得)(データ取得プロセス開発想定)* サーバーキャッシュに乗せることで低レイテンシ* 使用メモリ次第で低コスト* 現状の実装ベース* リアルタイムデータの参照ができない* 高メモリ
© GO Inc. 12解決案の実験結果実装方式 サービング方式 レイテンシ 使用メモリ コンピュートコストVertex AIFeature Storeの利用オンラインサービング(少量の最新データを取得 )100-200 msec 数KB 1ノードあたり$700/monthバッチサービング(大量の定期更新データを取得)1-3 msec(サーバーキャッシュ利用時 )数1000 msec(通常参照時)数10MB 軽微なストレージ料金独自実装 オンラインサービング(少量の最新データを取得 )(Redis開発想定)5-10 msec 数KB M1(4GB) Standardの場合$200/monthバッチサービング(大量の定期更新データを取得)(データ取得プロセス開発想定)1-3 msec(サーバーキャッシュ利用時 )100-200 msec(通常参照時)数10MB Podに割り当てられたリソースの余剰部分で賄える
© GO Inc.今回は下記の理由でバッチサービングの独自実装を採用した● 既に特徴量はBigQueryで集約管理しているため、I/F共通化の恩恵が小さいこと● 特徴量データサイズが小さく、サーバーキャッシュに乗り切ること○ サーバーキャッシュに乗れば、通信オーバーヘッドがない分オンラインサービングよりも高速に動作すること● 利用する特徴量は30分単位で更新できればよく、バッチサービングで要件を満たせること● 現在の実装ベースのまま開発できること13バッチサービング独自実装の選定理由
© GO Inc. 14解決策の実現
© GO Inc.サービングプロセスの新構成15地図データ地理統計値乗務員情報などの特徴量天気情報などの特徴量数ヶ月ごとの更新1日ごとの更新ワーカープロセスAワーカープロセスBワーカープロセスC………30分ごとの更新ワークフローエンジンCloud Composerサービングプロセスグローバル変数データ参照スレッドユーザーS3ワーカープロセスAワーカープロセスBワーカープロセスCサービングプロセスグローバル変数データ参照スレッドAmazon EKS…
© GO Inc. 16サービングプロセスの実装例multiprocessing.Managerを利用すると複数プロセス間でデータを共有できる
© GO Inc. 17データ更新スレッドの実装例定期的なデータ再読込のバックグラウンドスレッドの追加5分ごとにVolumeを再読込
© GO Inc.特徴量のバージョン管理● データの後方互換性がなくなるタイミングでデータファイルのバージョンを変更し、モデルではデータバージョンを指定して処理することで、新旧両方のデータを扱える○ 例)features/1.1.0/realtime.csv.gz -> features/1.2.0/realtime.csv.gz○ モデルによって違うバージョンの特徴量を利用することが可能○ 後方互換性がない更新が入っても、既存のパイプラインはエラーにならない● バージョン更新時のデプロイ順番には注意○ 1. Cloud Composerで新しい特徴量データのデプロイ○ 2. APIで利用する特徴量バージョンの更新○ この手順を踏むことでデータフォーマット変更時のエラーを回避18運用上の考慮点
© GO Inc.今回のニアリアルタイム特徴量の提供には、バッチサービング独自実装を採用● オンラインサービングやFeature Storeを利用するメリットが小さかったため見送り● オンラインサービングと比較して低レイテンシで特徴量を提供可能● 複数プロセスを起動するAPIでは、サービングプロセスを利用して各プロセスでデータを共有● 定期的なデータ更新スレッドを利用して、データの再読み込み特徴量管理の工夫● バージョン管理を導入することで、モデルごとに違うバージョンの特徴量を利用可能19まとめ
文章・画像等の内容の無断転載及び複製等の行為はご遠慮ください。© GO Inc.