Uruchamianie programu STAR-CCM+ z pakietem Microsoft HPC Pack w klastrze RDMA systemu Linux na platformie Azure
Ważne
Klasyczne maszyny wirtualne zostaną wycofane 1 marca 2023 r.
Jeśli używasz zasobów IaaS z usługi ASM, przeprowadź migrację do 1 marca 2023 r. Zachęcamy do wcześniej przełączenia w celu skorzystania z wielu ulepszeń funkcji w usłudze Azure Resource Manager.
Aby uzyskać więcej informacji, zobacz Migrowanie zasobów IaaS do usługi Azure Resource Manager do 1 marca 2023 r.
W tym artykule pokazano, jak wdrożyć klaster microsoft HPC Pack na platformie Azure i uruchomić zadanie CD-adapco STAR-CCM+ w wielu węzłach obliczeniowych systemu Linux połączonych z rozwiązaniem InfiniBand.
Uwaga
Platforma Azure ma dwa różne modele wdrażania związane z tworzeniem zasobów i pracą z nimi: Resource Manager i model klasyczny. W tym artykule przedstawiono oba modele, ale firma Microsoft zaleca przeprowadzanie większości nowych wdrożeń z zastosowaniem modelu wdrażania przy użyciu usługi Azure Resource Manager.
Pakiet Microsoft HPC Pack udostępnia funkcje umożliwiające uruchamianie różnych aplikacji HPC i równoległych na dużą skalę, w tym aplikacji MPI, w klastrach maszyn wirtualnych platformy Microsoft Azure. Pakiet HPC Pack obsługuje również uruchamianie aplikacji HPC systemu Linux na maszynach wirtualnych węzłów obliczeniowych z systemem Linux wdrożonych w klastrze HPC Pack. Aby zapoznać się z wprowadzeniem do używania węzłów obliczeniowych systemu Linux z pakietem HPC Pack, zobacz Wprowadzenie do węzłów obliczeniowych systemu Linux w klastrze HPC Pack na platformie Azure.
Konfigurowanie klastra HPC Pack
Pobierz skrypty wdrażania IaaS pakietu HPC Pack z Centrum pobierania i wyodrębnij je lokalnie.
Azure PowerShell jest warunkiem wstępnym. Jeśli program PowerShell nie jest skonfigurowany na komputerze lokalnym, przeczytaj artykuł Jak zainstalować i skonfigurować Azure PowerShell.
W momencie pisania tego artykułu obrazy systemu Linux z Azure Marketplace (które zawierają sterowniki InfiniBand dla platformy Azure) są przeznaczone dla systemów SLES 12, CentOS 6.5 i CentOS 7.1. Ten artykuł jest oparty na użyciu systemu SLES 12. Aby pobrać nazwę wszystkich obrazów systemu Linux, które obsługują obliczenia HPC w witrynie Marketplace, możesz uruchomić następujące polecenie programu PowerShell:
get-azurevmimage | ?{$_.ImageName.Contains("hpc") -and $_.OS -eq "Linux" }
Dane wyjściowe zawierają lokalizację, w której te obrazy są dostępne, oraz nazwę obrazu (ImageName) do użycia w szablonie wdrożenia później.
Przed wdrożeniem klastra należy utworzyć plik szablonu wdrożenia pakietu HPC Pack. Ponieważ jest przeznaczony dla małego klastra, węzeł główny będzie kontrolerem domeny i hostem lokalnej bazy danych SQL.
Poniższy szablon spowoduje wdrożenie takiego węzła głównego, utworzenie pliku XML o nazwie MyCluster.xmli zastąpienie wartości SubscriptionId, StorageAccount, Location, VMName i ServiceName twoimi wartościami.
<?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>
Uruchom tworzenie węzła głównego, uruchamiając polecenie programu PowerShell w wierszu polecenia z podwyższonym poziomem uprawnień:
.\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml
Po upływie od 20 do 30 minut węzeł główny powinien być gotowy. Możesz nawiązać z nim połączenie z Azure Portal, klikając ikonę Połącz maszyny wirtualnej.
W końcu może być konieczne naprawienie usługi przesyłania dalej DNS. W tym celu uruchom Menedżera DNS.
- Kliknij prawym przyciskiem myszy nazwę serwera w Menedżerze DNS, wybierz pozycję Właściwości, a następnie kliknij kartę Usługi przesyłania dalej .
- Kliknij przycisk Edytuj , aby usunąć wszelkie usługi przesyłania dalej, a następnie kliknij przycisk OK.
- Upewnij się, że pole wyboru Użyj wskazówek dotyczących katalogu głównego, jeśli nie ma dostępnych usług przesyłania dalej , a następnie kliknij przycisk OK.
Konfigurowanie węzłów obliczeniowych systemu Linux
Węzły obliczeniowe systemu Linux są wdrażane przy użyciu tego samego szablonu wdrożenia, który został użyty do utworzenia węzła głównego.
Skopiuj plik MyCluster.xml z komputera lokalnego do węzła głównego i zaktualizuj tag NodeCount przy użyciu liczby węzłów, które chcesz wdrożyć (<=20). Uważaj, aby mieć wystarczającą liczbę dostępnych rdzeni w ramach limitu przydziału platformy Azure, ponieważ każde wystąpienie usługi A9 będzie zużywać 16 rdzeni w ramach subskrypcji. Możesz użyć wystąpień A8 (8 rdzeni) zamiast A9, jeśli chcesz użyć większej liczby maszyn wirtualnych w tym samym budżecie.
Na węźle głównym skopiuj skrypty wdrażania IaaS pakietu HPC Pack.
Uruchom następujące polecenia Azure PowerShell w wierszu polecenia z podwyższonym poziomem uprawnień:
Uruchom polecenie Add-AzureAccount , aby nawiązać połączenie z subskrypcją platformy Azure.
Jeśli masz wiele subskrypcji, uruchom polecenie Get-AzureSubscription , aby je wyświetlić.
Ustaw domyślną subskrypcję, uruchamiając polecenie Select-AzureSubscription -SubscriptionName xxxx -Default .
Uruchom plik .\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml , aby rozpocząć wdrażanie węzłów obliczeniowych systemu Linux.
Otwórz narzędzie MENEDŻER klastra pakietu HPC Pack. Po kilku minutach węzły obliczeniowe systemu Linux będą regularnie wyświetlane na liście węzłów obliczeniowych klastra. W przypadku klasycznego trybu wdrażania maszyny wirtualne IaaS są tworzone sekwencyjnie. Dlatego jeśli liczba węzłów jest ważna, wdrożenie ich wszystkich może zająć dużo czasu.
Teraz, gdy wszystkie węzły są uruchomione w klastrze, należy wprowadzić dodatkowe ustawienia infrastruktury.
Konfigurowanie udziału plików platformy Azure dla węzłów systemu Windows i Linux
Za pomocą usługi Azure File można przechowywać skrypty, pakiety aplikacji i pliki danych. Usługa Azure File udostępnia funkcje CIFS w usłudze Azure Blob Storage jako magazyn trwały. Należy pamiętać, że nie jest to najbardziej skalowalne rozwiązanie, ale jest najprostsze i nie wymaga dedykowanych maszyn wirtualnych.
Utwórz udział plików platformy Azure, postępując zgodnie z instrukcjami w artykule Rozpoczynanie pracy z usługą Azure File Storage w systemie Windows.
Zachowaj nazwę konta magazynu jako nazwę saname, nazwę udziału plików jako nazwę udziału i klucz konta magazynu jako sakey.
Instalowanie udziału plików platformy Azure w węźle głównym
Otwórz wiersz polecenia z podwyższonym poziomem uprawnień i uruchom następujące polecenie, aby zapisać poświadczenia w magazynie maszyn lokalnych:
cmdkey /add:<saname>.file.core.windows.net /user:<saname> /pass:<sakey>
Następnie, aby zainstalować udział plików platformy Azure, uruchom polecenie:
net use Z: \\<saname>.file.core.windows.net\<sharename> /persistent:yes
Instalowanie udziału plików platformy Azure w węzłach obliczeniowych systemu Linux
Jednym z przydatnych narzędzi dostarczanych z pakietem HPC Pack jest narzędzie clusrun. To narzędzie wiersza polecenia umożliwia jednoczesne uruchamianie tego samego polecenia w zestawie węzłów obliczeniowych. W naszym przypadku jest on używany do instalowania udziału plików platformy Azure i utrwalania go w celu przetrwania ponownych uruchomień. W wierszu polecenia z podwyższonym poziomem uprawnień w węźle głównym uruchom następujące polecenia.
Aby utworzyć katalog instalacji:
clusrun /nodegroup:LinuxNodes mkdir -p /hpcdata
Aby zainstalować udział plików platformy 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
Aby utrwały udział instalacji:
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"
Instalowanie programu STAR-CCM+
Wystąpienia maszyn wirtualnych platformy Azure A8 i A9 zapewniają obsługę rozwiązania InfiniBand i funkcje RDMA. Sterowniki jądra, które umożliwiają te możliwości, są dostępne dla obrazów Windows Server 2012 R2, SUSE 12, CentOS 6.5 i CentOS 7.1 w Azure Marketplace. Microsoft MPI i Intel MPI (wersja 5.x) to dwie biblioteki MPI, które obsługują te sterowniki na platformie Azure.
PAKIET CD-adapco STAR-CCM+ w wersji 11.x lub nowszej jest dołączony do technologii Intel MPI w wersji 5.x, dlatego włączono obsługę infiniBand dla platformy Azure.
Pobierz pakiet Linux64 STAR-CCM+ z portalu CD-adapco. W naszym przypadku użyliśmy wersji 11.02.010 w mieszanej precyzji.
W węźle głównym w udziale plików platformy Azure /hpcdata utwórz skrypt powłoki o nazwie setupstarccm.sh z następującą zawartością. Ten skrypt zostanie uruchomiony w każdym węźle obliczeniowym, aby skonfigurować aplikację STAR-CCM+ lokalnie.
Przykładowy skrypt 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
Teraz, aby skonfigurować program STAR-CCM+ we wszystkich węzłach obliczeniowych systemu Linux, otwórz wiersz polecenia z podwyższonym poziomem uprawnień i uruchom następujące polecenie:
clusrun /nodegroup:LinuxNodes bash /hpcdata/setupstarccm.sh
Gdy polecenie jest uruchomione, można monitorować użycie procesora CPU przy użyciu mapy cieplnej Menedżera klastra. Po kilku minutach wszystkie węzły powinny być poprawnie skonfigurowane.
Uruchamianie zadań STAR-CCM+
Pakiet HPC Pack jest używany do obsługi funkcji harmonogramu zadań w celu uruchamiania zadań STAR-CCM+. W tym celu potrzebujemy obsługi kilku skryptów, które są używane do uruchamiania zadania i uruchamiania star-CCM+. Dane wejściowe są najpierw przechowywane w udziale plików platformy Azure dla uproszczenia.
Poniższy skrypt programu PowerShell służy do kolejkowania zadania STAR-CCM+. Ma ona trzy argumenty:
- Nazwa modelu
- Liczba węzłów do użycia
- Liczba rdzeni w każdym węźle do użycia
Ponieważ star-CCM+ może wypełnić przepustowość pamięci, zwykle lepiej użyć mniejszej liczby rdzeni na węzły obliczeniowe i dodać nowe węzły. Dokładna liczba rdzeni na węzeł będzie zależeć od rodziny procesorów i szybkości połączenia międzyoperacyjnego.
Węzły są przydzielane wyłącznie do zadania i nie mogą być współużytkowane z innymi zadaniami. Zadanie nie jest uruchamiane bezpośrednio jako zadanie MPI. Skrypt powłoki runstarccm.sh uruchomi uruchamianie interfejsu MPI.
Model wejściowy i skrypt runstarccm.sh są przechowywane w udziale /hpcdata , który został wcześniej zainstalowany.
Pliki dziennika są nazywane identyfikatorem zadania i są przechowywane w udziale /hpcdata wraz z plikami wyjściowymi STAR-CCM+.
Przykładowy skrypt 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
Zastąp ciąg runner.java preferowanym modułem uruchamiania modelu JAVA STAR-CCM+ i kodem rejestrowania.
Przykładowy skrypt 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}
W naszym teście użyliśmy tokenu licencji Power-On-Demand. Dla tego tokenu należy ustawić zmienną środowiskową 1999@flex.cd-adapco.com$CDLMD_LICENSE_FILE na i klucz w opcji -podkey wiersza polecenia.
Po zainicjowaniu skrypt wyodrębnia element — ze zmiennych środowiskowych $CCP_NODES_CORES ustawionych przez pakiet HPC Pack — listę węzłów w celu skompilowania pliku hosta używanego przez moduł uruchamiający MPI. Ten plik hosta będzie zawierać listę nazw węzłów obliczeniowych, które są używane dla zadania, jedna nazwa na wiersz.
Format $CCP_NODES_CORES jest następujący wzorzec:
<Number of nodes> <Name of node1> <Cores of node1> <Name of node2> <Cores of node2>...`
Gdzie:
-
<Number of nodes>
to liczba węzłów przydzielonych do tego zadania. -
<Name of node_n_...>
to nazwa każdego węzła przydzielonego do tego zadania. -
<Cores of node_n_...>
to liczba rdzeni w węźle przydzielonym do tego zadania.
Liczba rdzeni ($NBCORES) jest również obliczana na podstawie liczby węzłów ($NBNODES) i liczby rdzeni na węzeł (podanych jako $NBCORESPERNODE parametrów).
W przypadku opcji MPI te, które są używane z funkcją Intel MPI na platformie Azure, to:
-
-mpi intel
w celu określenia interfejsu MPI firmy Intel. -
-fabric UDAPL
aby używać czasowników Azure InfiniBand. -
-cpubind bandwidth,v
aby zoptymalizować przepustowość dla interfejsu MPI za pomocą programu 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 technologia Intel MPI współdziałała z usługą Azure InfiniBand i ustawiała wymaganą liczbę rdzeni na węzeł. -
-batch
aby uruchomić star-CCM+ w trybie wsadowym bez interfejsu użytkownika.
Na koniec, aby uruchomić zadanie, upewnij się, że węzły są uruchomione i są w trybie online w Menedżerze klastra. Następnie w wierszu polecenia programu PowerShell uruchom następujące polecenie:
.\ SubmitStarccmJob.ps1 <model> <nbNodes> <nbCoresPerNode>
Zatrzymywanie węzłów
Później, po zakończeniu testów, możesz użyć następujących poleceń programu PowerShell pakietu HPC Pack, aby zatrzymać i uruchomić węzły:
Stop-HPCIaaSNode.ps1 -Name <prefix>-00*
Start-HPCIaaSNode.ps1 -Name <prefix>-00*
Następne kroki
Spróbuj uruchomić inne obciążenia systemu Linux. Na przykład zobacz: