Usare le macchine virtuali con priorità bassa in BatchUse low-priority VMs with Batch

Azure Batch offre macchine virtuali con priorità bassa per ridurre i costi dei carichi di lavoro Batch.Azure Batch offers low-priority virtual machines (VMs) to reduce the cost of Batch workloads. Le macchine virtuali con priorità bassa rendono possibili nuovi tipi di carichi di lavoro Batch, assicurando una grande quantità di potenza di calcolo risultando anche economica.Low-priority VMs make new types of Batch workloads possible by providing a large amount of compute power that is also economical.

Le macchine virtuali con priorità bassa sfruttano la capacità in eccesso di Azure.Low-priority VMs take advantage of surplus capacity in Azure. Quando si specificano le macchine virtuali con priorità bassa nei pool, Azure Batch può usare automaticamente questo surplus quando disponibile.When you specify low-priority VMs in your pools, Azure Batch can automatically use this surplus when available.

Il compromesso per l'uso di macchine virtuali con priorità bassa è che queste macchine virtuali possono essere interrotte quando non c'è capacità in surplus in Azure.The tradeoff for using low-priority VMs is that those VMs may be preempted when no surplus capacity is available in Azure. Per questo motivo, le macchine virtuali con priorità bassa sono più adatte per determinati tipi di carichi di lavoro.For this reason, low-priority VMs are most suitable for certain types of workloads. Usare le macchine virtuali con priorità bassa per carichi di lavoro di batch ed elaborazione asincrona in cui il tempo di completamento del processo è flessibile e il lavoro viene distribuito su più macchine virtuali.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.

Le macchine virtuali con priorità bassa sono caratterizzate da un prezzo notevolmente ridotto rispetto alle macchine virtuali dedicate.Low-priority VMs are offered at a significantly reduced price compared with dedicated VMs. Per i dettagli sui prezzi vedere Prezzi dei Batch.For pricing details, see Batch Pricing.

Importante

Le macchine virtuali con priorità bassa sono attualmente disponibili solo per i carichi di lavoro in esecuzione in Batch.Low-priority VMs are currently available only for workloads running in Batch.

Casi di uso per le macchine virtuali con priorità bassaUse cases for low-priority VMs

Considerando le caratteristiche delle macchine virtuali con priorità bassa, quali carichi di lavoro possono e non sono usarle?Given the characteristics of low-priority VMs, what workloads can and cannot use them? In generale, i carichi di elaborazione batch sono la soluzione ideale, quando i processi sono suddivisi in più attività in parallelo o viene eseguita la scalabilità orizzontale su più processi che vengono distribuiti tra più macchine virtuali.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.

  • Per ottimizzare l'uso della capacità in eccedenza in Azure, è possibile eseguire una scalabilità orizzontale su processi appropriati.To maximize use of surplus capacity in Azure, suitable jobs can scale out.

  • In alcuni casi le macchine virtuali potrebbero non essere disponibili o possono essere superate e ciò comporta una riduzione della capacità per i processi e può provocare un'interruzione e una riesecuzione delle attività.Occasionally VMs may not be available or are preempted, which results in reduced capacity for jobs and may lead to task interruption and reruns. I processi devono pertanto essere flessibili nel periodo in cui potrebbero essere eseguiti.Jobs must therefore be flexible in the time they can take to run.

  • I processi con attività più lunghe potrebbero subire maggiormente gli effetti se vengono interrotti.Jobs with longer tasks may be impacted more if interrupted. Se attività con tempi di esecuzione lunghi implementano il checkpoint per salvare l'avanzamento durante l'esecuzione, l'impatto dell'interruzione è minore.If long-running tasks implement checkpointing to save progress as they execute, then the impact of interruption is reduced. Le attività con tempi di esecuzione più brevi tendono a funzionare meglio con macchine virtuali con priorità bassa poiché l'impatto dell'interruzione è decisamente minore.Tasks with shorter execution times tend to work best with low-priority VMs, because the impact of interruption is far less.

  • I processi MPI con tempi di esecuzione lunghi che usano più macchine virtuali non sono adatti all'uso di macchine virtuali con priorità bassa poiché una macchina virtuale superata può causare la necessità riesecuzione del processo.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.

