Blog berichten Volupe

Efficiënt beheer van werkplekbronnen

Tegenwoordig zorgen clusterwachtrijsystemen en IT-procedures doorgaans voor een soepele gebruikerservaring. Deze maken het eenvoudig om uw simulations op een eerlijke en efficiënte manier over de resources te verdelen. Maar wat als je geen cluster hebt, en ook geen wachtrijsysteem, maar eerder een krachtig werkstation? Laten we eens kijken hoe je het gebruik van hardwarebronnen kunt optimaliseren. In de blogpost van deze week delen we met trots een fantastisch gescripte resource manager voor Linux-omgeving van onze klant Luc Evertzen, R&D Lead Developers/Simulation bij Brink Klimaatsystemen.

Werkstation middelen

Werken met parallelle servers

Het is zeer wenselijk CFD-oplossingen parallel te berekenen door de mesh te verdelen over verschillende processen op meerdere cores. Deze functionaliteit is gebaseerd op een dataparallellisme-concept waarbij elk proces numerieke methoden toepast die identiek zijn aan die welke in een seriële oplossing worden gebruikt.

Communicatie tussen de processen zorgt voor consistentie met een seriële oplossing door berichten door te geven via de Message Passing Interface (MPI). Ongeacht of u een lokaal multi-core werkstation, machines op afstand of een cluster op afstand gebruikt om uw parallelle server te draaien, alle benaderingen vereisen een implementatie van de MPI die met de STAR-CCM+ installatie wordt meegeleverd.

 

Een multi-core werkstation of een groep machines gebruiken

U kunt een lokaal multi-core werkstation gebruiken of verschillende computers groeperen tot een cluster. Om parallel te draaien moet Simcenter STAR-CCM+ echter geïnstalleerd zijn op elk van de machines waarop u wilt draaien. En de servers moeten een set homogene machines zijn (zowel Windows als Linux machines kunnen worden gekoppeld). Een simulatie kan worden gestart op een groep machines door:

  • Een machinebestand definiëren voor parallelle hosts

    Een lijst van machines waarop u processen wilt plaatsen

  • 1TP16Een cluster van machines handmatig instellen

    Voorschrijven van de hosts waar de processen worden gestart

  • Batchbeheersystemen gebruiken

    Een batchsysteem beheert de opdracht en wijst deze toe aan specifieke machines wanneer deze beschikbaar komen, op basis van de gevraagde middelen.

Bronnenbeheer op een werkstation met één machine

De hardware efficiënt gebruiken kan een uitdaging zijn. Beschikbaarheid van licenties en verschillende gebruikersverzoeken moeten worden afgestemd op de hardwarebronnen. Een Batch Management Systeem is een geavanceerde optie om de rekentaken te delegeren, maar de installatie en configuratie is ambitieus. In de volgende twee secties beschrijven wij de installatie en configuratie van een Batch Management System en een Linux-omgeving (getest op een Rocky Linux 8.5), alsmede een gestroomlijnde maar efficiënte scriptbenadering met individuele aanpassingen om het werkstation bezig te houden.

Installatie van het SLURM batchbeheersysteem

Simcenter STAR-CCM+ kan in batchmodus worden uitgevoerd onder controle van verschillende batchsystemen zoals SLURM, PBS of Grid Engine. SLURM is een uitstekende werkplanningstool voor High-Performance computing clusters. Daarnaast kan het een waardevol hulpmiddel zijn op een lokale desktop of een enkele server wanneer u verschillende programma's tegelijk moet draaien en ze in een wachtrij moet plaatsen zonder uw computer of server te overbelasten. Verder kan het nuttig zijn in gevallen waarin u een server deelt met andere gebruikers of 's nachts meerdere taken moet uitvoeren.

1. Pakketten installeren

Eerst installeren we de SLURM-pakketten

sudo yum update -y
sudo yum install slurm-slurmd slurmctld -y

Slurm gebruikt de MUNGE service voor authenticatie binnen een groep hosts. Strikt genomen hebben we maar één host (localhost), maar we hebben toch een munge sleutel nodig om ons te authenticeren bij het indienen van een opdracht.

sudo yum install epel-release -y
yum install munge munge-libs munge-devel -y

2. Configureer

Configureer SLURM queue setup in SLURMs configuratiebestand. Hier passen we de sectie COMPUTE NODES aan aan de specificaties van uw machine. Bijvoorbeeld als u 10 cores CPUs=10 en 32000MB geheugen heeft RealMemory=32000 . U moet ook MpiDefault=none instellen.

sudo chmod 777 /etc/slurm/
vi /etc/slurm/slurm.conf

Maak een MUNG-sleutel aan en stel de rechten in

sudo mkdir /etc/munge
dd if=/dev/urandom bs=1 count=1024 | sudo tee -a /etc/munge/munge.key
sudo chown munge: /etc/munge/munge.key
sudo chmod 400 /etc/munge/munge.key
sudo chmod a+x /var/run/munge

3. Start en Check

Start de MUNG dienst

sudo systemctl enable munge
sudo systemctl start munge

Laten we nu SLURM opstarten met systemd:

sudo systemctl start slurmd -l
sudo systemctl start slurmctld.services -l

4. Zet de machine op stationair

Tenslotte stellen we onze machine in als idle, zodat we opdrachten in de wachtrij kunnen zetten:

sudo update nodename=localhost state=idle
sinfo
PARTITIE BESCHIKBAAR TIJDLIMIET KNOOPPUNTEN STAAT NODELIJST
LocalQ* up infinite 1 idle localhost

Indien succesvol zie je het bovenstaande en goed gedaan, dan heb je slurm aan de praat gekregen. Je hebt nu een wachtrij (of "partitie" in slurm lingo) genaamd LocalQ waaraan je nu je werk kunt voorleggen. Als je problemen hebt kun je het debuggen door te kijken in de logfiles in /var/log/slurm-llnl/slurmd.log en /var/log/slurm-llnl/slurmctld.log.

Om een job naar de wachtrij te sturen kunt u het commando sbatch gebruiken. Zie hieronder een kort voorbeeld van een indieningsscript voor een Simcenter STAR-CCM+ opdracht:

#!/bin/bash
#SBATCH -J starXX
#SBATCH --nodes=3
#SBATCH --ntasks=28
#SBATCH -n 84
#SBATCH exclusief

#SBATCH -o uitvoer_bestand.o
#SBATCH -e error_flie.e

#SBATCH -t 00:30:00

module laden starccm+/17.02.010

sim_file="simulation.sim"
STARTMACRO="/home/MYCASE/runsim.java"

starccm+ -power -podkey your_PoD_key -licpath 1999@flex.cd-adapco.com -np 84 $sim_file -batch $STARTMACRO -batch-report

Scripting

Een meer flexibele en gestroomlijnde aanpak kan zijn om uw eigen bash-script te schrijven. Een Bash script is een tekstbestand dat een reeks commando's bevat die we normaal gesproken zelf in de commandoregel zouden typen. Maar het kan zelfs lussen en IF statements bevatten.

Een zeer eenvoudig script kan worden samengesteld om meerdere simulations in batch uit te voeren:

#!/bin/bash

starccm+ -batch -np 2 File1.sim ;
starccm+ -batch -np 2 File2.sim ;
starccm+ -batch -np 2 File3.sim ;

Onze klant Luc Evertzen kwam echter met een veel slimmer bash-script. Dit script draait met het nohup (staat voor no hangup) commando om een continue achtergrondtaak te creëren. Het draait continu met een wachttijd van 20 seconden en zoekt in een map naar nieuw toegevoegde .sim/.dmprj bestanden.

Voor elk sim- en dmprj-bestand voert hij vervolgens starccm+ commando's uit, afhankelijk van het bestandstype. Nadat de simulatie is opgelost, wordt in dezelfde map een leeg bestand geplaatst met dezelfde naam als de simulatie, maar met de extensie .solved. Deze vlag vertelt het script om het uitvoeren van reeds opgeloste simulations te vermijden. Je kunt nu dus gewoon simulations naar de server gooien en de simulations wordt uitgevoerd.

#!/bin/sh

# Job Manager script gemaakt door Luc Evertzen
while true; do
 dag=$(datum +'%d')
 if [ "$day" == 1 ]; then
  : > nohup.out
 Fi

# Zoek alle simulatiebestanden in de huidige map
 voor i in "*.{sim,dmprj}"; do
# Als er geen bestand is met dezelfde naam maar de extensie .solved submit!
  als ! test -f $i.solved; dan
   string=$i
   extension=".sim"
   case "$string" in
    *$extension*)
# geval voor sim bestanden
     starInstallationPath/star/bin/starccm+ -batch Run.java -power -np 32 -load $i;
     touch $i.solved ;
     rm *.sim~;;
# Zaak voor dmprj bestanden
    * )
     starInstallationPath/star/bin/starccm+ $i -batch -dmnoshare -passtodesign "-power";
     touch $i.solved ;
     rm *.dmprj~;;
   esac
  fi
 gedaan
 slaap 20
