STAR-CCM+ uitvoeren met Microsoft HPC Pack op een Linux RDMA-cluster in Azure
Belangrijk
Klassieke VM's worden op 1 maart 2023 buiten gebruik gesteld.
Als u IaaS-resources van ASM gebruikt, dient u de migratie uiterlijk 1 maart 2023 te voltooien. U wordt aangeraden al eerder over te schakelen om te kunnen profiteren van de vele functieverbeteringen in Azure Resource Manager.
Zie Uw IaaS-resources vóór 1 maart 2023 naar Azure Resource Manager migreren voor meer informatie.
In dit artikel leest u hoe u een Microsoft HPC Pack-cluster in Azure implementeert en een CD-adapco STAR-CCM+- taak uitvoert op meerdere Linux-rekenknooppunten die zijn verbonden met InfiniBand.
Notitie
Azure heeft twee verschillende implementatiemodellen voor het maken en werken met resources: Resource Manager en klassiek. In dit artikel komen beide modellen aan de orde, maar u wordt aangeraden voor de meeste nieuwe implementaties het Resource Manager-model te gebruiken.
Microsoft HPC Pack biedt functies voor het uitvoeren van diverse grootschalige HPC- en parallelle toepassingen, waaronder MPI-toepassingen, op clusters van virtuele Microsoft Azure-machines. HPC Pack biedt ook ondersteuning voor het uitvoeren van Linux HPC-toepassingen op virtuele Linux-rekenknooppunten die zijn geïmplementeerd in een HPC Pack-cluster. Zie Aan de slag met Linux-rekenknooppunten in een HPC Pack-cluster in Azure voor een inleiding tot het gebruik van Linux-rekenknooppunten met HPC Pack.
Een HPC Pack-cluster instellen
Download de HPC Pack IaaS-implementatiescripts uit het Downloadcentrum en pak ze lokaal uit.
Azure PowerShell is een vereiste. Als PowerShell niet is geconfigureerd op uw lokale computer, leest u het artikel Over het installeren en configureren van Azure PowerShell.
Op het moment van schrijven zijn de Linux-installatiekopieën van de Azure Marketplace (die de InfiniBand-stuurprogramma's voor Azure bevat) voor SLES 12, CentOS 6.5 en CentOS 7.1. Dit artikel is gebaseerd op het gebruik van SLES 12. Als u de naam wilt ophalen van alle Linux-installatiekopieën die HPC ondersteunen in marketplace, kunt u de volgende PowerShell-opdracht uitvoeren:
get-azurevmimage | ?{$_.ImageName.Contains("hpc") -and $_.OS -eq "Linux" }
De uitvoer bevat de locatie waar deze installatiekopieën beschikbaar zijn en de installatiekopieënnaam (ImageName) die later in de implementatiesjabloon moeten worden gebruikt.
Voordat u het cluster implementeert, moet u een HPC Pack-implementatiesjabloonbestand maken. Omdat we gericht zijn op een klein cluster, is het hoofdknooppunt de domeincontroller en hosten we een lokale SQL-database.
De volgende sjabloon implementeert een dergelijk hoofdknooppunt, maakt een XML-bestand met de naam MyCluster.xmlen vervangt de waarden van SubscriptionId, StorageAccount, Location, VMName en ServiceName door die van u.
<?xml version="1.0" encoding="utf-8" ?>
<IaaSClusterConfig>
<Subscription>
<SubscriptionId>99999999-9999-9999-9999-999999999999</SubscriptionId>
<StorageAccount>mystorageaccount</StorageAccount>
</Subscription>
<Location>North Europe</Location>
<VNet>
<VNetName>hpcvnetne</VNetName>
<SubnetName>subnet-hpc</SubnetName>
</VNet>
<Domain>
<DCOption>HeadNodeAsDC</DCOption>
<DomainFQDN>hpc.local</DomainFQDN>
</Domain>
<Database>
<DBOption>LocalDB</DBOption>
</Database>
<HeadNode>
<VMName>myhpchn</VMName>
<ServiceName>myhpchn</ServiceName>
<VMSize>Standard_D4</VMSize>
</HeadNode>
<LinuxComputeNodes>
<VMNamePattern>lnxcn-%0001%</VMNamePattern>
<ServiceNamePattern>mylnxcn%01%</ServiceNamePattern>
<MaxNodeCountPerService>20</MaxNodeCountPerService>
<StorageAccountNamePattern>mylnxstorage%01%</StorageAccountNamePattern>
<VMSize>A9</VMSize>
<NodeCount>0</NodeCount>
<ImageName>b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-hpc-v20150708</ImageName>
</LinuxComputeNodes>
</IaaSClusterConfig>
Start het maken van het hoofdknooppunt door de PowerShell-opdracht uit te voeren in een opdrachtprompt met verhoogde bevoegdheid:
.\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml
Na 20 tot 30 minuten moet het hoofdknooppunt gereed zijn. U kunt er verbinding mee maken vanuit het Azure Portal door op het pictogram Verbinding maken van de virtuele machine te klikken.
Mogelijk moet u de DNS-doorstuurserver mogelijk herstellen. Start HIERVOOR DNS-beheer.
- Klik met de rechtermuisknop op de servernaam in DNS-beheer, selecteer Eigenschappen en klik vervolgens op het tabblad Doorstuurservers .
- Klik op de knop Bewerken om eventuele doorstuurservers te verwijderen en klik vervolgens op OK.
- Zorg ervoor dat het selectievakje Basishints gebruiken is ingeschakeld als er geen doorstuurservers beschikbaar zijn en klik vervolgens op OK.
Linux-rekenknooppunten instellen
U implementeert de Linux-rekenknooppunten met behulp van dezelfde implementatiesjabloon die u hebt gebruikt om het hoofdknooppunt te maken.
Kopieer het bestand MyCluster.xml van uw lokale computer naar het hoofdknooppunt en werk de NodeCount-tag bij met het aantal knooppunten dat u wilt implementeren (<=20). Wees voorzichtig met voldoende beschikbare kernen in uw Azure-quotum, omdat elk A9-exemplaar 16 kernen in uw abonnement verbruikt. U kunt A8-exemplaren (8 kernen) gebruiken in plaats van A9 als u meer VM's in hetzelfde budget wilt gebruiken.
Kopieer de HPC Pack IaaS-implementatiescripts op het hoofdknooppunt.
Voer de volgende Azure PowerShell opdrachten uit in een opdrachtprompt met verhoogde bevoegdheid:
Voer Add-AzureAccount uit om verbinding te maken met uw Azure-abonnement.
Als u meerdere abonnementen hebt, voert u Get-AzureSubscription uit om deze te vermelden.
Stel een standaardabonnement in door de opdracht Select-AzureSubscription -SubscriptionName xxxx -Default uit te voeren.
Voer .\New-HPCIaaSCluster.ps1 -ConfigFile-MyCluster.xml uit om linux-rekenknooppunten te implementeren.
Open het hulpprogramma HPC Pack Cluster Manager. Na enkele minuten worden Linux-rekenknooppunten regelmatig weergegeven in de lijst met cluster-rekenknooppunten. Met de klassieke implementatiemodus worden IaaS-VM's opeenvolgend gemaakt. Dus als het aantal knooppunten belangrijk is, kan het allemaal veel tijd duren voordat ze worden geïmplementeerd.
Nu alle knooppunten actief en actief zijn in het cluster, zijn er extra infrastructuurinstellingen die u moet maken.
Een Azure-bestandsshare instellen voor Windows- en Linux-knooppunten
U kunt de Azure File-service gebruiken om scripts, toepassingspakketten en gegevensbestanden op te slaan. Azure File biedt CIFS-mogelijkheden boven op Azure Blob Storage als permanente opslag. Houd er rekening mee dat dit niet de meest schaalbare oplossing is, maar het is de eenvoudigste en vereist geen toegewezen VM's.
Maak een Azure-bestandsshare door de instructies in het artikel Aan de slag te gaan met Azure File Storage in Windows.
Behoud de naam van uw opslagaccount als saname, de naam van de bestandsshare als sharenaam en de sleutel van het opslagaccount.
De Azure-bestandsshare op het hoofdknooppunt koppelen
Open een opdrachtprompt met verhoogde bevoegdheid en voer de volgende opdracht uit om de referenties op te slaan in de lokale machinekluis:
cmdkey /add:<saname>.file.core.windows.net /user:<saname> /pass:<sakey>
Voer vervolgens het volgende uit om de Azure-bestandsshare te koppelen:
net use Z: \\<saname>.file.core.windows.net\<sharename> /persistent:yes
De Azure-bestandsshare koppelen op Linux-rekenknooppunten
Een handig hulpmiddel dat bij HPC Pack wordt geleverd, is het hulpprogramma clusrun. U kunt dit opdrachtregelprogramma gebruiken om dezelfde opdracht tegelijkertijd uit te voeren op een set rekenknooppunten. In ons geval wordt deze gebruikt om de Azure-bestandsshare te koppelen en te behouden om het opnieuw opstarten te overleven. Voer in een opdrachtprompt met verhoogde bevoegdheid op het hoofdknooppunt de volgende opdrachten uit.
De koppelingsmap maken:
clusrun /nodegroup:LinuxNodes mkdir -p /hpcdata
De Azure-bestandsshare koppelen:
clusrun /nodegroup:LinuxNodes mount -t cifs //<saname>.file.core.windows.net/<sharename> /hpcdata -o vers=2.1,username=<saname>,password='<sakey>',dir_mode=0777,file_mode=0777
De koppelingsshare behouden:
clusrun /nodegroup:LinuxNodes "echo //<saname>.file.core.windows.net/<sharename> /hpcdata cifs vers=2.1,username=<saname>,password='<sakey>',dir_mode=0777,file_mode=0777 >> /etc/fstab"
STAR-CCM+ installeren
Azure VM-exemplaren A8 en A9 bieden Ondersteuning voor InfiniBand en RDMA-mogelijkheden. De kernelstuurprogramma's die deze mogelijkheden mogelijk maken, zijn beschikbaar voor Windows Server 2012 R2-, SUSE 12-, CentOS 6.5- en CentOS 7.1-installatiekopieën in de Azure Marketplace. Microsoft MPI en Intel MPI (release 5.x) zijn de twee MPI-bibliotheken die ondersteuning bieden voor deze stuurprogramma's in Azure.
CD-adapco STAR-CCM+ release 11.x en hoger is gebundeld met Intel MPI versie 5.x, dus InfiniBand-ondersteuning voor Azure is inbegrepen.
Download het Linux64 STAR-CCM+-pakket vanuit de CD-adapco-portal. In ons geval hebben we versie 11.02.010 in gemengde precisie gebruikt.
Maak op het hoofdknooppunt in de /hpcdata Azure-bestandsshare een shellscript met de naam setupstarccm.sh met de volgende inhoud. Dit script wordt uitgevoerd op elk rekenknooppunt om STAR-CCM+ lokaal in te stellen.
Voorbeeldscript voor setupstarcm.sh
#!/bin/bash
# setupstarcm.sh to set up STAR-CCM+ locally
# Create the CD-adapco main directory
mkdir -p /opt/CD-adapco
# Copy the STAR-CCM package from the file share to the local directory
cp /hpcdata/StarCCM/STAR-CCM+11.02.010_01_linux-x86_64.tar.gz /opt/CD-adapco/
# Extract the package
tar -xzf /opt/CD-adapco/STAR-CCM+11.02.010_01_linux-x86_64.tar.gz -C /opt/CD-adapco/
# Start a silent installation of STAR-CCM without the FLEXlm component
/opt/CD-adapco/starccm+_11.02.010/STAR-CCM+11.02.010_01_linux-x86_64-2.5_gnu4.8.bin -i silent -DCOMPUTE_NODE=true -DNODOC=true -DINSTALLFLEX=false
# Update memory limits
echo "* hard memlock unlimited" >> /etc/security/limits.conf
echo "* soft memlock unlimited" >> /etc/security/limits.conf
Als u STAR-CCM+ wilt instellen op al uw Linux-rekenknooppunten, opent u een opdrachtprompt met verhoogde bevoegdheid en voert u de volgende opdracht uit:
clusrun /nodegroup:LinuxNodes bash /hpcdata/setupstarccm.sh
Terwijl de opdracht wordt uitgevoerd, kunt u het CPU-gebruik bewaken met behulp van de heatmap van Clusterbeheer. Na enkele minuten moeten alle knooppunten correct zijn ingesteld.
STAR-CCM+-taken uitvoeren
HPC Pack wordt gebruikt voor de mogelijkheden van de jobplanner om STAR-CCM+-taken uit te voeren. Hiervoor hebben we de ondersteuning nodig van enkele scripts die worden gebruikt om de taak te starten en STAR-CCM+ uit te voeren. De invoergegevens worden eerst op de Azure-bestandsshare bewaard om het eenvoudig te houden.
Het volgende PowerShell-script wordt gebruikt om een STAR-CCM+-taak in de wachtrij te plaatsen. Hiervoor zijn drie argumenten nodig:
- De modelnaam
- Het aantal knooppunten dat moet worden gebruikt
- Het aantal kernen op elk knooppunt dat moet worden gebruikt
Omdat STAR-CCM+ de geheugenbandbreedte kan vullen, is het meestal beter om minder kernen per rekenknooppunt te gebruiken en nieuwe knooppunten toe te voegen. Het exacte aantal kernen per knooppunt is afhankelijk van de processorfamilie en de interconnectsnelheid.
De knooppunten worden exclusief toegewezen voor de taak en kunnen niet worden gedeeld met andere taken. De taak wordt niet rechtstreeks gestart als MPI-taak. Het runstarccm.sh shell-script start het MPI-startprogramma.
Het invoermodel en het runstarccm.sh-script worden opgeslagen in de /hpcdata-share die eerder is gekoppeld.
Logboekbestanden hebben de naam van de taak-id en worden opgeslagen in de /hpcdata-share, samen met de STAR-CCM+ uitvoerbestanden.
Voorbeeldscript voor SubmitStarccmJob.ps1
Add-PSSnapin Microsoft.HPC -ErrorAction silentlycontinue
$scheduler="headnodename"
$modelName=$args[0]
$nbCoresPerNode=$args[2]
$nbNodes=$args[1]
#---------------------------------------------------------------------------------------------------------
# Create a new job; this will give us the job ID that's used to identify the name of the uploaded package in Azure
#
$job = New-HpcJob -Name "$modelName $nbNodes $nbCoresPerNode" -Scheduler $scheduler -NumNodes $nbNodes -NodeGroups "LinuxNodes" -FailOnTaskFailure $true -Exclusive $true
$jobId = [String]$job.Id
#---------------------------------------------------------------------------------------------------------
# Submit the job
$workdir = "/hpcdata"
$execName = "$nbCoresPerNode runner.java $modelName.sim"
$job | Add-HpcTask -Scheduler $scheduler -Name "Compute" -stdout "$jobId.log" -stderr "$jobId.err" -Rerunnable $false -NumNodes $nbNodes -Command "runstarccm.sh $execName" -WorkDir "$workdir"
Submit-HpcJob -Job $job -Scheduler $scheduler
Vervang runner.java door uw favoriete STAR-CCM+ Java-modelstartprogramma en logboekregistratiecode.
Voorbeeldscript runstarccm.sh
#!/bin/bash
echo "start"
# The path of this script
SCRIPT_PATH="$( dirname "${BASH_SOURCE[0]}" )"
echo ${SCRIPT_PATH}
# Set the mpirun runtime environment
export CDLMD_LICENSE_FILE=1999@flex.cd-adapco.com
# mpirun command
STARCCM=/opt/CD-adapco/STAR-CCM+11.02.010/star/bin/starccm+
# Get node information from ENVs
NODESCORES=(${CCP_NODES_CORES})
COUNT=${#NODESCORES[@]}
NBCORESPERNODE=$1
# Create the hostfile file
NODELIST_PATH=${SCRIPT_PATH}/hostfile_$$
echo ${NODELIST_PATH}
# Get every node name and write into the hostfile file
I=1
NBNODES=0
while [ ${I} -lt ${COUNT} ]
do
echo "${NODESCORES[${I}]}" >> ${NODELIST_PATH}
let "I=${I}+2"
let "NBNODES=${NBNODES}+1"
done
let "NBCORES=${NBNODES}*${NBCORESPERNODE}"
# Run STAR-CCM with the hostfile argument
#
${STARCCM} -np ${NBCORES} -machinefile ${NODELIST_PATH} \
-power -podkey "<yourkey>" -rsh ssh \
-mpi intel -fabric UDAPL -cpubind bandwidth,v \
-mppflags "-ppn $NBCORESPERNODE -genv I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -genv I_MPI_DAPL_UD=0 -genv I_MPI_DYNAMIC_CONNECTION=0" \
-batch $2 $3
RTNSTS=$?
rm -f ${NODELIST_PATH}
exit ${RTNSTS}
In onze test hebben we een Licentietoken voor Power-On-Demand gebruikt. Voor dat token moet u de omgevingsvariabele 1999@flex.cd-adapco.com$CDLMD_LICENSE_FILE instellen op en de sleutel in de optie -podkey van de opdrachtregel.
Na enige initialisatie extraheert het script--uit de omgevingsvariabelen $CCP_NODES_CORES die HPC Pack heeft ingesteld- de lijst met knooppunten om een hostbestand te bouwen dat door het MPI-startprogramma wordt gebruikt. Dit hostbestand bevat de lijst met namen van rekenknooppunten die worden gebruikt voor de taak, één naam per regel.
De indeling van $CCP_NODES_CORES volgt dit patroon:
<Number of nodes> <Name of node1> <Cores of node1> <Name of node2> <Cores of node2>...`
Waar:
-
<Number of nodes>
is het aantal knooppunten dat aan deze taak is toegewezen. -
<Name of node_n_...>
is de naam van elk knooppunt dat aan deze taak is toegewezen. -
<Cores of node_n_...>
is het aantal kernen op het knooppunt dat aan deze taak is toegewezen.
Het aantal kernen ($NBCORES) wordt ook berekend op basis van het aantal knooppunten ($NBNODES) en het aantal kernen per knooppunt (opgegeven als parameter $NBCORESPERNODE).
Voor de MPI-opties zijn de opties die worden gebruikt met Intel MPI in Azure:
-
-mpi intel
om Intel MPI op te geven. -
-fabric UDAPL
om Azure InfiniBand-werkwoorden te gebruiken. -
-cpubind bandwidth,v
om de bandbreedte voor MPI te optimaliseren met STAR-CCM+. -
-mppflags "-ppn $NBCORESPERNODE -genv I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -genv I_MPI_DAPL_UD=0 -genv I_MPI_DYNAMIC_CONNECTION=0"
om Intel MPI te laten werken met Azure InfiniBand en het vereiste aantal kernen per knooppunt in te stellen. -
-batch
om STAR-CCM+ te starten in batchmodus zonder gebruikersinterface.
Als u een taak wilt starten, moet u ervoor zorgen dat uw knooppunten actief zijn en online zijn in Clusterbeheer. Voer vervolgens vanuit een PowerShell-opdrachtprompt het volgende uit:
.\ SubmitStarccmJob.ps1 <model> <nbNodes> <nbCoresPerNode>
Knooppunten stoppen
Nadat u klaar bent met uw tests, kunt u later de volgende HPC Pack PowerShell-opdrachten gebruiken om knooppunten te stoppen en te starten:
Stop-HPCIaaSNode.ps1 -Name <prefix>-00*
Start-HPCIaaSNode.ps1 -Name <prefix>-00*
Volgende stappen
Probeer andere Linux-workloads uit te voeren. Zie bijvoorbeeld: