Share via


Slurm

Slurm is een zeer configureerbare open source workloadbeheer. Zie de Slurm-projectsite voor een overzicht.

Notitie

Vanaf CycleCloud 8.4.0 is de Slurm-integratie herschreven om nieuwe functies en functionaliteit te ondersteunen. Zie de documentatie van Slurm 3.0 voor meer informatie.

Slurm kan eenvoudig worden ingeschakeld op een CycleCloud-cluster door de 'run_list' in de configuratiesectie van uw clusterdefinitie te wijzigen. De twee basisonderdelen van een Slurm-cluster zijn het hoofdknooppunt (of scheduler) dat een gedeeld bestandssysteem biedt waarop de Slurm-software wordt uitgevoerd, en de 'execute'-knooppunten die de hosts zijn die het gedeelde bestandssysteem koppelen en de verzonden taken uitvoeren. Een eenvoudig clustersjabloonfragment kan er bijvoorbeeld als volgt uitzien:

[cluster custom-slurm]

[[node master]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:master]]]
    [[[configuration]]]
    run_list = role[slurm_master_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:execute]]]
    [[[configuration]]]
    run_list = role[slurm_master_role]
    slurm.autoscale = true
    # Set to true if nodes are used for tightly-coupled multi-node jobs
    slurm.hpc = true
    slurm.default_partition = true

Slurm kan eenvoudig worden ingeschakeld op een CycleCloud-cluster door de 'run_list' in de configuratiesectie van uw clusterdefinitie te wijzigen. De twee basisonderdelen van een Slurm-cluster zijn het 'scheduler'-knooppunt dat een gedeeld bestandssysteem biedt waarop de Slurm-software wordt uitgevoerd, en de 'execute'-knooppunten die de hosts zijn die het gedeelde bestandssysteem koppelen en de verzonden taken uitvoeren. Een eenvoudig clustersjabloonfragment kan er bijvoorbeeld als volgt uitzien:

[cluster custom-slurm]

[[node scheduler]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A4 # 8 cores

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:scheduler]]]
    [[[configuration]]]
    run_list = role[slurm_scheduler_role]

[[nodearray execute]]
    ImageName = cycle.image.centos7
    MachineType = Standard_A1  # 1 core

    [[[cluster-init cyclecloud/slurm:default]]]
    [[[cluster-init cyclecloud/slurm:execute]]]
    [[[configuration]]]
    run_list = role[slurm_scheduler_role]
    slurm.autoscale = true
    # Set to true if nodes are used for tightly-coupled multi-node jobs
    slurm.hpc = true
    slurm.default_partition = true

Bestaande slurm-clusters bewerken

Slurm-clusters die worden uitgevoerd in CycleCloud versie 7.8 en hoger implementeren een bijgewerkte versie van de API's voor automatisch schalen waarmee de clusters meerdere knooppuntmaatrices en partities kunnen gebruiken. Om deze functionaliteit in Slurm te vergemakkelijken, vult CycleCloud de uitvoeringsknooppunten in het cluster vooraf in. Daarom moet u een opdracht uitvoeren op het knooppunt Slurm Scheduler nadat u wijzigingen hebt aangebracht in het cluster, zoals limieten voor automatisch schalen of VM-typen.

Clusterwijzigingen aanbrengen

Het Slurm-cluster dat in CycleCloud is geïmplementeerd, bevat een script dat dit mogelijk maakt. Nadat u wijzigingen in het cluster hebt aangebracht, voert u het volgende uit als hoofdmap (bijvoorbeeld door uit te voeren sudo -i) op het knooppunt Slurm scheduler om de slurm.conf knooppunten in het cluster opnieuw te bouwen en bij te werken:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Notitie

Voor CycleCloud versies < 7.9.10 bevindt het cyclecloud_slurm.sh script zich in /opt/cycle/jetpack/system/bootstrap/slurm.

Belangrijk

Als u wijzigingen aanbrengt die van invloed zijn op de VM's voor knooppunten in een MPI-partitie (zoals VM-grootte, installatiekopieën of cloud-init), moeten de knooppunten eerst worden beëindigd. Met de remove_nodes opdracht wordt in dit geval een waarschuwing afgedrukt, maar deze wordt niet afgesloten met een fout. Als er knooppunten worden uitgevoerd, krijgt u een foutmelding This node does not match existing scaleset attribute wanneer nieuwe knooppunten worden gestart.

/opt/cycle/slurm/cyclecloud_slurm.sh apply_changes

Notitie

Voor CycleCloud versie < 8.2 bevindt het cyclecloud_slurm.sh script zich in /opt/cycle/jetpack/system/bootstrap/slurm.

Als u wijzigingen aanbrengt die van invloed zijn op de VM's voor knooppunten in een MPI-partitie (zoals VM-grootte, installatiekopieën of cloud-init), en de knooppunten worden uitgevoerd, krijgt u een foutmelding This node does not match existing scaleset attribute wanneer nieuwe knooppunten worden gestart. Daarom zorgt de apply_changes opdracht ervoor dat de knooppunten worden beëindigd en mislukt met het volgende foutbericht als dat niet het geval is: De volgende knooppunten moeten volledig worden beëindigd voordat wijzigingen worden toegepast.

Als u een wijziging aanbrengt die GEEN invloed heeft op de VM-eigenschappen voor MPI-knooppunten, hoeft u actieve knooppunten niet eerst te beëindigen. In dit geval kunt u de wijzigingen aanbrengen met behulp van de volgende twee opdrachten:

/opt/cycle/slurm/cyclecloud_slurm.sh remove_nodes
/opt/cycle/slurm/cyclecloud_slurm.sh scale

Notitie

De apply_changes opdracht bestaat alleen in CycleCloud 8.3+, dus de enige manier om een wijziging aan te brengen in eerdere versies is met de bovenstaande remove_nodes + scale opdrachten. Zorg ervoor dat met de remove_nodes opdracht geen waarschuwing wordt afgedrukt over knooppunten die moeten worden beëindigd.

Extra partities maken

De standaardsjabloon die wordt geleverd met Azure CycleCloud heeft twee partities (hpc en htc), en u kunt aangepaste knooppuntarrays 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:2.0.1]]]
        [[[network-interface eth0]]]
        AssociatePublicIpAddress = $ExecuteNodesPublic

Geheugeninstellingen

CycleCloud stelt automatisch de hoeveelheid beschikbaar geheugen in die Slurm moet gebruiken voor planningsdoeleinden. Omdat de hoeveelheid beschikbaar geheugen enigszins kan veranderen vanwege verschillende Linux-kernelopties en het besturingssysteem en de VM een kleine hoeveelheid geheugen kunnen gebruiken die anders beschikbaar zou zijn voor taken, vermindert CycleCloud automatisch de hoeveelheid geheugen in de Slurm-configuratie. CycleCloud houdt standaard 5% van het gerapporteerde beschikbare geheugen in een VM vast, maar deze waarde kan worden overschreven in de clustersjabloon door in te stellen slurm.dampen_memory op het percentage geheugen dat moet worden ingeslagen. Als u bijvoorbeeld 20% van het geheugen van een VM wilt vasthouden:

    slurm.dampen_memory=20

Automatische schaalaanpassing uitschakelen voor specifieke knooppunten of partities

Hoewel de ingebouwde CycleCloud -functie 'KeepAlive' momenteel niet werkt voor Slurm-clusters, is het mogelijk om automatische schaalaanpassing uit te schakelen voor een actief Slurm-cluster door het bestand slurm.conf rechtstreeks te bewerken. U kunt afzonderlijke knooppunten of volledige partities uitsluiten van automatische schaalaanpassing.

Een knooppunt uitsluiten

Als u een knooppunt of meerdere knooppunten wilt uitsluiten van automatische schaalaanpassing, voegt u toe SuspendExcNodes=<listofnodes> aan het Slurm-configuratiebestand. Als u bijvoorbeeld knooppunten 1 en 2 wilt uitsluiten van de hpc-partitie, voegt u het volgende toe aan /sched/slurm.conf:

SuspendExcNodes=hpc-pg0-[1-2]

Start de slurmctld service vervolgens opnieuw om de nieuwe configuratie van kracht te laten worden.

Een partitie uitsluiten

Het uitsluiten van volledige partities van automatische schaalaanpassing is vergelijkbaar met het uitsluiten van knooppunten. Als u de hele hpc partitie wilt uitsluiten, voegt u het volgende toe aan /sched/slurm.conf

SuspendExcParts=hpc

Start de slurmctld service vervolgens opnieuw.

Problemen oplossen

UID-conflicten voor Slurm- en Munge-gebruikers

Dit project gebruikt standaard een UID en GID van 11100 voor de Slurm-gebruiker en 11101 voor de Munge-gebruiker. Als dit een conflict veroorzaakt met een andere gebruiker of groep, kunnen deze standaardinstellingen worden overschreven.

Als u de UID en GID wilt overschrijven, klikt u op de knop Bewerken voor beide scheduler knooppunten:

Scheduler bewerken

Scheduler bewerken

En de execute knooppuntmaarray: Knooppuntmaarray bewerken

