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:
En de execute
knooppuntmaarray:
en voeg de volgende kenmerken toe aan de Configuration
sectie:
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. |