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

秒間数十万クエリをさばく機械学習モデルを継続的に再学習し稼働させる | CA BASE C...

nkato
September 28, 2021

秒間数十万クエリをさばく機械学習モデルを継続的に再学習し稼働させる | CA BASE CAMP 2021

サイバーエージェントの社内エンジニアカンファレンス「CA BASE CAMP 2021」で発表した資料です。

nkato

September 28, 2021
Tweet

More Decks by nkato

Other Decks in Programming

Transcript

  1. 各オークションについて配信価値を予測して、それに基づき価格を決める 価値 ... ユーザーが広告をクリックする確率 (CTR) 広告商品をダウンロード/課金/購入する確率 (CVR) 価値の判断を誤ると 高値で入札 →

    お金の無駄 安値で入札 → オークションに負け、配信機会の損失 CTR, CVRを正確に予測することが大事 → 機械学習で予測 機械学習をどう活用しているか 1. Dynalystでの機械学習ユースケース
  2. オークション開催回数 ... 月間数千億 推論QPS ... 秒間十数万 1入札にかけられる時間 ... 100ms以内 (一例)

    オークション開催者によって決められている 推論回数・時間に関する必要要件 1. Dynalystでの機械学習ユースケース
  3. AI事業本部の横断組織 DSC との協力体制 芝田 将さん ・ プロジェクト全体の設計相談 ・ Cythonによる高速化 計算時間

    : 90%減少 全体のスループット: 1.35倍 ・ 並列化した際に機械学習モデルの パラメータを共有化することで、 サーバー全体を省メモリ化 詳細は [PyData.Tokyo Meetup #23] で検索 3. 推論サーバーのマイクロサービス化
  4. 学習パイプライン設計 データ抽出 S3 生データ 特徴量生成 S3 特徴量 データ モデル学習 S3

    モデル ファイル 精度評価 logloss AUC データ評価 分布 モデル登録 DynamoDB モデル バージョン モデルデプロイ ECS ローリング アップデート 4. 学習パイプラインのPython移行
  5. ECS DS・MLが 機能追加 ECS ECR ECR image tag: commit hash

    学習ワークフロー 学習スケジュール管理 S3 DynamoDB 推論サーバー インフラ管理 update CI / CD : コミットハッシュでバージョン管理 改善後: 学習と推論処理のコードを共通化 従来 : 学習・推論コードを別実装 4. 学習パイプラインのPython移行
  6. FeatureClass( time=feature.hour or 0, user=feature.user or -1.0, category=feature.category or -1,

    media=feature.media_id or "", ) 特徴量生成処理を学習・推論で共通化 学習・推論時の生データをClass化 property変数に特徴量処理を実装 @dataclass class FeatureClass: time: datetime user: float category: int media: str @property def hour(self) -> str: return str(self.time.hour) @property def category_media(self) -> str: return f"{self.category}_{self.media}” python サンプルコード 4. 学習パイプラインのPython移行
  7. DSC との協力体制 芝田 将 さん C++ の FFMライブラリの Python バインディングを実装

    従来 : FFM ライブラリをsubprocess で呼び出す 依存関係のインストールの手間 モデル開発のボトルネック 改善後 : python ライブラリとして import して使用 環境構築が容易に・柔軟な開発が可能に subprocess.run("./ffm-train --auto-stop") subprocess.run("./ffm-predict") import ffm ffm.trian(train_data, auto_stop=True) ffm.predict(valid_data) 4. 学習パイプラインのPython移行