Dela via


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änd qrsh 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.

  1. Läs jobbresursbegäran och hitta en lämplig virtuell dator som ska startas
  2. Starta den virtuella datorn och vänta tills den är klar
  3. Läs kön och den parallella miljön från jobbet
  4. Baserat på kön/pe tilldelar värden till en lämplig värdgrupp
  5. 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.

  1. Lägg till m_mem_freegridengine.relevant_resources i autoscale.json
  2. 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:

  1. Ingår i pe_list för cloud.q och matchar pe-namnet, t.ex. pe_list [@allhosts=mpislots],[@hpc1=mpi].
  2. Ha tillräckliga resurser och prenumerationskvoter för att tillhandahålla alla jobbresurser.
  3. 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:

  1. Konfigurera köerna så att det inte finns tvetydigheter.
  2. Lägg till begränsningar i autoscale.json.
  3. 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.
  4. 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.

  1. Kör azge validate för att verifiera konfigurationer för kända problem.
  2. Kör azge buckets för att undersöka vilka resurser ditt CycleCloud-kluster erbjuder.
  3. Kör azge jobs för att granska jobbinformationen i kö.
  4. Kör azge demand utför jobbet till bucketmatchning och undersöker vilka jobb som matchas med vilka bucketar och värdgrupper.
  5. 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 = falsegridengine.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.

  1. Skapa ett nytt gridengine-kluster.
  2. Inaktivera returproxy.
  3. Ersätt /sched och /shared med externa filsystem.
  4. Spara klustret.
  5. Ta bort scheduler-noden som en åtgärd i användargränssnittet.
  6. Starta klustret, inga noder startas från början.
  7. 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.

  1. Användare måste ange UGE-binärfiler
  • ge-8.6.x-bin-lx-amd64.tar.gz
  • ge-8.6.x-common.tar.gz
  1. 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.