Batch で優先順位の低い VM を使用するUse low-priority VMs with Batch

Azure Batch には Batch ワークロードのコストを減らす優先順位の低い仮想マシン (VM) が用意されています。Azure Batch offers low-priority virtual machines (VMs) to reduce the cost of Batch workloads. 優先順位の低い VM は、非常に低いコストで大量のコンピューティング能力を使用できるようにすることで、新しい種類の Batch ワークロードを可能にします。Low-priority VMs make new types of Batch workloads possible by enabling a large amount of compute power to be used for a very low cost.

優先順位の低い VM は Azure の余剰容量を活用します。Low-priority VMs take advantage of surplus capacity in Azure. プールで優先順位の低い VM を指定すると、Azure Batch は使用できる場合にこの余剰分を使用します。When you specify low-priority VMs in your pools, Azure Batch can use this surplus, when available.

優先順位の低い VM を使用するデメリットは、利用可能な容量によっては、これらの VM が割り当てられなかったりいつでも割り込まれたりする可能性がある点です。The tradeoff for using low-priority VMs is that those VMs may not be available to be allocated or may be preempted at any time, depending on available capacity. このため、優先順位の低い VM は特定の種類のワークロードに最適です。For this reason, low-priority VMs are most suitable for certain types of workloads. 優先順位の低い VM は、ジョブの完了時間に柔軟性があり、作業が多数の VM に分散されているバッチおよび非同期処理ワークロードに使用します。Use low-priority VMs for batch and asynchronous processing workloads where the job completion time is flexible and the work is distributed across many VMs.

優先度の低い VM は、専用の VM と比較して大幅な割引価格で提供されます。Low-priority VMs are offered at a significantly reduced price compared with dedicated VMs. 料金について詳しくは、「Batch の価格」をご覧ください。For pricing details, see Batch Pricing.

優先順位の低い VM の使用事例Use cases for low-priority VMs

優先順位の低い VM のこの特性から、この VM を使用できるワークロードと使用できないワークロードはどれでしょうか。Given the characteristics of low-priority VMs, what workloads can and cannot use them? 一般的に、ジョブが多数の並列タスクに分割されていたり、スケールアウトされた多数のジョブが多数の VM に分散されていたりするバッチ処理ワークロードに適しています。In general, batch processing workloads are a good fit, as jobs are broken into many parallel tasks or there are many jobs that are scaled out and distributed across many VMs.

  • Azure では余剰容量の使用を最大化するために、適切なジョブをスケールアウトできます。To maximize use of surplus capacity in Azure, suitable jobs can scale out.

  • VM は使用できない場合や割り込まれる場合があり、その結果ジョブに使用できる容量が減り、タスクの中断や再実行につながることがあります。Occasionally VMs may not be available or are preempted, which results in reduced capacity for jobs and may lead to task interruption and reruns. このため、ジョブの実行にかかる時間には柔軟性が必要です。Jobs must therefore be flexible in the time they can take to run.

  • 時間のかかるジョブが中断されると影響がより大きくなります。Jobs with longer tasks may be impacted more if interrupted. 長時間実行されるタスクについては、チェックポイント処理を実装して実行時に進行状況を保存すると、中断の影響を抑えることができます。If long-running tasks implement checkpointing to save progress as they execute, then the impact of interruption is reduced. 実行時間の短いタスクは中断の影響がはるかに少ないため、優先順位の低い VM に最適です。Tasks with shorter execution times tend to work best with low-priority VMs, because the impact of interruption is far less.

  • 1 つの VM が割り込まれるとジョブ全体を再実行する可能性があるため、複数の VM を使用する実行時間の長い MPI ジョブは、優先順位の低い VM の使用は適していません。Long-running MPI jobs that utilize multiple VMs are not well suited to use low-priority VMs, because one preempted VM can lead to the whole job having to run again.

