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

将现成 VM 与 Batch 工作负荷配合使用

Azure Batch 提供现成虚拟机 (VM) 来降低 Batch 工作负载的成本。 现成 VM 提供较大的经济型计算能力,使新型 Batch 工作负载成为可能。

现成 VM 利用 Azure 中多余的容量。 在池中指定现成 VM 时,Azure Batch 可以自动使用此多余容量(如果可用)。

使用现成 VM 的弊端是这些 VM 可能并不总是可用,也有可能随时被占用,具体取决于可用的容量。 出于此原因,对于作业完成时间很灵活且工作分布在多个 VM 上的批处理和异步处理工作负载,最适合使用现成 VM。

与专用 VM 相比,现成 VM 的价格更低。 若要深入了解定价,请参阅 Batch 定价

现成 VM 和低优先级 VM 的差异

Batch 提供两种类型的低成本可占用 VM:

  • 现成 VM,一种 Azure 范围的新式产品,也可用作单实例 VM 或虚拟机规模集。
  • 低优先级 VM,一种仅可通过 Azure Batch 获得的旧式产品。

获得的节点类型取决于 Batch 帐户的池分配模式,可在创建帐户期间设置该模式。 使用用户订阅池分配模式的 Batch 帐户始终会获得现成 VM。 使用 Batch 托管池分配模式的 Batch 帐户始终会获得低优先级 VM。

警告

2025 年 9 月 30 日之后将停用低优先级 VM。 在此之前,请在 Batch 中迁移为现成 VM

Azure 现成 VM 与 Batch 低优先级 VM 类似,但行为上存在一些差异。

点 VM 低优先级 VM
支持的 Batch 帐户 用户订阅 Batch 帐户 Batch 托管的 Batch 帐户
支持的 Batch 池配置 虚拟机配置 虚拟机配置和云服务配置(已弃用)
可用区域 支持现成 VM 的所有区域 除由世纪互联运营的 Microsoft Azure 以外的所有区域
客户资格 不适用于某些订阅产品/服务类型。 详细了解现成 VM 的限制 适用于所有 Batch 客户
可能的逐出原因 容量 容量
定价模型 相对于标准 VM 价格的可变折扣 相对于标准 VM 价格的固定折扣
配额模型 受限于订阅的核心配额 受限于 Batch 帐户的核心配额
可用性 SLA

现成 VM 的 Batch 支持

Azure Batch 提供多种功能来方便你使用现成 VM 并从中受益:

  • Batch 池可以包含专用 VM 和现成 VM。 创建池时可以指定每种类型的 VM 的数量,或者随时使用显式的大小调整操作或使用自动缩放来更改现有池的 VM 数量。 作业和任务提交内容可保持不变,而无需考虑池中的 VM 类型。 此外,还可以配置某个池完全使用现成 VM,以尽量最低的成本运行作业,但在容量降至最低阈值之下时,运转专用 VM 来保持作业的运行。
  • Batch 池会自动确定现成 VM 的目标数量。 如果 VM 被占用或不可用,Batch 将尝试替换丢失的容量并返回到目标。
  • 当任务被中断时,Batch 将检测并自动请求任务以再次运行。
  • 现成 VM 具有不同于专用 VM 的单独 vCPU 配额。 现成 VM 的配额高于专用 VM 的配额,因为现成 VM 的成本更低。 有关详细信息,请参阅 Batch 服务的配额和限制

注意事项和用例

许多 Batch 工作负载非常适合现成 VM。 当作业被分解为多个并行任务时,或当你有许多作业横向扩展并分布在多个 VM 上时,请考虑使用现成 VM。

非常适合现成 VM 的批处理用例示例包括:

  • 开发和测试:具体而言,开发大规模解决方案时可以实现极大的节省。 所有类型的测试都可以受益,但大规模负载测试和回归测试可以获得极大的好处。
  • 补充按需容量:现成 VM 可用于补充常规的专用 VM。 如果可用,则作业可以扩展,因而能够以更低的成本、更快的速度完成;如果不可用,则仍可遵循专用 VM 的基准。
  • 灵活的作业执行时间:如果作业必须完成的时间很灵活,那么可以容忍潜在的容量减少。 但是,随着现成 VM 的增加,作业往往能够以更低的成本、更快的速度运行。

可以通过多种方式将 Batch 池配置为使用现成 VM:

  • 池只能使用现成 VM。 在这种情况下,Batch 将在可用时恢复任何占用的容量。 此配置是执行作业最节省的方法。
  • 现成 VM 可与具有固定基线的专用 VM 结合使用。 专用 VM 的固定数量确保始终能够提供一些容量来保持作业的持续运行。
  • 池可以动态混用专用 VM 和现成 VM,以便在廉价的现成 VM 可用时仅使用此类 VM,而全价的专用 VM 可在需要时进行纵向扩展。 此配置将保留最小可用容量以保持作业的进展。

