Batch ワークロードでスポット VM を使用する

Azure Batch には、Batch ワークロードのコストを削減するためにスポット仮想マシン (VM) が用意されています。 スポット VM は、低コストで大量のコンピューティング能力を使用できるようにすることで、新しい種類の Batch ワークロードを可能にします。

スポット VM では Azure の余剰容量が活用されます。 プールにスポット VM を指定すると、Azure Batch では、利用できる場合、この余剰分が使用されます。

スポット VM を使用するデメリットは、利用可能な容量によっては、これらの VM は常に割り当て可能になるとは限らないという点、またはいつでも割り込まれる可能性があるという点です。 このため、スポット VM は、ジョブの完了時間に柔軟性があり、作業が多数の VM に分散されているバッチや非同期処理ワークロードに最も適しています。

スポット VM は、専用 VM と比較して割引価格で提供されます。 価格の詳細については、「Batch の価格」を参照してください。

スポットと低優先度 VM の違い

Batch には、次の 2 種類の低コストで優先使用可能な VM が用意されています。

  • スポット VM。単一インスタンスの VM または Virtual Machine Scale Sets としても利用できる最新の Azure 全体のオファリング。
  • 低優先度 VM。Azure Batch を介してのみ利用できるレガシ オファリング。

取得するノードの種類は、アカウントの作成時に設定できる Batch アカウントのプール割り当てモードによって決まります。 ユーザー サブスクリプション プール割り当てモードが使用されている Batch アカウントは、常にスポット VM を取得します。 Batch マネージド プール割り当てモードが使用されている Batch アカウントは、常に低優先度 VM を取得します。

警告

優先順位の低い VM は、2025 年 9 月 30 日以降に廃止されます。 その前に、Batch でスポット VM に移行してください。

Azureのスポット VM と Batch の低優先度 VM は似ていますが、動作にいくつかの違いがあります。

スポット VM 優先順位の低い VM
サポートされている Batch アカウント ユーザー サブスクリプションの Batch アカウント Batch マネージドの Batch アカウント
サポートされている Batch プール構成 仮想マシンの構成 仮想マシン構成とクラウド サービス構成 (非推奨)
利用可能なリージョン スポット VM をサポートするすべてのリージョン 21Vianet によって運営される Microsoft Azure を除くすべてのリージョン
顧客の適格性 一部のサブスクリプション オファーの種類では使用できません。 スポットの制限に関する詳細情報を参照してください。 すべての Batch ユーザーが利用できます
考えられる削除の理由 容量 容量
価格モデル 標準 VM の価格に対する可変割引 標準 VM の価格に対する固定割引
クォータ モデル サブスクリプションのコア クォータに従います Batch アカウントのコア クォータに従います
可用性 SLA なし なし

スポット VM に対する Batch のサポート

Azure Batch には、スポット VM を使用してメリットを享受するためのいくつかの機能が用意されています。

  • Batch プールには専用 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 を追加することで、多くの場合、より速く、より低いコストでジョブを実行することができます。

スポット VM を使用するように Batch プールを構成するには、いくつかの方法があります。

  • プールではスポット VM のみを使用できます。 この場合、Batch は、使用可能な場合は割り込まれた容量を回復します。 この構成は、ジョブを実行する上でコストが最もかからない方法です。
  • 専用 VM の固定ベースラインと組み合わせてスポット VM を使用できます。 専用 VM の数を固定することにより、ジョブの進行を維持するための容量が常に確保されます。
  • プールでは、専用とスポット VM の動的な組み合わせを使用できます。このため、使用可能なときは低コストのスポット VM のみが使用されますが、必要に応じてフルプライスの専用 VM がスケールアップされます。 この構成は、ジョブの進行を維持できる最小限の容量を確保します。

スポット VM の使用を計画するときは、次のやり方に注意してください。

  • Azure では余剰容量の使用を最大化するために、適切なジョブをスケールアウトできます。
  • VM は使用できない場合や割り込まれる場合があり、その結果ジョブに使用できる容量が減り、タスクの中断や再実行につながることがあります。
  • 実行時間の短いタスクは、スポット VM で最適に動作する傾向があります。 時間のかかるジョブが中断されると影響がより大きくなります。 長時間実行されるタスクについては、チェックポイント処理を実装して実行時に進行状況を保存すると、この影響が軽減される可能性があります。
  • 複数の VM が使用される実行時間の長い MPI ジョブには、スポット VM は適していません。これは、1 つの VM が割り込まれると、ジョブ全体を再度実行する必要が生じる可能性があるからです。
  • ネットワーク セキュリティ グループ (NSG) 規則が正しく構成されていない場合、スポット ノードは使用不可としてマークされることがあります。

