CycleCloud GridEngine Cluster
Open Grid Scheduler (Motore griglia) può essere facilmente abilitato in un cluster Azure CycleCloud modificando la definizione del cluster "run_list". I due componenti di base di un cluster del motore di griglia sono il nodo "master" che fornisce un file system condiviso in cui viene eseguito il software del motore di griglia 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 del motore di griglia può essere simile al seguente:
[cluster grid-engine]
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[configuration]]]
run_list = role[sge_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A1 # 1 core
[[[configuration]]]
run_list = role[sge_execute_role]
Nota
I nomi dei ruoli contengono "sge" per motivi legacy: Grid Engine è stato un prodotto di Sun Microsystems.
L'importazione e l'avvio di un cluster con definizione in CycleCloud restituirà un singolo nodo 'master'. È possibile aggiungere nodi di esecuzione al cluster tramite il cyclecloud add_node
comando . Ad esempio, per aggiungere 10 più nodi di esecuzione:
cyclecloud add_node grid-engine -t execute -c 10
Scalabilità automatica del motore di griglia
Azure CycleCloud supporta la scalabilità automatica per il motore di griglia, il che significa che il software monitorerà lo stato della coda e disattiva i nodi in base alle esigenze per completare il lavoro in un periodo di tempo/costo ottimale. È possibile abilitare la scalabilità automatica per Il motore di griglia aggiungendo Autoscale = true
alla definizione del cluster:
[cluster grid-engine]
Autoscale = True
Per impostazione predefinita, tutti i processi inviati nella coda del motore di griglia verranno eseguiti nei computer di tipo 'execute', questi sono computer definiti dalla matrice di nodi denominata 'execute'. Non si è limitati al nome "execute", né si è limitati a un singolo tipo di configurazione del computer per eseguire processi e scalabilità automatica.
Ad esempio, un caso comune può essere che si dispone di un cluster con due definizioni di nodi diverse uno è per l'esecuzione di processi "normali" che usano CPU standard mentre un altro tipo di processo può usare computer GPU. In questo caso si vuole ridimensionare in modo indipendente la coda in base a entrambi i processi normali e ai processi GPU per assicurarsi di avere una quantità appropriata di ogni computer per usare la coda di lavoro. Una definizione di esempio è simile a:
[cluster grid-engine]
Autoscale = True
[[node master]]
ImageName = cycle.image.centos7
MachineType = Standard_A3 # 4 cores
[[[configuration]]]
run_list = role[sge_master_role]
[[nodearray execute]]
ImageName = cycle.image.centos7
MachineType = Standard_A4 # 8 cores
[[[configuration]]]
run_list = role[sge_execute_role]
[[nodearray gpu]]
MachineType = Standard_NV12 # 2 GPUs
ImageName = cycle.image.centos7
# Set the number of cores to the number of GPUs for autoscaling purposes
CoreCount = 2
[[[configuration]]]
run_list = role[sge_execute_role]
gridengine.slot_type = gpu
gridengine.slots = 2
Nell'esempio precedente sono presenti due matrici di nodi: una è una matrice di nodi di esecuzione "standard", la seconda è denominata "gpu" che fornisce un MachineType con due GPU Nvidia (Standard_NV12 in Azure). Si noti anche che nella sezione di configurazione sono presenti due nuovi elementi oltre alla ricetta 'csge:sgeexec'. L'aggiunta gridengine.slot_type = gpu
indica all'utilità di pianificazione del motore di griglia che questi nodi devono essere denominati nodi 'gpu' e quindi devono eseguire solo processi 'gpu'. Il nome 'gpu' è arbitrario, ma un nome che descrive il nodo è più utile. Impostare gridengine.slots = 2
, che indica al software di assicurarsi che questo tipo di nodo possa eseguire solo due processi contemporaneamente (Standard_NV12 ha solo 2 GPU). Per impostazione predefinita, il numero di slot per nodo nel motore di griglia sarà il numero di CPU nel sistema che, in questo caso, causerebbe troppi processi da eseguire simultaneamente nel nodo. Nell'esempio precedente viene CoreCount=2
impostato sul nodearray per corrispondere al numero di GPU disponibili in MachineType, consentendo a CycleCloud di ridimensionare correttamente tale matrice in GPU e conteggio CPU.
È possibile verificare il numero di slot e slot_type i computer in uso eseguendo il comando:
-bash-4.1# qstat -F slot_type
queuename qtype resv/used/tot. load_avg arch states
---------------------------------------------------------------------------------
all.q@ip-0A000404 BIP 0/0/4 0.17 linux-x64
hf:slot_type=execute
---------------------------------------------------------------------------------
all.q@ip-0A000405 BIP 0/0/2 2.18 linux-x64
hf:slot_type=gpu
---------------------------------------------------------------------------------
all.q@ip-0A000406 BIP 0/0/4 0.25 linux-x64
Si noti che sono presenti uno di ogni "slot_type" specificato (esegui e gpu) e il numero di slot per lo slot "execute" è 4, ovvero il numero di CPU nel computer. Il numero di slot per il tipo di slot "GPU" è 2, che è stato specificato nel modello di configurazione del cluster. Il terzo computer è il nodo master che non esegue processi.
Utilizzo avanzato del motore di griglia
Le impostazioni di configurazione precedenti consentono la personalizzazione avanzata di nodi e matrici di nodi. Ad esempio, se i processi richiedono una quantità specifica di memoria, ad esempio 10 GB, è possibile definire un nodearray di esecuzione che avvia i computer con 60 GB di memoria, aggiungere nelle opzioni gridengine.slots = 6
di configurazione per garantire che solo 6 processi possano essere eseguiti simultaneamente in questo tipo di nodo (assicurando che ogni processo abbia almeno 10 GB di memoria da usare).
Nodi raggruppati nel motore di griglia
Quando un processo parallelo viene inviato al motore di griglia, il comportamento di scalabilità automatica predefinito usato da CycleCloud consiste nel considerare ogni processo MPI come richiesta di nodo raggruppata. I nodi raggruppati sono strettamente associati e ideali per i flussi di lavoro MPI.
Quando un set di nodi raggruppati unisce un cluster del motore di griglia, l'ID gruppo di ogni nodo viene usato come valore del valore affinity_group
complesso . Richiedendo l'impostazione di un affinity_group
oggetto da specificare per i processi, consente all'utilità di pianificazione del motore di griglia di garantire che i processi vengano inseriti solo nei computer che si trovano nello stesso gruppo.
L'automazione di CycleCloud richiederà automaticamente nodi raggruppati e li assegna ai gruppi di affinità disponibili quando vengono rilevati processi paralleli.
Invio di processi al motore di griglia
Il modo più generico per inviare processi a un utilità di pianificazione del motore di griglia è il comando:
qsub my_job.sh
Questo comando invia un processo che verrà eseguito in un nodo di tipo 'execute', ovvero un nodo definito dal nodearray 'execute'. Per eseguire un processo in un nodoarray di un tipo diverso, ad esempio il tipo di nodo "gpu" precedente, viene modificato l'invio:
qsub -l slot_type=gpu my_gpu_job.sh
Questo comando garantisce che il processo venga eseguito solo in un 'slot_type' di 'gpu'.
Se slot_type viene omesso, 'execute' verrà assegnato automaticamente al processo. Il meccanismo che assegna automaticamente slot_type ai processi può essere modificato dall'utente. È possibile creare uno script python in /opt/cycle/jetpack/config/autoscale.py che deve definire una singola funzione "sge_job_handler". Questa funzione riceve una rappresentazione del dizionario del processo, simile all'output di un qstat -j JOB_ID
comando e deve restituire un dizionario di risorse hard che devono essere aggiornate per il processo. Ad esempio, di seguito è riportato uno script che assegna un processo alla "gpu" slot_type se il nome dei processi contiene le lettere 'gpu'. Ciò consente a un utente di inviare i processi da un sistema automatizzato senza dover modificare i parametri del processo e di avere comunque i processi eseguiti su e ridimensionare automaticamente i nodi corretti:
#!/usr/env python
#
# File: /opt/cycle/jetpack/config/autoscale.py
#
def sge_job_handler(job):
# The 'job' parameter is a dictionary containing the data present in a 'qstat -j JOB_ID':
hard_resources = {'slot_type': 'execute', 'affinity_group' : 'default' }
# Don't modify anything if the job already has a slot type
# You could modify the slot type at runtime by not checking this
if 'hard_resources' in job and 'slot_type' in job['hard_resources']:
return hard_resources
# If the job's script name contains the string 'gpu' then it's assumed to be a GPU job.
# Return a dictionary containing the new job_slot requirement to be updated.
# For example: 'big_data_gpu.sh' would be run on a 'gpu' node.
if job['job_name'].find('gpu') != -1:
hard_resources {'slot_type': 'gpu'}
else:
return hard_resources
Il parametro 'job' passato è un dizionario che contiene i dati in una qstat -j JOB_ID
chiamata:
{
"job_number": 5,
"job_name": "test.sh",
"script_file": "test.sh",
"account": "sge",
"owner": "cluster.user",
"uid": 100,
"group": "cluster.user",
"gid": 200,
"submission_time": "2013-10-09T09:09:09",
"job_args": ['arg1', 'arg2', 'arg3'],
"hard_resources": {
'mem_free': '15G',
'slot_type': 'execute'
}
}
È possibile usare questa funzionalità di scripting per assegnare automaticamente slot_type in base a qualsiasi parametro definito nel processo, ad esempio argomenti, altri requisiti di risorsa come memoria, invio dell'utente e così via.
Se si desidera inviare 5 processi di ogni 'slot_type':
qsub -t 1:5 gpu_job.sh
qsub -t 1:5 normal_job.sh
Nella coda sono presenti 10 processi. A causa dello script definito in precedenza, i cinque processi con "gpu" nel nome verranno configurati automaticamente per l'esecuzione solo nei nodi di 'slot_type=gpu'. Il meccanismo di scalabilità automatica CycleCloud rileva che sono presenti 5 processi 'gpu' e 5 processi 'execute'. Poiché il nodo 'gpu' è definito come avere 2 slot per nodo, CycleCloud inizierà 3 di questi nodi (5/2=2,5 arrotondati fino a 3). Esistono 5 processi normali, poiché il tipo di computer per il nodo 'execute' ha 4 CPU, CycleCloud inizierà 2 di questi nodi per gestire i processi (5/4=1,25 arrotondati fino a 2). Dopo un breve periodo di tempo per l'avvio e la configurazione dei nodi appena avviati, tutti i 10 processi verranno eseguiti al completamento e quindi i 5 nodi verranno automaticamente arrestati prima di essere fatturati di nuovo dal provider cloud.
Si presuppone che i processi abbiano una durata di un'ora. Se il runtime del processo è noto l'algoritmo di scalabilità automatica può trarre vantaggio da queste informazioni. Informare la scalabilità automatica del tempo di esecuzione previsto del processo aggiungendolo al contesto del processo. L'esempio seguente indica la scalabilità automatica che il runtime del processo è in media di 10 minuti:
qsub -ac average_runtime=10 job_with_duration_of_10m.sh
Informazioni di riferimento sulla configurazione del motore di griglia
Di seguito sono riportate le opzioni di configurazione specifiche del motore di griglia che è possibile attivare per personalizzare le funzionalità:
Opzioni di configurazione SGE-Specific | Descrizione |
---|---|
gridengine.slot | Numero di slot per un determinato nodo da segnalare al motore di griglia. Il numero di slot è il numero di processi simultanei che un nodo può eseguire, questo valore viene predefinito per il numero di CPU in un determinato computer. È possibile eseguire l'override di questo valore nei casi in cui non si eseguono processi in base alla CPU ma alla memoria, alle GPU e così via. |
gridengine.slot_type | Il nome di tipo "slot" fornisce un nodo. Il valore predefinito è "execute". Quando un processo viene contrassegnato con la risorsa hard 'slot_type=', 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 corretto di nodo. |
gridengine.ignore_fqdn | Impostazione predefinita: true. Impostare su false se tutti i nodi del cluster non fanno parte di un singolo dominio DNS. |
gridengine.version | Impostazione predefinita: '2011.11'. Si tratta della versione del motore di griglia da installare ed eseguire. Questa è attualmente l'opzione predefinita e solo . In futuro possono essere supportate versioni aggiuntive del software del motore di griglia. |
gridengine.root | Impostazione predefinita: '/sched/sge/sge-2011.11' Il motore di griglia verrà installato e montato su ogni nodo del sistema. È consigliabile non modificare questo valore, ma se è necessario impostarlo sullo stesso valore in ogni nodo del cluster. |
CycleCloud supporta un set standard di attributi autostop tra gli utilità di pianificazione:
Attributo | Descrizione |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Il supporto automatico è abilitato in questo nodo? [true/false] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Quantità di tempo (in secondi) per un nodo inattivo dopo il completamento dei processi prima che venga ridimensionato. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Quantità di tempo (in secondi) per un nodo inattivo prima di completare i processi prima che venga ridimensionato. |
Problemi noti
-
qsh
il comando per la sessione interattiva non funziona. Usareqrsh
come alternativa. - Il
exclusive=1
complesso non è rispettato dalla scalabilità automatica. Un numero inferiore di nodi rispetto al previsto può essere avviato di conseguenza.
Nota
Anche se Windows è una piattaforma GridEngine supportata ufficialmente, CycleCloud non supporta l'esecuzione di GridEngine in Windows in questo momento.
Questa pagina riguarda funzionalità e configurazione dell'uso di GridEngine (Altair) con CycleCloud.
Configurazione delle risorse
L'applicazione cyclecloud-gridengine corrisponde alle risorse di sge alle risorse cloud di Azure per offrire strumenti di scalabilità automatica e configurazione del cluster avanzati. L'applicazione verrà distribuita automaticamente per i cluster creati tramite l'interfaccia utente CycleCloud oppure può essere installata in qualsiasi host amministratore gridengine in un cluster esistente.
Installazione o aggiornamento di cyclecloud-gridengine
Il bundle cyclecloud-gridengine è disponibile in github come artefatto di versione. L'installazione e l'aggiornamento saranno lo stesso processo. L'applicazione richiede Python3 con virtualenv.
tar xzf cyclecloud-gridengine-pkg-*.tar.gz
cd cyclecloud-gridengine
./install.sh
File importanti
L'applicazione analizza la configurazione di sge ogni volta che viene chiamata : processi, code, complessi. Le informazioni vengono fornite nello stderr e stdout del comando e in un file di log, entrambi a livelli configurabili. Tutti i comandi di gestione gridengine con argomenti vengono registrati anche nel file.
Descrizione | Location |
---|---|
Configurazione della scalabilità automatica | /opt/cycle/gridengine/autoscale.json |
Log di scalabilità automatica | /opt/cycle/jetpack/logs/autoscale.log |
log di traccia qconf | /opt/cycle/jetpack/logs/qcmd.log |
Code SGE, hostgroup e ambienti paralleli
L'utilità di scalabilità automatica cyclecloud-gridengine, azge
aggiungerà host al cluster in base alla configurazione del cluster. Le operazioni di scalabilità automatica eseguono le azioni seguenti.
- Leggere la richiesta di risorsa del processo e trovare una macchina virtuale appropriata per avviare
- Avviare la macchina virtuale e attendere che sia pronto
- Leggere la coda e l'ambiente parallelo dal processo
- In base alla coda/pe assegnare l'host a un hostgroup appropriato
- Aggiungere l'host al cluster e a qualsiasi altra coda contenente il gruppo host
Prendere in considerazione la definizione della coda seguente per una coda denominata short.q
hostlist @allhosts @mpihg01 @mpihg02 @lowprio
...
seq_no 10000,[@lowprio=10],[@mpihg01=100],[@mpihg02=200]
pe_list NONE,[@mpihg01=mpi01], \
[@mpihg02=mpi02]
L'invio di un processo qsub -q short.q -pe mpi02 12 my-script.sh
avvierà al lease di una macchina virtuale e, quando viene aggiunto al cluster, verrà aggiunto al gruppo host @mpihg02 perché è il gruppo host sia disponibile per la coda che per l'ambiente parallelo. Verrà aggiunto anche a @allhosts, ovvero un hostgroup speciale.
Senza specificare un pe, qsub -q short.q my-script.sh
la macchina virtuale risultante verrà aggiunta a @allhosts e @lowpriority questi sono i gruppi host nella coda che non sono assegnati pes.
Infine, un processo inviato con qsub -q short.q -pe mpi0* 12 my-script.sh
genera una macchina virtuale aggiunta a @mpihg01 o @mpihg02 a seconda delle stime di allocazione CycleCloud.
Gli ambienti paralleli equivalgono in modo implicito al gruppo di posizionamento cyclecloud. Le macchine virtuali in un PE sono vincolate all'interno della stessa rete. Se si vuole usare un PE che non mantiene un gruppo di posizionamento, usare autoscale.json per rifiutare l'annullamento.
Qui si opta per i gruppi di posizionamento per il make pe:
"gridengine": {
"pes": {
"make": {
"requires_placement_groups": false
}
},
Gruppi di posizionamento CycleCloud
I gruppi di posizionamento di CycleCloud mappano uno a uno a una macchina virtuale di Azure con SinglePlacementGroup - Macchine virtuali in un gruppo di posizionamento condividono un'infrastruttura Infiniband e condividono solo le macchine virtuali all'interno del gruppo di posizionamento. Per mantenere in modo intuitivo questi silos, i placementgroup mappano anche 1:1 con ambiente parallelo gridengine.
La specifica di un ambiente parallelo per un processo limita l'esecuzione del processo in un gruppo di posizionamento tramite la logica di assegnazione del gruppo host intelligente. È possibile rifiutare esplicitamente questo comportamento con la configurazione precedente in autoscale.json : "required_placement_groups" : false
.
Configurazione della scalabilità automatica
Questo plug-in ridimensiona automaticamente la griglia per soddisfare le esigenze del carico di lavoro. Il file di configurazione autoscale.json determina il comportamento della scalabilità automatica del motore di griglia.
- Impostare i dettagli della connessione cyclecloud
- Impostare il timer di terminazione per i nodi inattive
- La scalabilità automatica multidimensionale è possibile, impostare quali attributi usare nel processo di imballaggio, ad esempio slot, memoria
- Registrare le code, gli ambienti paralleli e i gruppi host da gestire
Configurazione | Tipo | Descrizione |
---|---|---|
url | string | CC URL |
nome utente/password | string | Dettagli connessione CC |
cluster_name | string | Nome del cluster CC |
default_resources | Mappa | Collegare una risorsa nodo a una risorsa host del motore di griglia per la scalabilità automatica |
idle_timeout | Int | Tempo di attesa prima di terminare i nodi inattive (s) |
boot_timeout | Int | Tempo di attesa prima di terminare i nodi durante le fasi di configurazione lunghe (s) |
gridengine.relevant_complexes | Elenco (stringa) | Complessi del motore di griglia da considerare nella scalabilità automatica, ad esempio gli slot, mem_free |
gridengine.logging | File | Percorso del file di configurazione della registrazione |
gridengine.pes | Struct | Specificare il comportamento di PES, ad esempio requires_placement_group = false |
Il programma di scalabilità automatica considererà solo la risorsa pertinente
Risorsa di scalabilità automatica aggiuntiva
Per impostazione predefinita, il cluster con scalabilità in base al numero di slot richiesti dai processi. È possibile aggiungere un'altra dimensione alla scalabilità automatica.
Si supponga di voler ridimensionare automaticamente la richiesta di risorsa del processo per m_mem_free
.
- Aggiungere
m_mem_free
all'oggettogridengine.relevant_resources
in autoscale.json - Collegamento
m_mem_free
alla risorsa di memoria a livello di nodo in autoscale.json
Questi attributi possono essere riferimenti con node.*
come valore in _default/risorse.
Nodo | Tipo | Descrizione |
---|---|---|
nodearray | string | Nome del nodo cyclecloudarray |
placement_group | string | Nome del gruppo di posizionamento cyclecloud all'interno di un nodearray |
vm_size | string | Nome prodotto macchina virtuale, ad esempio "Standard_F2s_v2" |
vcpu_count | Int | CPU virtuali disponibili nel nodo come indicato nelle singole pagine del prodotto |
pcpu_count | Int | CPU fisiche disponibili nel nodo |
memoria | string | Memoria fisica approssimativa disponibile nella macchina virtuale con indicatore unità, ad esempio "8,0g" |
Gli attributi aggiuntivi si trovano nello node.resources.*
spazio dei nomi, ad esempio 'node.resources.
Nodo | Tipo | Descrizione |
---|---|---|
ncpus | string | Numero di CPU disponibili nella macchina virtuale |
pcpus | string | Numero di CPU fisiche disponibili nella macchina virtuale |
ngpus | Integer | Numero di GPU disponibili nella macchina virtuale |
memb | string | Memoria fisica approssimativa disponibile nella macchina virtuale con indicatore unità, ad esempio "8.0b" |
memkb | string | Memoria fisica approssimativa disponibile nella macchina virtuale con indicatore unità, ad esempio "8,0k" |
memmb | string | Memoria fisica approssimativa disponibile nella macchina virtuale con indicatore unità, ad esempio "8,0m" |
memgb | string | Memoria fisica approssimativa disponibile nella macchina virtuale con indicatore unità, ad esempio "8,0g" |
memtb | string | Memoria fisica approssimativa disponibile nella macchina virtuale con indicatore unità, ad esempio "8.0t" |
slot | Integer | Uguale a ncpus |
slot_type | string | Etichetta di aggiunta per le estensioni. Non in genere usato. |
m_mem_free | string | Memoria libera prevista nell'host di esecuzione, ad esempio "3.0g" |
mfree | string | Uguale a _m/_mem/gratuito |
Mapping delle risorse
Esistono anche matematicamente disponibili per la default_resources: ridurre gli slot in una determinata matrice di nodi per due e aggiungere la risorsa docker a tutti i nodi:
"default_resources": [
{
"select": {"node.nodearray": "beegfs"},
"name": "slots",
"value": "node.vcpu_count",
"subtract": 2
},
{
"select": {},
"name": "docker",
"value": true
},
Eseguire il mapping delle vCPU del nodo al complesso degli slot e memmb
di mem_free
usare comunemente le impostazioni predefinite.
È necessaria la prima associazione.
"default_resources": [
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
{
"select": {},
"name": "mem_free",
"value": "node.resources.memmb"
}
],
Si noti che se un complesso ha un collegamento non uguale all'intero valore, definire entrambi in default_resources dove physical_cpu
è il nome complesso:
"default_resources": [
{
"select": {},
"name": "physical_cpu",
"value": "node.pcpu_count"
},
{
"select": {},
"name": "pcpu",
"value": "node.resources.physical_cpu"
}
]
L'ordinamento è importante quando si vuole un comportamento specifico per un attributo specifico. Per allocare un singolo slot per un nodo specifico, mantenendo il numero di slot predefinito per tutti gli altri nodiarray:
"default_resources": [
{
"select": {"node.nodearray": "FPGA"},
"name": "slots",
"value": "1",
},
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
]
Hostgroup
Il ridimensionatore automatico CycleCloud, nel tentativo di soddisfare i requisiti del processo, eseguirà il mapping dei nodi al gruppo host appropriato. Le code, gli ambienti paralleli e i complessi sono tutti considerati. Gran parte della logica corrisponde al bucket cyclecloud appropriato (e alla quantità di nodi) con il gruppo host di sge appropriato.
Per un processo inviato come: qsub -q "cloud.q" -l "m_mem_free=4g" -pe "mpi*" 48 ./myjob.sh
CycleCloud troverà l'intersezione dei gruppi host che:
- Sono inclusi nella pe_list per cloud.q e corrispondono al nome pe, ad esempio
pe_list [@allhosts=mpislots],[@hpc1=mpi]
. - Disporre di risorse adeguate e quota di sottoscrizione per fornire tutte le risorse del processo.
- Non vengono filtrati dalla configurazione dei vincoli del gruppo host.
È possibile che più hostgroup soddisfino questi requisiti, in tal caso la logica dovrà scegliere. Esistono tre modi per risolvere le ambiguità nell'appartenenza al gruppo host:
- Configurare le code in modo che non siano presenti ambiguità.
- Aggiungere vincoli a autoscale.json.
- Consente a CycleCloud di scegliere amoungst i gruppi host corrispondenti in modo ordinato dal nome modificando
weight_queue_host_sort < weight_queue_seqno
nella configurazione dell'utilità di pianificazione. - Impostare
seq_no 10000,[@hostgroup1=100],[@hostgroup2=200]
nella configurazione della coda per indicare una preferenza del gruppo host.
Vincoli del gruppo host
Quando più hostgroup sono definiti da una coda o da un xproject, tutti questi hostgroup possono potenzialmente avere gli host aggiunti a loro. È possibile limitare i tipi di host a cui è possibile aggiungere code impostando vincoli del gruppo host. Impostare un vincolo in base alle proprietà del nodo.
"gridengine": {
"hostgroups": {
"@mpi": {
"constraints": {
"node.vm_size": "Standard_H44rs"
}
},
"@amd-mem": {
"constraints" : {
"node.vm_size": "Standard_D2_v3",
"node.nodearray": "hpc"
}
},
}
}
HINT: controllare tutte le proprietà del nodo disponibili in
azge buckets
base a .
azge
Questo pacchetto include una riga di comando, azge. Questo programma deve essere usato per eseguire la scalabilità automatica e ha interrotto tutti i sottoprocessi in scalabilità automatica.
Questi comandi si basano sulle variabili di ambiente gridengine da impostare: è necessario essere in grado di chiamare qconf
e qsub
dallo stesso profilo in cui azge
viene chiamato.
comandi azge | Descrizione |
---|---|
validate | Verifica gli errori di configurazione noti nel scalabilità automatica o nel gridengine |
jobs | Mostra tutti i processi nella coda |
bucket | Mostra i pool di risorse disponibili per la scalabilità automatica |
nodes | Mostra gli host e le proprietà del cluster |
demand | Corrisponde ai requisiti del processo ai bucket cyclecloud e fornisce risultati di scalabilità automatica |
scalabilità automatica | Esegue la scalabilità automatica completa, l'avvio e la rimozione dei nodi in base alle configurazioni |
Quando si modificano le configurazioni dell'utilità di pianificazione (qconf) o le configurazioni di scalabilità automatica (autoscale.json) o anche la configurazione per la prima volta, azge può essere usato per verificare che il comportamento della scalabilità automatica corrisponda alle aspettative. Come radice, è possibile eseguire le operazioni seguenti. È consigliabile acquisire familiarità con queste funzionalità per comprendere il comportamento di scalabilità automatica.
- Eseguire
azge validate
per verificare le configurazioni per i problemi noti. - Eseguire
azge buckets
per esaminare le risorse offerte dal cluster CycleCloud. - Eseguire
azge jobs
per esaminare i dettagli del processo in coda. - Eseguire
azge demand
il processo per eseguire la corrispondenza tra bucket, esaminare quali processi vengono confrontati con i bucket e i gruppi host. - Eseguire
azge autoscale
per avviare il processo di allocazione dei nodi o aggiungere nodi pronti per l'aggiunta.
Quindi, quando questi comandi si comportano come previsto, abilitare la scalabilità automatica in corso aggiungendo il azge autoscale
comando alla radice crontab. (Souce le variabili di ambiente gridengine)
* * * * * . $SGE_ROOT/common/settings.sh && /usr/local/bin/azge autoscale -c /opt/cycle/gridengine/autoscale.json
Creazione di un cluster ibrido
CycleCloud supporterà lo scenario di bursting nel cloud. La configurazione di base presuppone che la $SGE_ROOT
directory sia disponibile per i nodi cloud. Questo presupposto può essere rilassato impostando gridengine.shared.spool = false
gridengine.shared.bin = false
e installando GridEngine in locale.
Per un caso semplice, è necessario fornire un file system che può essere montato dai nodi di esecuzione che contiene la $SGE_ROOT
directory e configurare tale montaggio nelle impostazioni facoltative. Quando viene rilasciata la dipendenza delle directory condivise e degli sched, è possibile arrestare il nodo dell'utilità di pianificazione che fa parte del cluster per impostazione predefinita e usare le configurazioni del file system esterno.
- Creare un nuovo cluster gridengine.
- Disabilitare il proxy restituito.
- Sostituire /sched e /shared con file system esterni.
- Salvare il cluster.
- Rimuovere il nodo dell'utilità di pianificazione come azione nell'interfaccia utente.
- Avviare il cluster, non verrà avviato inizialmente alcun nodo.
- Configurare
cyclecloud-gridengine
con autoscale.json per l'uso del nuovo cluster
Uso del motore di griglia Univa in CycleCloud
Il progetto CycleCloud per GridEngine usa sge-2011.11 per impostazione predefinita. È possibile usare i propri programmi di installazione di Altair GridEngine in base al contratto di licenza altair.
Questa sezione illustra come usare Altair GridEngine con il progetto CycleCloud GridEngine.
Prerequisiti
Questo esempio userà la versione demo 8.6.1, ma tutte le versioni > ge 8.4.0 sono supportate.
- Gli utenti devono fornire file binari UGE
- ge-8.6.x-bin-lx-amd64.tar.gz
- ge-8.6.x-common.tar.gz
- È necessario configurare l'interfaccia della riga di comando di CycleCloud. La documentazione è disponibile qui
Copiare i file binari nel cloud locker
Una versione complementare di AGE (8.6.7-demo) viene distribuita con CycleCloud. Per usare un'altra versione, caricare i file binari nell'account di archiviazione usato da CycleCloud.
$ azcopy cp ge-8.6.12-bin-lx-amd64.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
$ azcopy cp ge-8.6.12-common.tar.gz https://<storage-account-name>.blob.core.windows.net/cyclecloud/gridengine/blobs/
Modifica delle configurazioni nel modello di cluster
Creare una copia locale del modello gridengine e modificarla in modo da usare i programmi di installazione UGE anziché il valore predefinito.
wget https://raw.githubusercontent.com/Azure/cyclecloud-gridengine/master/templates/gridengine.txt
Nel file gridengine.txt individuare la prima occorrenza di [[[configuration]]]
e inserire testo in modo che corrisponda al frammento di codice seguente. Questo file non è sensibile al rientro.
NOTA: i dettagli nella configurazione, in particolare la versione, devono corrispondere al nome del file del programma di installazione.
[[[configuration gridengine]]]
make = ge
version = 8.6.12-demo
root = /sched/ge/ge-8.6.12-demo
cell = "default"
sge_qmaster_port = "537"
sge_execd_port = "538"
sge_cluster_name = "grid1"
gid_range = "20000-20100"
qmaster_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool/qmaster"
execd_spool_dir = "/sched/ge/ge-8.6.12-demo/default/spool"
spooling_method = "berkeleydb"
shadow_host = ""
admin_mail = ""
idle_timeout = 300
managed_fs = true
shared.bin = true
ignore_fqdn = true
group.name = "sgeadmin"
group.gid = 536
user.name = "sgeadmin"
user.uid = 536
user.gid = 536
user.description = "SGE admin user"
user.home = "/shared/home/sgeadmin"
user.shell = "/bin/bash"
Queste configurazioni eseguiranno l'override della versione predefinita di gridengine e del percorso di installazione all'avvio del cluster.
Non è possibile spostarsi all'esterno /sched
di perché si tratta di una posizione nfs specificatamente condivisa nel cluster.