计划使用现成 VM 时,请记住以下做法:

  • 为了最大程度地利用 Azure 中的多余容量,可以横向扩展适当的作业。
  • VM 有时可能不可用或者被占用,导致作业可用的容量减少,或者导致任务中断,需要重新运行。
  • 执行时间较短的任务往往最适合在现成 VM 上运行。 对于包含长时间运行的任务的作业,如果任务被中断,这些作业受到的影响可能更大。 如果长时间运行的任务实施检查点来保存其执行进度,可以降低此影响。
  • 利用多个 VM 的长时间运行的 MPI 作业不是非常适合现成 VM,因为一个被抢占的 VM 可能会导致需要重新运行整个作业。
  • 如果未正确配置网络安全组或 NSG 规则,现成节点可能会标记为不可用。

创建和管理包含现成 VM 的池

Batch 池可以包含专用 VM 和现成 VM(也称为计算节点)。 可为专用 VM 和现成 VM 设置计算节点的目标数量。 节点的目标数量指定要在池中包含的 VM 数量。

以下示例使用 Azure 虚拟机(在本例中为 Linux VM)创建一个目标为 5 个专用 VM 和 20 个现成 VM 的池:

ImageReference imageRef = new ImageReference(
    publisher: "Canonical",
    offer: "UbuntuServer",
    sku: "20.04-LTS",
    version: "latest");

// Create the pool
VirtualMachineConfiguration virtualMachineConfiguration =
    new VirtualMachineConfiguration("batch.node.ubuntu 20.04", imageRef);

pool = batchClient.PoolOperations.CreatePool(
    poolId: "vmpool",
    targetDedicatedComputeNodes: 5,
    targetLowPriorityComputeNodes: 20,
    virtualMachineSize: "Standard_D2_v2",
    virtualMachineConfiguration: virtualMachineConfiguration);

可以获取专用 VM 和现成 VM 的当前节点数:

int? numDedicated = pool1.CurrentDedicatedComputeNodes;
int? numLowPri = pool1.CurrentLowPriorityComputeNodes;

池节点提供一个属性用于指示节点是专用 VM 还是现成 VM:

bool? isNodeDedicated = poolNode.IsDedicated;

现成 VM 偶尔可能会被抢占。 如果发生抢占,在被抢占的节点 VM 上运行的任务将重新排队,并在容量释放时重新运行。

对于虚拟机配置池,Batch 还将执行以下行为:

  • 将已取代的 VM 的状态更新为“已取代”。
  • VM 被实际删除,导致 VM 本地存储的所有数据丢失。
  • 池上的列表节点操作仍将返回被占用的节点。
  • 池将不断地尝试用完现成节点的可用目标数量。 如果找到替代容量,节点将保留其 ID 但会被重新初始化,依次经历“正在创建”和“正在启动”状态,然后可供任务计划使用。
  • Azure 门户以指标形式提供取代计数。

缩放包含现成 VM 的池

与仅包含专用 VM 的池一样,可以通过调用 Resize 方法或使用自动缩放来缩放包含现成 VM 的池。

池调整大小操作采用可更新 targetLowPriorityNodes 值的另一个可选参数:

pool.Resize(targetDedicatedComputeNodes: 0, targetLowPriorityComputeNodes: 25);

池自动缩放公式支持现成 VM,如下所示:

  • 可以获取或设置服务定义的变量 $TargetLowPriorityNodes 的值。
  • 可以获取服务定义的变量 $CurrentLowPriorityNodes 的值。
  • 可以获取服务定义的变量 $PreemptedNodeCount 的值。 此变量返回处于已取代状态的节点的数量,并可让你根据不可用的已取代节点数增加或减少专用节点的数量。

配置作业和任务

作业和任务可能需要对现成 VM 节点进行一些额外的配置:

  • 作业的 JobManagerTask 属性包含 AllowLowPriorityNode 属性。 如果此属性为 true,则可以在专用或现成节点上计划作业管理器任务。 如果为 false,则只会在专用节点上计划作业管理器任务。
  • 可对任务应用程序使用一个AZ_BATCH_NODE_IS_DEDICATED环境变量,使该应用程序能够确定它是在现成 VM 节点还是专用节点上运行。

查看现成 VM 的指标

Azure 门户提供了现成节点的新指标。 这些指标是:

  • 低优先级节点计数
  • 低优先级核心计数
  • 已占用节点计数

若要在 Azure 门户中查看这些指标,请执行以下操作:

  1. 导航到 Azure 门户中的批处理帐户。
  2. 从“监视”部分选择“指标” 。
  3. 从“指标”列表选择所需指标。

限制

  • Batch 中的现成 VM 不支持设置最高价格,也不支持基于价格的逐出。 只能出于容量原因逐出这种 VM。
  • 现成 VM 仅适用于虚拟机配置池,而不适用于已弃用的云服务配置池。
  • 现成 VM 不适用于某些云、VM 大小和订阅产品/服务类型。 详细了解现成 VM 的限制
  • 目前,由于 Stop-Deallocate 的服务托管逐出策略,现成 VM 不支持临时 OS 磁盘

后续步骤