Köra STAR-CCM+ med Microsoft HPC Pack på ett Linux RDMA-kluster i Azure
Viktigt
Klassiska virtuella datorer dras tillbaka den 1 mars 2023.
Om du använder IaaS-resurser från ASM slutför du migreringen senast den 1 mars 2023. Vi rekommenderar att du gör bytet snabbare för att dra nytta av de många funktionsförbättringarna i Azure Resource Manager.
Mer information finns i Migrera dina IaaS-resurser till Azure Resource Manager senast den 1 mars 2023.
Den här artikeln visar hur du distribuerar ett Microsoft HPC Pack-kluster i Azure och kör ett CD-adapco STAR-CCM+- jobb på flera Linux-beräkningsnoder som är sammankopplade med InfiniBand.
Anteckning
Azure har två olika distributionsmodeller för att skapa och arbeta med resurser: Resource Manager och klassisk. Den här artikeln täcker bägge modellerna, men Microsoft rekommenderar de flesta nya distributioner att använda Resource Manager-modellen.
Microsoft HPC Pack innehåller funktioner för att köra en mängd storskaliga HPC-program och parallella program, inklusive MPI-program, på kluster med virtuella Microsoft Azure-datorer. HPC Pack stöder också körning av Linux HPC-program på virtuella Linux-datorer med beräkningsnoder som distribueras i ett HPC Pack-kluster. En introduktion till hur du använder Linux-beräkningsnoder med HPC Pack finns i Komma igång med Linux-beräkningsnoder i ett HPC Pack-kluster i Azure.
Konfigurera ett HPC Pack-kluster
Ladda ned IaaS-distributionsskripten för HPC Pack från Download Center och extrahera dem lokalt.
Azure PowerShell är en förutsättning. Om PowerShell inte har konfigurerats på den lokala datorn läser du artikeln Så här installerar och konfigurerar du Azure PowerShell.
När detta skrivs är Linux-avbildningarna från Azure Marketplace (som innehåller InfiniBand-drivrutinerna för Azure) för SLES 12, CentOS 6.5 och CentOS 7.1. Den här artikeln baseras på användningen av SLES 12. Om du vill hämta namnet på alla Linux-avbildningar som stöder HPC på Marketplace kan du köra följande PowerShell-kommando:
get-azurevmimage | ?{$_.ImageName.Contains("hpc") -and $_.OS -eq "Linux" }
Utdata visar den plats där avbildningarna är tillgängliga och avbildningsnamnet (ImageName) som ska användas i distributionsmallen senare.
Innan du distribuerar klustret måste du skapa en mallfil för HPC Pack-distribution. Eftersom vi riktar in oss på ett litet kluster kommer huvudnoden att vara domänkontrollant och vara värd för en lokal SQL-databas.
Följande mall distribuerar en sådan huvudnod, skapar en XML-fil med namnet MyCluster.xmloch ersätter värdena för SubscriptionId, StorageAccount, Location, VMName och ServiceName med dina.
<?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>
Starta skapandet av huvudnoden genom att köra PowerShell-kommandot i en upphöjd kommandotolk:
.\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml
Efter 20 till 30 minuter ska huvudnoden vara klar. Du kan ansluta till den från Azure Portal genom att klicka på ikonen Anslut för den virtuella datorn.
Du kan så småningom behöva åtgärda DNS-vidarebefordraren. Det gör du genom att starta DNS-hanteraren.
- Högerklicka på servernamnet i DNS-hanteraren, välj Egenskaper och klicka sedan på fliken Vidarebefordrare .
- Klicka på knappen Redigera för att ta bort vidarebefordrare och klicka sedan på OK.
- Kontrollera att kryssrutan Använd rottips om det inte finns några vidarebefordrare är markerad och klicka sedan på OK.
Konfigurera Linux-beräkningsnoder
Du distribuerar Linux-beräkningsnoderna med hjälp av samma distributionsmall som du använde för att skapa huvudnoden.
Kopiera filen MyCluster.xml från den lokala datorn till huvudnoden och uppdatera taggen NodeCount med det antal noder som du vill distribuera (<=20). Var noga med att ha tillräckligt med tillgängliga kärnor i Din Azure-kvot, eftersom varje A9-instans förbrukar 16 kärnor i din prenumeration. Du kan använda A8-instanser (8 kärnor) i stället för A9 om du vill använda fler virtuella datorer i samma budget.
På huvudnoden kopierar du IaaS-distributionsskripten för HPC Pack.
Kör följande Azure PowerShell kommandon i en upphöjd kommandotolk:
Kör Add-AzureAccount för att ansluta till din Azure-prenumeration.
Om du har flera prenumerationer kör du Get-AzureSubscription för att visa en lista över dem.
Ange en standardprenumeration genom att köra kommandot Select-AzureSubscription -SubscriptionName xxxx -Default .
Kör .\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml för att börja distribuera Linux-beräkningsnoder.
Öppna HPC Pack Cluster Manager-verktyget. Efter några minuter visas Linux-beräkningsnoder regelbundet i listan över klusterberäkningsnoder. I det klassiska distributionsläget skapas virtuella IaaS-datorer sekventiellt. Så om antalet noder är viktigt kan det ta lång tid att distribuera alla noder.
Nu när alla noder är igång i klustret finns det ytterligare infrastrukturinställningar att göra.
Konfigurera en Azure-filresurs för Windows- och Linux-noder
Du kan använda Azure File-tjänsten för att lagra skript, programpaket och datafiler. Azure File tillhandahåller CIFS-funktioner ovanpå Azure Blob Storage som ett beständigt arkiv. Tänk på att detta inte är den mest skalbara lösningen, men det är den enklaste lösningen och kräver inte dedikerade virtuella datorer.
Skapa en Azure-filresurs genom att följa anvisningarna i artikeln Kom igång med Azure File Storage i Windows.
Behåll namnet på ditt lagringskonto som saname, filresursnamnet som sharename och lagringskontonyckeln som sakey.
Montera Azure-filresursen på huvudnoden
Öppna en upphöjd kommandotolk och kör följande kommando för att lagra autentiseringsuppgifterna i det lokala datorvalvet:
cmdkey /add:<saname>.file.core.windows.net /user:<saname> /pass:<sakey>
Kör sedan för att montera Azure-filresursen:
net use Z: \\<saname>.file.core.windows.net\<sharename> /persistent:yes
Montera Azure-filresursen på Linux-beräkningsnoder
Ett användbart verktyg som medföljer HPC Pack är clusrun-verktyget. Du kan använda det här kommandoradsverktyget för att köra samma kommando samtidigt på en uppsättning beräkningsnoder. I vårt fall används den för att montera Azure-filresursen och bevara den för att överleva omstarter. Kör följande kommandon i en upphöjd kommandotolk på huvudnoden.
Så här skapar du monteringskatalogen:
clusrun /nodegroup:LinuxNodes mkdir -p /hpcdata
Montera Azure-filresursen:
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
Så här sparar du monteringsresursen:
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"
Installera STAR-CCM+
Azure VM-instanserna A8 och A9 tillhandahåller InfiniBand-stöd och RDMA-funktioner. Kerneldrivrutinerna som aktiverar dessa funktioner är tillgängliga för Windows Server 2012 R2-, SUSE 12-, CentOS 6.5- och CentOS 7.1-avbildningar i Azure Marketplace. Microsoft MPI och Intel MPI (version 5.x) är de två MPI-bibliotek som stöder dessa drivrutiner i Azure.
CD-adapco STAR-CCM+ version 11.x och senare paketeras med Intel MPI version 5.x, så InfiniBand-stöd för Azure ingår.
Hämta Linux64 STAR-CCM+-paketet från CD-adapco-portalen. I vårt fall använde vi version 11.02.010 i blandad precision.
I Azure-filresursen /hpcdata på huvudnoden skapar du ett gränssnittsskript med namnet setupstarccm.sh med följande innehåll. Det här skriptet körs på varje beräkningsnod för att konfigurera STAR-CCM+ lokalt.
Exempelskript för 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
Om du vill konfigurera STAR-CCM+ på alla dina Linux-beräkningsnoder öppnar du nu en upphöjd kommandotolk och kör följande kommando:
clusrun /nodegroup:LinuxNodes bash /hpcdata/setupstarccm.sh
När kommandot körs kan du övervaka CPU-användningen med hjälp av termisk karta över Klusterhanteraren. Efter några minuter bör alla noder vara korrekt konfigurerade.
Köra STAR-CCM+-jobb
HPC Pack används för sina jobbschemafunktioner för att köra STAR-CCM+-jobb. För att göra det behöver vi stöd för några skript som används för att starta jobbet och köra STAR-CCM+. Indata sparas först på Azure-filresursen för enkelhetens skull.
Följande PowerShell-skript används för att köa ett STAR-CCM+-jobb. Den tar tre argument:
- Modellnamnet
- Antalet noder som ska användas
- Antalet kärnor på varje nod som ska användas
Eftersom STAR-CCM+ kan fylla minnesbandbredden är det vanligtvis bättre att använda färre kärnor per beräkningsnoder och lägga till nya noder. Det exakta antalet kärnor per nod beror på processorfamiljen och anslutningshastigheten.
Noderna allokeras exklusivt för jobbet och kan inte delas med andra jobb. Jobbet startas inte direkt som ett MPI-jobb. Skriptet runstarccm.sh shell startar MPI-startprogrammet.
Indatamodellen och runstarccm.sh-skriptet lagras i den /hpcdata-resurs som tidigare monterades.
Loggfiler namnges med jobb-ID:t och lagras i /hpcdata-resursen tillsammans med STAR-CCM+-utdatafilerna.
Exempelskript för 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
Ersätt runner.java med önskad STAR-CCM+ Java-modellstartare och loggningskod.
Exempelskript för 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}
I vårt test använde vi en power-on-demand-licenstoken. För den token måste du ange miljövariabeln $CDLMD_LICENSE_FILE till 1999@flex.cd-adapco.com och nyckeln i alternativet -podkey på kommandoraden.
Efter en viss initiering extraherar skriptet – från miljövariablerna $CCP_NODES_CORES som HPC Pack ställer in – listan över noder för att skapa en värdfil som MPI-startprogrammet använder. Den här värdfilen innehåller listan över beräkningsnodnamn som används för jobbet, ett namn per rad.
Formatet för $CCP_NODES_CORES följer det här mönstret:
<Number of nodes> <Name of node1> <Cores of node1> <Name of node2> <Cores of node2>...`
Plats:
-
<Number of nodes>
är antalet noder som allokerats till det här jobbet. -
<Name of node_n_...>
är namnet på varje nod som allokerats till det här jobbet. -
<Cores of node_n_...>
är antalet kärnor på noden som allokerats till det här jobbet.
Antalet kärnor ($NBCORES) beräknas också baserat på antalet noder ($NBNODES) och antalet kärnor per nod (tillhandahålls som parameter $NBCORESPERNODE).
För MPI-alternativen är de som används med Intel MPI på Azure:
-
-mpi intel
för att ange Intel MPI. -
-fabric UDAPL
för att använda Azure InfiniBand-verb. -
-cpubind bandwidth,v
för att optimera bandbredden för MPI med 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"
för att få Intel MPI att fungera med Azure InfiniBand och ange det antal kärnor som krävs per nod. -
-batch
för att starta STAR-CCM+ i batchläge utan användargränssnitt.
Om du vill starta ett jobb kontrollerar du slutligen att noderna är igång och är online i Klusterhanteraren. Kör sedan följande från en PowerShell-kommandotolk:
.\ SubmitStarccmJob.ps1 <model> <nbNodes> <nbCoresPerNode>
Stoppa noder
När du är klar med dina tester senare kan du använda följande HPC Pack PowerShell-kommandon för att stoppa och starta noder:
Stop-HPCIaaSNode.ps1 -Name <prefix>-00*
Start-HPCIaaSNode.ps1 -Name <prefix>-00*
Nästa steg
Prova att köra andra Linux-arbetsbelastningar. Se till exempel: