More Related Content
Similar to UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用 (20)
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
- 5. DISPLAY ADS 自動最適化エンジン
APPLE SEARCH ADS 自動最適化エンジン
Google
SNS 広
告
COVERAGE - メガプラットフォームがリーチできない広告トラフィック
国内最大級の6,000億imp/月を用いて、Google及びSNS広告とは
異なるユーザーのシチュエーションとカバーできない全領域にてリーチ可能。
FRAUD PROTECTION - 徹底的なデータクレンジング
誤タップ誘導と不正imp&clickの検出、CTR/CVR分析、不正広告探知の専門機関によ
るコンバージョンデータの検収など、クライアントの広告費用と自社の最適化アルゴリ
ズムを徹底的に保護。
PERFORMANCE - 自動最適化・高 ARPUとROAS
「月間6,000億impのデータ学習 + 徹底的なデータクレンジング」を基に、
最も理想的な「広告枠 x オーディエンス x クリエイティブ」の組み合わせを
予測し、ターゲットKPIに合わせて自動最適化。
WHY - なぜApple Search Adsが重要な広告商品なのか?
● App Store内で唯一自社のアプリを宣伝できる広告商品
● アプリを利用する意思がある状態のユーザーとの接触が可能
● 事業成長のコアに繋げる事ができる広告商品(自然流入の増加)
● ポストiOS14の環境で最も重要な広告商品
HOW - 10万通り以上の‘属性 x キーワードの組み合わせ’を自動最適化
● 100+ のユーザー属性の自動生成
● 1,000+ のキーワード自動収集
● 100,000+ のユーザー属性 x キーワードの組み合わせに対する自動入札最適化
https://unicorn.inc
課題
Apple Search Adsは戦略的には重要。
しかし、人手には限度がある。
最適化の努力
運用
● キャンペーン分類別のセグメント
● 完全一致キーワードに高い入札単価設定
● ネガティブキーワードの活用
● 新しいキーワードの探索活用
● etc
● キーワード生成
● キャンペーン構成の設計
● キャンペーン / アドグループ設定
● キーワード選定 / 設定
● キーワード別の入札調整
人力 = リソースの制限による運用可能なキーワード量の制限
効果の最大化が難しい
機械学習 x 全自動
人力ではコントロール不可能な量のデータを用いて、効果の最大化を実現
最適化の努力
運用
● キャンペーン分類別のセグメント
● 完全一致キーワードに高い入札単価設定
● ネガティブキーワードの活用
● 新しいキーワードの探索活用
● etc
● キーワード生成
● キャンペーン構成の設計
● キャンペーン / アドグループ設定
● キーワード選定 / 設定
● キーワード別の入札調整
解決案
UNICORNの
Apple Search Ads自動最適化エンジン
ユーザー群の未来の行動を予測して、
過去の行動を捉えるのではなく、
広告を広く買付する
- 8. SPOT UNIC
2.0 SPOTUNICORN スポットインスタンスの利用状況
スポットインスタンスの利用状況
https://unicorn.inc
- 9. https://unicorn.inchttps://unicorn.inc
2.1 SPOTUNICORN スポットインスタンスの利用状況
全体の半分以上がスポットインスタンス
ML推論・学習部分では94%
$0.0198
Average cost per VCPU-hour
学習
失敗可能なタスク → Spot+Batch
推論
オートスケール → Spot+ELB
DB
負荷が安定 → Reserved
全体 :333スポット/602インスタンス
うちML関連部分
ML学習 : 6スポット/6インスタンス
ML推論 : 301スポット/319インスタンス
DB : 0スポット/98インスタンス
71%
Savings
$0.0041
Average cost per mem(GiB)-hour
12xlarge
- 11. https://unicorn.inc
2.2 SPOTUNICORN スポットインスタンスの利用状況
UNICORN モデル群
学習スケジュール
学習タスクによって
● かかる時間
● つかうCPU
● 必要なメモリ
● 必要なディスクサイズ が異なる
1 8/
https://unicorn.inc
AWS Batchでその都度リソースを確保
第5世代 (c5, c5a, m5, r5)をSPOTで使用
4 vCPU
16GB memory
50GB volume
16 vCPU
2GB memory
500GB volume
8 vCPU
16GB memory
100GB volume
- 12. BATCH ML
3.0 BATCHML AWS Batchと機械学習
AWS Batchと機械学習
https://unicorn.inc
- 13. https://unicorn.inc
ワークロードの概要
1. データのダウンロード
2. データの検証
3. 特徴量変換
4. 学習エポック1
5. 学習エポック2
…
6. 学習エポックN
7. モデルの検証
8. モデルのアップロード
https://unicorn.inc
S3
RDS
その他DB
1. データダウンロード
3. 特徴量変換
shuffle
hash等
S3
8. モデルアップロード
4-6.学習
モデルファイル
特徴量ファイル
学習データセット(~500GB)
学習サイクル
高IO : ~1000IOPS
3.1 BATCHML AWS Batchと機械学習
- 20. https://unicorn.inc
4.2 BATCHEBS AWS BatchでEBSを使う方法
https://unicorn.inc
① EFSをマウントする
EFS = スケーラブルなNAS サイズ課金 + スループット課金
コンテナ (Batch Job)
コンテナ (Batch Job)
ホスト 8GB
AWS EFS
∞ GB
mount
volume
mount
volume
- 21. https://unicorn.inc
4.2 BATCHEBS AWS BatchでEBSを使う方法
https://unicorn.inc
① EFSをマウントする
EFS = スケーラブルなNAS サイズ課金 + スループット課金
コンテナ (Batch Job)
コンテナ (Batch Job)
ホスト 8GB
AWS EFS
∞ GB
mount
volume
mount
volume
- 23. https://unicorn.inc
4.3 BATCHEBS AWS BatchでEBSを使う方法
https://unicorn.inc
② ホストのEBSをアップグレード
ルートボリュームを大きくしたAMIを作成する
コンテナ (Batch Job)
コンテナ (Batch Job)
ホスト 100GB
Customized AMI
コンテナ (Batch Job)
コンテナの数は不定
- 24. https://unicorn.inc
4.4 BATCHEBS AWS BatchでEBSを使う方法
https://unicorn.inc
③ EBSをコンテナにマウント
コンテナのdevice socket経由でEBSをマウントする
コンテナ (Batch Job)
コンテナ (Batch Job)
ホスト 8GB
AWS EBS
20GB
AWS EBS
80GB
mount
volume
mount
volume
- 28. https://unicorn.inc
Dockerコンテナ起動時のENTRYPOINTで以下の処理を行う
① awscliでEBSを作成
$ aws ec2 create-volume
② 使用可能なデバイスファイルを探す (例: /dev/xvdf )
$ [while文などで]
③ 作ったEBSをホストインスタンスにアタッチ
$ aws ec2 attach-volume
④ デバイスのファイルシステムをフォーマット
$ mkfs.xfs -f /dev/$DEVNAME
⑤ マウント
$ mount /dev/$DEVNAME $EBS_PATH
⑥ EBS削除の設定 (後述)
③ EBSをコンテナにマウント
【EBSをdeviceとしてアクセスする】
https://unicorn.inc
※ 要privilegeフラグ
https://github.com/peroxyacyl/batch.tmpl
4.8 BATCHEBS AWS BatchでEBSを使う方法
- 31. https://unicorn.inc
Tips
/devをコンテナにマウント
コンテナ内の/devは
デバイス追加時に更新されない
/devを仮想ボリュームとして
コンテナにマウントする
第三者のdocker imageには注意
1 8/
https://unicorn.inc
Host
/dev
/xvda … 8GB
/xvdf … 200GB ← EBSをアタッチしても...
Container
/dev
/xvda
← ここは増えない
/hostdev
/xvda
/xvdf ← こっちは増える
マウント
-v /dev:/hostdev
https://github.com/peroxyacyl/batch.tmpl
4.12 BATCHEBS AWS BatchでEBSを使う方法
- 35. https://unicorn.inchttps://unicorn.inc
5.2 APPENDIX 補足
開発でもBatchを使う
チューニングなどの高コストな計算をクラウドにオフロード
$ ./runbatch.sh --cpu 4 --memory 16000 --volume 100 "python optuna.py"
このコマンドは下記を行う
● ディレクトリをdockerに固めてECRにpush
● job definitionの発行
● 4 vCPUs, 16GB メモリ, 100GB EBS を確保
● batch上で python optuna.py を起動
● Log StreamのURLを出力
https://github.com/peroxyacyl/batch.tmpl
- 36. https://unicorn.inc
6.0 summary まとめ
まとめ
https://unicorn.inc
1. 弊社ではスポットインスタンスでコストをオンデマンドより71%下げている
2. 学習ワークロードでは、失敗したときのバックアッププランを作る
a. アンサンブル学習が歩留まりを上げるために有効な一例
3. AWS BatchはJobごとに異なる負荷を持つときに効率的
...だが, 作業用ストレージ領域が足りない
4. EBSをコンテナに直接マウントする方式が有効
5. 開発やチューニングにもAWS Batchは使える
https://github.com/peroxyacyl/batch.tmpl
- 37. https://unicorn.inc
10.0 WE ARE HIRING UNICORN採用
We are hiring
https://unicorn.inc
golang
ruby
rust
assemblyTypeScriptSQL
自然言語処理
Data Visualization
強化学習
Rich Creative Design
Data ETL
App SDK
Tech. Account Managing
JS SDK
SRE
Microservice Orch.
contact@unicorn.inc