运行任务和添加应用程序包
使用 Batch REST API 并发运行任务
Azure Batch 使用并行任务跨计算节点拆分作业。 Azure Batch 特别适合运行大规模并行和高性能计算批处理作业。 Batch 服务为你处理所有工作,包括管理和安排运行方案所需的所有节点和应用程序。
如果池中的节点数量较少,则可以通过同时运行多个任务来最大程度地提高资源使用率。 当多个任务共享计算节点时,某些工作负载的作业时间可能更短,成本更低。
某些情况下,可能需要最大程度地减少可共享数据的任务的数据传输。 将共享数据复制到较小数目的节点并在每个节点上并行运行任务,可以显著减少数据传输费用。 此方法可以缩短将数据传输到所有节点而不是将数据共享到大量节点所花费的时间。
允许并行执行任务
并行任务执行控制单个节点可同时在一个池中处理的任务数。
在 Batch 中,由槽控制并行任务执行。 任务具有名为 RequiredSlots
的属性,该属性表示任务的资源密集程度。 资源密集型任务比资源松散任务需要的槽要多。
创建池时,可以通过设置 taskSlotsPerNode
属性来指定每个节点可用的任务槽数。 此属性控制可在节点上并发运行的任务的资源密集程度。
例如,如果池的 taskSlotsPerNode
属性设置为 16,则在节点上并发运行的任务绝不会超过 16 个槽。 此设置意味着,例如:
- 需要 8 个槽的 2 个任务可同时运行,因为槽数等于 16 (2 * 8 = 16)
- 需要 5 个槽的 3 个任务可同时运行,因为槽数小于 16 (3 * 5 = 15)
- 需要 4 个槽的 5 个任务可同时运行,因为槽数大于 16 (5 * 4 = 20)
taskSlotsPerNode
属性最多可以是节点具有的 vCPU 数量的 4 倍。 若要确定一个节点上有多少个 vCPU 可用,请参阅 Azure 中虚拟机的大小。
注意
设置 taskSlotsPerNode
属性后,无法对其进行修改。 更改它需要创建新池。
根据预期任务所需的 CPU、内存或 I/O 密集程度设置 RequiredSlots
属性。 此外,根据在不减少任务执行时间的情况下可以并发运行的任务数来设置 taskSlotsPerNode
属性。
在 Azure Batch 上添加应用程序包并运行容器应用程序
应用程序包
在 Azure Batch 中,应用程序是指一组已创建版本的二进制文件,这些文件可自动下载到池中的计算节点。 一个应用程序包含一个或多个应用程序包,这些包代表应用程序的不同版本。
可以在池或任务级别指定应用程序包。 当池中的所有节点都运行作业的任务时,便适合使用池应用程序包。
创建池时,可以指定多个应用程序包。 当节点加入池时,以及节点重启或重置映像时,部署应用程序。 若要将新包安装到现有池,必须重启其节点。
如果选择在任务级别部署应用程序包,则它在共享池环境中很有用。 在这些环境中,不同的作业在一个池中运行,作业完成时不会删除池。 如果作业中的任务数小于池中的节点数,任务应用程序包可以尽量减少数据传输,因为应用程序只部署到运行任务的节点。
可以使用 Azure 门户或 Batch 管理 API 来管理 Batch 帐户中的应用程序包。 若要使用应用程序包,必须将 Azure 存储帐户链接到 Batch 帐户。 Batch 服务使用关联的存储帐户存储应用程序包。 建议专门创建一个与 Batch 帐户配合使用的存储帐户。
容器应用程序
容器正在变成对云应用程序执行打包、部署和管理操作的首选方式。 不管什么方案(包括简单应用程序、任务自动化、生成作业),只要能够在隔离容器中操作,就可以使用 Azure 容器实例这种解决方案。
使用容器可以方便地运行 Batch 任务,无需管理环境和依赖项即可运行应用程序。 容器将应用程序部署为轻量级、可移植、自给自足的单元,可以在各种不同的环境中运行。 Batch 中基于容器的任务也可利用非容器任务的功能,包括应用程序包以及资源文件和输出文件的管理。
可以创建一个带或不带预提取容器映像的已启用容器的池。 可以通过预提取过程从 Docker Hub 预加载容器映像,或在 Internet 上预加载另一个容器注册表(如 Azure 容器注册表)。
预提取容器映像的优点是,当任务开始运行时,它们不必等待容器映像下载完毕。 容器配置在创建池时将容器映像拉取到虚拟机。 然后,在池中运行的任务即可引用容器映像和容器运行选项列表。