OpenPBS

OpenPBS può essere facilmente abilitato in un cluster CycleCloud modificando "run_list" nella sezione di configurazione della definizione del cluster. I due componenti di base di un cluster PBS Professional sono il nodo "master" che fornisce un file system condiviso in cui viene eseguito il software PBS Professional e i nodi "execute" che sono gli host che montano il file system condiviso ed eseguono i processi inviati. Ad esempio, un semplice frammento di modello di cluster può essere simile al seguente:

[cluster my-pbspro]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[configuration]]]
    run_list = role[pbspro_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[configuration]]]
    run_list = role[pbspro_execute_role]

L'importazione e l'avvio di un cluster con definizione in CycleCloud produrranno un singolo nodo "master". È possibile aggiungere nodi di esecuzione al cluster tramite il cyclecloud add_node comando . Ad esempio, per aggiungere altri 10 nodi di esecuzione:

cyclecloud add_node my-pbspro -t execute -c 10

Scalabilità automatica basata sulle risorse pbs

Cyclecloud gestisce due risorse per espandere la funzionalità di provisioning dinamico. Queste risorse sono nodearray e machinetype.

Se si invia un processo e si specifica una risorsa nodearray di qsub -l nodearray=highmem -- /bin/hostname , CycleCloud aggiungerà nodi all'oggetto nodearray denominato "highmem". Se tale nodearray non è presente, il processo rimarrà inattiva.

Analogamente, se viene specificata una risorsa machinetype che un invio di processo, ad esempio qsub -l machinetype:Standard_L32s_v2 my-job.sh, CycleCloud ridimensiona automaticamente l'oggetto 'Standard_L32s_v2' nell'oggetto nodearray 'execute' (impostazione predefinita). Se il tipo di computer non è disponibile nella matrice di nodi "execute", il processo rimarrà inattiva.

Queste risorse possono essere usate in combinazione come:

qsub -l nodes=8:ppn=16:nodearray=hpc:machinetype=Standard_HB60rs my-simulation.sh

che verrà ridimensionata automaticamente solo se i computer "Standard_HB60rs" sono specificati una matrice di nodi "hpc".

Aggiunta di code aggiuntive assegnate a nodearrays

Nei cluster con più nodearray è comune creare code separate per instradare automaticamente i processi al tipo di macchina virtuale appropriato. In questo esempio si presuppone che l'oggetto nodearray "gpu" seguente sia stato definito nel modello di cluster:

    [[nodearray gpu]]
    Extends = execute
    MachineType = Standard_NC24rs

        [[[configuration]]]
        pbspro.slot_type = gpu

Dopo aver importato il modello di cluster e avviato il cluster, è possibile eseguire i comandi seguenti nel nodo del server per creare la coda "gpu":

/opt/pbs/bin/qmgr -c "create queue gpu"
/opt/pbs/bin/qmgr -c "set queue gpu queue_type = Execution"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.place = scatter"
/opt/pbs/bin/qmgr -c "set queue gpu resources_default.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.ungrouped = false"
/opt/pbs/bin/qmgr -c "set queue gpu default_chunk.slot_type = gpu"
/opt/pbs/bin/qmgr -c "set queue gpu enabled = true"
/opt/pbs/bin/qmgr -c "set queue gpu started = true"

Nota

La definizione di coda precedente comprimerà tutte le macchine virtuali nella coda in un singolo set di scalabilità di macchine virtuali per supportare i processi MPI. Per definire la coda per i processi seriali e consentire più set di scalabilità di macchine virtuali, impostare ungrouped = true per e resources_defaultdefault_chunk. È anche possibile impostare resources_default.place = pack se si vuole che l'utilità di pianificazione comprima i processi nelle macchine virtuali anziché l'allocazione round robin dei processi. Per altre informazioni sulla compressione dei processi PBS, vedere la documentazione ufficiale di PBS Professional OSS.

Informazioni di riferimento sulla configurazione di PBS Professional

Di seguito sono riportate le opzioni di configurazione specifiche di PBS Professional che è possibile attivare o disattivare per personalizzare le funzionalità:

Opzioni PBS Pro Descrizione
pbspro.slots Numero di slot per un determinato nodo da segnalare a PBS Pro. Il numero di slot è il numero di processi simultanei che un nodo può eseguire. Questo valore viene impostato per impostazione predefinita sul numero di CPU in un determinato computer. È possibile eseguire l'override di questo valore nei casi in cui non si eseguono processi basati sulla CPU, ma su memoria, GPU e così via.
pbspro.slot_type Nome di tipo "slot" fornito da un nodo. Il valore predefinito è 'execute'. Quando un processo viene contrassegnato con la risorsa slot_type=<type>hard , tale processo verrà eseguito solo in un computer dello stesso tipo di slot. In questo modo è possibile creare configurazioni software e hardware diverse per nodo e assicurarsi che un processo appropriato sia sempre pianificato sul tipo di nodo corretto.
pbspro.version Impostazione predefinita: '18.1.3-0'. Questa è la versione PBS Professional da installare ed eseguire. Questa è attualmente l'opzione predefinita e solo . Nelle future versioni aggiuntive del software PBS Professional potrebbe essere supportato.

Connettere PBS con CycleCloud

CycleCloud gestisce i cluster OpenPBS tramite un agente installabile denominato azpbs. Questo agente si connette a CycleCloud per leggere le configurazioni di cluster e vm e si integra anche con OpenPBS per elaborare in modo efficace le informazioni sul processo e sull'host. Tutte le azpbs configurazioni si trovano nel autoscale.json file, in genere /opt/cycle/pbspro/autoscale.json.

  "password": "260D39rWX13X",
  "url": "https://cyclecloud1.contoso.com",
  "username": "cyclecloud_api_user",
  "logging": {
    "config_file": "/opt/cycle/pbspro/logging.conf"
  },
  "cluster_name": "mechanical_grid",

