你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

在 Azure CycleCloud 中使用现成 VM

Azure CycleCloud 支持在 nodearray 中部署 现成 VM ,以大幅降低群集的运营成本。

注意

现成 VM 不适用于所有工作负荷和群集类型。 它们不提供可用性或容量的 SLA。 它们是“抢占”或“低优先级”实例,并可能被 Azure 结构逐出以管理容量以及随着现成价格变化而逐出。

为现成配置 Nodearray

若要为 nodearray 启用 Spot,只需在[[nodearray]]节上设置为 Interruptible true 即可。

CycleCloud 允许群集指定 MaxPrice Spot 实例。 由于现成价格可能会定期调整,并且区域和 SKU 之间可能会有显著差异,因此 MaxPrice 允许用户控制他们愿意为 VM 支付的最高价格) ((以 $/小时为单位)。 默认情况下,CycleCloud 在未指定时设置 MaxPrice=-1 ,这意味着“不根据现价逐出”。通过此设置,实例仅因容量需求更改或其他平台级决策而被逐出。

有关现成实例的可变定价的详细信息,请参阅 成定价。

对于大多数 HPC 应用程序, MaxPrice=-1 这是一个很好的默认选择。 但是,如果 nodearray 支持跨一系列 VM SKU 进行 多选自动缩放 ,则 MaxPrice 也可能自定义为多选列表中的较低价格 SKU 创建首选项。

[cluster demo]

  [[nodearray execute]]
  Interruptible = true
  MaxPrice = 0.2

有关完整详细信息,请参阅群集模板指南中的 Spot 虚拟机

现成 VM 逐出

CycleCloud 监视器,用于通过 计划事件 功能进行现成逐出。 检测到现成抢占事件时,CycleCloud 会由 VM 通知,实例将移动到“正在等待逐出”状态。

常见问题

将 Spot 与 CycleCloud 配合使用具有特定于 HPC 工作负荷和 CycleCloud 自动缩放的一些注意事项。

何时应考虑使用 Spot?

  • 你的个人工作是否相对较短?
    • 一个很好的经验法则是,在一小时内运行的作业可能非常适合现成实例,因为如果实例被逐出,则相对较小的向前进度将丢失。
  • 计划程序是否自动重试/重新排队主机上失败的作业?
  • 如果主机在执行过程中被逐出,作业是否安全重新运行?
    • 通常,现成实例最适合无状态工作负荷。
  • 将运行成本降到比完成时间更重要吗?
    • 现成通常非常适合在本地安排在低优先级或回填队列中的工作负荷。
    • 这是 Spot 可能适用于短 MPI 作业的情况之一。

何时应避免使用 Spot?

  • 例如,如果作业紧密耦合 HPC 作业 (,MPI 作业) 则它们可能不适合 Spot。
  • 如果作业至关重要且/或有完成期限,则常规优先级实例可能更合适,因为逐出和重试可能会延长完成时间。
    • 但是,这可能是将群集配置为使用常规优先级和现成实例的组合,以确保在尝试通过添加 Spot 实例来降低运行时和成本的同时达到截止时间。
  • 如果作业无法安全重新运行,则应避免 Spot。
    • 例如,如果作业在执行期间修改数据库,则自动重新运行作业可能会导致错误或结果无效。
  • 如果作业运行时很长,则 Spot 可能不适合。
    • 对于长流程,现成逐出的机会和重试的时间成本都增加。
    • 但是,这种情况可能需要按大小写进行度量。

逐出/ 抢占

有关 Azure 中现成逐出的详细信息,请参阅 现成逐出策略

Q. CycleCloud 能否跟踪现成实例逐出/抢占?

A. 是的。 现成逐出事件将在群集 UI 页中生成事件日志通知。

Q. 用户如何收到逐出通知?

A. 逐出 CycleCloud 节点后,用户将在 CycleCloud UI 的事件日志中查看群集的日志消息。 在逐出现成实例后,用户还可以注册以通过 Azure EventGrid 从 CycleCloud 接收事件。

  • 用户可以在逐出前 30 秒检查计算机上的逐出通知。 有关如何注册事件的详细信息,请参阅 计划事件
  • 一般来说,逐出应该被视为类似于在本地计算机上拉插插件,应该以相同的方式进行处理。
  • 重要 事件处理程序 不应确认 现成逐出事件,因为如果已确认,Cyclecloud 事件处理程序可能不会收到该事件。

Q. 逐出的频率如何?

A. 逐出率高度可变,在很大程度上取决于整个区域的需求变化。

Q. 为什么被逐出实例?

A. 现成 VM 不保证可用性,随时可能逐出。 有关详细信息 ,请参阅现成 VM 文档 。 如果 nodearray 已设置 MaxPrice 实例,则当现价高于 MaxPrice该节点时,将逐出实例。 由于现货价格走得很慢,这往往 很少 见。 下面是 一些可能 触发逐出的方案:

  1. 随着常规优先级 VM 的需求增加,现成容量的减少。
  2. 平台级事件,例如计划的硬件维护。

我的工作流如何受到逐出的影响?

Q. 当现成实例被逐出时,我的作业会发生什么情况?

A. 除非将作业编码为处理 30 秒逐出通知并适当处理它,否则节点只会终止,并且作业在 (失败,并希望重新尝试) 。

Q. 节点是否从群集中删除?

A. 是的,节点将在 CycleCloud UI 中清理。 在受支持的计划程序中,节点也将在计划程序中清理。

Q. 作业是否必须重新运行?

A. 通常,计划程序的工作是重新尝试/重新运行被逐出的作业。 但是,许多作业类不能容忍重新尝试 (例如,当他们运行) 时将部分数据写入永久性存储。 这些作业可能不适合在现成实例上执行。

Q. 是否可以混合使用现成和按需/常规优先级 VM?

A. 是的。 可以使用单独的 Spot (Interruptible) 和非现成节点数组来创建现成和常规优先级的组合。 使用实例类型的组合通常需要根据用户选择的要求和计划程序做出一些配置决策。 下面是几个常见配置:

  • 将现成和Regular-Priority VM 分隔到计划程序中的单独队列中。
    • 此配置允许提交者在适当的 VM 类型上轻松定位作业
  • 使用 Spot 和 Regular-Priority 实例创建单个大型资源池。
    • 此配置可用于高度可缩放的工作负荷,这些工作负载使用少量的常规优先级实例来确保向前进度和大量 Spot 来降低成本和运行时。

Q. 是否可以更改 CycleCloud 节点数组 的现成逐出策略

A. 是的。 可以直接在 nodearray 上设置 EvictionPolicy 属性,将策略更改为 Delete 默认策略或 Deallocate (默认值: Delete) 。 但是,这目前仅适用于处理适当解除分配的自定义自动缩放程序。 当前的 Azure CycleCloud 自动缩放程序要求在逐出时删除现成实例。

CycleCloud 中现成逐出的计划程序支持

有关计划程序实现的详细信息,请参阅特定于计划程序的计划程序指南。

Q. 计划程序的自动缩放程序如何处理现成逐出?

A. 内置/支持的计划程序的所有自动缩放程序 (HTCondor、GridEngine、PBS Professional、Slurm、LSF) 尝试正常处理现成逐出。 一般情况下,逐出实例将从计划程序中删除,如果容量需求高于逐出后的新可用容量,则自动缩放程序将替换该实例。

生成自定义自动缩放程序,以预期现成逐出或常规计算机故障并正常处理它们。

Q. 在被逐出实例上运行的作业应该会发生什么情况?

A. 这在很大程度上由用户在提交作业时进行配置。 某些计划程序(如 GridEngine)也允许为每个队列配置默认操作。 默认情况下,除 HTCondor 之外,所有内置的 CycleCloud 计划程序部署都配置为在逐出或意外终止其上运行的节点时将作业标记为失败。 此行为是按设计进行的,因为只有用户才能知道其作业是否可以安全重试。