done

De simulations worden uitgevoerd met een java macro die een extra automatiseringslaag toevoegt aan de indiening. De scripts controleren enkele naamgevingsconventies om te beslissen of de simulatie moet worden gewist, de mesh-pijplijn moet worden uitgevoerd of de fysica moet worden opgelost. De naamgevingsconventie gebruikt dubbele underscores om de bestandsnaam te scheiden van de bedieningscommando's en luidt als volgt:

  • Duidelijke simulatie: MySim__c.sim
  • Mesh simulatie: MySim__m.sim
  • Voer de simulatie uit: MySim__s.sim

De naamgevingsconventie kan ook worden gebruikt om bewerkingen te combineren. Bijvoorbeeld:

  • Simulatie wissen en oplossen: MySim__cs.sim
  • Mesh en simulatie oplossen: MySim__mc.sim
  • enz.

Het bevat ook een fallback clausule waar het gewoon zal mazen en oplossen als de bewerkingsopdrachten worden weggelaten uit de bestandsnaam. Tenslotte kan het aantal unieke processen worden aangepast door eenvoudigweg extra if-statements toe te voegen aan het java-bestand. Bijvoorbeeld:

  • Als (commands.contains("r")): Zou gebruikt kunnen worden om alle screenplays weer te geven
  • Als (commands.contains("p")): Kan worden gebruikt om alle in de simulatie aanwezige scènes en plots op te slaan
// STAR-CCM+ macro: MeshRunAndSave.java
pakket macro;
import java.io.*;
import star.base.neo.*;
import star.common.*;
import star.meshing.*;
import star.surfacewrapper.*;
importeer java.util.*;

public class Run extends StarMacro {
    public void execute() {
        Simulatie sim = getActiveSimulation();
        String naam = sim.getPresentationName();
        try {
            String commando's = name.split("__")[1];
            Als (commands.contains("c")) {
                sim.getSolution().clearSolution();
                sim.saveState(sim.getPresentationName() + ".sim");
            }
            Als (commands.contains("m")) {
                MeshPipelineController meshPipelineController_0 =
                    sim.get(MeshPipelineController.class);
                meshPipelineController_0.generateVolumeMesh();
                sim.saveState(sim.getPresentationName() + ".sim");
            }
            Als (commands.contains("s")) {
                sim.getInterfaceManager().initialize();
                sim.getSimulationIterator().run();
                sim.saveState(sim.getPresentationName() + ".sim");
            }
        } catch (Exception ex) {
            MeshPipelineController meshPipelineController_0 =
                    sim.get(MeshPipelineController.class);
                meshPipelineController_0.generateVolumeMesh();
            sim.getInterfaceManager().initialize();
            sim.getSimulationIterator().run();
            sim.saveState(sim.getPresentationName() + ".sim");
        }
    }
}

De combinatie van zowel het bash-script als de java-macro zorgt voor een minimale gebruikersinteractie om een opdracht uit te voeren. De gebruiker hoeft alleen de bestanden in de "running directory" te plaatsen en te wachten tot het *.solved bestand verschijnt. Dit alles is echter mogelijk dankzij een licentiefunctie van Simcenter STAR-CCM+, die een job laat wachten tot er weer licenties beschikbaar zijn. Normaal gesproken keert FlexNet terug als een licentie niet beschikbaar is, en sluit de code af. Als STARWAIT omgevingsvariabele is ingesteld, dan FlexNet zal wachten tot een licentie beschikbaar komt. Dus, een essentiële stap is om gewoon toe te voegen "export STARWAIT=1" commando in uw batch-script.

Het wachtsysteem kan worden gedood door de opdracht "ps fjx" uit te voeren en het proces "/bin/sh ./run.sh" te doden met de opdracht "kill 'PID'", waarbij 'PID' de PID van het scriptproces is (tweede kolom).

De eindeloze lus in het script zou eventueel kunnen worden verwijderd en het script met alleen de case-statement zou kunnen worden ingepland door een kroonjob. Dit zou problemen met het stoppen van de uitvoering voorkomen. Wij hopen dat deze blogpost u zal helpen bij het optimaal beheren van uw computerbronnen. Voor meer details of als u vragen hebt, kunt u ons altijd bereiken op

 

De auteurs

Luc Evertzen
R&D Engineer bij Brink Climate Systems


Florian Vesting, PhD
Contact: support@volupe.com
+46 768 51 23 46

Meer blogberichten

nl_BEDutch