"AWSBatch" (バッチ計算プロバイダ)

詳細

AWS Batchは,Amazon EC2の計算インスタンスの管理されたプールあるいは管理されていないプールで,ジョブをスケジュールする,コンテナベースのバッチ計算サービスである.
Wolfram言語で"AWSBatch"のバッチ計算プロバイダを使えるように設定するには,AWS Batchのバッチ計算プロバイダを設定するのワークフローに記載の指示に従われたい.
AWS Batchは,それぞれのジョブのvCPUの必要数に基づいて,ジョブをインスタンスにパックする.複数のジョブを単一のEC2インスタンスで同時に実行することが可能である.それぞれのジョブは専用のDockerコンテナで実行される.
"AWSBatch"のバッチ計算プロバイダは,ユーザ指定のAmazon S3バケットにジョブの入出力データを保存する.
"AWSBatch"のバッチ計算プロバイダは,Linuxベースのジョブのみをサポートする.

環境特性

以下の特性が"AWSBatch"プロバイダのRemoteBatchSubmissionEnvironmentオブジェクトでサポートされる.
  • "IOBucket"(required)ジョブの入出力データを保存するためのAmazon S3バケットの名前
    "JobDefinition"(required)送信されたジョブに使う,AWS Batchのジョブ定義ARN
    "JobQueue"(required)ジョブが送信される,AWS BatchのジョブキューのARN
    "ServiceObject"Automatic"AWS"サービスのServiceObject
  • "IOBucket""JobDefinition""JobQueue"の特性は,有効なRemoteBatchSubmissionEnvironmentオブジェクトを構築する必要がある.
    "ServiceObject"特性が省略されている(あるいはAutomaticに設定されている)場合には,サービスオブジェクトは自動的に構築され,ServiceConnect["AWS"]で接続される.
    "ServiceObject"特性が"New"に設定されている場合には,ServiceConnect["AWS","New"]で新しいサービス接続が作成され,保存されている接続や認証情報はどれも無視される.
    AWS Batchのバッチ計算プロバイダを設定するのワークフローに,自分のAWSアカウントに必要な環境リソースすべてを,自動化されたAWS CloudFormationテンプレートを使って作成する方法が記載されている.

    ジョブ設定

    "AWSBatch"のプロバイダを使う場合に,以下の設定がRemoteProviderSettingsオプションでサポートされる.
  • "GPUCount"InheritedGPUの数(整数) »
    "Memory"Automatic"InformationUnit"の数量あるいはメビバイトの数(整数) »
    "VCPUCount"InheritedvCPUの数(整数) »
  • "GPUCount""Memory""VCPUCount"の設定の値Inheritedは,供給されたRemoteBatchSubmissionEnvironment オブジェクトで指定された,AWS Batchのジョブ定義の値に対応する.
    "GPUCount"設定はAWS Batchに,最低でも使用可能なGPUの指定数を持つインスタンスにジョブをスケジュールし,ジョブコンテナ内でそのGPU数を使用可能にするように指示する.
    "Memory"設定はAWS Batchに,最低でも使用可能なメモリの指定量を持ち,別の実行中のジョブに割り当てられていないインスタンスにジョブをスケジュールするように指示する.これは,ジョブのメモリ消費においてハードリミットとしては働かない. »
    デフォルト設定"Memory"Automaticのとき,メモリの最低制限は,ジョブ定義と式Max[vCPUCount*,GPUCount*,]の値のうち,大きい方に設定される. »
    "VCPUCount"設定の値は,CPU時間をジョブコンテナ内のプロセスに対するホストインスタンスに割り当てる場合,Linuxカーネルスケジューラの重みとして使われる.固定数のvCPUがジョブコンテナ専用に指定されるとは限らない.
    RemoteBatchSubmitで送信された"Single"タイプのジョブ内では,ParallelEvaluateParallelMap等の関数は自動的に"VCPUCount"設定の値に等しい数のサブカーネルを起動する.この動作は,LaunchKernelsを明示的なカーネル数と一緒に呼び出すことによって無効にできる.
    "AWSBatch"プロバイダを使っているときには,RemoteBatchSubmitRemoteBatchMapSubmitTimeConstraintオプションの値は,少なくとも60秒でなければならない.TimeConstraintオプションはデフォルトで使用されているジョブ定義の"Execution timeout"値になる.

    ジョブの状態

    "AWSBatch"プロバイダを使っている場合に,"JobStatus"のジョブ特性の値として以下の値が可能である.典型的なジョブが渡される順にリストされている.
  • "Submitted"送信されたジョブはまだAWS Batchのスケジューラによって評価されていない
    "Pending"ジョブは従属状態が満たされるのを待っている
    "Runnable"ジョブは計算リソースが利用可能になるのを待っている
    "Starting"ジョブがインスタンスにスケジュールされ,そのコンテナの画像がダウンロードされている
    "Running"ジョブのコンテナが始められた
    "Succeeded"ジョブの実行に成功し,出力がアップロードされた
    "Failed"ジョブの実行に失敗した
  • "Running"の状態にあるジョブは,入力ファイルのダウンロード中,ジョブコードの評価中,あるいは出力データのアップロード中である.
    配列ジョブは,その構成要素である子のジョブすべてが成功する(その時点で"Succeeded"の状態に移行する)か,少なくとも1つの子のジョブに失敗する(その時点で"Failed"の状態に移行する)かするまで,"Pending"の状態のままである.
    ジョブの状態についての詳細は,AWS Batchのドキュメントで見ることができる.

    ジョブ特性

    "AWSBatch"プロバイダを使っているときには,RemoteBatchJobObjectがサポートする標準特性に加えて,"Single"タイプのジョブオブジェクトから以下の特性が使用可能である.
  • "JobExitCode"ジョブコンテナ内のカーネルによって返される終了コード
    "JobLog"ジョブコンテナからのコンソールログ
    "JobStatusReason"ジョブが現在の状態にある理由を説明する文字列
    "ProviderJobID"AWSがジョブに対して提供する一意的な識別子
  • "AWSBatch"プロバイダを使っているときには,RemoteBatchJobObjectがサポートする標準特性に加えて,"Array"タイプのジョブオブジェクトから以下の特性が使用可能である.
  • "ChildJobExitCodes"各配列の子ジョブの"JobExitCode"特性
    "ChildJobStatusReasons"各配列の子ジョブの"JobStatusReason"特性
    "JobStatusReason"配列ジョブが現在の状態にある理由を説明する文字列
    "ProviderJobID"AWSが配列ジョブに対して提供する一意的な識別子
  • "AWSBatch"プロバイダを使っているときには,RemoteBatchJobObjectがサポートする標準特性に加えて,"ArrayChild"タイプのジョブオブジェクトから以下の特性が使用可能である.
  • "JobExitCode"ジョブコンテナ内のカーネルによって返される終了コード
    "JobLog"子のジョブコンテナからのコンソールログ
    "JobStatusReason"子のジョブが現在の状態にある理由を説明する文字列
    "ProviderJobID"AWSが子のジョブに対して提供する一意的な識別子
  • "JobExitCode"特性の可能な値のいくつかについて,その意味がExitのドキュメントページにリストさている.
    AWS Batchが提供する"JobStatusReason"特性の値は,現在の状態によっては,与えられたジョブから欠けていることがある.
    "JobLog"特性の値は,Amazon CloudWatch Logsから取り出され,ジョブが"Running"の状態に達するまで,この値はない.
    "ProviderJobID"特性の値は,ジョブをWolframシステム内で特定する"JobUUID"特性に対して,ジョブをAWS Batchに特定する.
    AWS Batchは有効期限切れになり,ジョブのメタデータはジョブが完了状態("Succeeded"または"Failed")に達してから24時間後に削除する. »
    有効期限が切れたジョブを表すRemoteBatchJobObject式は,状態を尋ねることはできず,RemoteBatchJobsでリストされない.有効期限が切れたジョブからの出力データは,バケットのライフサイクルポリシーによって手動的に削除されるか有効期限がきれるかするまでは,Amazon S3に残され,RemoteBatchJobObjectからアクセス可能である.

    例題

    すべて開くすべて閉じる

      (2)

    AWS Batchのバッチ計算プロバイダを設定するのワークフローで説明されているように"AWSBatch"のバッチ計算プロバイダを設定してから,"AWSBatch"RemoteBatchSubmissionEnvironmentオブジェクトを作成する:

    作成された環境を使ってジョブを送信する:

    ジョブの状態についてのクエリを行う:

    ジョブが完了してから,もう一度ジョブの状態についてのクエリを行う:

    ジョブの出力をダウンロードする:

    明示的に指定された"AWS"サービスオブジェクトを使って,環境オブジェクトを作成する:

    ジョブ設定  (4)

    "GPUCount"  (1)

    GPU計算を使って事前訓練されたニューラルネットにおいて推論を行うAWS Batchに配列ジョブを送信する:

    配列ジョブの出力をダウンロードする:

    "Memory"  (2)

    ジョブのメモリ制限は,"Memory"のジョブ設定で調整することができる:

    他に指定がない限り,デフォルトのメモリ制限は,設定されたvCPUとGPUの数に基づく:

    "VCPUCount"  (1)

    4つのvCPUを送信されたジョブに割り当てるようにAWS Batchに指示する:

    ジョブ特性  (2)

    "Single"ジョブ  (1)

    RemoteBatchSubmitを使って,AWS Batchにバッチジョブを送信する:

    ジョブの状態について,ジョブがその状態に移行した理由と一緒にクエリを行う:

    ジョブコンテナからコンソール出力を得る:

    "Array"および"ArrayChild"のジョブ  (1)

    RemoteBatchMapSubmitを使って,AWS Batchに配列ジョブを送信する:

    それぞれの子のジョブの状態について,ジョブが現行状態に移行した理由と一緒にクエリを行う:

    最初の子のジョブを表すRemoteBatchJobObject式を得る:

    その子のジョブの状態について,子のジョブが現行状態に移行した理由と一緒にクエリを行う:

    子のジョブコンテナからコンソール出力を得る:

    特性と関係  (1)

    ジョブがRemoteBatchJobAbortで停止された場合には,"JobStatusReason"特性の値は,停止のリクエストが Wolfram言語からのものであることを示す:

    考えられる問題  (2)

    AWS Batchは,メモリ制限を超えたジョブを終了する:

    ジョブのメモリ制限は,"Memory"のジョブ設定で調整することができる:

    AWS Batchは,ジョブが完了の状態("Succeeded" または"Failed")に達してから24時間後にジョブのメタデータを削除する.このことによって,メタデータについてのクエリが欠測値を返す:

    ジョブの出力データには,手動で削除されるか,送信環境のI/Oバケットのライフサイクルポリシーによって(もしそのようなポリシーが設定されているのであれば)有効期限が自動的に切れるかするまで,アクセス可能である: