Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
SageMakerで試行錯誤する推論パイプライン
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
moajo
August 21, 2020
Programming
1.4k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
SageMakerで試行錯誤する推論パイプライン
moajo
August 21, 2020
Other Decks in Programming
See All in Programming
Webフレームワークの ベンチマークについて
yusukebe
0
150
PHPで使える日時の表現と、その知り方 #frontend_phpcon_do
o0h
PRO
0
230
AI時代のUIはどこへ行く?その2!
yusukebe
20
7k
DynamoDBには集計系のクエリがないけどなんとかしたい
musan
1
130
AI時代の仕事技芸論 — ソフトウェア開発で「遊ぶように働く」職人的熟達のすすめ
kuranuki
1
640
Claspは野良GASの夢をみるか
takter00
0
180
タクシーアプリ『GO』の バックエンド開発のおける AI利活用と若者のすべて
pyama86
3
1.9k
Technical Debt: Understanding it Rightly, Engaging it Rightly #LaravelLiveJP
shogogg
0
210
Oxlintのカスタムルールの現況
syumai
6
1k
Spec-Driven Development with AI-Agents: From High-Level Requirements to Working Software
antonarhipov
2
480
3Dシーンの圧縮
fadis
1
680
JavaDoc 再入門
nagise
0
310
Featured
See All Featured
Building Applications with DynamoDB
mza
96
7.1k
Designing for humans not robots
tammielis
254
26k
Exploring anti-patterns in Rails
aemeredith
3
400
We Are The Robots
honzajavorek
0
240
Raft: Consensus for Rubyists
vanstee
141
7.5k
From π to Pie charts
rasagy
0
200
Impact Scores and Hybrid Strategies: The future of link building
tamaranovitovic
0
300
Abbi's Birthday
coloredviolet
2
8k
The Limits of Empathy - UXLibs8
cassininazir
1
350
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
GraphQLの誤解/rethinking-graphql
sonatard
75
12k
Transcript
SageMakerで試⾏錯誤する 推論パイプライン moajo SoftwareEngineer DeNA
⾃⼰紹介 2 • moajo • 新卒2年⽬ • 普段はmlops的な仕事をしている • 趣味はフリークライミング
3 とあるプロジェクトにて
プロジェクト要件 • 「試合」の動画を撮影 • 翌⽇までにいい感じに解析して「チーム」にフィードバック • 「チーム」が強くなる! 4
当初のつらみ • 今までPoC段階でずっと⽣EC2上でモデル実装、検証してきていた • 推論パイプラインはjobがSQSに投げられると、ベタ書き推論処理⼊りのAMIが EC2上にオートスケールしてそれを捌くというだけの質素なものだった • そしてじわじわと近づく限界 • パイプラインの全ステップが密結合
→バージョン管理困難 • ⼀番リソースを⾷うステップに合わせてインスタンス選択 →リソースの無駄 • 依存関係が分離できてない →ライブラリバージョンが固定しづらい 5
Amazon SageMaker • AWSのマネージド機械学習基盤 • GCPでいうAI platform? • 学習、推論、データセット管理など⾊々な機能が⼊ってる 6
7 とりあえず導⼊してみた
とりあえず作ってみた構成 • SageMaker Batch Transformで推論 • Batch推論はAirflowからキック • Airflowでは短いスパンでSQSをポーリングしてdagをトリガーする •
sagemakerは `[model_name]/[timestamp]` みたいなpathに書き出し 8 ポーリング 順序の管理 書き出し
とりあえず作ってみた構成はどうだったか • Airflowの管理がちょっと⾯倒くさい • composerとか使うともっと楽なのかなぁ・・・ • 書き出し先のpathが分散しててイケてなかった • ⼀回のdag実⾏の結果が分散してて⼀覧性が低かった •
BatchTransformへの書き換えが⾟い • BatchTransformは `model_fn`、`predict_fn`のような特定の名前の関数 を定義しておくといい感じに呼び出されるという仕組み • 今までベタ書きだった学習推論コードを書き換えないといけない • BatchTransform⾃体もちょっとイケてなかった(後述) 9
BatchTransformのイケてなさ • SageMaker Endpointという推論エンドポイントホスティング機能がある • BatchTransformとEndpointは同⼀コードを使い回せるようになってる • 実はBatchTransformでは内部的にはendpointを建ててそこにhttp経由でリク エストしてる •
データサイズがデカすぎたりするとhttpレイヤーから 例外が⾶んできてつらい(デフォルト設定だと) • 設定をちゃんと管理するのはそれはそれで⾯倒くさい・・・ • たぶん「もともとEndpointを普段使ってるけど、たまにそのモデルでバッチ推 論もしたい」みたいなユースケースを想定してるのでは? • 今回のケースではそもそもバッチ処理しかしない 10
修正した構成 • BatchTransformの代わりにProcessingを使う • Processingは前処理、後処理⽤サービスで、任意のコードを実⾏できる • GCPのai platform training jobとだいたい⼀緒
• 逆にモデルはマネージドじゃなくなるので、⾃分でロードしたりバージョ ン管理しないといけない • 書き出し先pathをdag_idでまとめた • [run_id]/[model_id]/にした • めちゃくちゃ快適になった。絶対こっちのほうが良い 11
修正した構成はどうだったか • コードの修正は最⼩限になった • ベタ書きコードをそのまま実⾏できる • データサイエンティストの負担減 • 割とUXは良くなったが、お⾦が結構掛かるのがつらい •
スポットインスタンス未対応 12
コスト最適化の検討 • AWS Batchを使う? • ECSでバッチ処理を実⾏できる • スポットインスタンスも使える • もはやSageMakerじゃないが・・・
• SageMaker Training jobを使う • 学習jobとして「推論」する • いいのか、こんな使い⽅して・・・ • でもスポットインスタンスも使える • 地味にProcessingより使えるインスタンスタイプが多い 13
最終的な構成 • Training jobで推論 • trainjobのマネージドな出⼒は丸ごと1ファイルに圧縮された上でs3に吐か れる • しかも出⼒なしに設定することもできない •
推論結果は1ファイルに勝⼿に圧縮してほしくないので、推論処理の⼀部と して⼿動upload • 出⼒はダミーのパスに書き捨てる • 「70% saving」とか表⽰されるのでとてもお得感がある • Processingと⽐べてデータのマウント先が制約されるが、manifest fileは使い 回せた 14
未だ残るつらさ • manifest fileがローカルモードに対応してない • ローカルでの動作検証ができない • せめて出⼒を⾮圧縮で書き出すオプションがほしい 15
16 まとめ
まとめ • 動画を⼊⼒とする推論パイプラインをSageMakerで作った • BatchTransformは純粋なバッチ処理には実は適してない • Processingは任意処理の実⾏環境として使い勝⼿が良い • Training jobはちょっと癖があるが、学習以外の⽤途にも使える
• 若⼲余分な機能と制約が付いてるがほぼ任意コードを実⾏できる • 現状sagemakerでスポットインスタンスが使えるのはtraining jobのみ • 完全マネージドで従量課⾦なので、定常コストゼロで運⽤できていい感じ 17