Esempi di casi d'uso di elaborazione batch adatti all'uso di macchine virtuali con priorità bassa sono:Some examples of batch processing use cases well suited to use low-priority VMs are:

  • Sviluppo e test: in particolare, se sono in fase di sviluppo soluzioni su larga scala, è possibile realizzare risparmi significativi.Development and testing: In particular, if large-scale solutions are being developed, significant savings can be realized. Tutti i tipi di test possono trarre vantaggio, ma i test di carico su larga scala e i test di regressione ne traggono il miglio uso.All types of testing can benefit, but large-scale load testing and regression testing are great uses.

  • Integrazione della capacità su richiesta: le macchine virtuali con priorità bassa possono essere usate per integrare le normali macchine virtuali dedicate. Quando disponibili, i processi possono essere ridimensionati e pertanto possono essere completati più rapidamente a un costo inferiore. Quando non sono disponibili, rimangono disponibili le macchine virtuali dedicate di base.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.

  • Tempi di esecuzione del processo flessibili: se c'è flessibilità nei tempi di completamento dei processi, le possibili cadute di capacità vengono considerate tollerabili; i processi delle macchine virtuali con priorità bassa, per giunta, vengono spesso eseguiti più rapidamente e a costi inferiori.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.

È possibile configurare i pool di batch per usare macchine virtuali con priorità bassa in diversi modi, a seconda della flessibilità dei tempi di esecuzione del processo:Batch pools can be configured to use low-priority VMs in a few ways, depending on the flexibility in job execution time:

  • Le macchine virtuali con priorità bassa possono essere usate esclusivamente in un pool.Low-priority VMs can solely be used in a pool. In questo caso, il servizio Batch recupera qualsiasi capacità superata, se disponibile.In this case, Batch recovers any preempted capacity when available. Questa configurazione rappresenta il modo più conveniente per eseguire i processi poiché vengono usate solo le macchine virtuali con priorità bassa.This configuration is the cheapest way to execute jobs, as only low-priority VMs are used.

  • Le macchine virtuali con priorità bassa possono essere usate in combinazione con macchine virtuali dedicate predefinite di base.Low-priority VMs can be used in conjunction with a fixed baseline of dedicated VMs. Il numero fisso di macchine virtuali dedicate garantisce che ci sia sempre una certa capacità per mantenere l'avanzamento del processo.The fixed number of dedicated VMs ensures there is always some capacity to keep a job progressing.

  • Può verificarsi una combinazione dinamica di macchine virtuali dedicate e con priorità bassa, in modo che le macchine virtuali con priorità bassa più economiche vengano usate esclusivamente quando disponibili, mentre le capacità delle macchine virtuali dedicate a prezzo pieno vengono aumentate quando necessario.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. Questa configurazione consente di mantenere una quantità minima di capacità disponibile al fine di far avanzare il processo.This configuration keeps a minimum amount of capacity available to keep the jobs progressing.

Supporto batch per le macchine virtuali con priorità bassaBatch support for low-priority VMs

Azure Batch offre diverse funzionalità che semplificano l'uso e i vantaggi dalle macchine virtuali con priorità bassa:Azure Batch provides several capabilities that make it easy to consume and benefit from low-priority VMs:

  • I pool di batch può contenere sia macchine virtuali dedicate che macchine virtuali con priorità bassa.Batch pools can contain both dedicated VMs and low-priority VMs. Il numero di ciascun tipo di macchina virtuale può essere specificato al momento della creazione di un nuovo pool o della modifica di un pool esistente, tramite l'operazione di ridimensionamento esplicito o la scalabilità automatica.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. L'invio di attività e processi può rimanere invariato indipendentemente dai tipi di macchine virtuali nel pool.Job and task submission can remain unchanged, regardless of the VM types in the pool. È anche possibile configurare un pool in modo che usi solo le macchine virtuali con priorità bassa per eseguire processi nel modo più economico possibile, ma che avvii macchine virtuali dedicate se la capacità scende al di sotto di una soglia minima, per mantenere i processi in esecuzione.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.

  • I pool del servizio Batch rilevano automaticamente il numero di macchine virtuali con priorità bassa.Batch pools automatically seek the target number of low-priority VMs. Se le macchine virtuali sono superate, il servizio Batch cerca di sostituire la capacità persa e di tornare all'obiettivo.If VMs are preempted, then Batch attempts to replace the lost capacity and return to the target.

  • Quando le attività vengono interrotte, il servizio Batch rileva e reinserisce automaticamente nella coda le attività da eseguire di nuovo.When tasks are interrupted, Batch detects and automatically requeues tasks to run again.

  • Le macchine virtuali con priorità bassa hanno una quota di CPU virtuali diversa rispetto a quella delle macchine virtuali dedicate.Low-priority VMs have a separate vCPU quota, differs from the one for dedicated VMs. La quota per le macchine virtuali con priorità bassa è superiore a quella delle macchine virtuali dedicate, perché le macchine virtuali con priorità bassa sono meno costose.The quota for low-priority VMs is higher than the quota for dedicated VMs, because low-priority VMs cost less. Per altre informazioni, vedere Quote e limiti del servizio Batch.For more information, see Batch service quotas and limits.

