"AWSBatch" (バッチ計算プロバイダ)
詳細
環境特性
| "IOBucket" | (required) | ジョブの入出力データを保存するためのAmazon S3バケットの名前 | |
| "JobDefinition" | (required) | 送信されたジョブに使う,AWS Batchのジョブ定義のARN | |
| "JobQueue" | (required) | ジョブが送信される,AWS BatchのジョブキューのARN | |
| "ServiceObject" | Automatic | "AWS"サービスのServiceObject |
ジョブ設定
| "GPUCount" | Inherited | GPUの数(整数) » | |
| "Memory" | Automatic | "InformationUnit"の数量あるいはメビバイトの数(整数) » | |
| "VCPUCount" | Inherited | vCPUの数(整数) » |
ジョブの通知
ジョブステート
| "Submitted" | 送信されたジョブはまだAWS Batchのスケジューラによって評価されていない | |
| "Pending" | ジョブは従属ステートが満たされるのを待っている | |
| "Runnable" | ジョブは計算リソースが利用可能になるのを待っている | |
| "Starting" | ジョブがインスタンスにスケジュールされ,そのコンテナの画像がダウンロードされている | |
| "Running" | ジョブのコンテナが始められた | |
| "Succeeded" | ジョブの実行に成功し,出力がアップロードされた | |
| "Failed" | ジョブの実行に失敗した |
ジョブ特性
| "JobExitCode" | ジョブコンテナ内のカーネルによって返される終了コード | |
| "JobLog" | ジョブコンテナからのコンソールログ | |
| "JobStatusReason" | ジョブが現在のステートにある理由を説明する文字列 | |
| "ProviderJobID" | AWSがジョブに対して提供する一意的な識別子 |
| "ChildJobExitCodes" | 各配列の子ジョブの"JobExitCode"特性 | |
| "ChildJobStatusReasons" | 各配列の子ジョブの"JobStatusReason"特性 | |
| "JobStatusReason" | 配列ジョブが現在のステートにある理由を説明する文字列 | |
| "ProviderJobID" | AWSが配列ジョブに対して提供する一意的な識別子 |
| "JobExitCode" | ジョブコンテナ内のカーネルによって返される終了コード | |
| "JobLog" | 子のジョブコンテナからのコンソールログ | |
| "JobStatusReason" | 子のジョブが現在のステートにある理由を説明する文字列 | |
| "ProviderJobID" | AWSが子のジョブに対して提供する一意的な識別子 |
例題
すべて開く すべて閉じる例 (2)
AWS Batchのバッチ計算プロバイダを設定するのワークフローで説明されているように"AWSBatch"のバッチ計算プロバイダを設定してから,"AWSBatch"のRemoteBatchSubmissionEnvironmentオブジェクトを作成する:
environment = RemoteBatchSubmissionEnvironment["AWSBatch", <|
"IOBucket" -> "my-job-bucket",
"JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1:123456789012:job-definition/MyDefinition:1"
|>]RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1:123456789012:job-definition/MyDefinition:1",
"IOBucket" -> "my-job-bucket"], "Valid" -> True]job = RemoteBatchSubmit[environment, 2 + 2]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... reated" -> True],
"ProviderJobID" -> "f82ccd45-8697-44d8-a568-c5490a93bd0e",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[2048, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]job["JobStatus"]ジョブが完了してから,もう一度ジョブの状態についてのクエリを行う:
job["JobStatus"]job["EvaluationResult"]明示的に指定された"AWS"サービスオブジェクトを使って,環境オブジェクトを作成する:
aws = ServiceConnect["AWS"]ServiceObject["AWS", "ID" -> "connection-1fdc21f34e3b8af98e16ae0b2d970261"]RemoteBatchSubmissionEnvironment["AWSBatch", <|
"JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1:123456789012:job-definition/MyDefinition:1",
"IOBucket" -> "my-job-bucket",
"ServiceObject" -> aws
|>]RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1:123456789012:job-definition/MyDefinition:1",
"IOBucket" -> "my-job-bucket"], "Valid" -> True]ジョブ設定 (4)
"GPUCount" (1)
GPU計算を使って事前訓練されたニューラルネットにおいて推論を行うAWS Batchに配列ジョブを送信する:
images = RandomSample[ResourceData["MNIST"], 20][[All, 1]];
job = RemoteBatchMapSubmit[
RemoteBatchSubmissionEnvironment[...],
model[#, TargetDevice -> "GPU"]&,
images,
RemoteProviderSettings -> <|"GPUCount" -> 1|>,
Initialization :> (model = NetModel["LeNet Trained on MNIST Data"])
]RemoteBatchJobObject["AWSBatch", Association["ChildJobCount" -> 4, "ChildJobsPerInputChunk" -> 4,
"Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueu ... toCreated" -> True], "ProviderJobID" -> "d50c05f5-c899-48e4-b148-cf6002b60a49",
"ProviderSettings" -> Association["GPUCount" -> 1, "Memory" -> Quantity[4096, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]AssociationThread[images -> job["EvaluationResults"]]"Memory" (2)
ジョブのメモリ制限は,"Memory"のジョブ設定で調整することができる:
job = RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], Array[Range[1, #]&, 38000];, RemoteProviderSettings -> <|"Memory" -> Quantity[8, "Gibibytes"]|>]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... toCreated" -> True],
"ProviderJobID" -> "b23a465a-113e-4266-a647-17ff8afffa8b",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[8, "Gibibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]job["JobStatus"]他に指定がない限り,デフォルトのメモリ制限は,設定されたvCPUとGPUの数に基づく:
jobs = {
RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], 2 + 2],
RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], 2 + 2, RemoteProviderSettings -> <|"VCPUCount" -> 16|>],
RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], 2 + 2, RemoteProviderSettings -> <|"GPUCount" -> 2|>]
};
#["ProviderSettings"]& /@ jobs"VCPUCount" (1)
4つのvCPUを送信されたジョブに割り当てるようにAWS Batchに指示する:
job = RemoteBatchSubmit[
RemoteBatchSubmissionEnvironment[...],
{$ProcessorCount, ParallelEvaluate[$KernelID]},
RemoteProviderSettings -> <|"VCPUCount" -> 4|>
]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... toCreated" -> True],
"ProviderJobID" -> "09b6f4aa-31b5-4ba7-8ac7-d84d39e018e6",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[4, "Gibibytes"],
"VCPUCount" -> 4], "TimeConstraint" -> Quantity[86400, "Seconds"]]]job["EvaluationResult"]ジョブ特性 (2)
"Single"ジョブ (1)
RemoteBatchSubmitを使って,AWS Batchにバッチジョブを送信する:
job = RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], 2 + 2]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... reated" -> True],
"ProviderJobID" -> "8869279e-feaf-4fcc-a201-17747d6c896a",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[2048, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]ジョブの状態について,ジョブがその状態に移行した理由と一緒にクエリを行う:
{job["JobStatus"], job["JobStatusReason"]}job["JobLog"]"Array"および"ArrayChild"のジョブ (1)
RemoteBatchMapSubmitを使って,AWS Batchに配列ジョブを送信する:
arrayJob = RemoteBatchMapSubmit[
RemoteBatchSubmissionEnvironment[...],
# ^ 2&, Range[8]
]RemoteBatchJobObject["AWSBatch", Association["ChildJobCount" -> 3, "ChildJobsPerInputChunk" -> 3,
"Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueu ... toCreated" -> True], "ProviderJobID" -> "12ed940d-b260-4c81-ace3-74e6ea6e2cab",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[2048, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]それぞれの子のジョブの状態について,ジョブが現行状態に移行した理由と一緒にクエリを行う:
Merge[{arrayJob["ChildJobStatuses"], arrayJob["ChildJobStatusReasons"]}, Identity]最初の子のジョブを表すRemoteBatchJobObject式を得る:
childJob = arrayJob["ChildJobObjects"][[1]]その子のジョブの状態について,子のジョブが現行状態に移行した理由と一緒にクエリを行う:
{childJob["JobStatus"], childJob["JobStatusReason"]}childJob["JobLog"]特性と関係 (1)
ジョブがRemoteBatchJobAbortで停止された場合には,"JobStatusReason"特性の値は,停止のリクエストが Wolfram言語からのものであることを示す:
job = RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], 2 + 2]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... reated" -> True],
"ProviderJobID" -> "d1ee02ea-e40a-4690-ac13-283610084d1b",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[2048, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]RemoteBatchJobAbort[job]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... reated" -> True],
"ProviderJobID" -> "d1ee02ea-e40a-4690-ac13-283610084d1b",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[2048, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]{job["JobStatus"], job["JobStatusReason"]}考えられる問題 (2)
job = RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], Array[Range[1, #]&, 38000];]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... reated" -> True],
"ProviderJobID" -> "fe328b8a-6b14-4c26-a9f2-368638ba5a3c",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[4096, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]{job["JobStatus"], job["JobStatusReason"]}ジョブのメモリ制限は,"Memory"のジョブ設定で調整することができる:
job = RemoteBatchSubmit[RemoteBatchSubmissionEnvironment[...], Array[Range[1, #]&, 38000];, RemoteProviderSettings -> <|"Memory" -> Quantity[8, "Gibibytes"]|>]RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... toCreated" -> True],
"ProviderJobID" -> "b23a465a-113e-4266-a647-17ff8afffa8b",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[8, "Gibibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[86400, "Seconds"]]]job["JobStatus"]AWS Batchは,ジョブが完了の状態("Succeeded" または"Failed")に達してから24時間後にジョブのメタデータを削除する.このことによって,メタデータについてのクエリが欠測値を返す:
job = RemoteBatchJobObject["AWSBatch",
Association["Environment" -> RemoteBatchSubmissionEnvironment["AWSBatch",
Association["JobQueue" -> "arn:aws:batch:us-east-1:123456789012:job-queue/MyQueue",
"JobDefinition" -> "arn:aws:batch:us-east-1: ... eated" -> True],
"ProviderJobID" -> "d80a93c8-fc81-4694-8904-3dfd0cd63a06",
"ProviderSettings" -> Association["GPUCount" -> 0, "Memory" -> Quantity[2048, "Mebibytes"],
"VCPUCount" -> 1], "TimeConstraint" -> Quantity[604800, "Seconds"]]];job["JobStatus"]ジョブの出力データには,手動で削除されるか,送信環境のI/Oバケットのライフサイクルポリシーによって(もしそのようなポリシーが設定されているのであれば)有効期限が自動的に切れるかするまで,アクセス可能である:
job["EvaluationResult"]関連するワークフロー
- AWS Batchのバッチ計算プロバイダを設定する
関連リンク
履歴
2020 で導入 (12.2) | 2021 で更新 (13.0)