"AWSBatch" (批处理计算服务商)

详细信息

AWS Batch 是一种基于容器的批处理计算服务,可以跨 Amazon EC2 计算实例的托管或非托管池调度作业.
要配置 "AWSBatch" 批处理计算提供程序以在 Wolfram 语言中使用,请按照设置 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 CloudFormation 模板在您的 AWS 账户中创建所有必需环境资源的说明.

    作业设置

    使用 "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*,] 中的较大者. »
    在将主机实例上的 CPU 时间分配给作业容器内的进程时,"VCPUCount" 设置的值用作 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" 状态的作业可能正在下载输入文件、评估作业代码或上传输出数据.
    阵列作业将保持在 "Pending" 状态,直到其所有子作业都成功(此时其转换为 "Succeeded" 状态)或至少一个子作业失败(此时其转换为 "Failed" 状态).
    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-provided unique identifier for the child job
  • "JobExitCode" 属性的一些可能值的含义列在 Exit 的参考页上.
    "JobStatusReason" 属性的值由 AWS Batch 提供,并且可能不存在于给定作业中,具体取决于其当前状态.
    "JobLog" 属性的值是从 Amazon CloudWatch Logs 检索的,并且在作业达到 "Running" 状态之时才会存在.
    "ProviderJobID" 属性的值向 AWS Batch 标识作业,而 "JobUUID" 属性则标识 Wolfram 系统中的作业.
    AWS Batch 会在作业达到完成状态("Succeeded""Failed")后 24 小时过期并删除作业的元数据. »
    表示已过期作业的 RemoteBatchJobObject 表达式无法查询状态,并且不会被 RemoteBatchJobs 列出. 过期作业的输出数据将保留在 Amazon S3 中,并可从 RemoteBatchJobObject 访问,直到被存储桶的生命周期策略手动删除或过期.

    范例

    打开所有单元关闭所有单元

    基本范例  (2)

    在按照设置 AWS Batch 计算提供程序工作流程中所述配置 "AWSBatch" 批处理计算提供程序后,创建一个 "AWSBatch" RemoteBatchSubmissionEnvironment 对象:

    使用创建的环境提交作业:

    查询作业状态:

    完成后再次查询作业的状态:

    下载作业的输出:

    使用明确指定的 "AWS" 服务对象创建环境对象:

    作业设置  (4)

    "GPUCount"  (1)

    向 AWS Batch 提交一个阵列作业,该作业使用 GPU 计算通过预训练的神经网络执行:

    下载阵列作业输出:

    "Memory"  (2)

    可以使用 "Memory" 作业设置调整作业的内存限制:

    若未另行指定,则默认内存限制基于配置的 vCPU 和 GPU 计数:

    "VCPUCount"  (1)

    指示 AWS Batch 为提交的作业分配四个 vCPU:

    作业属性  (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 存储桶上的生命周期策略手动删除或自动过期之前仍然可以访问: