ディープラーニングをaws lambdaとstep functionで自動化する
TRANSCRIPT
AWS STEP FUNCTION と LAMBDA でディープラーニングの訓練を全自動化するKeita Shimizu
自己紹介• 清水敬太• 趣味 : 釣りとかボードゲームとか• お仕事 : IT 系のサービス開発
(@通信系某社)• ここ数年で機械学習
(特に Deep Learning )を趣味で触っています
自己紹介• 清水敬太• 趣味 : 釣りとかボードゲームとか• お仕事 : IT 系のサービス開発
(@通信系某社)• ここ数年で機械学習
(特に Deep Learning )を趣味で触っています
趣味 = 自腹
今日のお話
「いかに小遣いの目減りを抑えるか」を巡る汗と涙の戦いなので、たぶんJAWSUG HPC 部会のビジョン「クラウドでだれでも HPC 」に沿ったものだと思います ..
ディープラーニング触ってて困ることその1
GPU 付きサーバが必須
GPU 付きサーバは安くない• スポット利用せずに普通に借りると月 20 万円とか(無理ゲー)
• 入札制の AWS のスポットインスタンスを使うとだいぶ安いけど、無視できない価格
無視できない価格• 一台あたり一時間ごとにチロルチョコが
2 ~ 3 個買えるくらい(安いとき)
塵も積もれば、なので放置は避けたい
しかも訓練時間が長い半日とか 1 日とか普通
数日とかも
訓練が終わったらサーバをちゃんと削除したいだから
ディープラーニング触ってて困ることその 2
訓練済みデータの収集がめんどい
一台なら SCP で数分でも
いろんな条件で並列に試してると取り出すだけで一仕事
しかも終わるタイミングバラバラだったりする
しまいにはどのサーバがどの条件かわからなくなる
そしてまだ結果を取り出してないサーバを消す
訓練結果を管理しやすい場所に集約したいだから
あと訓練条件とかもちゃんとラベルしたい
サーバレス!• サーバレスコンピューティングって多分こういうの
• 必要な時にサーバを立ち上げて使い終わったら捨てる• そのコントローラにもサーバを用いない• だから平時にはサーバを一台も管理せずに必要な時に
だけサーバが出現するシステムを作れる• (最近バズワードになりつつあるらしい)
AWS で使えるサーバレスな仕組み• AWS Lambda• Node.js / Python / Java / C# のコードを登録• AWS 内で発生したイベントでフックして起動(手動起動も可)• 各言語の AWS SDK を使えば AWS の操作を自動化できる( Labmda 専用のライブラリがあるわけではない)• 1 Labmda あたり実行時間は 60 秒まで=> 長い状態遷移を実行するのは向かない
AWS で使えるサーバレスな仕組み• AWS Step Functions• セルオートマトン的な状態遷移を定義• 条件分岐や並列処理も可• 個々の State での処理は AWS Lambda 起動して処理 / 結果受取する• 状態の遷移状況を可視的に確認可能• 長時間 / 状態遷移判断の伴う処理をコントロール可能• ピタゴラスイッチみたいで面白い
こういうものを作りたい1. 各実行ごとに専用の S3 バケットを作成
2. スポットインスタンスに入札
3. インスタンスを落札できたら SNS 通知
4. 訓練データ等をデータバケットからダウンロード
0.8 $ / h
5. 訓練の中間物 / 成果物を随時 S3 にアップロード6. 完了したら AWS SNS (メール or SMS )で通知一定時間経過後にインスタンスを削除する
New
作ったS3 バケットを作る
Spot Instance をリクエスト
入札が通ったか判定結果を通知
訓練が完了しているか判定待機
タスク完了を通知一定時間後、インスタンス削除
実行時• こんな感じの json を Input にして Step Function を起動する
• 実行名( =S3 バケット名)• 訓練対象のリポジトリ• 入力 / 出力ディレクトリ• 訓練前のデータ取得等準備に必要なコマンド• 訓練実行コマンド
実行時
こうやって…
実行時
こう
実行時
・実行は Web で確認できる・結果は S3 バケットにどんどん上がってくる
喜びの声• 実行を仕掛けておけば、あとは安心して眠れる• 出先でもスマホで進捗を確認できる( S3 ブラウザ)• いろんなハイパーパラメータ設定でたくさん並列実行しても安心• これを利用するために機械学習側のコードに手を入れる必要はない• つまりたぶんほとんどのバッチ処理に流用できる
その他• 細かい話はブログにかきました
http://mizti.hatenablog.com/entry/deeplearningwithawsstepfunction
• コードhttps://github.com/mizti/aws_stepfunc_chainer
• イラストはいらすとやさんからお借りしましたhttp://www.irasutoya.com/