介绍 Azure CycleCloud 计划程序集成和自动缩放

已完成

使用云敏捷性,公司可充分利用 Azure 的超大规模功能,同时最大限度地降低与使用计算资源相关的运营成本。 能够自动缩放资源数量以满足其使用模式是该敏捷性的核心组成部分。 在 Azure CycleCloud 和 HPC 的上下文中,这意味着在群集作业的资源需求和群集计算节点数量之间实现密切相关。

通常,计划程序负责协调群集节点缩放。 计划程序需要能够向提供计算资源的平台传达其需求。 Azure CycleCloud 可帮助实现此功能。 在此单元中,你会了解此实现的原则。

Azure CycleCloud 在群集自动缩放中的作用是什么?

Azure CycleCloud 有助于在 Azure 中部署计划程序,进而分发和管理在由 Azure 资源组成的群集上运行的作业。 Azure CycleCloud 不能充当计划程序。 相反,它充当计划程序和基础平台之间的中介。 Azure CycleCloud 还提供基于 REST API 的编程接口和基于 Python 的客户端库,简化了相应计划程序的自动缩放功能的开发。

Azure CycleCloud 允许将托管群集的自动缩放行为与群集作业队列的长度关联起来。 你可定义用于控制空闲节点终止前的时间长度或自动停止检查频率等的模板参数,进一步自定义此行为。

所有内置模板直接在 Azure CycleCloud 图形界面中公开自动缩放设置。 在每种情况下,这些设置包括用于指定自动缩放范围下限和上限(以 CPU 核心数表示)的选项。 上限可帮助你最大程度地降低意外收费的可能性。 你可设置预算警报来进一步缓解此风险。

如果将下限阈值设置为 0,则创建群集只会配置计划程序头节点。 但是,当计划程序检测到已排队的作业时,它会启动执行相应工作负载所需的计算节点的预配,直至达到你定义的限制。 为了支持各个任务彼此独立执行的联系不太紧密作业或并行作业,会在第一个节点可用时立即开始运行作业。 对于使用消息传递接口 (MPI) 功能的联系紧密作业,等待时间会更长,具体取决于节点间依赖项的范围。 在作业队列为空的时长超过了允许的空闲时长后,计算节点会开始自动停止,并且群集将再次只包含计划程序头节点。

注意

此单元中介绍的基本概念在计划程序中很常见。 但是,它们的实现详细信息特定于计划程序。 有关每个实现的详细信息,请参阅各个计划程序文档。

如何将计划程序与 Azure CycleCloud 自动缩放集成

实现与 Azure CycleCloud 自动缩放集成的两个主要组件是 Azure CycleCloud 自动缩放库和需求计算器。

此图显示 Azure CycleCloud 的高级体系结构。

Azure CycleCloud 自动缩放库是一个开源的 GitHub 托管项目,允许 Python 帮助程序简化部署到 Azure 的所有计划程序的自动缩放开发。 帮助程序使用 Azure CycleCloud REST API 来协调 Azure 资源的预配。 该项目使用 Python 3,并且具有许多 Python 依赖项。 但其核心功能依赖于 Azure CycleCloud Python 客户端库。 自动缩放与监视作业队列的计划程序头节点集成。 自动缩放与在 Azure CycleCloud 应用程序服务器上运行的自动缩放 REST API 进行交互,可增加或减少计算节点数。

需求计算器负责根据计算节点和计划程序收集的作业数据来评估资源需求。 此评估会考虑计算和网络约束,例如最大群集大小或与 InfiniBand 相关的限制。 由此产生的资源需求会转化为对特定大小和配置的 Azure VM 进行预配或取消预配的请求。 自动缩放库将这些请求中继到 Azure CycleCloud REST API,然后通过其业务流程协调程序将这些请求传递到 Azure 资源管理器。

注意

计划程序集成可满足联系不太紧密的工作负载或并行工作负载的需求,在这些工作负载中,管理群集大小是首要考虑因素;而 Azure CycleCloud 还支持联系紧密的工作负载,在这些工作负载中,节点邻近性和网络延迟至关重要。