優先順位の低い VM の使用が適しているバッチ処理の使用事例は次のとおりです。Some examples of batch processing use cases well suited to use low-priority VMs are:

  • 開発とテスト:特に、大規模なソリューションを開発する場合に大幅な節約を実現できます。Development and testing: In particular, if large-scale solutions are being developed, significant savings can be realized. あらゆる種類のテストでメリットがありますが、特に大規模なロード テストや回帰テストに最適です。All types of testing can benefit, but large-scale load testing and regression testing are great uses.

  • オンデマンドでの容量の補足:優先順位の低い VM を使用して、通常の専用 VM を補足できます。利用可能な場合は、ジョブをスケーリングして短時間で完了することで、コストを削減できます。利用できない場合は、専用 VM のベースラインが引き続き利用されます。Supplementing on-demand capacity: Low-priority VMs can be used to supplement regular dedicated VMs - when available, jobs can scale and therefore complete quicker for lower cost; when not available, the baseline of dedicated VMs remains available.

  • 柔軟なジョブ実行時間:ジョブの実行に要する時間に柔軟性があれば、容量の低下に対応できます。ただし、多くの場合、優先順位の低い VM を追加することでジョブの実行は速くなり、コストを削減できます。Flexible job execution time: If there is flexibility in the time jobs have to complete, then potential drops in capacity can be tolerated; however, with the addition of low-priority VMs jobs frequently run faster and for a lower cost.

Batch プールは、ジョブ実行時間の柔軟性によって、いくつかの方法で優先順位の低い VM を使用するように構成できます。Batch pools can be configured to use low-priority VMs in a few ways, depending on the flexibility in job execution time:

  • 優先度の低い VM は、プールでのみ使用できます。Low-priority VMs can solely be used in a pool. この場合、Batch は、使用可能な場合は割り込まれた容量を回復します。In this case, Batch recovers any preempted capacity when available. 優先順位の低い VM のみが使用されるため、この構成はジョブを実行する上でコストが最もかからない方法です。This configuration is the cheapest way to execute jobs, as only low-priority VMs are used.

  • 優先順位の低い VM は専用 VM の固定ベースラインと組み合わせて使用できます。Low-priority VMs can be used in conjunction with a fixed baseline of dedicated VMs. 専用 VM の数を固定することにより、ジョブの進行を維持するための容量が常に確保されます。The fixed number of dedicated VMs ensures there is always some capacity to keep a job progressing.

  • 専用 VM と優先順位の低い VM の組み合わせは動的に変更できます。このため、使用できるときはコストの低い VM のみを使用します。ただし、必要に応じてフルプライスの専用 VM をスケールアップします。There can be dynamic mix of dedicated and low-priority VMs, so that the cheaper low-priority VMs are solely used when available, but the full-priced dedicated VMs are scaled up when required. この構成は、ジョブの進行を維持できる最小限の容量を確保します。This configuration keeps a minimum amount of capacity available to keep the jobs progressing.

優先順位の低い VM に対する Batch のサポートBatch support for low-priority VMs

Azure Batch には、優先順位の低い VM を使用してメリットを享受するためのいくつかの機能が用意されています。Azure Batch provides several capabilities that make it easy to consume and benefit from low-priority VMs:

  • Batch プールには専用 VM と優先順位の低い VM の両方を入れることができます。Batch pools can contain both dedicated VMs and low-priority VMs. 各種類の VM の数はプールを作成するときに指定するか、既存のプールで明示的なサイズ変更操作または自動スケールを使用することでいつでも変更できます。The number of each type of VM can be specified when a pool is created, or changed at any time for an existing pool, using the explicit resize operation or using auto-scale. ジョブやタスクの送信は、プール内の VM の種類に関係なく、変更しないままにできます。Job and task submission can remain unchanged, regardless of the VM types in the pool. また、コストを可能な限り抑えるためにすべてのジョブを優先順位の低い VM で実行する一方で、ジョブの実行を維持するために、容量が最小しきい値を下回った場合には専用 VM を使用するようにプールを構成できます。You can also configure a pool to completely use low-priority VMs to run jobs as cheaply as possible, but spin up dedicated VMs if the capacity drops below a minimum threshold, to keep jobs running.

  • Batch プールは優先順位の低い VM のターゲット数を自動的にシークします。Batch pools automatically seek the target number of low-priority VMs. VM が割り込まれた場合、Batch は失われた容量に対して置き換えを試行し、ターゲットに戻します。If VMs are preempted, then Batch attempts to replace the lost capacity and return to the target.

  • タスクが中断された場合、Batch は再度実行するタスクを検出して自動的にキューに再登録します。When tasks are interrupted, Batch detects and automatically requeues tasks to run again.

  • 優先順位の低い VM には、専用 VM とは異なる別個の vCPU クォータがあります。Low-priority VMs have a separate vCPU quota that differs from the one for dedicated VMs. 優先順位の低い VM はコストがより低いため、クォータは専用 VM のクォータより高くなります。The quota for low-priority VMs is higher than the quota for dedicated VMs, because low-priority VMs cost less. 詳しくは、「Batch サービスのクォータと制限」をご覧ください。For more information, see Batch service quotas and limits.