File importanti

L'agente azpbs analizza la configurazione pbs ogni volta che viene chiamata, ovvero processi, code, risorse. Le informazioni vengono fornite in stderr e stdout del comando e in un file di log, entrambi a livelli configurabili. Tutti i comandi di gestione PBS (qcmd) con argomenti vengono registrati anche nel file.

Tutti questi file sono disponibili nella directory /opt/cycle/pbspro/ in cui è installato l'agente.

File Posizione Descrizione
Configurazione della scalabilità automatica autoscale.json Configurazione per la scalabilità automatica, la mappa delle risorse, le informazioni di accesso a CycleCloud
Log di scalabilità automatica autoscale.log Registrazione dei thread principali dell'agente, inclusa la gestione degli host CycleCloud
Log della domanda demand.log Log dettagliato per la corrispondenza delle risorse
Log di traccia qcmd qcmd.log Registrazione delle chiamate dell'agente qcmd
Configurazione di registrazione logging.conf Configurazioni per le maschere di registrazione e i percorsi dei file

Definizione delle risorse OpenPBS

Questo progetto consente in genere un'associazione di risorse OpenPBS alle risorse di macchine virtuali di Azure tramite il progetto cyclecloud-pbspro (azpbs). Relazione di risorsa definita in autoscale.json.

Le risorse predefinite definite con il modello di cluster fornito con sono

{"default_resources": [
   {
      "select": {},
      "name": "ncpus",
      "value": "node.vcpu_count"
   },
   {
      "select": {},
      "name": "group_id",
      "value": "node.placement_group"
   },
   {
      "select": {},
      "name": "host",
      "value": "node.hostname"
   },
   {
      "select": {},
      "name": "mem",
      "value": "node.memory"
   },
   {
      "select": {},
      "name": "vm_size",
      "value": "node.vm_size"
   },
   {
      "select": {},
      "name": "disk",
      "value": "size::20g"
   }]
}

La risorsa OpenPBS denominata mem è equivalente a un attributo del nodo denominato node.memory, ovvero la memoria totale di qualsiasi macchina virtuale. Questa configurazione consente di azpbs elaborare una richiesta di risorsa, ad -l mem=4gb esempio confrontando il valore dei requisiti delle risorse del processo con le risorse del nodo.

Si noti che il disco è attualmente hardcoded in size::20g. Di seguito è riportato un esempio di gestione delle dimensioni specifiche del disco della macchina virtuale

   {
      "select": {"node.vm_size": "Standard_F2"},
      "name": "disk",
      "value": "size::20g"
   },
   {
      "select": {"node.vm_size": "Standard_H44rs"},
      "name": "disk",
      "value": "size::2t"
   }

Scalabilità automatica e set di scalabilità

CycleCloud gestisce in modo diverso lo spanning e i processi seriali nei cluster OpenPBS. I processi che si estendono verranno inseriti nei nodi che fanno parte dello stesso gruppo di posizionamento. Il gruppo di posizionamento ha un significato specifico della piattaforma (VirtualMachineScaleSet con SinglePlacementGroup=true) e CC gestirà un gruppo di posizionamento denominato per ogni set di nodi esteso. Usare la risorsa group_id PBS per questo nome del gruppo di posizionamento.

La hpc coda aggiunge l'equivalente di -l place=scatter:group=group_id usando le impostazioni predefinite della coda nativa.

Installazione dell'agente CycleCloud OpenPBS azpbs

Il cluster OpenPBS CycleCloud gestirà l'installazione e la configurazione dell'agente nel nodo del server. La preparazione include l'impostazione di risorse, code e hook PBS. Un'installazione con script può essere eseguita anche all'esterno di CycleCloud.

# Prerequisite: python3, 3.6 or newer, must be installed and in the PATH
wget https://github.com/Azure/cyclecloud-pbspro/releases/download/2.0.5/cyclecloud-pbspro-pkg-2.0.5.tar.gz
tar xzf cyclecloud-pbspro-pkg-2.0.5.tar.gz
cd cyclecloud-pbspro

# Optional, but recommended. Adds relevant resources and enables strict placement
./initialize_pbs.sh

# Optional. Sets up workq as a colocated, MPI focused queue and creates htcq for non-MPI workloads.
./initialize_default_queues.sh

# Creates the azpbs autoscaler
./install.sh  --venv /opt/cycle/pbspro/venv

# Otherwise insert your username, password, url, and cluster name here.
./generate_autoscale_json.sh --install-dir /opt/cycle/pbspro \
                             --username user \
                             --password password \
                             --url https://fqdn:port \
                             --cluster-name cluster_name

azpbs validate

CycleCloud supporta un set standard di attributi autostop tra utilità di pianificazione:

Attributo Descrizione
cyclecloud.cluster.autoscale.stop_enabled Autostop è abilitato in questo nodo? [true/false]
cyclecloud.cluster.autoscale.idle_time_after_jobs Quantità di tempo ,in secondi, per cui un nodo deve rimanere inattivo dopo aver completato i processi prima che venga ridotto.
cyclecloud.cluster.autoscale.idle_time_before_jobs Quantità di tempo ,in secondi, per cui un nodo deve rimanere inattivo prima di completare i processi prima che venga ridotto.

Nota

CycleCloud non supporta la configurazione di bursting con Open PBS.

Nota

Anche se Windows è una piattaforma Open PBS supportata ufficialmente, CycleCloud non supporta l'esecuzione di Open PBS in Windows in questo momento.