CycleCloud GridEngine-kluster
Open Grid Scheduler (Grid Engine) kan enkelt aktiveras i ett Azure CycleCloud-kluster genom att ändra "run_list" i klusterdefinitionen. De två grundläggande komponenterna i ett Grid Engine-kluster är "huvudnoden" som tillhandahåller ett delat filsystem där Grid Engine-programvaran körs och de "kör"-noder som är värdar som monterar det delade filsystemet och kör de jobb som skickas. Ett enkelt kodfragment för Grid Engine-klustermallar kan till exempel se ut så här:
[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]
Anteckning
Rollnamnen innehåller "sge" av äldre skäl: Grid Engine var en produkt av Sun Microsystems.
Om du importerar och startar ett kluster med definition i CycleCloud får du en enda huvudnod. Kör noder kan läggas till i klustret via cyclecloud add_node
kommandot . Om du till exempel vill lägga till ytterligare 10 kör noder:
cyclecloud add_node grid-engine -t execute -c 10
Autoskalning av rutnätsmotor
Azure CycleCloud stöder autoskalning för Grid Engine, vilket innebär att programvaran övervakar statusen för din kö och aktiverar och inaktiverar noder efter behov för att slutföra arbetet på en optimal tid/kostnad. Du kan aktivera automatisk skalning för Grid Engine genom att lägga Autoscale = true
till i klusterdefinitionen:
[cluster grid-engine]
Autoscale = True
Som standard körs alla jobb som skickas till Grid Engine-kön på datorer av typen "execute", dessa är datorer som definieras av nodmatrisen med namnet "execute". Du är inte begränsad till namnet "execute", och du är inte heller begränsad till en enda typ av datorkonfiguration att köra jobb och autoskalning på.
Ett vanligt fall kan till exempel vara att du har ett kluster med två olika noddefinitioner en är för att köra "normala" jobb som förbrukar standard-CPU medan en annan typ av jobb kan använda GPU-datorer. I det här fallet vill du skala kön oberoende av både normala jobb och GPU-jobb för att se till att du har en lämplig mängd av varje dator för att använda arbetskön. En exempeldefinition skulle se ut ungefär så här:
[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
I exemplet ovan finns det nu två nodmatriser: En är en "standard"-körningsnodmatris. Den andra heter "gpu" och tillhandahåller en MachineType som har två Nvidia GPU:n (Standard_NV12 i Azure). Observera också att det nu finns två nya objekt i konfigurationsavsnittet förutom receptet "csge:sgeexec". Att lägga till gridengine.slot_type = gpu
talar om för Grid Engine-schemaläggaren att dessa noder ska ha namnet "gpu"-noder och därför endast ska köra gpu-jobb. Namnet "gpu" är godtyckligt, men ett namn som beskriver noden är mest användbart. Ange gridengine.slots = 2
, som instruerar programvaran att se till att den här typen av nod endast kan köra två jobb samtidigt (Standard_NV12 har bara 2 GPU:er). Som standard är antalet platser per nod i Grid Engine antalet processorer i systemet, vilket i det här fallet skulle leda till att för många jobb körs samtidigt på noden. I exemplet CoreCount=2
ovan anges på nodmatrisen så att den matchar antalet GPU:er som är tillgängliga på MachineType, vilket gör att CycleCloud kan skala matrisen korrekt på GPU jämfört med cpu-antal.
Du kan kontrollera antalet platser och slot_type dina datorer har genom att köra kommandot :
-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
Observera att det finns en av varje "slot_type" som vi angav (execute och gpu) och antalet platser för körningsplatsen är 4, vilket är antalet processorer på datorn. Antalet fack för "gpu"-facktypen är 2, vilket vi angav i vår klusterkonfigurationsmall. Den tredje datorn är huvudnoden som inte kör jobb.
Avancerad användning av rutnätsmotor
Ovanstående konfigurationsinställningar möjliggör avancerad anpassning av noder och nodmatriser. Om jobb till exempel kräver en viss mängd minne, t.ex. 10 GB vardera, kan du definiera en körningsnodmatris som startar datorer med 60 GB minne och sedan lägga till konfigurationsalternativen gridengine.slots = 6
för att säkerställa att endast 6 jobb kan köras samtidigt på den här typen av nod (se till att varje jobb har minst 10 GB minne att arbeta med).
Grupperade noder i rutnätsmotorn
När ett parallellt jobb skickas till rutnätsmotorn är standardbeteendet för autoskalning som CycleCloud använder att behandla varje MPI-jobb som en gruppnodsbegäran. Grupperade noder är nära kopplade och passar utmärkt för MPI-arbetsflöden.
När en uppsättning grupperade noder ansluter till ett Grid Engine-kluster används grupp-ID:t för varje nod som värde för det komplexa värdet affinity_group
. Genom att kräva att ett affinity_group
anges för jobb gör det att Grid Engine-schemaläggaren kan se till att jobben bara hamnar på datorer som finns i samma grupp.
CycleClouds automatisering begär automatiskt grupperade noder och tilldelar dem till tillgängliga tillhörighetsgrupper när parallella jobb påträffas.
Skicka jobb till rutnätsmotorn
Det mest allmänna sättet att skicka jobb till en Grid Engine-schemaläggare är kommandot:
qsub my_job.sh
Det här kommandot skickar ett jobb som körs på en nod av typen "execute", som är en nod som definieras av nodearrayen "execute". Om du vill att ett jobb ska köras på en nodmatris av en annan typ, till exempel nodtypen gpu ovan, ändrar vi sändningen:
qsub -l slot_type=gpu my_gpu_job.sh
Det här kommandot ser till att jobbet bara körs på en "slot_type" av "gpu".
Om slot_type utelämnas tilldelas "execute" automatiskt till jobbet. Den mekanism som automatiskt tilldelar slot_type till jobb kan ändras av användaren. Ett Python-skript som finns på /opt/cycle/jetpack/config/autoscale.py kan skapas som ska definiera en enda funktion "sge_job_handler". Den här funktionen tar emot en ordlisterepresentation av jobbet, ungefär som utdata från ett qstat -j JOB_ID
kommando och bör returnera en ordlista med hårda resurser som behöver uppdateras för jobbet. Nedan visas till exempel ett skript som tilldelar ett jobb till "gpu" slot_type om jobbnamnet innehåller bokstäverna "gpu". Detta skulle göra det möjligt för en användare att skicka sina jobb från ett automatiserat system utan att behöva ändra jobbparametrarna och fortfarande låta jobben köras på och autoskala rätt noder:
#!/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
Parametern "job" som skickas är en ordlista som innehåller data i ett qstat -j JOB_ID
anrop:
{
"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'
}
}
Du kan använda den här skriptfunktionen för att automatiskt tilldela slot_type baseras på valfri parameter som definierats i jobbet, till exempel argument, andra resurskrav som minne, skickande användare osv.
Om du skulle skicka 5 jobb för varje "slot_type":
qsub -t 1:5 gpu_job.sh
qsub -t 1:5 normal_job.sh
Det skulle nu finnas 10 jobb i kön. På grund av skriptet som definierats ovan konfigureras de fem jobben med "gpu" i namnet automatiskt så att de endast körs på noder i "slot_type=gpu". Autoskalningsmekanismen CycleCloud identifierar att det finns 5 gpu-jobb och 5 "kör"-jobb. Eftersom "gpu"-nodmatrisen definieras ha 2 platser per nod skulle CycleCloud starta 3 av dessa noder (5/2=2,5 avrundade upp till 3). Det finns 5 normala jobb eftersom datortypen för nodearrayen "execute" har 4 PROCESSORer vardera, cycleCloud startar 2 av dessa noder för att hantera jobben (5/4=1,25 avrundade upp till 2). Efter en kort tidsperiod för de nyligen startade noderna att starta och konfigurera, skulle alla 10 jobb köras till slutförande och sedan skulle de 5 noderna automatiskt stängas av innan du debiteras igen av molnleverantören.
Jobb antas ha en varaktighet på en timme. Om jobbkörningen är känd kan algoritmen för autoskalning dra nytta av den här informationen. Informera autoskalning om den förväntade jobbkörningstiden genom att lägga till den i jobbkontexten. I följande exempel visas autoskalning att jobbkörningen i genomsnitt är 10 minuter:
qsub -ac average_runtime=10 job_with_duration_of_10m.sh
Konfigurationsreferens för rutnätsmotor
Följande är de konfigurationsalternativ för rutnätsmotorn som du kan växla för att anpassa funktioner:
SGE-Specific konfigurationsalternativ | Description |
---|---|
gridengine.slots | Antalet platser för en viss nod som ska rapporteras till Grid Engine. Antalet platser är antalet samtidiga jobb som en nod kan köra, vilket är standardvärdet för antalet processorer på en viss dator. Du kan åsidosätta det här värdet i fall där du inte kör jobb baserat på CPU utan på minne, GPU:er osv. |
gridengine.slot_type | Namnet på typen av "fack" som en nod tillhandahåller. Standardvärdet är "execute". När ett jobb är taggat med hårdresursen "slot_type=" körs jobbet bara på en dator av samma facktyp. På så sätt kan du skapa olika programvaru- och maskinvarukonfigurationer per nod och se till att ett lämpligt jobb alltid schemaläggs på rätt typ av nod. |
gridengine.ignore_fqdn | Standard: sant. Ange till false om alla noder i klustret inte ingår i en enda DNS-domän. |
gridengine.version | Standard: 2011.11. Det här är Grid Engine-versionen som ska installeras och köras. Detta är för närvarande standardalternativet och det enda alternativet. I framtiden kan ytterligare versioner av Grid Engine-programvaran stödjas. |
gridengine.root | Standard: '/sched/sge/sge-2011.11' Det är här som rutnätsmotorn installeras och monteras på varje nod i systemet. Vi rekommenderar att det här värdet inte ändras, men om det är det ska det anges till samma värde på varje nod i klustret. |
CycleCloud stöder en standarduppsättning autostop-attribut mellan schemaläggare:
Attribut | Beskrivning |
---|---|
cyclecloud.cluster.autoscale.stop_enabled | Är autostop aktiverat på den här noden? [sant/falskt] |
cyclecloud.cluster.autoscale.idle_time_after_jobs | Hur lång tid (i sekunder) en nod ska vara inaktiv när jobben har slutförts innan den skalas ned. |
cyclecloud.cluster.autoscale.idle_time_before_jobs | Hur lång tid (i sekunder) en nod ska vara inaktiv innan jobben slutförs innan den skalas ned. |
Kända problem
-
qsh
kommandot för interaktiv session fungerar inte. Användqrsh
som ett alternativ. - Komplexet
exclusive=1
respekteras inte av autoskalning. Färre noder än förväntat kan starta som ett resultat.
Anteckning
Även om Windows är en GridEngine-plattform som stöds officiellt har CycleCloud inte stöd för att köra GridEngine på Windows för tillfället.
Den här sidan handlar om funktioner och konfiguration av att använda (Altair) GridEngine med CycleCloud.
Konfigurera resurser
Programmet cyclecloud-gridengine matchar sge-resurser till Azure-molnresurser för att tillhandahålla omfattande verktyg för automatisk skalning och klusterkonfiguration. Programmet distribueras automatiskt för kluster som skapats via CycleCloud-användargränssnittet eller installeras på valfri gridengine-administratörsvärd i ett befintligt kluster.
Installera eller uppgradera cyclecloud-gridengine
Cyclecloud-gridengine-paketet är tillgängligt i github som en versionsartefakt. Installation och uppgradering är samma process. Programmet kräver python3 med virtualenv.
tar xzf cyclecloud-gridengine-pkg-*.tar.gz
cd cyclecloud-gridengine
./install.sh
Viktiga filer
Programmet parsar sge-konfigurationen varje gång det anropas – jobb, köer, komplex. Information finns i stderr och stdout för kommandot samt till en loggfil, både på konfigurerbara nivåer. Alla gridengine-hanteringskommandon med argument loggas också till filen.
Description | Location |
---|---|
Konfigurera autoskalning | /opt/cycle/gridengine/autoscale.json |
Autoskalningslogg | /opt/cycle/jetpack/logs/autoscale.log |
qconf-spårningslogg | /opt/cycle/jetpack/logs/qcmd.log |
SGE-köer, värdgrupper och parallella miljöer
Autoskalningsverktyget cyclecloud-gridengine, azge
, lägger till värdar i klustret enligt klusterkonfigurationen. Autoskalningsåtgärderna utför följande åtgärder.
- Läs jobbresursbegäran och hitta en lämplig virtuell dator som ska startas
- Starta den virtuella datorn och vänta tills den är klar
- Läs kön och den parallella miljön från jobbet
- Baserat på kön/pe tilldelar värden till en lämplig värdgrupp
- Lägg till värden i klustret samt till andra köer som innehåller värdgruppen
Överväg följande ködefinition för en kö med namnet short.q
hostlist @allhosts @mpihg01 @mpihg02 @lowprio
...
seq_no 10000,[@lowprio=10],[@mpihg01=100],[@mpihg02=200]
pe_list NONE,[@mpihg01=mpi01], \
[@mpihg02=mpi02]
När du skickar ett jobb efter qsub -q short.q -pe mpi02 12 my-script.sh
börjar du med att hyra en virtuell dator, och när det läggs till i klustret ansluter det till värdgruppen @mpihg02 eftersom det är värdgruppen både tillgänglig för kön och den parallella miljön. Den läggs också till i @allhosts, som är en särskild värdgrupp.
Utan att ange en pe qsub -q short.q my-script.sh
läggs den resulterande virtuella datorn till i @allhosts och @lowpriority dessa är värdgrupperna i kön som inte har tilldelats pes.
Slutligen resulterar ett jobb som skickas med qsub -q short.q -pe mpi0* 12 my-script.sh
i en virtuell dator som läggs till i antingen @mpihg01 eller @mpihg02 beroende på Förutsägelser om CycleCloud-allokering.
Parallella miljöer motsvarar implicit placeringsgruppen cyclecloud. Virtuella datorer i en PE är begränsade till att finnas i samma nätverk. Om du vill använda en PE som inte behåller en placeringsgrupp använder du autoscale.json för att välja bort.
Här väljer vi bort placeringsgrupper för make pe:
"gridengine": {
"pes": {
"make": {
"requires_placement_groups": false
}
},
CycleCloud-placeringsgrupper
CycleCloud-placeringsgrupper mappar en-till-en till Azure VMSS med SinglePlacementGroup – virtuella datorer i en placeringsgrupp delar en Infiniband Fabric och delar endast med virtuella datorer i placeringsgruppen. För att intuitivt bevara dessa silor mappar placementgroups 1:1 med parallella gridengine-miljöer.
Om du anger en parallell miljö för ett jobb begränsas jobbet till att köras i en placeringsgrupp via smart värdgruppstilldelningslogik. Du kan välja bort det här beteendet med ovanstående konfiguration i autoscale.json : "required_placement_groups" : false
.
Autoskalningskonfiguration
Det här plugin-programmet skalar automatiskt rutnätet för att uppfylla arbetsbelastningens krav. Konfigurationsfilen autoscale.json avgör beteendet för autoskalning av rutnätsmotorn.
- Ange anslutningsinformation för cyclecloud
- Ange avslutningstimern för inaktiva noder
- Flerdimensionell autoskalning är möjligt, ange vilka attribut som ska användas i jobbförpackningen, t.ex. fack, minne
- Registrera köer, parallella miljöer och värdgrupper som ska hanteras
Konfiguration | Typ | Description |
---|---|---|
url | Sträng | CC-URL |
användarnamn/lösenord | Sträng | Cc-anslutningsinformation |
cluster_name | Sträng | CC-klusternamn |
default_resources | Karta | Länka en nodresurs till en Grid Engine-värdresurs för autoskalning |
idle_timeout | Int | Väntetid innan inaktiva noder avslutas |
boot_timeout | Int | Väntetid innan noder avslutas under långa konfigurationsfaser |
gridengine.relevant_complexes | Lista (sträng) | Rutnätsmotorkomplex att tänka på vid autoskalning, t.ex. fack, mem_free |
gridengine.logging | Fil | Plats för loggningskonfigurationsfilen |
gridengine.pes | Struct-datatyp | Ange beteende för PEs, t.ex. requires_placement_group = false |
Programmet för automatisk skalning tar endast hänsyn till relevant resurs
Ytterligare autoskalningsresurs
Som standard begärs klustret med skalning baserat på hur många platser som begärs av jobben. Vi kan lägga till ytterligare en dimension i autoskalning.
Anta att vi vill skala automatiskt efter jobbresursbegäran för m_mem_free
.
- Lägg till
m_mem_free
gridengine.relevant_resources
i autoscale.json - Länka
m_mem_free
till minnesresursen på nodnivå i autoscale.json
Dessa attribut kan vara referenser med node.*
som värde i _default/resurser.
Nod | Typ | Description |
---|---|---|
nodearray | Sträng | Namn på cyclecloud nodearray |
placement_group | Sträng | Namn på cyclecloud-placeringsgruppen i en nodearray |
vm_size | Sträng | Namn på vm-produkt, t.ex. "Standard_F2s_v2" |
vcpu_count | Int | Virtuella processorer som är tillgängliga på noden enligt beskrivningen på enskilda produktsidor |
pcpu_count | Int | Fysiska processorer som är tillgängliga på noden |
minne | Sträng | Ungefärligt fysiskt minne tillgängligt på den virtuella datorn med enhetsindikator, t.ex. "8,0g" |
Ytterligare attribut finns i node.resources.*
namnområdet, t.ex. 'node.resources.
Nod | Typ | Description |
---|---|---|
ncpus | Sträng | Antal processorer som är tillgängliga i den virtuella datorn |
pcpus | Sträng | Antal fysiska processorer som är tillgängliga på den virtuella datorn |
ngpus | Integer | Antal GPU:er som är tillgängliga på den virtuella datorn |
memb | Sträng | Ungefärligt fysiskt minne tillgängligt på den virtuella datorn med enhetsindikator, t.ex. "8,0b" |
memkb | Sträng | Ungefärligt fysiskt minne tillgängligt på den virtuella datorn med enhetsindikator, t.ex. "8,0 0 000" |
memmb | Sträng | Ungefärligt fysiskt minne tillgängligt på den virtuella datorn med enhetsindikator, t.ex. "8,0 m" |
memgb | Sträng | Ungefärligt fysiskt minne tillgängligt på den virtuella datorn med enhetsindikator, t.ex. "8,0g" |
memtb | Sträng | Ungefärligt fysiskt minne tillgängligt på den virtuella datorn med enhetsindikator, t.ex. "8,0t" |
Platser | Integer | Samma som ncpus |
slot_type | Sträng | Tilläggsetikett för tillägg. Används inte i allmänhet. |
m_mem_free | Sträng | Förväntat ledigt minne på körningsvärden, t.ex. "3,0g" |
mfree | Sträng | Samma som _m/_mem/kostnadsfritt |
Resursmappning
Det finns också matematik tillgänglig för default_resources – minska platserna på en viss nodmatris med två och lägg till docker-resursen i alla noder:
"default_resources": [
{
"select": {"node.nodearray": "beegfs"},
"name": "slots",
"value": "node.vcpu_count",
"subtract": 2
},
{
"select": {},
"name": "docker",
"value": true
},
Mappa nod-vCPU:er till de komplexa facken och memmb
till mem_free
är vanliga standardvärden.
Den första associationen krävs.
"default_resources": [
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
{
"select": {},
"name": "mem_free",
"value": "node.resources.memmb"
}
],
Observera att om ett komplex har en genväg som inte är lika med hela värdet definierar du båda i default_resources där physical_cpu
är det komplexa namnet:
"default_resources": [
{
"select": {},
"name": "physical_cpu",
"value": "node.pcpu_count"
},
{
"select": {},
"name": "pcpu",
"value": "node.resources.physical_cpu"
}
]
Beställning är viktigt när du vill ha ett visst beteende för ett visst attribut. Så här allokerar du en enskild plats för en specifik nodearray samtidigt som standardantalet för fack bevaras för alla andra nodearrays:
"default_resources": [
{
"select": {"node.nodearray": "FPGA"},
"name": "slots",
"value": "1",
},
{
"select": {},
"name": "slots",
"value": "node.vcpu_count"
},
]
Värdgrupper
Autoskalningsappen CycleCloud mappar noder till lämplig värdgrupp vid försök att uppfylla jobbkraven. Köer, parallella miljöer och komplex beaktas alla. Mycket av logiken matchar lämplig cyclecloud-bucket (och nodkvantitet) med lämplig sge-värdgrupp.
För ett jobb som skickats som: qsub -q "cloud.q" -l "m_mem_free=4g" -pe "mpi*" 48 ./myjob.sh
CycleCloud hittar skärningspunkten mellan värdgrupper som:
- Ingår i pe_list för cloud.q och matchar pe-namnet, t.ex.
pe_list [@allhosts=mpislots],[@hpc1=mpi]
. - Ha tillräckliga resurser och prenumerationskvoter för att tillhandahålla alla jobbresurser.
- Filtreras inte efter konfigurationen av begränsningar för värdgrupper.
Det är möjligt att flera värdgrupper uppfyller dessa krav, i vilket fall logiken måste välja. Det finns tre sätt att lösa tvetydigheter i värdgruppsmedlemskap:
- Konfigurera köerna så att det inte finns tvetydigheter.
- Lägg till begränsningar i autoscale.json.
- Låt CycleCloud välja amoungst de matchande värdgrupperna på ett namnbeställt sätt genom att
weight_queue_host_sort < weight_queue_seqno
justera i scheduler-konfigurationen. - Ange
seq_no 10000,[@hostgroup1=100],[@hostgroup2=200]
i kökonfigurationen för att ange en värdgruppsinställning.
Begränsningar för värdgrupper
När flera värdgrupper definieras av en kö eller ett xprojekt kan alla dessa värdgrupper potentiellt ha värdarna tillagda. Du kan begränsa vilka typer av värdar som kan läggas till i vilka köer genom att ange begränsningar för värdgrupper. Ange en begränsning baserat på nodegenskaperna.
"gridengine": {
"hostgroups": {
"@mpi": {
"constraints": {
"node.vm_size": "Standard_H44rs"
}
},
"@amd-mem": {
"constraints" : {
"node.vm_size": "Standard_D2_v3",
"node.nodearray": "hpc"
}
},
}
}
TIPS: Granska alla tillgängliga nodegenskaper efter
azge buckets
.
azge
Det här paketet levereras med en kommandorad, azge. Det här programmet ska användas för att utföra autoskalning och har brutit ut alla underprocesser under autoskalning.
Dessa kommandon förlitar sig på de gridengine-miljövariabler som ska anges – du måste kunna anropa qconf
och qsub
från samma profil där azge
anropas.
azge-kommandon | Description |
---|---|
validate | Söker efter kända konfigurationsfel i autoskalning eller gridengine |
Jobb | Visar alla jobb i kön |
Hinkar | Visar tillgängliga resurspooler för automatisk skalning |
Noder | Visar klustervärdar och egenskaper |
Efterfrågan | Matchar jobbkraven för cyclecloud-bucketar och ger autoskalningsresultat |
autoskalning | Utför fullständig autoskalning, startar och tar bort noder enligt konfigurationer |
När du ändrar schemaläggningskonfigurationer (qconf) eller autoskalningskonfigurationer (autoscale.json) eller till och med konfigurerar för första gången kan azge användas för att kontrollera att autoskalningsbeteendet matchar förväntad användning. Som rot kan du köra följande åtgärder. Vi rekommenderar att du bekantar dig med dessa för att förstå autoskalningsbeteendet.
- Kör
azge validate
för att verifiera konfigurationer för kända problem. - Kör
azge buckets
för att undersöka vilka resurser ditt CycleCloud-kluster erbjuder. - Kör
azge jobs
för att granska jobbinformationen i kö. - Kör
azge demand
utför jobbet till bucketmatchning och undersöker vilka jobb som matchas med vilka bucketar och värdgrupper. - Kör
azge autoscale
för att starta nodallokeringsprocessen eller lägg till noder som är redo att ansluta.
När dessa kommandon sedan beter sig som förväntat aktiverar du löpande autoskalning genom att lägga till azge autoscale
kommandot i rot-crontab. (Souce gridengine miljövariabler)
* * * * * . $SGE_ROOT/common/settings.sh && /usr/local/bin/azge autoscale -c /opt/cycle/gridengine/autoscale.json
Skapa ett hybridkluster
CycleCloud stöder scenariot med burst-överföring till molnet. Baskonfigurationen förutsätter att $SGE_ROOT
katalogen är tillgänglig för molnnoderna. Det här antagandet kan lättas upp genom att ange gridengine.shared.spool = false
gridengine.shared.bin = false
och installera GridEngine lokalt.
I ett enkelt fall bör du ange ett filsystem som kan monteras av körningsnoderna som innehåller $SGE_ROOT
katalogen och konfigurera monteringen i de valfria inställningarna. När beroendet av sched och delade kataloger släpps kan du stänga av scheduler-noden som ingår i klustret som standard och använda konfigurationerna från det externa filsystemet.
- Skapa ett nytt gridengine-kluster.
- Inaktivera returproxy.
- Ersätt /sched och /shared med externa filsystem.
- Spara klustret.
- Ta bort scheduler-noden som en åtgärd i användargränssnittet.
- Starta klustret, inga noder startas från början.
- Konfigurera
cyclecloud-gridengine
med autoscale.json för att använda det nya klustret
Använda Univa Grid Engine i CycleCloud
CycleCloud-projektet för GridEngine använder sge-2011.11 som standard. Du kan använda dina egna Altair GridEngine-installationsprogram enligt ditt Altair-licensavtal.
I det här avsnittet beskrivs hur du använder Altair GridEngine med projektet CycleCloud GridEngine.
Krav
I det här exemplet används 8.6.1-demoversionen, men alla ge-versioner > 8.4.0 stöds.
- Användare måste ange UGE-binärfiler
- ge-8.6.x-bin-lx-amd64.tar.gz
- ge-8.6.x-common.tar.gz
- CycleCloud CLI måste konfigureras. Dokumentation finns här
Kopiera binärfilerna till molnets skåp
En kompletterande version av AGE (8.6.7-demo) distribueras med CycleCloud. Om du vill använda en annan version laddar du upp binärfilerna till det lagringskonto som CycleCloud använder.
$ 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/
Ändra konfigurationer till klustermallen
Gör en lokal kopia av gridengine-mallen och ändra den så att UGE-installationsprogrammet används i stället för standard.
wget https://raw.githubusercontent.com/Azure/cyclecloud-gridengine/master/templates/gridengine.txt
I filengridengine.txt letar du upp den första förekomsten av [[[configuration]]]
och infogar text så att den matchar kodfragmentet nedan. Den här filen är inte känslig för indrag.
Obs! Informationen i konfigurationen, särskilt version, bör matcha installationsfilens namn.
[[[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"
Dessa konfigurationer åsidosätter standardrutnätens version och installationsplats när klustret startas.
Det är inte säkert att flytta från /sched
eftersom det är en specifikt delad nfs-plats i klustret.