FreakOut における Amazon SageMaker 活用事例 @ Digital Advertising Japan Seminar 2018 - Machine Learning 事例祭り -
AWS Summit Tokyo 2018 でお話した内容に Hyperparameter Tuning Job を追加した内容になっています
© FreakOutFreakOut におけるAmazon SageMaker 活用事例株式会社フリークアウトSoftware Engineer 小浜 翔太郎
View Slide
© FreakOutMachine Learning in FreakOut, Inc.適切な入札価格を決定するために CTR/CVR予測 を利用学習モデルはバッチで更新し、予測はアプリケーション内で行う学習器 訓練データ学習モデルApp予測器特徴量予測値
© FreakOutCTR/CVR 予測モデル改善の流れ評価KPIの決定文献等調査オフライン検証本番実装オンライン検証全適用Baselineの確認データの確認
© FreakOutオフライン検証の環境の変化2014年2016年2018年人員数1人からX人体制へR&D チームの人数の増加と共に、オフライン検証の環境も変化オンプレミスの環境に分析サーバを用意EC2 の利用を始める Vagrant AWS Provider を使い開発で使い慣れているコマンドでインスタンスの操作ができるようにしたAmazon SageMaker により大規模で並列にオフライン検証が行えるようになった
© FreakOutオフライン検証におけるAmazonSageMaker の利用
© FreakOutAmazon SageMaker とは主要な3つのコンポーネントから構成されるAuthoring前処理用の Notebook instance を簡単に立ち上げられるModel Trainingモデル学習 Job を簡単に実行Model Hosting学習したモデルを利用したエンドポイントを簡単に作成現在は Model Training のところを主に利用している
© FreakOutModel Training | Amazon SageMaker▪ 学習アルゴリズムが入った Docker Image の ECR パス▪ 訓練データなどの入力用 S3 パス▪ 学習に利用するハイパーパラメータ▪ 学習済みモデルなどの出力用 S3 パスhttps://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html主に以下の4つを指定するとモデル学習 Job が実行できる
© FreakOutModel Training | Amazon SageMaker有名な学習アルゴリズムは Built-in で Image が用意されている▪ XGBoost Algorithm▪ Factorization Machines▪ Image Classification Algorithm (ResNet)▪ Sequence2Sequence...Built-in のアルゴリズムだけでなくDocker image を用意することで任意の学習アルゴリズムを SageMaker 上で動かすことができる
© FreakOutModel Training with Custom Image▪ 訓練データなどの入力用 S3 パスは、FILE mode の場合以下のパスにマウントされるdocker run image train▪ Job を submit すると以下が実行される/opt/ml/input/data/channel_name▪ ハイパーパラメータは、以下のパスに JSON 形式で置かれる/opt/ml/input/config/hyperparameters.json▪ 学習済みモデルなどは、以下のパスに置くと、S3に保存される/opt/ml/model/
© FreakOutModel Training with Custom Image▪ マウントされた訓練・評価データの連結と移動▪ hyperparameter.json を luigi.cfg に設定▪ 学習・評価を行う luigi ワークフローの実行▪ モデル・評価結果をS3に保存されるように移動docker run image train で以下を実行するイメージをオフライン検証用に用意した
© FreakOutLuigi Train, Prediction and Evaluation Workflowを使うと hyperparameters.json がJSON のまま luigi.cfg 経由でタスクに簡単に渡すことが可能Luigi は Spotify を中心に開発しているワークフロー管理ツール予測タスク学習タスク評価タスク訓練データ学習モデル評価データ予測結果評価結果
© FreakOuthttps://github.com/shotarok/vw-luigiLuigi Train, Prediction and Evaluation Workflow
© FreakOutDocker image | Model Training with Custom ImageDocker image は CircleCI で build し ECR で管理Push a branch Trigger build Build andpush to ECR
© FreakOutSageMaker を用いたオフライン検証手順SageMaker を使うことで効率的にオフライン検証が可能に1. 訓練・評価データを抽出し HDFS 上に保存する2. オンプレ HDFS 上のデータを S3 に保存する3. Notebook instance を立ち上げ Job を submit4. Notebook instance で結果を確認し比較する
© FreakOutsample_type: imp-clicklogs_tables:ad:last_hour: “2017-10-15T12:00:00”duration_hour: 24conditions:- “billing_type = 1”- “is_application = 1”…features:- ad_id- hour- spot_id…remove_anormaly_cvr_cpns: trueperformance_indicator_type: ‘cpa’…1. 訓練・評価データを抽出し HDFS 上に保存訓練・評価データを Spark を利用して抽出する抽出条件を書いた YAML からデータ抽出する Application を用意抽出に使う Hiveテーブルの条件データに対して行うフィルターの設定抽出する特徴量の設定
© FreakOut2. オンプレ HDFS 上のデータを S3 に保存するhadoop distcp を利用して抽出したデータを S3 上に移動訓練・評価データは、別のパスに置いて job を submit する際それぞれ train/test Channel として指定できるようにするhadoop distcp
© FreakOut3. Notebook instance を立ち上げ job を submittrain/testChannel の指定Job のsubmit
© FreakOut4. Notebook instance で結果を確認し比較するで job の進行を確認可能S3 に保存した評価結果を取得し比較を行う
© FreakOutオフライン検証の具体例グリッドサーチによるハイパーパラメータの最適化を行うためのオフライン検証ハイパーパラメータの一部だけ上書き後述する Hyperparameter tuning Job を使えばBayesian optimization を使ったパラメータ調整が可能
© FreakOutHyperparameter Tuning JobHyperparameter Tuning Job では通常の訓練Job に加えて以下を指定することで Job を投げることが可能▪ 探索したいハイパーパラメータと探索範囲▪ 最適化する指標をログから取り出す正規表現▪ 最大試行回数と並列試行回数
© FreakOutHyperparameter Tuning Jobハイパーパラメータの探索範囲は柔軟にカテゴリ変数、連続変数、離散(整数)変数 と指定できるhttps://docs.aws.amazon.com/sagemaker/latest/dg/automatic-model-tuning-define-ranges.html
© FreakOutHyperparameter Tuning Job の具体例最適化するパラメータと範囲試行回数等を指定しTuning Job をSubmitログから最適化指標を抽出する正規表現
© FreakOutHyperparameter Tuning Job の具体例コンソールから結果一覧や最も良いパラメータを確認できる
© FreakOutFuture Workプロダクション環境での利用学習・評価結果の可視化実験スクリプトの永続化の簡単な方法▪ 現在置き換えが進行中▪ バッチごとに使用するリソースを決めることができ、学習時間を柔軟に調整できるようになった▪ 評価結果比較用のリーダーボードを用意▪ 学習曲線の可視化を CloudWatchLogs で行う▪ 今は手動で .ipynb をダウンロードして GitHub に Upload
© FreakOutAs-is Production Architecture学習器 訓練データ学習モデルApp予測器特徴量予測値
© FreakOutTo-be Production Architecture訓練データ学習モデルApp予測器特徴量予測値
Give People Work That Requires A Person.