Dela via


CycleCloud Slurm 3.0

Stödet för Slurm Scheduler skrevs om som en del av CycleCloud 8.4.0-versionen. Viktiga funktioner omfattar bland annat:

  • Stöd för dynamiska noder och dynamiska partitioner via dynamiska nodmatriser, med stöd för både enskilda och flera VM-storlekar
  • Nya slurmversioner 23.02 och 22.05.8
  • Kostnadsrapportering via azslurm CLI
  • azslurm cli-baserad autoskalning
  • Stöd för Ubuntu 20
  • Behovet av topologi-plugin-program har tagits bort och därför även eventuella plugin-program för att skicka in

Slurm-kluster i CycleCloud-versionerna < 8.4.0

Mer information finns i Övergång från 2.7 till 3.0 .

Göra klusterändringar

Slurm-klustret som distribueras i CycleCloud innehåller ett cli som anropas azslurm för att underlätta ändringar i klustret. När du har gjort några ändringar i klustret kör du följande kommando som rot på Slurm Scheduler-noden för att återskapa azure.conf och uppdatera noderna i klustret:

      $ sudo -i
      # azslurm scale

Detta bör skapa partitionerna med rätt antal noder, rätt gres.conf och starta om slurmctld.

Kör noder skapas inte längre i förväg

Från och med version 3.0.0 av CycleCloud Slurm-projektet skapar vi inte längre noderna i CycleCloud. Noder skapas när azslurm resume anropas eller genom att de skapas manuellt i CycleCloud via CLI.

Skapa ytterligare partitioner

Standardmallen som levereras med Azure CycleCloud har tre partitioner (hpchtcoch ), och dynamicdu kan definiera anpassade nodmatriser som mappar direkt till Slurm-partitioner. Om du till exempel vill skapa en GPU-partition lägger du till följande avsnitt i klustermallen:

   [[nodearray gpu]]
   MachineType = $GPUMachineType
   ImageName = $GPUImageName
   MaxCoreCount = $MaxGPUExecuteCoreCount
   Interruptible = $GPUUseLowPrio
   AdditionalClusterInitSpecs = $ExecuteClusterInitSpecs

      [[[configuration]]]
      slurm.autoscale = true
      # Set to true if nodes are used for tightly-coupled multi-node jobs
      slurm.hpc = false

      [[[cluster-init cyclecloud/slurm:execute:3.0.1]]]
      [[[network-interface eth0]]]
      AssociatePublicIpAddress = $ExecuteNodesPublic

Dynamiska partitioner

Från och 3.0.1med stöder vi dynamiska partitioner. Du kan skapa en nodearray karta till en dynamisk partition genom att lägga till följande. Observera att myfeature kan vara valfri funktionsbeskrivning. Det kan också vara mer än en funktion, avgränsad med ett kommatecken.

      [[[configuration]]]
      slurm.autoscale = true
      # Set to true if nodes are used for tightly-coupled multi-node jobs
      slurm.hpc = false
      # This is the minimum, but see slurmd --help and [slurm.conf](https://slurm.schedmd.com/slurm.conf.html) for more information.
      slurm.dynamic_config := "-Z --conf \"Feature=myfeature\""

Detta genererar en dynamisk partition som följande

# Creating dynamic nodeset and partition using slurm.dynamic_config=-Z --conf "Feature=myfeature"
Nodeset=mydynamicns Feature=myfeature
PartitionName=mydynamicpart Nodes=mydynamicns

Använda dynamiska partitioner för autoskalning

Som standard definierar vi inga noder i den dynamiska partitionen. I stället kan du starta noder via CycleCloud eller genom att azslurm resume manuellt anropa och de ansluter klustret med det namn du valde. Slurm känner dock inte till dessa noder så det kan inte skala upp dem automatiskt.

I stället kan du också skapa nodposter i förväg så här, vilket gör att Slurm kan skala upp dem automatiskt.

scontrol create nodename=f4-[1-10] Feature=myfeature State=CLOUD

En annan fördel med dynamiska partitioner är att du kan ha stöd för flera VM-storlekar i samma partition. Lägg bara till namnet på VM-storleken som en funktion och kan sedan azslurm skilja på vilken VM-storlek du vill använda.

Observera Vm-storleken läggs till implicit. Du behöver inte lägga till den i slurm.dynamic_config

scontrol create nodename=f4-[1-10] Feature=myfeature,Standard_F4 State=CLOUD
scontrol create nodename=f8-[1-10] Feature=myfeature,Standard_F8 State=CLOUD

