Delen via


CycleCloud Slurm 3.0

Ondersteuning voor Slurm Scheduler is herschreven als onderdeel van de CycleCloud 8.4.0-release. Belangrijke functies omvatten onder meer:

  • Ondersteuning voor dynamische knooppunten en dynamische partities via dynamische knooppunten, die ondersteuning bieden voor zowel één als meerdere VM-grootten
  • Nieuwe slurm-versies 23.02 en 22.05.8
  • Kostenrapportage via azslurm CLI
  • azslurm op cli gebaseerde automatische schaalaanpassing
  • Ubuntu 20-ondersteuning
  • De noodzaak voor de invoegtoepassing voor de topologie is verwijderd, en daarom ook een invoegtoepassing voor verzenden

Slurm-clusters in CycleCloud versie < 8.4.0

Zie Overgang van 2.7 naar 3.0 voor meer informatie.

Clusterwijzigingen aanbrengen

Het Slurm-cluster dat in CycleCloud is geïmplementeerd, bevat een cli met de naam azslurm om het aanbrengen van wijzigingen in het cluster te vergemakkelijken. Nadat u wijzigingen in het cluster hebt aangebracht, voert u de volgende opdracht uit als hoofdmap op het knooppunt Slurm scheduler om de azure.conf knooppunten in het cluster opnieuw te bouwen en bij te werken:

      $ sudo -i
      # azslurm scale

Hiermee maakt u de partities met het juiste aantal knooppunten, de juiste gres.conf en start de slurmctldopnieuw op.

Niet langer vooraf uitgevoerde knooppunten maken

Vanaf versie 3.0.0 van het CycleCloud Slurm-project maken we de knooppunten niet meer vooraf in CycleCloud. Knooppunten worden gemaakt wanneer azslurm resume wordt aangeroepen of door ze handmatig te maken in CycleCloud via CLI.

Extra partities maken

De standaardsjabloon die wordt geleverd met Azure CycleCloud heeft drie partities (hpchtcen dynamic), en u kunt aangepaste knooppuntmatrices definiëren die rechtstreeks worden toegewezen aan Slurm-partities. Als u bijvoorbeeld een GPU-partitie wilt maken, voegt u de volgende sectie toe aan uw clustersjabloon:

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

Dynamische partities

3.0.1Vanaf ondersteunen we dynamische partities. U kunt een nodearray toewijzing aan een dynamische partitie maken door het volgende toe te voegen. Houd er rekening mee dat myfeature dit elke gewenste functiebeschrijving kan zijn. Het kan ook meer dan één functie zijn, gescheiden door een komma.

      [[[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\""

Hiermee wordt een dynamische partitie gegenereerd, zoals de volgende

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

Dynamische partities gebruiken om automatisch te schalen

Standaard definiëren we geen knooppunten in de dynamische partitie. In plaats daarvan kunt u knooppunten starten via CycleCloud of door handmatig aan te azslurm resume roepen, waarna ze lid worden van het cluster onder de naam die u hebt gekozen. Slurm is echter niet op de hoogte van deze knooppunten en kan ze dus niet automatisch omhoog schalen.

In plaats daarvan kunt u op deze manier ook vooraf knooppuntrecords maken, zodat Slurm ze automatisch kan schalen.

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

Een ander voordeel van dynamische partities is dat u meerdere VM-grootten in dezelfde partitie kunt ondersteunen. Voeg gewoon de naam van de VM-grootte toe als functie en kan vervolgens azslurm onderscheid maken tussen de VM-grootte die u wilt gebruiken.

Opmerking De VM-grootte wordt impliciet toegevoegd. U hoeft het niet toe te voegen aan 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

Hoe dan ook, zodra u deze knooppunten in een State=Cloud hebt gemaakt, zijn ze nu beschikbaar voor automatische schaalaanpassing, net als andere knooppunten.

Als u meerdere VM-grootten in een CycleCloud-knooppuntmatrix wilt ondersteunen, kunt u de sjabloon wijzigen om meerdere VM-grootten toe te staan door toe te voegen 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

Dynamisch uitschalen

Standaard worden alle knooppunten in de dynamische partitie omlaag geschaald, net als de andere partities. Zie SuspendExcParts om dit uit te schakelen.

Handmatige schaalaanpassing

Als cyclecloud_slurm detecteert dat automatisch schalen is uitgeschakeld (SuspendTime=-1), wordt de status FUTURE gebruikt om knooppunten aan te geven die zijn uitgeschakeld in plaats van afhankelijk te zijn van de energiestatus in Slurm. d.w.z. wanneer automatische schaalaanpassing is ingeschakeld, worden off-knooppunten aangeduid als idle~ in sinfo. Wanneer automatisch schalen is uitgeschakeld, worden de off-knooppunten helemaal niet weergegeven in sinfo. U kunt hun definitie nog steeds zien met scontrol show nodes --future.

Voer /opt/azurehpc/slurm/resume_program.sh node_list uit om nieuwe knooppunten te starten (bijvoorbeeld htc-[1-10]).

Als u knooppunten wilt afsluiten, voert /opt/azurehpc/slurm/suspend_program.sh node_list u uit (bijvoorbeeld htc-[1-10]).

Als u een cluster in deze modus wilt starten, voegt u gewoon toe SuspendTime=-1 aan de aanvullende slurm-configuratie in de sjabloon.

Als u een cluster naar deze modus wilt overschakelen, voegt u toe SuspendTime=-1 aan slurm.conf en voert u uit scontrol reconfigure. Voer vervolgens azslurm remove_nodes && azslurm scale uit.

Problemen oplossen

Overgang van 2.7 naar 3.0

  1. De installatiemap is gewijzigd/opt/cycle/slurm ->/opt/azurehpc/slurm

  2. Logboeken voor automatische schaalaanpassing bevinden zich nu in /opt/azurehpc/slurm/logs in plaats van /var/log/slurmctld. Opmerking, slurmctld.log bevindt zich nog steeds in deze map.

  3. cyclecloud_slurm.sh bestaat niet meer. In plaats daarvan is er een nieuwe azslurm cli, die als hoofdmap kan worden uitgevoerd. azslurm ondersteunt automatisch aanvullen.

    [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. Knooppunten worden niet meer vooraf ingevuld in CycleCloud. Ze worden alleen gemaakt wanneer dat nodig is.

  5. Alle binaire slurm-bestanden bevinden zich in het azure-slurm-install-pkg*.tar.gz bestand, onder slurm-pkgs. Ze worden opgehaald uit een specifieke binaire release. De huidige binaire releaes is 2023-03-13

  6. Voor MPI-taken is de enige netwerkgrens die standaard bestaat, de partitie. Er zijn niet meerdere 'plaatsingsgroepen' per partitie, zoals 2.x. U hebt dus maar één VMSS met een colocatie per partitie. Er is ook geen gebruik van de topologie-invoegtoepassing, waardoor het gebruik van een invoegtoepassing voor het indienen van taken noodzakelijk was die ook niet meer nodig is. In plaats daarvan is verzenden naar meerdere partities nu de aanbevolen optie voor gebruiksvoorbeelden waarbij taken moeten worden verzonden naar meerdere plaatsingsgroepen.

CycleCloud ondersteunt een standaardset autostopkenmerken voor planners:

Kenmerk Beschrijving
cyclecloud.cluster.autoscale.stop_enabled Is automatisch stoppen ingeschakeld op dit knooppunt? [waar/onwaar]
cyclecloud.cluster.autoscale.idle_time_after_jobs De hoeveelheid tijd (in seconden) dat een knooppunt inactief is na het voltooien van taken voordat het omlaag wordt geschaald.
cyclecloud.cluster.autoscale.idle_time_before_jobs De hoeveelheid tijd (in seconden) dat een knooppunt inactief is voordat taken worden voltooid voordat het omlaag wordt geschaald.