en voeg de volgende kenmerken toe aan de Configuration sectie:

Configuratie bewerken

    slurm.user.name = slurm
    slurm.user.uid = 11100
    slurm.user.gid = 11100
    munge.user.name = munge
    munge.user.uid = 11101
    munge.user.gid = 11101

Automatisch schalen

CycleCloud maakt gebruik van de functie Elastic Computing van Slurm. Als u problemen met automatische schaalaanpassing wilt opsporen, zijn er enkele logboeken op het scheduler-knooppunt dat u kunt controleren. De eerste is ervoor zorgen dat de cv-aanroepen voor energiebesparing worden uitgevoerd door te controleren /var/log/slurmctld/slurmctld.log. Als het goed is, ziet u regels als:

[2019-12-09T21:19:03.400] power_save: pid 8629 waking nodes htc-1

Het andere logboek dat moet worden gecontroleerd, is /var/log/slurmctld/resume.log. Als de hervattingsstap mislukt, is er ook een /var/log/slurmctld/resume_fail.log. Als er berichten zijn over onbekende of ongeldige knooppuntnamen, controleert u of u geen knooppunten aan het cluster hebt toegevoegd zonder de stappen in de sectie Clusterwijzigingen aanbrengen hierboven uit te voeren.

Naslaginformatie over Slurm-configuratie

Hier volgen de specifieke configuratieopties voor Slurm die u kunt in-/uitschakelen om de functionaliteit aan te passen:

Specifieke configuratieopties voor Slurm Beschrijving
slurm.version Standaardinstelling: '18.08.7-1'. Dit is de Slurm-versie die moet worden geïnstalleerd en uitgevoerd. Dit is momenteel de standaard- en enige optie. In de toekomst kunnen aanvullende versies van de Slurm-software worden ondersteund.
slurm.autoscale Standaardinstelling: 'false'. Dit is een instelling per knooppuntmaarray waarmee wordt bepaald of Slurm automatisch knooppunten in deze knooppuntarray moet stoppen en starten.
slurm.hpc Standaardinstelling: 'true'. Dit is een instelling per knooppuntmaarray die bepaalt of knooppunten in de knooppuntmaarray in dezelfde plaatsingsgroep worden geplaatst. Voornamelijk gebruikt voor knooppuntarrays die VM-families gebruiken met InfiniBand. Het is alleen van toepassing wanneer slurm.autoscale is ingesteld op 'true'.
slurm.default_partition Standaardinstelling: 'false'. Dit is een instelling per knooppuntmatrice die bepaalt of de knooppuntmaarray de standaardpartitie moet zijn voor taken waarvoor geen partitie expliciet wordt aangevraagd.
slurm.dampen_memory Standaardinstelling: '5'. Het percentage geheugen dat moet worden vastgezet voor besturingssysteem-/VM-overhead.
slurm.suspend_timeout Standaardwaarde: '600'. De hoeveelheid tijd (in seconden) tussen een onderbrekingsoproep en wanneer dat knooppunt opnieuw kan worden gebruikt.
slurm.resume_timeout Standaardwaarde: '1800'. De hoeveelheid tijd (in seconden) die moet worden gewacht totdat een knooppunt is opgestart.
slurm.install Standaardinstelling: 'true'. Bepaalt of Slurm is geïnstalleerd bij het opstarten van het knooppunt ('true'). Als Slurm is geïnstalleerd in een aangepaste installatiekopieën, moet dit worden ingesteld op 'false'. (proj versie 2.5.0+)
slurm.use_pcpu Standaardinstelling: 'true'. Dit is een instelling per knooppuntmatrice voor het beheren van de planning met hyperthreaded vcpu's. Stel in op 'false' om CPU's=vcpus in te stellen in cyclecloud.conf.
slurm.user.name Standaardinstelling: 'slurm'. Dit is de gebruikersnaam voor de Slurm-service die moet worden gebruikt.
slurm.user.uid Standaardwaarde: '11100'. De gebruikers-id die moet worden gebruikt voor de Slurm-gebruiker.
slurm.user.gid Standaardwaarde: '11100'. De groeps-id die moet worden gebruikt voor de Slurm-gebruiker.
munge.user.name Standaardinstelling: 'munge'. Dit is de gebruikersnaam voor de MUNGE-verificatieservice die moet worden gebruikt.
munge.user.uid Standaardwaarde: '11101'. De gebruikers-id die moet worden gebruikt voor de MUNGE-gebruiker.
munge.user.gid Standaardwaarde: '11101'. De groeps-id die moet worden gebruikt voor de MUNGE-gebruiker.

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.