優先順位の低い VM は、ユーザー サブスクリプション モードで作成された Batch アカウントでは、現在サポートされていません。Low-priority VMs are not currently supported for Batch accounts created in user subscription mode.

プールの作成と更新Create and update pools

Batch プールには、専用 VM と優先順位の低い VM の両方を入れることができます (計算ノードとも呼ばれます)。A Batch pool can contain both dedicated and low-priority VMs (also referred to as compute nodes). 専用 VM と優先順位の低い VM の両方の計算ノードのターゲット数を設定できます。You can set the target number of compute nodes for both dedicated and low-priority VMs. ノードのターゲット数はプールに入れておく VM の数を指定します。The target number of nodes specifies the number of VMs you want to have in the pool.

たとえば、Azure クラウド サービス VM を使用して専用 VM のターゲット数が 5、優先順位の低い VM のターゲット数が 20 のプールを作成するには、次のようにします。For example, to create a pool using Azure cloud service VMs with a target of 5 dedicated VMs and 20 low-priority VMs:

CloudPool pool = batchClient.PoolOperations.CreatePool(
    poolId: "cspool",
    targetDedicatedComputeNodes: 5,
    targetLowPriorityComputeNodes: 20,
    virtualMachineSize: "Standard_D2_v2",
    cloudServiceConfiguration: new CloudServiceConfiguration(osFamily: "5") // WS 2016

Azure Virtual Machines (ここでは Linux VM) を使用して専用 VM のターゲット数が 5、優先順位の低い VM のターゲット数が 20 のプールを作成するには、次のようにします。To create a pool using Azure virtual machines (in this case Linux VMs) with a target of 5 dedicated VMs and 20 low-priority VMs:

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

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

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

専用 VM と優先順位の低い VM の両方の現在のノード数を取得するには、次のようにします。You can get the current number of nodes for both dedicated and low-priority VMs:

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

プールのノードには、そのノードが専用 VM であるか優先順位の低い VM であるかを示すプロパティが用意されています。Pool nodes have a property to indicate if the node is a dedicated or low-priority VM:

bool? isNodeDedicated = poolNode.IsDedicated;

プール内の 1 つまたは複数のノードが割り込まれても、プールのノード一覧表示操作ではそれらのノードが返されます。When one or more nodes in a pool are preempted, a list nodes operation on the pool still returns those nodes. 優先度の低いノードの現在の数は変わりませんが、それらのノードの状態は割り込みに設定されます。The current number of low-priority nodes remains unchanged, but those nodes have their state set to the Preempted state. バッチは代替 VM の検索を試行し、成功するとノードの状態が作成中から開始に移行します。その後新しいノードと同じようにタスクを実行できるようになります。Batch attempts to find replacement VMs and, if successful, the nodes go through Creating and then Starting states before becoming available for task execution, just like new nodes.

優先順位の低い VM が入ったプールのスケールScale a pool containing low-priority VMs

専用 VM のみで構成されるプールと同じように、サイズ変更メソッドを呼び出すか自動スケールを使用して、優先順位の低い VM が入ったプールをスケールできます。As with pools solely consisting of dedicated VMs, it is possible to scale a pool containing low-priority VMs by calling the Resize method or by using autoscale.

プールのサイズ変更操作は 2 番目のオプション パラメーターを取り、targetLowPriorityNodes の値を更新します。The pool resize operation takes a second optional parameter that updates the value of targetLowPriorityNodes:

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

プールの自動スケール式は、優先順位の低い VM を次のようにサポートします。The pool autoscale formula supports low-priority VMs as follows:

  • サービス定義変数 $TargetLowPriorityNodes の値を取得または設定できます。You can get or set the value of the service-defined variable $TargetLowPriorityNodes.

  • サービス定義変数 $CurrentLowPriorityNodes の値を取得できます。You can get the value of the service-defined variable $CurrentLowPriorityNodes.

  • サービス定義変数 $PreemptedNodeCount の値を取得できます。You can get the value of the service-defined variable $PreemptedNodeCount. この変数は割り込み状態にあるノードの数を返し、使用できない割り込みノードの数に応じて、専用ノードの数をスケールアップまたはスケールダウンできます。This variable returns the number of nodes in the preempted state and allows you to scale up or down the number of dedicated nodes, depending on the number of preempted nodes that are unavailable.

ジョブとタスクJobs and tasks

優先順位の低いノードに対して、ジョブやタスクに必要な追加構成はわずかです。必要なサポートは次のとおりです。Jobs and tasks require little additional configuration for low-priority nodes; the only support is as follows:

  • ジョブの JobManagerTask プロパティに新しいプロパティ AllowLowPriorityNode があります。The JobManagerTask property of a job has a new property, AllowLowPriorityNode. このプロパティが true の場合、専用ノードまたは優先順位の低いノードのいずれかでジョブ マネージャー タスクをスケジュールできます。When this property is true, the job manager task can be scheduled on either a dedicated or low-priority node. このプロパティが false の場合、専用のノードに対してのみジョブ マネージャー タスクをスケジュールできます。If this property is false, the job manager task is scheduled to a dedicated node only.

  • タスク アプリケーションに対して環境変数が有効になっているため、優先順位の低いノードと専用ノードのどちらで実行されているかを判別できます。An environment variable is available to a task application so that it can determine whether it is running on a low-priority or dedicated node. 環境変数は、AZ_BATCH_NODE_IS_DEDICATED です。The environment variable is AZ_BATCH_NODE_IS_DEDICATED.

割り込みの処理Handling preemption

VM では割り込みが発生することがあり、発生すると、Batch は次のように処理します。VMs may occasionally be preempted; when preemption happens, Batch does the following:

  • 割り込まれた VM の状態が割り込みに更新されます。The preempted VMs have their state updated to Preempted.
  • タスクが割り込まれたノードの VM で実行されていた場合、それらのタスクは再度キューに入れられもう一度実行されます。If tasks were running on the preempted node VMs, then those tasks are requeued and run again.
  • その VM は事実上削除され、VM のローカルに保存されているすべてのデータが削除されます。The VM is effectively deleted, leading to loss of any data stored locally on the VM.
  • プールは引き続き使用可能な優先順位の低いノードのターゲット数に達するよう試行します。The pool continually attempts to reach the target number of low-priority nodes available. 代替の容量が見つかると、ノードは ID を保持しつつ再初期化され、作成中状態、開始状態を経て、その後タスクをスケジュールできるようになります。When replacement capacity is found, the nodes keep their IDs, but are reinitialized, going through Creating and Starting states before they are available for task scheduling.
  • 割り込みの数は Azure Portal のメトリックとして使用できます。Preemption counts are available as a metric in the Azure portal.


新しいメトリックは、優先順位の低いノードについて Azure Portal で使用可能です。New metrics are available in the Azure portal for low-priority nodes. これらのメトリックは次のとおりです。These metrics are:

  • Low-Priority Node Count (優先順位の低いノードの数)Low-Priority Node Count
  • Low-Priority Core Count (優先順位の低いコアの数)Low-Priority Core Count
  • Preempted Node Count (割り込まれたノードの数)Preempted Node Count

Azure Portal でメトリックを表示するには、次の手順を実行します。To view metrics in the Azure portal:

  1. ポータル内の Batch アカウントに移動し、Batch アカウントの設定を表示します。Navigate to your Batch account in the portal, and view the settings for your Batch account.
  2. [監視] セクションから [メトリック] を選択します。Select Metrics from the Monitoring section.
  3. [利用可能なメトリック] 一覧から目的のメトリックを選択します。Select the metrics you desire from the Available Metrics list.


次の手順Next steps

  • Batch を使用するための準備を担当する方は、「 開発者向け Batch 機能の概要」で重要な情報をご確認ください。Read the Batch feature overview for developers, essential information for anyone preparing to use Batch. この記事には、Batch アプリケーションを構築するときに使用できる多数の API 機能、プール、ノード、ジョブ、タスクなど、Batch サービスのリソースに関する詳しい情報が記載されています。The article contains more detailed information about Batch service resources like pools, nodes, jobs, and tasks, and the many API features that you can use while building your Batch application.
  • Batch ソリューションの構築に使用できる Batch API とツールについて学習します。Learn about the Batch APIs and tools available for building Batch solutions.