toto_1212

技術のログをツラツラ書きます。自分用ですが参考にしていただけたら嬉しいです。間違ってたらドンドン突っ込んでください。

AWS Batchのメモ

-バッチ処理とは

バッチコンピューティングはシュミレーション等、負荷の高い計算をスーパーコンピュータやクラスタ等で順次実行するような処理
 →ゲノム解析、3DCGレンダリングエンコード等のメディア処理

AWS Batchは上記のような大規模計算における「バッチ処理」を効率的に行うためのマネージドサービス
夜間や定時にジョブを実行するような定常業務におけるバッチ処理AWS Batchでは満たせない

高価なスパコンを有効活用するために「ジョブ」をqueueingして順次処理する仕組みが考案された
・ユーザが投入したジョブを待ち行列に貯める(queueing)
・空いているコンピュータにジョブを割り当てて処理させる(dispatch)

-オンプレミスバッチコンピューティングの課題

・リソースが限られているので、ジョブが増えると待ち時間が長くなる
・物理コストが高い(そのものの費用や管理面)

-AWS上でバッチコンピューティングを作る利点

・複数ジョブを同時実行して処理時間を短縮できる
クラウドなら必要に応じたスケールが可能なので、必要に応じた台数でクラスタ構成や上部スケジュールを組むことができ
 ジョブが終了したらインスタンスを停止することでコストも抑えることが可能
・タスクに適したマシン構成が可能で無駄がない

-AWS Batchの概要

・ジョブはDockerコンテナイメージを元に作成し、自動でスケールするコンピューティング環境で実行
インスタンスタイプやvCPU数、スポットインスタンス利用有無等を任意で指定
・コンテナを用意するだけでスケーラブルなバッチコンピューティング環境が使える
Amazon CloudWatch、AWS Step Function、AWS CloudTrail等と連携可能

-AWS Batchの料金

AWS Batch自体の利用は無料 起動されているEC2の課金のみ

-AWS Batchより他AWSサービスが適しているケース

・コンテナ化が難しい
・既存のジョブスケジューラから移行が難しい
・1つのジョブが数秒で終わる
 →AWS Step Functions + LambdaやS3 batchを検討
機械学習用とでモデル設計から推論エンドポイントまでやる
 →sagemakerを検討

-AWS Batchの概念

f:id:toatoshi:20210217081640p:plain
https://www.slideshare.net/AmazonWebServicesJapan/20190911-aws-black-belt-online-seminar-aws-batch#32

・ジョブ定義(Job Defifitions)
 →ジョブを作成する際のテンプレート
・ジョブ(Jobs)
 →AWS Batchによって実行される作業単位
・ジョブキュー(Job Queues)
 →投入されたジョブの待ち行列となる場所
・コンピューティング環境(Compute Environments)
 →実際に計算を行うECSクラスタ
・コンテナレジストリ
 →Dockerコンテナイメージ置き場
・ストレージ(S3、EFS)
 →永続化が必要なデータは外部ストレージへ

-AWS Batchの機能

・ジョブ状態の繊維
 ジョブの状態変化をSNSに通知することが可能
 ジョブを要求するリソースが、指定されたコンピューティング環境に含まれない場合は「Runnable」のまま停止するため注意
 →おおきなvCPU/メモリを指定し、適合するインスタンスがコンピューティング環境にない
  GPUを要求したがコンピューティング環境にGPUを含んだインスタンスがない
・配列ジョブとジョブ依存関係
 配列ジョブ
 →1回のジョブ投入で複数の小ジョブを作成
  小ジョブは環境変数にて自身の配列IDを取得
  配列IDで処理を分ける
 ジョブ依存関係
 →依存関係に指定したジョブが完了したら実行可能となる
・ジョブとコンピューティング環境Tips
 ジョブ
 →ジョブ試行回数/タイムアウトを指定する
 コンピューティング環境
 →マネージド型/アンマネージド型を指定可能だが通常はマネージド型を選択
  インスタンスタンスタイプをファミリー単位で指定することでジョブ要求に対し最適なものが資料される
  複数AZを指定することで耐障害性が上がる
  最小vCPUを0とすることで使用しないときにはインスタンスが立ち上がらない設定になる

-AWS Batchのセキュリティ

・IAM PolicyによるAWS Batch API実行時の制約を設定
 →コンテナ内にPOSIXユーザの制限
  利用可能なコンテナイメージ/レジストリの制限
・ジョブ実行コンテナに対するIAM Role設定
 →特定S3バケットへのアクセス等、必要最低限の権限を付与
・ジョブ投入等のAPIをCloudTrailに記録

-AWS Batchの活用方法

・ジョブの投入方法
 →他のAWSサービスと連携したジョブ投入が可能
  マネージメントコンソール/CLIからジョブ投入
  S3ファイルアップロードトリガで、Lambdaファイルを処理するジョブを投入
  CloudWatch Eventsで決められた時間にジョブ投入
・複雑なジョブワークフローの作成
 →AWS Step Functionを使いAWS Batchのジョブ状態を管理

-事例

・HDDドライブヘッド設計 ピーク時7,000以上のコアを同時実行
 →1ヶ月かかる処理を8時間で完了
・58,000コアを伸縮するシステム
 →6週間かかるシュミレーションを10日で完了
・1,000万の化合物スクリーニングでピーク時90,000コアを同時処理
 →39年分の計算処理を9時間で完了

メモ用にAWS Blackbelt資料から情報を抜粋しています。
20190911 AWS Black Belt Online Seminar AWS Batch