Crea e aggiornare i poolCreate and update pools

Un pool Batch può contenere sia macchine virtuali dedicate sia VM con priorità bassa, definite anche nodi di calcolo.A Batch pool can contain both dedicated and low-priority VMs (also referred to as compute nodes). È possibile impostare il numero di nodi di calcolo sia per le macchine virtuali dedicate sia per le VM con priorità bassa.You can set the target number of compute nodes for both dedicated and low-priority VMs. Il numero di nodi di destinazione specifica il numero di macchine virtuali che si desidera avere nel pool.The target number of nodes specifies the number of VMs you want to have in the pool.

Ad esempio, per creare un pool con le macchine virtuali del servizio cloud di Azure con una destinazione di 5 VM dedicate e 20 macchine virtuali con priorità bassa: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: "4") // WS 2012 R2
);

Per creare un pool con le macchine virtuali di Azure, in questo caso le macchine virtuali Linux, con una destinazione di 5 VM dedicate e 20 macchine virtuali con priorità bassa: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.0-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);

È possibile ottenere il numero corrente di nodi sia per le macchine virtuali dedicate che per quelle con priorità bassa:You can get the current number of nodes for both dedicated and low-priority VMs:

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

I nodi pool dispongono di una proprietà che indica se il nodo è una macchina virtuale dedicata o con priorità bassa:Pool nodes have a property to indicate if the node is a dedicated or low-priority VM:

bool? isNodeDedicated = poolNode.IsDedicated;

Quando uno o più nodi in un pool sono superati, un'operazione di elenco nodi nel pool restituisce comunque tali nodi.When one or more nodes in a pool are preempted, a list nodes operation on the pool still returns those nodes. Il numero corrente di nodi con priorità bassa rimane invariato, ma lo stato di tali nodi viene impostato su Superato.The current number of low-priority nodes remains unchanged, but those nodes have their state set to the Preempted state. Il servizio Batch tenterà di individuare le macchine virtuali di sostituzione e, se l'operazione ha esito positivo, i nodi avranno lo stato Creazione in corso e poi Avvio in corso prima di essere disponibili per l'esecuzione di attività, come avviene per i nuovi nodi.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.

Ridimensionare un pool che contiene macchine virtuali con priorità bassaScale a pool containing low-priority VMs

Così come avviene per i pool costituiti esclusivamente da macchine virtuali dedicate, è possibile ridimensionare un pool che contiene macchine virtuali con priorità bassa chiamando il metodo di ridimensionamento o mediante la scalabilità automatica.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.

L'operazione di ridimensionamento del pool richiede un secondo parametro facoltativo che aggiorna il valore di targetLowPriorityNodes:The pool resize operation takes a second optional parameter that updates the value of targetLowPriorityNodes:

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

La formula di scalabilità automatica del pool supporta le macchine virtuali con priorità bassa nel modo seguente:The pool autoscale formula supports low-priority VMs as follows:

  • È possibile ottenere o impostare il valore della variabile definita dal servizio $TargetLowPriorityNodes.You can get or set the value of the service-defined variable $TargetLowPriorityNodes.

  • È possibile ottenere il valore della variabile definita dal servizio $CurrentLowPriorityNodes.You can get the value of the service-defined variable $CurrentLowPriorityNodes.

  • È possibile ottenere il valore della variabile definita dal servizio $PreemptedNodeCount.You can get the value of the service-defined variable $PreemptedNodeCount. Questa variabile restituisce il numero di nodi con lo stato Annullato e consente di aumentare o ridurre il numero di nodi dedicati, a seconda del numero di nodi di annullati che non sono disponibili.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.

