OpenPBS

OpenPBS kan enkelt aktiveras i ett CycleCloud-kluster genom att ändra "run_list" i konfigurationsavsnittet i klusterdefinitionen. De två grundläggande komponenterna i ett PBS Professional-kluster är "huvudnoden" som tillhandahåller ett delat filsystem där PBS Professional-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 klustermallar kan till exempel se ut så här:

[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]

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 my-pbspro -t execute -c 10

PBS-resursbaserad autoskalning

Cyclecloud har två resurser för att utöka funktionen för dynamisk etablering. Dessa resurser är nodearray och machinetype.

Om du skickar ett jobb och anger en nodearray-resurs innan qsub -l nodearray=highmem -- /bin/hostname dess lägger CycleCloud till noder i nodmatrisen med namnet "highmem". Om det inte finns någon sådan nodmatris förblir jobbet inaktivt.

På samma sätt om en maskintypsresurs anges som ett jobb skickas, t.ex. qsub -l machinetype:Standard_L32s_v2 my-job.sh, skalar CycleCloud automatiskt "Standard_L32s_v2" i nodmatrisen "execute" (standard). Om den datortypen inte är tillgänglig i nodmatrisen "kör" förblir jobbet inaktivt.

Dessa resurser kan användas i kombination som:

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

som endast skalar automatiskt om "Standard_HB60rs"-datorerna anges som en "hpc"-nodmatris.

Lägga till ytterligare köer som tilldelats nodearrays

I kluster med flera nodmatriser är det vanligt att skapa separata köer för att automatiskt dirigera jobb till lämplig typ av virtuell dator. I det här exemplet antar vi att följande "gpu"-nodearray har definierats i klustermallen:

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

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

När du har importerat klustermallen och startat klustret kan du köra följande kommandon på servernoden för att skapa "gpu"-kön:

/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"

Anteckning

Ovanstående ködefinition packar alla virtuella datorer i kön till en enda VM-skalningsuppsättning för att stödja MPI-jobb. Om du vill definiera kön för seriejobb och tillåta flera VM Scalesets anger du ungrouped = true för både resources_default och default_chunk. Du kan också ange resources_default.place = pack om du vill att schemaläggaren ska packa jobb på virtuella datorer i stället för resursallokering av jobb. Mer information om PBS-jobbpackning finns i den officiella PBS Professional OSS-dokumentationen.

Referens för PBS Professional-konfiguration

Följande är de PBS Professional-specifika konfigurationsalternativ som du kan växla för att anpassa funktioner:

PBS Pro-alternativ Description
pbspro.slots Antalet platser för en viss nod som ska rapporteras till PBS Pro. 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.
pbspro.slot_type Namnet på typen av "fack" som en nod tillhandahåller. Standardvärdet är "execute". När ett jobb är taggat med den hårda resursen slot_type=<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.
pbspro.version Standard: "18.1.3-0". Det här är PBS Professional-versionen för att installera och köra. Detta är för närvarande standardalternativet och det enda alternativet. I framtiden kan ytterligare versioner av PBS Professional-programvaran stödjas.

Ansluta PBS med CycleCloud

CycleCloud hanterar OpenPBS-kluster via en installerbar agent som heter azpbs. Den här agenten ansluter till CycleCloud för att läsa kluster- och VM-konfigurationer och integreras även med OpenPBS för att effektivt bearbeta jobbet och värdinformationen. Alla azpbs konfigurationer finns i autoscale.json filen, vanligtvis /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",

Viktiga filer

Agenten azpbs parsar PBS-konfigurationen varje gång den anropas – jobb, köer, resurser. Information finns i stderr och stdout för kommandot samt till en loggfil, både på konfigurerbara nivåer. Alla PBS-hanteringskommandon (qcmd) med argument loggas också till filen.

Alla dessa filer finns i katalogen /opt/cycle/pbspro/ där agenten är installerad.

Fil Location Description
Autoskalningskonfiguration autoscale.json Konfiguration för autoskalning, resurskarta, CycleCloud-åtkomstinformation
Autoskalningslogg autoscale.log Agentens huvudtrådsloggning inklusive CycleCloud-värdhantering
Begärandelogg demand.log Detaljerad logg för resursmatchning
qcmd-spårningslogg qcmd.log Logga agentanropen qcmd
Loggningskonfiguration logging.conf Konfigurationer för loggningsmasker och filplatser

Definiera OpenPBS-resurser

Det här projektet möjliggör en allmän association av OpenPBS-resurser med Azure VM-resurser via projektet cyclecloud-pbspro (azpbs). Den här resursrelationen definieras i autoscale.json.

Standardresurserna som definieras med klustermallen som vi skickar med är

{"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"
   }]
}

OpenPBS-resursen med namnet mem motsvarar ett nodattribut med namnet node.memory, vilket är det totala minnet för alla virtuella datorer. Med den här konfigurationen kan azpbs du bearbeta en resursbegäran, till exempel -l mem=4gb genom att jämföra värdet för jobbresurskraven med nodresurserna.

Observera att disken för närvarande är hårdkodad till size::20g. Här är ett exempel på hantering av vm-storleksspecifik diskstorlek

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

Autoskalning och skalningsuppsättningar

CycleCloud behandlar utsträcknings- och seriejobb på olika sätt i OpenPBS-kluster. Utsträckningsjobb hamnar på noder som ingår i samma placeringsgrupp. Placeringsgruppen har en viss plattform som betyder (VirtualMachineScaleSet med SinglePlacementGroup=true) och CC kommer att hantera en namngiven placeringsgrupp för varje spanned node set. Använd PBS-resursen group_id för det här placeringsgruppnamnet.

Kön hpc lägger till motsvarigheten -l place=scatter:group=group_id till med hjälp av interna köstandardvärden.

Installera CycleCloud OpenPBS-agenten azpbs

OpenPBS CycleCloud-klustret hanterar installationen och konfigurationen av agenten på servernoden. Förberedelsen omfattar inställning av PBS-resurser, köer och hookar. En skriptinstallation kan även göras utanför 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 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.

Anteckning

CycleCloud stöder inte burst-konfigurationen med Open PBS.

Anteckning

Även om Windows är en Open PBS-plattform som stöds officiellt har CycleCloud inte stöd för att köra Open PBS på Windows just nu.