Dela via


Använd Spot-virtuella datorer med Batch-arbetsbelastningar

Azure Batch erbjuder virtuella datorer med oanvänd kapacitet (VM) för att minska kostnaden för Batch-arbetsbelastningar. Spot VMs möjliggör nya typer av Batch-arbetsbelastningar genom att man kan använda en stor maskinpark till låg kostnad.

Virtuella datorer med oanvänd kapacitet drar nytta av överskottskapacitet i Azure. Mängden överkapacitet som är tillgänglig varierar beroende på faktorer som VM-familj, VM-storlek, region och tid på dagen. När du anger Spot-VM:er i dina pooler kan Azure Batch använda denna överskottskapacitet när den är tillgänglig.

Nackdelen med att använda Spot-virtuella datorer är att dessa inte har något serviceavtal och inga tillgänglighetsgarantier. Spot-VMar kan avslutas när som helst, inklusive omedelbart när den virtuella datorn skapas. Därför är Spot-instanser lämpligast för batch- och asynkrona bearbetnings arbetsbelastningar där tiden för att slutföra jobbet är flexibel och uppgifterna distribueras över många virtuella datorer.

Om en preemption inträffar, kommer Spot-beräkningsnoden att tas bort och allt arbete som inte korrekt hade checkpointats kommer att gå förlorat. Kontrollpunkter är valfria och det är upp till slutanvändaren av Batch att genomföra dem. Den Batch-aktivitet som kördes och avbröts på grund av preemption kommer automatiskt att ombokas för körning av en annan beräkningsnod. En avbruten virtuell dator kan senare återställas av Azure-plattformen, men återställningen görs bara under de första 48 timmarna efter avbrott och det är inte garanterat att den kommer att lyckas.

Virtuella datorer med oanvänd kapacitet erbjuds till ett reducerat pris jämfört med dedikerade virtuella datorer. Mer information om priser finns i Batch-priser.

Batch-stöd för Spot VMs

Azure Batch har flera funktioner som gör det enkelt att nyttja och dra fördel av Spot-VMar:

  • Batch-poolen kan innehålla både dedikerade virtuella datorer och virtuella datorer med Spot-kapacitet. Antalet virtuella datorer av varje typ kan anges när en pool skapas, eller ändras när som helst för en befintlig pool, med hjälp av den explicita storleksåtgärden eller med autoskalning. Jobb- och uppgiftsöverföring kan förbli oförändrade, oavsett vm-typerna i poolen. Du kan också konfigurera en pool för att helt använda virtuella datorer med oanvänd kapacitet för att köra jobb så billigt som möjligt, men starta dedikerade virtuella datorer om kapaciteten sjunker under ett minimitröskelvärde för att hålla jobben igång.
  • Batch-pooler söker automatiskt efter målantalet Spot-VMs. Om virtuella datorer är förinställda eller otillgängliga försöker Batch ersätta den förlorade kapaciteten och återgå till målet.
  • När aktiviteter avbryts identifierar Batch och returnerar automatiskt uppgifter för att köras igen.
  • Spot-instanser har en separat vCPU-kvot som skiljer sig från den för dedikerade virtuella datorer. Kvoten för virtuella datorer med oanvänd kapacitet är högre än kvoten för dedikerade virtuella datorer, eftersom virtuella datorer med oanvänd kapacitet kostar mindre. Mer information finns i Batch-tjänstkvoter och -gränser.

Överväganden och användningsfall

Många Batch-arbetsbelastningar passar bra för Spot-VM:er. Överväg att använda Spot-instanser när jobb delas upp i många parallella uppgifter, eller när du har många jobb som skalas ut och distribueras över många virtuella datorer.

Några exempel på användningsfall för batchbearbetning som passar bra för Spot VMs är:

  • Utveckling och testning: I synnerhet om storskaliga lösningar utvecklas kan betydande besparingar genomföras. Alla typer av tester kan vara till nytta, men storskalig belastningstestning och regressionstestning är utmärkta användningsområden.
  • Komplettera kapacitet på begäran: Spot-VMar kan användas för att komplettera vanliga dedikerade virtuella datorer. När det är tillgängligt kan jobb skalas och därför slutföras snabbare för lägre kostnad. när den inte är tillgänglig förblir baslinjen för dedikerade virtuella datorer tillgänglig.
  • Flexibel tid för att slutföra jobb: Om det finns flexibilitet när jobben måste slutföras, så kan potentiella kapacitetsfall tolereras. Men med tillägg av virtuella datorer med oanvänd kapacitet körs jobb ofta snabbare och till en lägre kostnad.

Batch-pooler kan konfigureras för att använda Spot-instanser på några olika sätt:

  • En pool kan endast använda Spot VMs. I det här fallet återställer Batch eventuell förinstallerad kapacitet när den är tillgänglig. Den här konfigurationen är det billigaste sättet att köra jobb.
  • Virtuella datorer av typen Spot kan användas med en fast baslinje av dedikerade virtuella datorer. Det fasta antalet dedikerade virtuella datorer säkerställer att det alltid finns viss kapacitet för att ett jobb ska fortsätta.
  • En pool kan använda en dynamisk blandning av dedikerade och Spot-VM:er, så att de billigare Spot-VM:erna endast används när de är tillgängliga, men de fullprisade dedikerade VM:erna skalas upp när det behövs. Den här konfigurationen håller en minsta mängd kapacitet tillgänglig så att jobben fortsätter.

Tänk på följande metoder när du planerar din användning av virtuella datorer med oanvänd kapacitet:

  • För att maximera användningen av överskottskapacitet i Azure kan lämpliga jobb skalas ut.
  • Ibland kanske virtuella datorer inte är tillgängliga eller är förinställda, vilket resulterar i minskad kapacitet för jobb och kan leda till aktivitetsavbrott och omkörningar.
  • Uppgifter med kortare körningstider brukar fungera bäst med spot-VMs. Jobb med längre aktiviteter kan påverkas mer om de avbryts. Om långvariga processer implementerar kontrollpunkter för att spara sina framsteg när de körs, kan denna påverkan minskas.
  • Långvariga MPI-jobb som använder flera virtuella datorer är inte väl lämpade för Spot-virtuella datorer, eftersom en avbruten virtuell dator kan leda till att hela jobbet måste köras om.
  • Noder kan markeras som oanvända om nätverkssäkerhetsgruppens (NSG) regler har konfigurerats felaktigt.

Skapa och hantera pooler med Spot-VM:er

I en Batch-pool kan man ha både dedikerade och Spot-VMar (även kallade beräkningsnoder). Du kan ange målantalet beräkningsnoder för både dedikerade och Spot-VM. Målantalet noder anger antalet virtuella datorer som du vill ha i poolen.

Spot-VMS:er kan ibland avslutas i förtid. När preemption inträffar återställs uppgifter som kördes på de fördefinierade virtuella noddatorerna och körs igen när kapaciteten returneras. Batch utför också följande beteenden:

  • De föranslutna virtuella datorerna befinner sig i tillståndet Preempted.
  • Den virtuella datorn tas bort effektivt, vilket leder till förlust av data som lagras lokalt på den virtuella datorn.
  • En åtgärd för att lista noder i poolen returnerar fortfarande de preemptade noderna.
  • Poolen försöker kontinuerligt nå det målantal av tillgängliga Spot-noder. När ersättningskapacitet hittas behåller noderna sina ID:n, men initieras igen och går igenom skapande- och starttillstånd innan de är tillgängliga för schemaläggning av uppgifter.
  • Antal preemptioner är tillgängliga som ett mått i Azure-portalen.

Azure Batch SDK

I följande exempel skapas en pool med Azure-VM:ar, i det här fallet Linux-VM:ar, med målet att ha 5 dedikerade VMs och 20 Spot-VM:ar.

ImageReference imageRef = new ImageReference(
    publisher: "Canonical",
    offer: "ubuntu-24_04-lts",
    sku: "server",
    version: "latest");

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

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

Du kan hämta det aktuella antalet noder för både dedikerade och Spot-VM:er.

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

Poolnoder har en egenskap som anger om noden är en dedikerad eller virtuell dator med oanvänd kapacitet:

bool? isNodeDedicated = poolNode.IsDedicated;

Precis som med pooler som endast består av dedikerade virtuella datorer är det möjligt att skala en pool som innehåller Spot-VM:er genom att anropa Resize-metoden eller använda autoskalning.

Åtgärden för att ändra storlek på poolen tar en andra valfri parameter som uppdaterar värdet på targetLowPriorityNodes:

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

Azure CLI

Skapa en ny pool med Spot-instanser:

az batch pool create \
  --id "vmpool" \
  --vm-size "Standard_D4s_v3" \
  --target-dedicated-nodes 5 \
  --target-low-priority-nodes 20 \
  --enable-inter-node-communication false \
  --image "Canonical:ubuntu-24_04-lts:server" \
  --node-agent-sku-id "batch.node.ubuntu 24.04" \
  --account-name <your-batch-account-name> \
  --account-endpoint "https://<your-batch-account-name>.<region>.batch.azure.com"

