你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
Azure CycleCloud 支持在节点阵列中部署 现成 VM ,以大幅降低群集的运营成本。
谨慎
现成 VM 不一定适用于所有的工作负载和群集类型。 它们不提供可用性或容量的 SLA。 它们是“可抢占”或“低优先级”实例。 Azure 可能会根据容量管理需求以及现付价格的变化来逐出这些实例。
为 Spot 配置节点数组
若要为节点数组启用 Spot,请在[[nodearray]]节中将Interruptible设置为 true。
CycleCloud 允许集群为 Spot 实例指定 MaxPrice。 由于现货价格会定期调整,且价格在区域和 SKU 之间变化很大,该 MaxPrice 设置控制您要为 VM 支付的最高价格(以 $/小时为单位)。 默认情况下,如果没有另行指定,CycleCloud 会设置 MaxPrice=-1 ,这意味着“不会依据现货价格驱逐实例”。在此设置下,实例仅因容量需求的变化或其他平台级决策而被驱逐。
有关 Spot 实例可变定价的更多信息,请参阅 Spot 定价。
对于大多数 HPC 应用程序, MaxPrice=-1 都适合默认选择。 如果节点数组支持跨一系列 VM 版本的 多选自动缩放 ,则可以自定义 MaxPrice 为首选多选列表中的较低价格版本。
[cluster demo]
[[nodearray execute]]
Interruptible = true
MaxPrice = 0.2
有关更多信息,请参阅群集模板指南中的现成虚拟机。
现成 VM 收回
CycleCloud 使用计划事件功能来监视现场逐出。 当发生抢占事件时,VM 会通知 CycleCloud。 然后 CycleCloud 将实例移动到“正在等待逐出”状态。
常见问题
将 Spot 与 CycleCloud 配合使用涉及一些特定于 HPC 工作负载和 CycleCloud 自动缩放的注意事项。
何时应考虑使用 Spot?
- 单个作业相对较短?
- 运行时间在一小时以内的作业可能很适合使用现成 VM 实例,因为实例被逐出后,损失的进度相对较少。
- 您的调度程序是否会在主机故障时自动重试或重新排队这些失败的作业?
- 如果主机在执行期间被逐出,您的作业是否可以安全地重新运行?
- 一般来说,现成 VM 实例最适合无状态的工作负载。
- 是否将降低运行成本放在比完成时间更重要的位置?
- 现成 VM 通常非常适合那些可能会被安排在本地低优先级或回填队列中的工作负载。
- 在某些情况下,即使是短期的 MPI 作业,使用现成 VM 也可能是合适的。这种担忧就属于此类情况之一。
何时应避免使用 Spot?
- 如果你的作业是紧密耦合的 HPC 作业(例如 MPI 作业),那么它们可能不适合使用现成 VM。
- 如果作业至关重要且/或有完成期限,则常规优先级实例可能更合适,因为逐出和重试可以延长完成时间。
- 但是,这种情况可能是将群集配置为使用常规优先级和现成 VM 实例的组合的绝佳机会。 此配置可确保在尝试通过添加 Spot 实例来降低运行时和成本的同时满足截止时间。
- 如果作业无法安全重新运行,请避免使用现成 VM。
- 例如,如果作业在执行过程中修改数据库,则自动重新运行该作业可能会导致错误或结果无效。
- 如果作业运行时很长,则现成 VM 可能不适合。
- 对于长时间运行的进程,现成 VM 实例被收回的可能性以及重试的成本(资金和时间成本)都会增加。
- 但是,可能需要逐个案例来衡量此情况。
逐出和抢占
有关 Azure 中的现成逐出的详细信息,请参阅现成 VM 实例逐出策略。
问: CycleCloud 能否跟踪现成 VM 实例逐出和抢占?
答: 是的。 现成 VM 实例逐出事件会在“群集用户界面”页面中生成事件日志通知。
问: 用户如何收到逐出通知?
答: CycleCloud 逐出节点后,用户在 CycleCloud UI 的事件日志中查看群集的日志消息。 用户还可以注册,以便在现成 VM 实例被逐出后通过 Azure 事件网格 接收来自 CycleCloud 的事件。
- 用户可以在逐出前 30 秒检查计算机上的逐出通知。 有关如何注册事件的详细信息,请参阅 计划事件。
- 一般情况下,可以将逐出操作比作断开本地计算机的电源。 以相同的方式处理它。
- 重要说明:事件处理程序不应确认现成 VM 实例逐出事件,因为如果该事件被确认,Cyclecloud 事件处理程序可能无法接收到该事件。
问: 逐出的频率如何?
答: 逐出率变化很大。 这取决于整个区域的需求变化。
问: 为什么系统会逐出实例?
答: 现成 VM 不能保证可用性,可以随时逐出。 有关详细信息,请参阅 现成 VM 文档。 如果节点数组设置一个 MaxPrice,则当现成价格高于 MaxPrice时,系统会逐出实例。 这一逐出通常很少,因为现货价格变化缓慢。 但是,在以下情况下,逐出可能发生:
- 当常规优先级 VM 的需求上升时,现成容量会减少。
- 平台级事件,如计划内硬件维护。
我的工作流如何受到逐出的影响?
问: 当现成 VM 实例被收回时,我的作业会怎样?
答: 当现成 VM 实例被逐出时,节点会终止,除非你的作业经过编码处理,能够响应 30 秒的逐出通知并采取适当措施。 如果节点在没有处理逐出的情况下终止,则作业会失败(但可以重试)。
问: 节点是否从群集中删除?
答: 是的,节点已经在 CycleCloud UI 中被清理。 在受支持的计划程序中,计划程序还会清理节点。
问: 是否必须重新运行作业?
答: 通常,调度程序会负责重试和重新运行被逐出的作业。 但是,许多类型的任务不能容忍重试。 例如,在任务执行时,将部分数据写入持久性存储。 避免在 Spot 实例上运行这些作业。
问: 是否可以混合使用 Spot 和按需 VM 或 Regular-Priority VM?
答: 是的。 可以通过单独的现成 VM (Interruptible) 和非现成 VM 节点数组,将现成 VM 和常规优先级 VM 混合使用。 混合使用实例类型通常需要根据需求和所选计划程序做出一些配置决策。 下面是几个常见配置:
- 在计划程序中,将现成 VM 和常规优先级 VM 分别放入不同的队列中。
- 使用此配置,提交者可以轻松地将作业分配到适合的 VM 类型。
- 使用 Spot 和 Regular-Priority 实例创建单个大型资源池。
- 此配置适用于高度可缩放的工作负荷,这些工作负载使用少量的常规优先级实例来确保向前进度和大量 Spot 实例,以降低成本和运行时。
问: 是否可以更改 CycleCloud 节点数组的现成 VM 实例逐出策略?
答: 否。 如果设置该 EvictionPolicy 属性,VM 仍会被删除。
CycleCloud 中计划程序对现成 VM 实例收回的支持
有关 CycleCloud 的计划程序实现的详细信息,请参阅计划程序特定指南。
问: 我的计划程序的自动缩放程序如何处理现成 VM 实例的逐出?
答: 内置和受支持的计划程序(HTCondor、GridEngine、PBS Professional、Slurm、LSF)的所有自动缩放程序都试图妥善处理现成 VM 实例的逐出。 一般情况下,自动扩缩器会从调度程序中移除被驱逐的实例。 如果容量需求高于逐出后的新可用容量,则自动缩放程序将替换该实例。
构建自定义自动缩放程序时,应该预料到现成 VM 的逐出或一般的机器故障,并妥善处理这些情况。
问: 在被逐出实例上运行的作业会发生什么情况?
答: 提交作业时,决定如何处理此问题。 某些计划程序(如 GridEngine)允许为每个队列设置默认作。 默认情况下,除了 HTCondor 之外,所有内置的 CycleCloud 调度程序部署在节点被逐出或意外终止时,都会将作业标记为失败。 此行为是设计造成的,因为只有用户知道其作业是否可以安全重试。