Processi e attivitàJobs and tasks

I processi e le attività richiedono una configurazione aggiuntiva minima per nodi con priorità bassa. L'unico supporto è il seguente:Jobs and tasks require little additional configuration for low-priority nodes; the only support is as follows:

  • La proprietà JobManagerTask di un processo ha una nuova proprietà, AllowLowPriorityNode.The JobManagerTask property of a job has a new property, AllowLowPriorityNode. Quando questa proprietà è true, è possibile programmare le attività di gestione dei processi su un nodo dedicato o su un nodo con priorità bassa.When this property is true, the job manager task can be scheduled on either a dedicated or low-priority node. Se questa proprietà è false, l'attività di gestione dei processi viene programmata solo per un nodo dedicato.If this property is false, the job manager task is scheduled to a dedicated node only.

  • Per un'applicazione di attività è disponibile una variabile di ambiente, in modo da determinarne l'esecuzione su un nodo dedicato o con priorità bassa.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. La variabile di ambiente è AZ_BATCH_NODE_IS_DEDICATED.The environment variable is AZ_BATCH_NODE_IS_DEDICATED.

Gestione delle prioritàHandling preemption

Le macchine virtuali in alcuni casi possono essere superate. In questo caso, il servizio Batch effettua le operazioni seguenti:VMs may occasionally be preempted; when preemption happens, Batch does the following:

  • Le macchine virtuali interrotte hanno lo stato aggiornato ad Annullato.The preempted VMs have their state updated to Preempted.
  • Se sulle macchine virtuali di un nodo annullato vi erano delle attività in esecuzione, queste vengono riaccodate e rieseguire.If tasks were running on the preempted node VMs, then those tasks are requeued and run again.
  • La macchina virtuale viene eliminata in modo efficace e tutti i dati memorizzati in locale nella macchina virtuale andranno persi.The VM is effectively deleted, leading to loss of any data stored locally on the VM.
  • Il pool tenta continuamente raggiungere il numero stabilito di nodi con priorità bassa disponibili.The pool continually attempts to reach the target number of low-priority nodes available. Quando viene individuata una capacità di sostituzione, i nodi mantengono il proprio ID, ma vengono inizializzati di nuovo, attraversando gli stati Creazione in corso e Avvio in corso prima che siano disponibili per la pianificazione delle attività.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.
  • Il numero delle priorità è disponibile come metrica nel portale di Azure.Preemption counts are available as a metric in the Azure portal.

MetricheMetrics

Per i nodi con priorità bassa sono disponibili nuove metriche nel portale di Azure.New metrics are available in the Azure portal for low-priority nodes. Le metriche sono:These metrics are:

  • Numero di nodi a bassa prioritàLow-Priority Node Count
  • Numero di core a bassa prioritàLow-Priority Core Count
  • Numero di nodi annullatiPreempted Node Count

Per visualizzare le metriche nel portale di Azure:To view metrics in the Azure portal:

  1. Passare all'account Batch nel portale e visualizzare le impostazioni per l'account Batch.Navigate to your Batch account in the portal, and view the settings for your Batch account.
  2. Selezionare Metrica dalla sezione Monitoraggio.Select Metrics from the Monitoring section.
  3. Selezionare le metriche da usare dall'elenco Metriche disponibili.Select the metrics you desire from the Available Metrics list.

Metriche per i nodi a priorità bassa

Passaggi successiviNext steps

  • Vedere Panoramica sulle funzionalità di Batch per sviluppatoriper informazioni essenziali per chiunque si prepari all'uso di Batch.Read the Batch feature overview for developers, essential information for anyone preparing to use Batch. L'articolo contiene informazioni più dettagliate sulle risorse del servizio Batch, ad esempio pool, nodi, processi e attività, e sulle numerose funzionalità delle API che è possibile usare durante la compilazione dell'applicazione 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.
  • Informazioni sulle API e gli strumenti di Batch disponibili per la compilazione di soluzioni Batch.Learn about the Batch APIs and tools available for building Batch solutions.