スポット VM を使用してプールを作成して管理する

Batch プールには、専用とスポット VM (計算ノードとも呼ばれる) の両方を入れることができます。 専用とスポット VM の両方について計算ノードのターゲット数を設定できます。 ノードのターゲット数はプールに入れておく VM の数を指定します。

たとえば、Azure Virtual Machines (ここでは Linux VM) を使用して、専用 VM 5 台、スポット VM 20 台のターゲット数でプールを作成するには、次のようにします。

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 両方の現在のノード数を取得できます。

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

プールのノードには、ノードが専用とスポット VM のどちらかを示すプロパティがあります。

bool? isNodeDedicated = poolNode.IsDedicated;

スポット VM は、割り込まれることがあります。 割り込みが起こった場合は、割り込まれたノードの VM で実行されていたタスクが再度キューに入れられて、容量が回復した時点でもう一度実行されます。

仮想マシン構成プールの場合、Batch によって次の処理も実行されます。

  • 割り込まれた VM の状態が割り込みに更新されます。
  • その VM は事実上削除され、VM のローカルに保存されているすべてのデータが削除されます。
  • プールのノード一覧表示操作でも、割り込まれたノードが返されます。
  • プールでは引き続き、使用可能なスポット ノードのターゲット数達成が試行されます。 代替の容量が見つかると、ノードは ID を保持しつつ再初期化され、作成中状態、開始状態を経て、その後タスクをスケジュールできるようになります。
  • 割り込みの数は Azure Portal のメトリックとして使用できます。

スポット VM を含むプールをスケーリングする

専用 VM のみで構成されるプールと同じように、Resize メソッドを呼び出すか自動スケールを使用して、スポット VM が含まれるプールをスケーリングできます。

プールのサイズ変更操作は 2 番目のオプション パラメーターを取り、targetLowPriorityNodes の値を更新します。

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

プールの自動スケール式では、次のようにスポット VM がサポートされます。

  • サービス定義変数 $TargetLowPriorityNodes の値を取得または設定できます。
  • サービス定義変数 $CurrentLowPriorityNodes の値を取得できます。
  • サービス定義変数 $PreemptedNodeCount の値を取得できます。 この変数は割り込み状態にあるノードの数を返し、使用できない割り込みノードの数に応じて、専用ノードの数をスケールアップまたはスケールダウンできます。

ジョブとタスクを構成する

ジョブとタスクでは、スポット ノード用の追加構成がいくらか必要になる場合があります。

  • ジョブの JobManagerTask プロパティには AllowLowPriorityNode プロパティがあります。 このプロパティが true の場合、専用またはスポット ノードのいずれかでジョブ マネージャー タスクをスケジュールできます。 これが false の場合、ジョブ マネージャー タスクは専用のノードに対してのみスケジュールされます。
  • タスク アプリケーションに対してAZ_BATCH_NODE_IS_DEDICATED環境変数が有効になっているため、スポット ノードと専用ノードのどちらで実行されているかを判別できます。

スポット VM のメトリックを表示する

スポット ノード用の新しいメトリックが Azure portal で使用可能です。 これらのメトリックは次のとおりです。

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

Azure portal でこれらのメトリックを表示するには、次の手順を実行します。

  1. Azure Portal の Batch アカウントに移動します。
  2. [監視] セクションから [メトリック] を選択します。
  3. [メトリック] 一覧から目的のメトリックを選択します。

制限事項

  • Batch 内の スポット VM では、最大価格の設定はサポートされておらず、価格ベースの削除もサポートされていません。 それらは、容量の理由でのみ削除できます。
  • スポット VM は、仮想マシン構成プールでのみ使用できます。非推奨のクラウド サービス構成プールでは使用できません。
  • 一部のクラウド、VM サイズ、サブスクリプション オファーの種類では、スポット VM を利用できません。 スポット VM の制限に関する詳細情報を参照してください。
  • 現在、エフェメラル OS ディスクは、"停止 - 割り当て解除" のサービス マネージド削除ポリシーのため、スポット VM ではサポートされていません。

次のステップ