搭配 Batch 工作負載使用現成 VM

Azure Batch 提供現成虛擬機器 (VM) 以降低 Batch 工作負載的成本。 現成 VM 能提供成本低廉的大量計算能力,從而實現新的 Batch 工作負載類型。

現成 VM 能利用 Azure 中的多餘容量。 當您在集區中指定現成 VM 時,Azure Batch 就會在有這些多餘的容量時加以使用。

使用現成 VM 的代價是,視可用的容量而定,那些 VM 可能無法一律可供使用,或可能隨時被優先佔用。 基於此原因,現成 VM 最適合用於批次和非同步處理的工作負載,這種工作負載的作業完成時間很有彈性,且工作會分散於許多 VM 上。

與專用 VM 相比,現成 VM 會以更低的價格提供。 若要深入了解定價,請參閱 Batch 定價

現成和低優先順序 VM 之間的差異

Batch 提供兩種類型的低成本先佔式 VM:

  • 現成 VM,新式的全 Azure 供應項目,也以單一執行個體 VM 或虛擬機器擴展集的形式提供。
  • 低優先順序 VM,僅透過 Azure Batch 提供的舊版供應項目。

您取得的節點類型取決於您 Batch 帳戶的集區配置模式,其可在帳戶建立期間設定。 使用使用者訂用帳戶集區配置模式的 Batch 帳戶一律會取得現成 VM。 使用 Batch 管理的集區配置模式的 Batch 帳戶一律會取得低優先順序 VM。

警告

低優先順序 VM 將在 2025 年 9 月 30 日之後淘汰。 在此之前,請先遷移至 Batch 中的現成 VM

Azure 現成 VM 和 Batch 低優先順序 VM 很類似,但行為上有一些差異。

Spot VM 低優先順序 VM
支援的 Batch 帳戶 使用者訂用帳戶 Batch 帳戶 Batch 管理的 Batch 帳戶
支援的 Batch 集區設定 虛擬機器設定 虛擬機器設定和雲端服務設定 (已淘汰)
可用區域 支援現成 VM 的所有區域 所有區域 (21Vianet 營運的 Microsoft Azure 除外)
客戶資格 無法供某些訂用帳戶供應項目類型使用。 深入了解現成限制 適用於所有 Batch 客戶
可能的收回原因 Capacity Capacity
定價模式 相對於標準 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。

適用於 Spot VM 的批次處理使用案例範例如下:

  • 開發與測試︰尤其是如果您正在開發大規模的解決方案,可節省可觀的成本。 所有的測試類型都能有所助益,但大規模的負載測試及迴歸測試都是很棒的用途。
  • 補充隨選容量:現成 VM 可用來補充一般專用 VM。 在可供使用時,作業就能加以調整並以較低的成本加速完成;在無法使用時,仍能使用專用 VM 的基準。
  • 彈性的作業執行時間︰如果完成作業所需的時間是有彈性的,就能容許可能的容量下降。 不過透過新增現成 VM,作業通常會更快執行完畢,且成本更低。

有幾種方法可將 Batch 集區設為使用現成 VM:

  • 集區只能使用現成 VM。 在此情況下,Batch 會在可用時復原任何優先佔用的容量。 此種設定是執行作業最便宜的方式。
  • 現成 VM 可以與專用 VM 的固定基準搭配使用。 固定的專用 VM 數目可確保一律會有一些容量可保持作業進度。
  • 集區可以動態混用專用和現成 VM,以在有較便宜的現成 VM 可供使用時單獨加以使用,並在需要原定價格的專用 VM 時加以擴大。 此設定可保留能夠維持作業進度的最少容量。

規劃使用現成 VM 時,請記住下列做法:

  • 若要充分使用 Azure 中的剩餘容量,可將適當的作業擴增。
  • VM 偶爾可能會無法使用或被優先佔用,這會導致作業容量降低,且可能會導致工作中斷及重新執行。
  • 時間執行較短的工作通常較適合現成 VM。 如果工作較長的作業受到中斷,可能就會影響較大。 如果長時間執行的工作會在執行時實作檢查點來儲存進度,可能可以降低此影響。
  • 利用多部 VM 的長時間執行 MPI 作業並不適合使用現成 VM,因為只要有單一 VM 被優先佔用,就可能會導致需要重新執行整個作業。
  • 如果網路安全性群組 (NSG) 規則設定不正確,則現成節點可能會標示為無法使用。

使用現成 VM 建立和管理集區

Batch 集區可以同時包含專用和現成 VM (亦稱為計算節點)。 您可以為專用和現成 VM 設定計算節點的目標數目。 節點的目標數目會指定您在集區中想要的 VM 數目。

下列範例會使用目標為 5 部專用 VM 和 20 部現成 VM 的 Azure 虛擬機器 (在此情況下為 Linux 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 目前的節點數目:

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

集區節點有一個屬性可指出該節點為專用或現成 VM:

bool? isNodeDedicated = poolNode.IsDedicated;

現成 VM 可能偶爾會被優先佔用。 當此先佔情況發生時,正在被優先佔用節點上執行的工作都會重新排入佇列並在容量回復時再次執行。

針對虛擬機器設定集區,Batch 也會執行下列行為:

  • 優先佔用的 VM 都會將其狀態更新為優先佔用
  • VM 實際上會被刪除,導致遺失在 VM 上本機儲存的任何資料。
  • 集區上的列出節點作業仍會傳回被優先佔用的節點。
  • 集區會繼續嘗試達到可用現成節點的目標數目。 找到取代容量時,節點會保留其識別碼,但在可供工作排程使用之前,會先重新初始化,逐步變成 [建立中] 和 [啟動中] 狀態。
  • 優先佔用計數會在 Azure 入口網站中作為計量提供使用。

包含現成 VM 的調整集區

如同由專用 VM 單獨組成的集區,可透過呼叫 Resize 方法或使用自動調整來調整包含現成 VM 的集區。

調整集區大小的作業會採用第二個選擇性參數,可更新 targetLowPriorityNodes 的值:

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

集區自動調整公式支援現成 VM,如下所示︰

  • 您可以取得或設定服務定義變數 $TargetLowPriorityNodes 的值。
  • 您可以取得服務定義變數 $CurrentLowPriorityNodes 的值。
  • 您可以取得服務定義變數 $PreemptedNodeCount 的值。 此變數會傳回優先佔用狀態中的節點數目,並可依無法使用的優先佔用節點數目,將您的專用節點數目擴大或縮減。

設定作業和工作

作業和工作可能需要針對現成節點進行一些額外設定:

  • 作業的 JobManagerTask 屬性具有 AllowLowPriorityNode 屬性。 當這個屬性為 true 時,就可以在專用或現成節點上針對作業管理員工作進行排程。 如果其為 false,就只能針對專用節點進行作業管理員工作的排程。
  • AZ_BATCH_NODE_IS_DEDICATED環境變數可供工作應用程式使用,因此它可以判斷是在現成還是專用節點上執行。

檢視現成 VM 的計量

Azure 入口網站中已針對現成節點提供新的計量。 這些計量包括:

  • 低優先順序節點計數
  • 低優先順序核心計數
  • 先占節點計數

在 Azure 入口網站中檢視這些計量:

  1. 在 Azure 入口網站中瀏覽至您的 Batch 帳戶。
  2. 從 [監視] 區段選取 [計量]
  3. 從 [計量] 清單中選取您所需的計量。

限制

  • Batch 中的現成 VM 不支援設定價格上限,也不支援進行價格型的收回。 其只能因容量原因而收回。
  • 現成 VM 僅適用於虛擬機器設定集區,不適用於雲端服務設定集區,其已經淘汰 (英文)。
  • 某些雲端、VM 大小和訂閱供應項目類型無法使用現成 VM。 深入了解現成 VM 限制
  • 目前,因為服務管理的 Stop-Deallocate 收回原則,現成 VM 不支援暫時性 OS 磁碟

下一步