Spuštění star-CCM+ s Microsoft HPC Packem v clusteru RDMA s Linuxem v Azure
Důležité
Klasické virtuální počítače budou vyřazeny 1. března 2023.
Pokud používáte prostředky IaaS z ASM, dokončete migraci do 1. března 2023. Doporučujeme, abyste přechod zpřesnit dříve, abyste využili řadu vylepšení funkcí v Azure Resource Manager.
Další informace najdete v tématu Migrace prostředků IaaS do Azure Resource Manager do 1. března 2023.
V tomto článku se dozvíte, jak nasadit cluster Microsoft HPC Pack v Azure a spustit úlohu CD-adapco STAR-CCM+ na několika výpočetních uzlech Linuxu, které jsou vzájemně propojené s InfiniBand.
Poznámka
Azure má dva různé modely nasazení pro vytváření a práci s prostředky: Resource Manager a classic. Tento článek popisuje použití obou modelů, ale Microsoft doporučuje, aby většina nových nasazení používala model Resource Manager.
Microsoft HPC Pack poskytuje funkce pro spouštění nejrůznějších rozsáhlých aplikací HPC a paralelních aplikací, včetně aplikací MPI, na clusterech virtuálních počítačů Microsoft Azure. Sada HPC Pack také podporuje spouštění linuxových aplikací HPC na virtuálních počítačích s výpočetními uzly Linuxu, které jsou nasazené v clusteru HPC Pack. Úvod k používání výpočetních uzlů s Linuxem se sadou HPC Pack najdete v tématu Začínáme s výpočetními uzly s Linuxem v clusteru HPC Pack v Azure.
Nastavení clusteru HPC Pack
Stáhněte si skripty nasazení sady HPC Pack IaaS z webu Download Center a extrahujte je místně.
Azure PowerShell je předpokladem. Pokud powershell není na místním počítači nakonfigurovaný, přečtěte si článek Postup instalace a konfigurace Azure PowerShell.
V době psaní tohoto textu jsou image Linuxu z Azure Marketplace (které obsahují ovladače InfiniBand pro Azure) pro SLES 12, CentOS 6.5 a CentOS 7.1. Tento článek vychází z použití SLES 12. Pokud chcete načíst název všech imagí Linuxu, které podporují prostředí HPC na Marketplace, můžete spustit následující příkaz PowerShellu:
get-azurevmimage | ?{$_.ImageName.Contains("hpc") -and $_.OS -eq "Linux" }
Výstup uvádí umístění, ve kterém jsou tyto image k dispozici, a název image (ImageName), které se mají použít v šabloně nasazení později.
Před nasazením clusteru musíte vytvořit soubor šablony nasazení sady HPC Pack. Protože cílíme na malý cluster, hlavní uzel bude řadič domény a hostuje místní databázi SQL.
Následující šablona nasadí takový hlavní uzel, vytvoří soubor XML s názvem MyCluster.xmla nahradí hodnoty SubscriptionId, StorageAccount, Location, VMName a ServiceName vašimi.
<?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>
Spuštěním příkazu PowerShellu na příkazovém řádku se zvýšenými oprávněními spusťte vytvoření hlavního uzlu:
.\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml
Po 20 až 30 minutách by měl být hlavní uzel připravený. K němu se můžete připojit z Azure Portal kliknutím na ikonu Připojit virtuálního počítače.
Možná budete muset vyřešit službu předávání DNS. Provedete to tak, že spustíte Správce DNS.
- Klikněte pravým tlačítkem myši na název serveru ve Správci DNS, vyberte Vlastnosti a potom klikněte na kartu Služby předávání .
- Kliknutím na tlačítko Upravit odeberete všechny přeposílající a potom klepněte na tlačítko OK.
- Ujistěte se, že je zaškrtnuté políčko Použít kořenové nápovědy, pokud nejsou k dispozici žádné servery pro předávání , a klepněte na tlačítko OK.
Nastavení výpočetních uzlů s Linuxem
Výpočetní uzly s Linuxem nasadíte pomocí stejné šablony nasazení, kterou jste použili k vytvoření hlavního uzlu.
Zkopírujte soubor MyCluster.xml z místního počítače do hlavního uzlu a aktualizujte značku NodeCount počtem uzlů, které chcete nasadit (<=20). Dávejte pozor, abyste měli v kvótě Azure dostatek dostupných jader, protože každá instance A9 bude využívat 16 jader ve vašem předplatném. Pokud chcete použít více virtuálních počítačů ve stejném rozpočtu, můžete místo A9 použít instance A8 (8 jader).
Na hlavním uzlu zkopírujte skripty nasazení IaaS sady HPC Pack.
Na příkazovém řádku se zvýšenými oprávněními spusťte následující příkazy Azure PowerShell:
Spuštěním příkazu Add-AzureAccount se připojte k předplatnému Azure.
Pokud máte více předplatných, spusťte Příkaz Get-AzureSubscription a vypíšete je.
Nastavte výchozí předplatné spuštěním příkazu Select-AzureSubscription -SubscriptionName xxxx -Default .
Spuštěním příkazu .\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml spusťte nasazení výpočetních uzlů s Linuxem.
Otevřete nástroj Správce clusteru hpC Pack. Po několika minutách se výpočetní uzly Linuxu budou pravidelně zobrazovat v seznamu výpočetních uzlů clusteru. V klasickém režimu nasazení se virtuální počítače IaaS vytvářejí postupně. Pokud je tedy počet uzlů důležitý, může jejich nasazení trvat značné množství času.
Teď, když jsou všechny uzly v clusteru spuštěné, je potřeba vytvořit další nastavení infrastruktury.
Nastavení sdílené složky Azure pro uzly s Windows a Linuxem
Službu Azure File můžete použít k ukládání skriptů, balíčků aplikací a datových souborů. Azure File poskytuje funkce CIFS nad úložištěm objektů blob v Azure jako trvalé úložiště. Mějte na paměti, že toto není nejs škálovatelné řešení, ale je to nejjednodušší řešení, které nevyžaduje vyhrazené virtuální počítače.
Podle pokynů v článku Začínáme se službou Azure File Storage ve Windows vytvořte sdílenou složku Azure.
Název účtu úložiště si ponechte jako saname, název sdílené složky jako název sdílené složky a klíč účtu úložiště.
Připojení sdílené složky Azure na hlavním uzlu
Otevřete příkazový řádek se zvýšenými oprávněními a spuštěním následujícího příkazu uložte přihlašovací údaje do místního trezoru počítače:
cmdkey /add:<saname>.file.core.windows.net /user:<saname> /pass:<sakey>
Potom spusťte připojení sdílené složky Azure:
net use Z: \\<saname>.file.core.windows.net\<sharename> /persistent:yes
Připojení sdílené složky Azure na výpočetních uzlech Linuxu
Jedním z užitečných nástrojů, který je součástí sady HPC Pack, je nástroj pro spuštění clusteru. Pomocí tohoto nástroje příkazového řádku můžete spustit stejný příkaz současně na sadě výpočetních uzlů. V našem případě se používá k připojení sdílené složky Azure a jeho zachování pro zachování restartování. V příkazovém řádku se zvýšenými oprávněními na hlavním uzlu spusťte následující příkazy.
Vytvoření adresáře připojení:
clusrun /nodegroup:LinuxNodes mkdir -p /hpcdata
Připojení sdílené složky Azure:
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
Zachování sdílené složky připojení:
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"
Instalace STAR-CCM+
Instance virtuálních počítačů Azure A8 a A9 poskytují podporu InfiniBand a možnosti RDMA. Ovladače jádra, které umožňují tyto funkce, jsou k dispozici pro image Windows Server 2012 R2, SUSE 12, CentOS 6.5 a CentOS 7.1 v Azure Marketplace. Microsoft MPI a Intel MPI (verze 5.x) jsou dvě knihovny MPI, které podporují tyto ovladače v Azure.
Cd-adapco STAR-CCM+ verze 11.x a novější je součástí intel MPI verze 5.x, takže je součástí podpory InfiniBand pro Azure.
Získejte balíček STAR-CCM+ pro Linux64 z portálu CD-adapco. V našem případě jsme ve smíšené přesnosti použili verzi 11.02.010.
Na hlavním uzlu ve sdílené složce Azure /hpcdata vytvořte skript prostředí s názvem setupstarccm.sh s následujícím obsahem. Tento skript se spustí na každém výpočetním uzlu pro místní nastavení STAR-CCM+ .
Ukázkový skript 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
Teď, pokud chcete nastavit STAR-CCM+ na všech výpočetních uzlech Linuxu, otevřete příkazový řádek se zvýšenými oprávněními a spusťte následující příkaz:
clusrun /nodegroup:LinuxNodes bash /hpcdata/setupstarccm.sh
Během spuštění příkazu můžete monitorovat využití procesoru pomocí heat mapy Správce clusteru. Po několika minutách by měly být všechny uzly správně nastavené.
Spouštění úloh STAR-CCM+
Sada HPC Pack se používá pro své funkce plánovače úloh, aby bylo možné spouštět úlohy STAR-CCM+. K tomu potřebujeme podporu několika skriptů, které se používají ke spuštění úlohy a spuštění STAR-CCM+. Vstupní data se nejprve uchovávají ve sdílené složce Azure, aby byla jednoduchost.
Následující skript PowerShellu slouží k zařaování úlohy STAR-CCM+ do fronty. Funkce má tři argumenty:
- Název modelu
- Počet uzlů, které se mají použít
- Počet jader na každém uzlu, který se má použít
Protože STAR-CCM+ může vyplnit šířku pásma paměti, je obvykle lepší použít méně jader na výpočetní uzly a přidat nové uzly. Přesný počet jader na uzel bude záviset na řadě procesorů a rychlosti propojení.
Uzly jsou přiděleny výhradně pro úlohu a nelze je sdílet s jinými úlohami. Úloha není spuštěna přímo jako úloha MPI. Skript prostředí runstarccm.sh spustí spouštěč MPI.
Vstupní model a skript runstarccm.sh jsou uloženy ve sdílené složce /hpcdata , která byla dříve připojena.
Soubory protokolu jsou pojmenované s ID úlohy a jsou uloženy ve sdílené složce /hpcdata spolu s výstupními soubory STAR-CCM+.
Ukázkový skript 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
Nahraďte runner.java upřednostňovaným spouštěčem modelů STAR-CCM+ Java a kódem protokolování.
Ukázkový skript 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}
V našem testu jsme použili token licence Power-On-Demand. Pro tento token musíte nastavit proměnnou prostředí $CDLMD_LICENSE_FILE a 1999@flex.cd-adapco.com klíč v možnosti -podkey příkazového řádku.
Po určité inicializaci skript extrahuje z proměnných prostředí $CCP_NODES_CORES , které sada sady HPC Pack– seznam uzlů pro sestavení souboru hostitele, který používá spouštěč MPI. Tento soubor hostitele bude obsahovat seznam názvů výpočetních uzlů, které se používají pro úlohu, jeden název na řádek.
Formát $CCP_NODES_CORES se řídí tímto vzorem:
<Number of nodes> <Name of node1> <Cores of node1> <Name of node2> <Cores of node2>...`
Kde:
-
<Number of nodes>
je počet uzlů přidělených této úloze. -
<Name of node_n_...>
je název každého uzlu přiděleného této úloze. -
<Cores of node_n_...>
je počet jader v uzlu přiděleném této úloze.
Počet jader ($NBCORES) se také vypočítá na základě počtu uzlů ($NBNODES) a počtu jader na uzel (zadaných jako parametr $NBCORESPERNODE).
U možností MPI jsou ty, které se používají s Intel MPI v Azure:
-
-mpi intel
k určení technologie Intel MPI. -
-fabric UDAPL
použít příkazy Azure InfiniBand. -
-cpubind bandwidth,v
pro optimalizaci šířky pásma pro MPI pomocí 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"
aby intel MPI fungoval s Azure InfiniBand a nastavil požadovaný počet jader na uzel. -
-batch
a spusťte STAR-CCM+ v dávkovém režimu bez uživatelského rozhraní.
Nakonec, pokud chcete spustit úlohu, ujistěte se, že jsou uzly spuštěné a jsou online ve Správci clusteru. Pak z příkazového řádku PowerShellu spusťte tento příkaz:
.\ SubmitStarccmJob.ps1 <model> <nbNodes> <nbCoresPerNode>
Zastavení uzlů
Později po dokončení testů můžete pomocí následujících příkazů PowerShellu sady HPC Pack zastavit a spustit uzly:
Stop-HPCIaaSNode.ps1 -Name <prefix>-00*
Start-HPCIaaSNode.ps1 -Name <prefix>-00*
Další kroky
Zkuste spustit jiné linuxové úlohy. Příklad: