SlideShare a Scribd company logo
Step FunctionsとAWS Batch
でオーケストレートするイベン
トドリブンな機械学習基盤
Serverless Conf 2017
11/03 2017
山田 雄
ネットビジネス本部
データ基盤チーム
堤 崇行
ITサービス・ペイメント事業本部
方式基盤技術部
■山田 雄(ヤマダ ユウ)
株式会社 リクルートライフスタイル
ネットビジネス本部
データ基盤T
Twitter:@nii_yan
GitHub:https://github.com/yu-yamada
・以前はメールマーケティング用基盤の作成からデータ分析まで関わる
現在はリクルートライフスタイルの共通分析基盤の開発、運用全般を担当
ビックデータ、Ruby、ビール、カップ焼きそばが好き。
自己紹介
会社紹介
リクルートライフスタイルの持つサービス
80%
基盤エンジニアが運用に割いている割合
開発:
運用:
その他:
理想の割合
70%
20%
10%
商品概要
トリップAIコンシェルジュ システム概要図
商品概要
• 会社が商品として売り出すものである
• 今後長く使われる可能性がある
• 今後機能が追加になる可能性がある
機械学習基盤に求められるもの
Scalability
Availability
Maintenability
Robustness
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
Machine learning pipelines
on-premises
Data load
Machine
learning
on-premises
State control
Cloud trail
Cloud watch
Monitoring
Limited interface
on-premises
Data load
Machine
learning
on-premises
State control
Cloud trail
Cloud watch
Monitoring
Full managed work flow
on-premises
Data load
Machine
learning
on-premises
State control
Cloud trail
Cloud watch
Monitoring
Scalable batch
on-premises
on-premises
State control
Cloud trail
Cloud watch
Monitoring
Data load
Machine
learning
Data load
Machine
learning
Visualize
on-premises
on-premises
Cloud trail
Cloud watch
Monitoring
State control
State control
Data load
Machine
learning
Infrastructure as code
on-premises
on-premises
Cloud trail
Cloud watch
Monitoring
State control
Data load
Machine
learning
Monitoring
on-premises
on-premises
Cloud trail
Cloud watch
Monitoring
© 2017 NTT DATA Corporation 23
堤 崇行(ツツミ タカユキ)
株式会社NTTデータ
ITサービス・ペイメント事業本部
方式基盤統括部
経歴
• Webアプリ開発
• データ基盤開発・運用 / バッチ開発
• ETL / バッチ処理フレームワーク
• ストリーム処理
利用者/運用者/開発者みんなが気持ちよく使える
システムを構築できるよう日々奮闘中
好きなものはチョコレートとビール
自己紹介
Machine Learning Pipeline
on-premises
Data load
Machine
learning
on-premises
State control
Cloud trail
Cloud watch
Monitoring
Components of Pipelines
Interface
Scheduler
Triggers
Scheduler or Triggers
Scheduled Task Polling Event Trigger
Interface
Interface
Interface Processing Interface
Processing
Batch Processing with Container
Batch
On
Demand
Scalable
AWS Batch
AWS Batch
Submit Job
Running
Succeeded
/ Failed
JobのCPU数 / メモリを指定
Job Containerが稼動
終了
“最適な”EC2 Instanceが起動Runnable
JobのCPU数 / メモリを指定
“最適な”EC2 Instanceが起動
Job
CPU数
メモリ
EC2
CPU数
メモリ
CPU: 8
メモリ: 24GiB
Type: m4.2xlarge
CPU: 8
メモリ: 32GiB
CPU: 8
メモリ: 500GiB
Type: r4.16xlarge?
CPU: 64
メモリ: 488GiB
Step Functions
Workflow
Scalable
Managed
Event
Driven
Control AWS Batch
Event Driven
BatchStep FunctionsLambdaS3
Data
AWS Step Functions & Batch
State Machine
Submit
Get Status
Loop
Monolithic or Micro?
Micro State Machine
Pre-
processing
(Data Load)
Processing
(Machine
Learning)
Relay Step Functions
Batch Results
BatchStep Functions
BatchStep Functions
Event Driven with Lambda
ExecutionTrigger
S3 Eventで
Lambdaを実行
起動成功
起動失敗
多重起動
Event Driven with Lambda
Failures & Solutions
SolutionsFailuresTrigger
S3 Eventで
Lambdaを実行
起動失敗 再実行
多重起動
多重起動の阻止
多重起動OK
Retry when Execution Failed
Polling
DLQ
DLQによる確実なLambdaの実行
Cloud Watch Events
Event
Preventing Multiple Starts
DynamoDBでステート管理
Conditional
Put Item
Update Item
Batch Status
State Control DB
Start Execution
DON’T Start
CAN’T Put
Support Idempotent Batch
べき等性のあるBatch Jobを実装
多重起動しても正常を保つ
Upsert
Unique Object name
Get Latest Object
Monitoring
Monitoring: Alerts
Cloud Watch Logs
Log監視
Lambdaをフィルタで振分け
ERRORログを検知
Subscription
Filter
Info
Alert
Monitoring: Alerts
Batch Status監視
長時間Runnableを検知
Submit
Running
Succeeded
/ Failed
Job Containerが稼動
“最適な” EC2 Instanceが起動Runnable
Monitoring: Alerts
Step Functionの起動監視
一定の時間以上起動していないを検知
BatchStep FunctionsLambdaS3Data
Monitoring: Visualize Batch Status
DynamoDB
Streams
ES
Machine Learning Pipeline
Cloud trail
Cloud watch
Monitoring
BatchStep
Functions
S3 LambdaObjects
DynamoDB
Monitoring
Machine Learning Pipeline
on-premises
Data load
Machine
learning
on-premises
State control
Cloud trail
Cloud watch
最後に
一緒に基盤作ってくれる人募集中!!!
http://engineer.recruit-lifestyle.co.jp/recruiting/
Happy serverless development!!

More Related Content

PDF
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
PDF
Serverlessconf Tokyo 2017 Biz serverless お客様のビジネスを支える サーバーレスアーキテクチャーと開発としてのビジ...
PDF
「サーバレスの薄い本」からの1年 #serverlesstokyo
PDF
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
PDF
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来
PDF
JAWS DAYS 2015
PDF
Multi Cloud Design Pattern(Beta)
PDF
20211217 Alibaba Cloudでだってテスト駆動インフラ構築したい
BluetoothメッシュによるIoTシステムを支えるサーバーレス技術 #serverlesstokyo
Serverlessconf Tokyo 2017 Biz serverless お客様のビジネスを支える サーバーレスアーキテクチャーと開発としてのビジ...
「サーバレスの薄い本」からの1年 #serverlesstokyo
Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤
【解説】データ指向アプリケーションデザイン 12章 データシステムの未来
JAWS DAYS 2015
Multi Cloud Design Pattern(Beta)
20211217 Alibaba Cloudでだってテスト駆動インフラ構築したい

What's hot (20)

PDF
IoT(Bluetooth mesh) × サーバーレス
PDF
クラウドとコミュニティのこれまでとこれから 20150322_#JAWSDAYS
PDF
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
PDF
AWS ロボ in JAWSDAYS
PDF
コンソールゲームを世界展開してみた - JAWS DAYS 2015
PPTX
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
PDF
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
PDF
温故知新、Static Web のサイトを構築しよう
PDF
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
PDF
Awsjpcasestudies
PDF
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
PDF
これからのインフラエンジニアについて考えていること
PDF
現場で使えるDynamoDBと冪等デザインパターン
PDF
【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ
PDF
ECSとGitLabでCI環境構築
PDF
PySpark Intro Part.2 with SQL Graph
PDF
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
PDF
PIXTAにおけるCloudSearchのコスト削減
PDF
Data Engineering at VOYAGE GROUP #jawsdays
PDF
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
IoT(Bluetooth mesh) × サーバーレス
クラウドとコミュニティのこれまでとこれから 20150322_#JAWSDAYS
クラウド時代だからこそ見直したい
PHPアプリケーションのパフォーマンスチューニング
AWS ロボ in JAWSDAYS
コンソールゲームを世界展開してみた - JAWS DAYS 2015
APIを叩くだけでない、Deep Learning on AWS で自分だけの学習モデルを作ろう! by JAWS-UG AI支部
NuxtJS + REST APIで運用中サービスをNuxtJS + GraphQLに変更したことによる光と影
温故知新、Static Web のサイトを構築しよう
JAWS-2013-LT 10000req/secを50msecで返すサーバーインフラをAWSで作る
Awsjpcasestudies
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
これからのインフラエンジニアについて考えていること
現場で使えるDynamoDBと冪等デザインパターン
【NLU祭り 場外編】コミュニケーションをより身近に、よりかしこく。LUIS と Azure AI サービスの使いどころ
ECSとGitLabでCI環境構築
PySpark Intro Part.2 with SQL Graph
AWSからOpenStack, Chef SoloからChef Serverに インフラを置き換えた事例の紹介
PIXTAにおけるCloudSearchのコスト削減
Data Engineering at VOYAGE GROUP #jawsdays
[db tech showcase Tokyo 2017] E21: InfluxDB+αで時系列データの異常検知を可視化してみた by 株式会社インサイ...
Ad

Viewers also liked (14)

PDF
Software Productivity and Serverless
PDF
[serverlessconf2017]FaaSで簡単に実現する数十万RPSスパイク負荷試験
PDF
Growing up serverless
PDF
Future will be Serverless!! - Serverless Meetup Fukuoka #1 Opening
PPT
第2回 分散システム本読書会
PPTX
ここがつらいよAws batch
PPTX
Google Dremel
PDF
Application Lifecycle Management in a Serverless World
PDF
Cassandra Explained
PPTX
分散システムについて語らせてくれ
PDF
[Black Belt Online Seminar] AWS上でのログ管理
PDF
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
Software Productivity and Serverless
[serverlessconf2017]FaaSで簡単に実現する数十万RPSスパイク負荷試験
Growing up serverless
Future will be Serverless!! - Serverless Meetup Fukuoka #1 Opening
第2回 分散システム本読書会
ここがつらいよAws batch
Google Dremel
Application Lifecycle Management in a Serverless World
Cassandra Explained
分散システムについて語らせてくれ
[Black Belt Online Seminar] AWS上でのログ管理
AWS Black Belt Online Seminar 2017 AWSへのネットワーク接続とAWS上のネットワーク内部設計
Ad

Similar to Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤 (13)

PDF
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
PDF
JAWSUG 20190828
PPTX
Struggle against crossdomain data complexity in Recruit Group
PDF
Struggle against cross-domain data complexity in Recruit group
PDF
Tokyo H2O.ai Meetup#2 by Iida
PPTX
Amazon SageMakerのNotebookからJobを作成する
PDF
JAWSUG20180925
PPTX
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
PDF
Serverless services on_aws_dmm_meetup_20170801
PPTX
リクルートを支える横断データ基盤と機械学習の適用事例
PPTX
PythonでDeepLearningを始めるよ
PDF
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
PPTX
sitTokyo2023_DWCで機械学習をやってみた_Shared.pptx
UNICORNの機械学習ワークロードにおけるSpot&AWS Batchの活用
JAWSUG 20190828
Struggle against crossdomain data complexity in Recruit Group
Struggle against cross-domain data complexity in Recruit group
Tokyo H2O.ai Meetup#2 by Iida
Amazon SageMakerのNotebookからJobを作成する
JAWSUG20180925
Containers + EC2 Spot: AWS Batch による大規模バッチ処理でのスポットインスタンス活用
Serverless services on_aws_dmm_meetup_20170801
リクルートを支える横断データ基盤と機械学習の適用事例
PythonでDeepLearningを始めるよ
[AWS EXpert Online for JAWS-UG 18] 見せてやるよ、Step Functions の本気ってやつをな
sitTokyo2023_DWCで機械学習をやってみた_Shared.pptx

More from Yu Yamada (11)

PPTX
Google cloudnext recap_DataAnalytics
PPTX
リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方
PPTX
オンプレ、クラウドを組み合わせて作るビックデータ基盤 データ基盤の選び方
PPTX
やってはいけない空振りDelete
PPTX
リクルートライフスタイルの売上を支える共通分析基盤
PPTX
kafkaのデータをRedshiftへ入れるパイプライン作ってみた
PPTX
Uuidはどこまでuuidか試してみた
PPTX
リクルートライフスタイルのデータを支える技術
PPTX
オンプレとクラウドのHadoopを比較して僕の思うとこ
PDF
僕の考える最強のビックデータエンジニア
PPTX
CDH4->5 update苦労話
Google cloudnext recap_DataAnalytics
リクルートライフスタイルが考える、万人に使ってもらえる分析基盤の作り方
オンプレ、クラウドを組み合わせて作るビックデータ基盤 データ基盤の選び方
やってはいけない空振りDelete
リクルートライフスタイルの売上を支える共通分析基盤
kafkaのデータをRedshiftへ入れるパイプライン作ってみた
Uuidはどこまでuuidか試してみた
リクルートライフスタイルのデータを支える技術
オンプレとクラウドのHadoopを比較して僕の思うとこ
僕の考える最強のビックデータエンジニア
CDH4->5 update苦労話

Step functionsとaws batchでオーケストレートするイベントドリブンな機械学習基盤

Editor's Notes

  • #2: 音声を外部出力にするの忘れない
  • #5: 生まれる前から棺桶までのデータを持っている 今回はこの中でじゃらんの商品についての話です
  • #6: 運用に80%も割いているのは幸せな状況ではない 開発にもっと割きたい 例えばgoogleは運用は50%までと制限を入れているらしい
  • #7: 理想は開発7 運用2 その他1 ぐらいかな そんな考えがありながら基盤の設計をしました
  • #9: 返答はリアルタイムだが、学習はバッチで日次処理で行っている Webページ上でチャットを行う
  • #10: 来春リリース予定 12月から一部の宿で開始予定 じゃらんの全宿が使っても耐えられる設計である
  • #11: 商品概要のところと紐付けて話せると良い
  • #12: Scalability データ量がどれだけ増えるかわからない。 スパイクするかもしれない。 単純にスケール出来る基盤というだけでなく、オートスケール出来る基盤が理想。
  • #13: Availability 可用性 継続性 SPOFを作ってはいけない サーバを立てなければいい 再実行の自動化 エラーの検知だけではなく再実行まで行う
  • #14: Maintenability 運用コストがかからないこと Infrastructure as code. ログの自動収集
  • #15: robustness セキュリティ的に安全である 保守性 変化に強い  機能追加
  • #16: Low cost もちろんコストは出来るだけ抑えたい 基盤のコストだけではなく、運用コストも
  • #17: 脳みその日次バッチの部分ですよを冒頭に 前述のscalability,availability,maitenability,robustness,costを考えこのような構成にしました。 メインのバッチは2つあります。 まずはETL部分のバッチそして機械学習のバッチです。 それぞれAWS Batchを使用しています。
  • #18: オンプレとのインターフェースをs3に限定することで、セキュリティの担保を行いやすくしています。 クレデンシャルの発行もここのみに限定している もちろんIP制限も行っている
  • #19: バケットにオブジェクトを置かれた際にevent drivenでlambdaを呼び出し、そこからstep functionsを起動しています。 ワークフローエンジンを使わずにEvent drivenにすることにより、運用コストを下げています。 ワークフローエンジンを使うと、再実行などの手動運用が必要になってくる。 フルマネージド使うことで。ワークフローエンジンのSPOFなども気にせずにすむ。
  • #20: AWS Batchを使用することにより、スケールに耐えられつつ、コストを抑えられる構成になってます
  • #21: Event drivenの基盤を作った際にはどの処理がどこまで動いているのかが追いにくくなります。 そこで、stateをdynamo入れ、elastic->kibanaに連携することで今現在どの状態にいるのかを可視化しています。
  • #22: Infrastructure
  • #23: 動かなかったことの検知をしないといけない 次にそれぞれの部分を細かく見ていきたいと思います
  • #25: 紹介されたアーキテクチャ 一度抽象化
  • #26: パイプラインの要素 Scheduler or Triggers Scheduled Task Polling Event Trigger 等 詳細ではProcessingについて掘り下げる Interface Input / Output Processing Batch処理 プリプロセス DBへのロード ML
  • #28: Scheduled Task Polling Event Trigger 単品でみると複雑になるが 可能であれば入力データを受取次第、稼働し、リソースも最低限ですむイベントトリガーを選ぶと ローコスト&スケーラブル
  • #30: 外の世界と触れる部分 セキュリティ面は前述の通り 分析系バッチは得てしてSLAは外の方が高い 可用性の高いものをIFにすることで障害波及の分離もできる
  • #32: バッチを何で動かすか 常駐サービスではなくバッチなのでオンデマンドがよい スケーラブル 処理が動いていない時間は節約し、パワーが必要な時はスケールする コンテナを動かせる → AWS Batch
  • #33: AWS Batchの概要 AWS Batch JobにはCPUとメモリを設定 事前/Submit時 最適なインスタンス Job動く 終わり
  • #34: AWS Batchや使う上での注意点 JobにはCPUとメモリを設定 1コンテナは1インスタンス →ジョブの指定リソースより大きいスペックのインスタンスが起動しないといけない。 受け止められるインスタンスタイプが起動できる設定になっていないとRunnableで停止 結果、Batchを使うにあたり、EC2インスタンスタイプのスペックに詳しくなった。
  • #35: BatchのSubmitとSubmitから終了までのステータス管理する必要がある。 Workflowの部分を何でやるか。 イベントドリブンで マネージドで スケールする → Step Functions 余談:いつのまにかBatch処理のポーリングをするステートマシンがBlueprintにも追加された
  • #36: イベントトリガーにするには InterfaceであるS3へのデータ配置からLambdaが実行され Step Functionsが実行される 次:Step Functions + Batch構成
  • #37: Step Functions(ステートマシン) LambdaからBatchをSubmit Lambdaでステータスを取得 終了ステータスになるまで繰り返し
  • #38: 1つのステートマシンの粒度はどうするか問題 バッチ2つのあとに1つのバッチがある例 複数のバッチ処理があるが1つのステートマシンにするべきか、分けるとしたらどれくらいで分けるのか 1つだとWorkflow全体が1つのステートマシンになり 全体をみたい時はわかりやすい
  • #39: 機能追加には対応しやすくしたい Don't repeat yourselfでいたい → ロード(Pre-processing)とML(Processing)で分けた ロードを共通化することでDRYを保つ MLのInputが複雑になっても対応できる 次、StepfunctionsからStepfunctionsへの連携はどうするか
  • #40: StepfunctionsからStepfunctionsへの連携はどうするか Batchの結果をS3にPutして次のStep Functionsがイベントドリブンで動き出す
  • #41: 現状S3のイベントトリガーでLambdaを実行する時 成功だけじゃなく重複も失敗もある
  • #42: 可用性を高めるため 再実行の強化 多重起動を防止 多重起動しても問題ないようにする
  • #43: DLQによる確実なlambdaの実行 イベントドリブンだけだと失敗を拾えないので ポーリングモデルで再実行もしている
  • #44: 多重起動させない 同じS3 Pathからは実行されないように S3パスをキーとして重複の検知 バッチの状態から実行可否を判定可 Batch Statusの記録もできる →後述の可視化へ DynamoDBを選んだ理由 S3パスを重複キーとして使えるKVS バッチの状態を見て実行するか否かを判定できる 今は同じパスのアイテムがあるかどうかだけ ステートの記録もできる →後述の可視化へ
  • #45: 今回のパターン RedshiftへのロードはUpsert (構成による→) 出力ファイルにも一意性を持たせて上書きしない 受け取る側は最新のオブジェクトを取得
  • #47: アラート ログ監視 CloudWatchとLambdaサブスクリプションフィルタ ERRORを検知 特定INFOをSlackに送ることもしている
  • #48: Rannableの監視 AWS Batchを使う場合とても大事
  • #49: そもそもLambdaが起動しなかった時
  • #50: Batchの状態可視化 今どのステートにいるのか&履歴がわかりにくい DynamoDB StreamsとElasticsearch Serviceで可視化 すべて横軸は時間 上がStep Functionsの実行毎 下3つはBatchのステータス Runnable→Running→Success
  • #51: 後半のストーリー順に見る Batch on Container → AWS Batch Batchのworkflow → Step Functions イベントドリブン → S3イベントからLambdaが起動してStep Functionsをキック Step FunctionsからStepfunctionへは結果をS3にPutして次のイベントへ 起動失敗や多重起動の対応はDynamoDB 監視もCloudWatchとDatadogでサーバーレスに BatchのステータスはKibanaで可視化
  • #52: そしてパイプラインが完成
  • #55: サーバレスって正常系だけ作ると簡単だけど、異常系も考えて作ると開発が結構大変です。 ラムダも非常に多くなります。 なので、サーバレスで作る際は構成管理やモニタリングを最初から考えないと辛いかなと思います。 でもサーバレスの開発は楽しいです。 インフラレイヤーを意識せずにアプリ開発に集中できます。 運用工数も開発工数に回すことが出来ます。 開発工数かかるけど、運用するより楽しいかなと。