Hur som helst, när du har skapat dessa noder i en State=Cloud är de nu tillgängliga för autoskalning som andra noder.

Om du vill ha stöd för flera VM-storlekar i en CycleCloud-nodmatris kan du ändra mallen så att flera VM-storlekar tillåts genom att lägga till Config.Mutiselect = true.

        [[[parameter DynamicMachineType]]]
        Label = Dyn VM Type
        Description = The VM type for Dynamic nodes
        ParameterType = Cloud.MachineType
        DefaultValue = Standard_F2s_v2
        Config.Multiselect = true

Dynamisk nedskalning

Som standard skalas alla noder i den dynamiska partitionen ned precis som de andra partitionerna. Information om hur du inaktiverar detta finns i SuspendExcParts.

Manuell skalning

Om cyclecloud_slurm upptäcker att autoskalning är inaktiverat (SuspendTime=-1) använder det FUTURE-tillståndet för att ange noder som är avstängda i stället för att förlita sig på energispartillståndet i Slurm. Dvs. När autoskalning är aktiverat betecknas inaktiverade noder som idle~ i sinfo. När autoskalning är inaktiverat visas inte de inaktiverade noderna i sinfo alls. Du kan fortfarande se deras definition med scontrol show nodes --future.

Starta nya noder genom att köra /opt/azurehpc/slurm/resume_program.sh node_list (t.ex. htc-[1-10]).

Om du vill stänga av noder kör /opt/azurehpc/slurm/suspend_program.sh node_list du (t.ex. htc-[1-10]).

Om du vill starta ett kluster i det här läget lägger du helt enkelt till SuspendTime=-1 ytterligare slurm-konfigurationen i mallen.

Om du vill växla ett kluster till det här läget lägger du till SuspendTime=-1 i slurm.conf och kör scontrol reconfigure. Kör sedan azslurm remove_nodes && azslurm scale.

Felsökning

Övergång från 2.7 till 3.0

  1. Installationsmappen har ändrats /opt/cycle/slurm ->/opt/azurehpc/slurm

  2. Autoskalningsloggar finns nu i /opt/azurehpc/slurm/logs i stället för /var/log/slurmctld. slurmctld.log Obs! Kommer fortfarande att finnas i den här mappen.

  3. cyclecloud_slurm.sh Längre. I stället finns det ett nytt azslurm cli som kan köras som rot. azslurm stöder automatisk komplettering.

    [root@scheduler ~]# azslurm
    usage: 
    accounting_info      - 
    buckets              - Prints out autoscale bucket information, like limits etc
    config               - Writes the effective autoscale config, after any preprocessing, to stdout
    connect              - Tests connection to CycleCloud
    cost                 - Cost analysis and reporting tool that maps Azure costs to Slurm Job Accounting data. This is an experimental feature.
    default_output_columns - Output what are the default output columns for an optional command.
    generate_topology    - Generates topology plugin configuration
    initconfig           - Creates an initial autoscale config. Writes to stdout
    keep_alive           - Add, remove or set which nodes should be prevented from being shutdown.
    limits               - 
    nodes                - Query nodes
    partitions           - Generates partition configuration
    refresh_autocomplete - Refreshes local autocomplete information for cluster specific resources and nodes.
    remove_nodes         - Removes the node from the scheduler without terminating the actual instance.
    resume               - Equivalent to ResumeProgram, starts and waits for a set of nodes.
    resume_fail          - Equivalent to SuspendFailProgram, shuts down nodes
    retry_failed_nodes   - Retries all nodes in a failed state.
    scale                - 
    shell                - Interactive python shell with relevant objects in local scope. Use --script to run python scripts
    suspend              - Equivalent to SuspendProgram, shuts down nodes
    wait_for_resume      - Wait for a set of nodes to converge.
    
  4. Noder fylls inte längre i i förväg i CycleCloud. De skapas bara när det behövs.

  5. Alla slurm-binärfiler finns i azure-slurm-install-pkg*.tar.gz filen under slurm-pkgs. De hämtas från en specifik binär version. De aktuella binära releaes är 2023-03-13

  6. För MPI-jobb är partitionen den enda nätverksgräns som finns som standard. Det finns inte flera "placeringsgrupper" per partition som 2.x. Så du har bara en samplaceerad VMSS per partition. Det finns inte heller någon användning av topologi-plugin-programmet, vilket krävde användning av ett plugin-program för jobböverföring som inte längre behövs. I stället är att skicka till flera partitioner nu det rekommenderade alternativet för användningsfall som kräver att jobb skickas till flera placeringsgrupper.

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.