Skala befintlig pool för att använda Spot-instanser:

az batch pool resize \
  --pool-id <existing-pool-id> \
  --target-dedicated-nodes 5 \
  --target-low-priority-nodes 20 \
  --account-name <your-batch-account-name> \
  --account-endpoint "https://<your-batch-account-name>.<region>.batch.azure.com"

Kontrollera pooltillstånd och nodallokering

az batch pool show \
  --account-name <your-batch-account-name> \
  --account-endpoint "https://<your-batch-account-name>.<region>.batch.azure.com" \
  --pool-id <your-pool-id> \
  --query "{State:state, CurrentSpotNodes:currentLowPriorityNodes, TargetSpotNodes:scaleSettings.targetLowPriorityNodes, ResizeErrors:resizeErrors}"

Azure PowerShell

Skapa pool med Spot-instanser:

New-AzBatchPool `
  -Id "vmpool" `
  -VirtualMachineSize "Standard_D4s_v3" `
  -TargetDedicatedComputeNodes 5 `
  -TargetLowPriorityComputeNodes 20 `
  -VirtualMachineImageId "/subscriptions/{subscription}/resourceGroups/{rg}/providers/Microsoft.Compute/images/{image}" `
  -BatchContext $context

Verifiera med PowerShell:

$pool = Get-AzBatchPool -Id "vmpool" -BatchContext $context
$pool | Select-Object Id, VmSize, @{Name="SpotNodes";Expression={$_.TargetLowPriorityComputeNodes}}, State

Azure-portalen

  1. I Azure-portalen väljer du Batch-kontot och visar en befintlig pool eller skapar en ny pool.

  2. Under Skala väljer du antingen Mål dedikerade noder eller Målplats/noder med låg prioritet.

    Skärmbild som visar hur du skalar målnoder.

  3. För en befintlig pool, välj poolen och välj sedan Skala för att uppdatera antalet Spot-noder som krävs.

  4. Välj Spara.

Autoskalering med Spot-instanser

Förutom att ange antalet virtuella måldatorer direkt kan du definiera en autoskalningsformel för din pool. Formeln för automatisk skalning av pool stöder Spot-VM enligt följande:

  • Du kan hämta eller ange värdet för den tjänstdefinierade variabeln $TargetLowPriorityNodes.
  • Du kan hämta värdet för den tjänstdefinierade variabeln $CurrentLowPriorityNodes.
  • Du kan hämta värdet för den tjänstdefinierade variabeln $PreemptedNodeCount. Den här variabeln returnerar antalet noder i förinställt tillstånd och gör att du kan skala upp eller ned antalet dedikerade noder, beroende på antalet fördefinierade noder som inte är tillgängliga.

Mer information finns i guiden För automatisk batchskalning.

Konfigurera jobb och uppgifter

Jobb och uppgifter kan kräva lite extra konfiguration för Spot-noder:

  • Egenskapen JobManagerTask för ett jobb har en AllowLowPriorityNode egenskap. När den här egenskapen är aktiverad kan jobbhanteringsuppgiften schemaläggas på antingen en dedikerad nod eller en Spot-nod. Om det är falskt schemaläggs job manager-uppgiften endast till den dedikerade noden.
  • Miljövariabeln AZ_BATCH_NODE_IS_DEDICATED är tillgänglig för ett aktivitetsprogram så att den kan avgöra om den körs på en spot eller på en dedikerad nod.

Visa mått för Spot-VM:ar

Nya mått är tillgängliga i Azure-portalen för spotnoder. Dessa mått är:

  • Antal noder med låg prioritet
  • Antal kärnor med låg prioritet
  • Antal förprioriterade noder

Så här visar du dessa mått i Azure portalen:

  1. Gå till ditt Batch-konto i Azure-portalen.
  2. Välj Mått i avsnittet Övervakning .
  3. Välj de metrik som du önskar från Måttlistan.

Begränsningar

  • Virtuella datorer med oanvänd kapacitet i Batch har inte stöd för att ange ett maxpris och stöder inte prisbaserade borttagningar. De kan bara avlägsnas av kapacitetsskäl.
  • Spot-instanser är inte tillgängliga för vissa moln, VM-storlekar och prenumerationstyper. Läs mer om begränsningar för Spot VM.
  • För närvarande stöds inte tillfälliga OS-diskar med Spot VMs på grund av den tjänsthanterade borttagningsprincipen Stop-Deallocate.

Nästa steg