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

Ad-DS Paper Circle #1

Ad-DS Paper Circle #1

広告輪読会第一回スライド

Yusuke Kaneko

March 30, 2025
Tweet

More Decks by Yusuke Kaneko

Other Decks in Research

Transcript

  1. A Bag of Tricks for Scaling CPU-based Deep FFMs to

    more than 300m Predictions per Second 〜 アドテクDS勉強会第一回 〜 AI事業本部 Dynalyst 大塚皇輝
  2. 1. 自己紹介 2. 事前知識 3. 論文紹介 a. オンライン施策 i. Deep

    FFM ii. 学習高速化 b. オフライン施策 i. キャッシュ戦略 ii. 実行最適化 iii. 量子化 iv. 差分更新 4. 感想
  3. 1. 自己紹介 2. 背景 3. 論文紹介 a. オンライン施策 i. Deep

    FFM ii. 学習高速化 b. オフライン施策 i. キャッシュ戦略 ii. 実行最適化 iii. 差分更新 iv. 量子化 4. 感想
  4. 背景 • 推薦や広告といった分野で Factorizatioin Machineベース 手法が未だに 一般的 ◦ 主にスケーラビリティ起因 •

    GPU利用を前提としてモデル 多いが、CPU利用前提 モデル 少なく、今 回 後者にフォーカス
  5. 1. 自己紹介 2. 背景 3. 論文紹介 a. オンライン施策 i. Deep

    FFM ii. 学習高速化 b. オフライン施策 i. キャッシュ戦略 ii. 実行最適化 iii. 差分更新 iv. 量子化 4. 感想
  6. Stability Analysis • タスク設定 CTR予測 • 評価指標 AUC • 期間ごとに異なるハイパラで実験

    期間A 期間B パフォーマンスがど 期間でも 安定すること確認する実験 …… 設定A 設定B : 設定A 設定B :
  7. Stability Analysis 黒線:AUC 最高値 赤線:AUC 平均値 灰色:性能 上位、下位5% (灰色が少ないほど安定) •

    黒 点線と黒トレー ス部分が近さ • 灰色部分 少なさ 安定度 見方
  8. 1. 自己紹介 2. 背景 3. 論文紹介 a. オンライン施策 i. Deep

    FFM ii. 学習高速化 b. オフライン施策 i. キャッシュ戦略 ii. 実行最適化 iii. 差分更新 iv. 量子化 4. 感想
  9. バッチ学習 学習1回目 (12/1) 学習2回目 (12/2) モデル準備 データ準備 (12/1 ~ 12/7)

    モデル準備 データ準備 (12/2 ~ 12/8) ⋮ ⋮ 新しいサーバー 新しいサーバー • 学習ごと データ取得 • データ 期間重複         etc. … 効率が悪い
  10. Model warm-up モデル準備 新しいサーバー 常時データ取得 • 常にデータを取得し続ける事で、データ取得 時間を削減 • 学習完了後

    モデルに過去 リクエストを 流して暖気? • スケジューリング 少々工夫する必要があ る(Kubernetes Taints and Tolerations) ◦ スペックが高く、最新データが入ってる サーバーに最新 学習を割当 学習1回目 (12/1) 学習2回目 (12/2) ⋮
  11. 通常 並列計算 lock lock lock Memory (重み) Thread 1 Thread

    2 Thread 3 • 通常競合が起きな いようにメモリ lock
  12. Hogwild Memory (重み) Thread 1 Thread 2 Thread 3 競合を許容し、

    メモリをロックしない Rust unsafe (Pythonだと言語仕様的に無理) https://doc.rust-jp.rs/book-ja/ch19-0 1-unsafe-rust.html conflict!
  13. Hogwild • 単純に並列化してる分早い • メモリロック等 オーバーヘッドが無い で早い • 性能(Revenue Per

    Mille)に関して 、ABテスト実施した結果著しい低下 ない ※RPM (Revenue Per Mille) : 1000 Impressionあたり 収益
  14. Relu関数 0 1 2 -1 -2 1 2 3 X

    < 0なら0になる で計算不要 • 活性化関数 計算負荷 小さい も を選択 • 0未満 0に丸め込まれる
  15. Sparse weight update … X ・W 活性化関数 … … 0

    ReLU: 0 if x < 0 ReLU関数によって0未満 入力 0になる で、 予め0未満 入力となってるノードから分岐している重 み 計算不要
  16. 1. 自己紹介 2. 背景 3. 論文紹介 a. オンライン施策 i. Deep

    FFM ii. 学習高速化 b. オフライン施策 i. キャッシュ戦略 ii. 実行最適化 iii. 差分更新 iv. 量子化 4. 感想
  17. Context cache • Requestからくる内容 うち、不変なも をキャッシュ ◦ ユーザー情報、ブラウザ情報等 • 恐らくfield情報

    潜在ベクトルをキャッシュしておき、ユーザー情報分 計算が不 要になる? predict_with_cache関数 https://github.com/outbrain-inc/fwumious_wabbit/blob/b3435aa00a92be8e8e603830c1556b2f66c2ff9c/src/lib.rs#L110 Fields キャッシュ https://github.com/outbrain-inc/fwumious_wabbit/blob/b3435aa00a92be8e8e603830c1556b2f66c2ff9c/src/block_ffm.rs#L475
  18. SIMD (Single Instruction Multiple Data) • 単一 命令で複数 データを一括処理できるコンパイラ 機能

    • 低レベル言語(Rust, C++とか)だと実行できるがPythonだとできない • Rust 場合 ビルド時 feature flagによって使用有無を決定 • CPU バージョンによって演算器 設定が異なる で、設定時 要注意 ↓実行時引数 SIMD設定 https://github.com/outbrain-inc/fwumious_wabbit/blob /b3435aa00a92be8e8e603830c1556b2f66c2ff9c/buil d.sh#L13 個別 関数に み設定する場合 デコレータ的なも で設定すると for文がSIMDで実行される→
  19. SIMD (Single Instruction Multiple Data) SIMD化と 何か / Basics of

    SIMD ~ SIMD化 簡単な説明 ~ 詳しく こちら スライドを参照
  20. バッチ学習 新しいサーバー 常時データ取得 学習1回目 (12/1 15:00:00) ⋮ 学習1回目 (12/1 15:05:00)

    モデル1号 モデル2号 更新頻度が高けれ 学習データ 差分 小さい    ↓ モデル 差分も小さい で ?    ↓ モデル全部を切り替える必要 無い で ?
  21. Quantization 1(整数) 符号付き32bit 0|0000001 0|0000000 00000000 00000000 00000001 符号付き8bit •

    重み メモリ使用量を削減できる • 8bitまでならそこまで性能低下しないらしい • 考慮事項 ◦ 量子化と逆量子化 高速 ◦ 丸め込み 幅を動的に決定 ▪ 時系列的なデータ量 変化に起因 3時 ~ 5時 データ量少ない→重み 更新幅も小さい 19時 ~ 21時 データ量多い→重み 更新幅も大きい
  22. 具体例 こ 場合各バケット 0: 1.2 ~ 3.4 1: 3.4 ~

    5.6 2: 5.6 ~ 7.8 3: 7.8 ~ 10.0 となる 例え 3.8 バケット1に割り当て ≒3.8 量子化されると1 複合する場合
  23. 自分 所感 • アイデア 論文内で理解できなく ないが、「どうやる ?」に関して 実装見ないとわか らない •

    運用に乗せる 難しそう ◦ 事故った時 切り戻しとか ◦ 原因となったモデルとか
  24. AdKDD と • KDD(Knowledge Discovery and Data Mining) Workshop 一つ

    • あんまりLLMに侵食されてなさそう? • TODO: 情報書き足し(社内ブログとか)
  25. 著者情報 • Outbrain ML researcher • NLP専門っぽい? • Auto ML

    に興味があるっぽい ネイティブアド パイオニア (これど サービス?)
  26. 手法一覧 • モデル 量子化 • モデル パッチ更 新 etc. …

    • サーバー 事前暖気 • メモリ unsafe許容による重み更新 • 不要な重み更新 枝刈り          etc. … • キャッシュ • 単一命令複数実 行 etc. …