Uruchamianie programu OpenFoam 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, wykonaj migrację do 1 marca 2023 r. Zachęcamy do przejścia wcześniej, aby skorzystać 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 przedstawiono jeden ze sposobów uruchamiania programu OpenFoam na maszynach wirtualnych platformy Azure. W tym miejscu wdrożysz klaster pakietu Microsoft HPC Pack z węzłami obliczeniowymi systemu Linux na platformie Azure i uruchomisz zadanie OpenFoam za pomocą interfejsu MPI firmy Intel. Maszyny wirtualne platformy Azure obsługujące funkcję RDMA można używać dla węzłów obliczeniowych, aby węzły obliczeniowe komunikowały się za pośrednictwem sieci usługi Azure RDMA. Inne opcje uruchamiania platformy OpenFoam na platformie Azure obejmują w pełni skonfigurowane obrazy komercyjne dostępne w witrynie Marketplace, takie jak OpenFoam Firmy UberCloud 2.3 w systemie CentOS 6 i uruchomione na Azure Batch.
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.
OpenFOAM (w przypadku operacji open field i manipulowania) to pakiet oprogramowania typu open source obliczeniowych dynamiki płynów (CFD), który jest powszechnie używany w inżynierii i nauce, zarówno w organizacjach komercyjnych, jak i akademickich. Obejmuje ona narzędzia do tworzenia siatki, w szczególności snappyHexMesh, równoległego meshera do złożonych geometrii CAD oraz do przetwarzania wstępnego i końcowego. Prawie wszystkie procesy działają równolegle, umożliwiając użytkownikom pełne wykorzystanie sprzętu komputerowego.
Pakiet Microsoft HPC Pack udostępnia funkcje umożliwiające uruchamianie 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 systemu Linux wdrożonych w klastrze HPC Pack. Zobacz Wprowadzenie do węzłów obliczeniowych z systemem Linux w klastrze HPC Pack na platformie Azure , aby zapoznać się z wprowadzeniem do używania węzłów obliczeniowych systemu Linux z pakietem HPC Pack.
Uwaga
W tym artykule pokazano, jak uruchomić obciążenie MPI systemu Linux za pomocą pakietu HPC Pack. Przyjęto założenie, że masz pewną znajomość administracji systemu Linux i uruchamiania obciążeń MPI w klastrach systemu Linux. Jeśli używasz wersji mpI i OpenFOAM różnić się od tych przedstawionych w tym artykule, może być konieczne zmodyfikowanie niektórych kroków instalacji i konfiguracji.
Wymagania wstępne
Klaster HPC Pack z węzłami obliczeniowymi systemu Linux obsługującymi funkcję RDMA — wdrażanie klastra pakietu HPC Pack o rozmiarze A8, A9, H16r lub H16rm z węzłami obliczeniowymi systemu Linux przy użyciu szablonu usługi Azure Resource Manager lub skryptu Azure PowerShell. Zobacz Wprowadzenie do węzłów obliczeniowych systemu Linux w klastrze HPC Pack na platformie Azure , aby zapoznać się z wymaganiami wstępnymi i krokami dla każdej z tych opcji. Jeśli wybierzesz opcję wdrażania skryptu programu PowerShell, zobacz przykładowy plik konfiguracji w przykładowych plikach na końcu tego artykułu. Ta konfiguracja służy do wdrażania klastra HPC Pack opartego na platformie Azure składającego się z rozmiaru A8 Windows Server 2012 węzła głównego R2 i 2 rozmiaru węzłów obliczeniowych SUSE Linux Enterprise Server 12. Zastąp odpowiednie wartości dla nazw subskrypcji i usług.
Dodatkowe rzeczy do poznania
- Aby uzyskać wymagania wstępne dotyczące sieci RDMA systemu Linux na platformie Azure, zobacz Rozmiary maszyn wirtualnych obliczeniowych o wysokiej wydajności.
- Jeśli używasz opcji wdrażania skryptu programu PowerShell, wdróż wszystkie węzły obliczeniowe systemu Linux w ramach jednej usługi w chmurze, aby używać połączenia sieciowego RDMA.
- Po wdrożeniu węzłów systemu Linux połącz się za pomocą protokołu SSH, aby wykonać dodatkowe zadania administracyjne. Znajdź szczegóły połączenia SSH dla każdej maszyny wirtualnej z systemem Linux w Azure Portal.
Intel MPI — aby uruchomić program OpenFOAM w węzłach obliczeniowych HPC SLES 12 HPC na platformie Azure, należy zainstalować środowisko uruchomieniowe biblioteki Intel MPI Library 5 z witryny Intel.com. (Intel MPI 5 jest wstępnie instalowany na obrazach HPC opartych na systemie CentOS). W późniejszym kroku zainstaluj program Intel MPI w węzłach obliczeniowych systemu Linux. Aby przygotować się do tego kroku, po zarejestrowaniu się w środowisku Intel postępuj zgodnie z linkiem w wiadomości e-mail z potwierdzeniem do powiązanej strony internetowej. Następnie skopiuj link pobierania pliku tgz dla odpowiedniej wersji intel MPI. Ten artykuł jest oparty na technologii Intel MPI w wersji 5.0.3.048.
Pakiet źródłowy OpenFOAM — pobierz oprogramowanie OpenFOAM Source Pack dla systemu Linux z witryny OpenFOAM Foundation. Ten artykuł jest oparty na pakiecie źródłowym w wersji 2.3.1 dostępnej do pobrania jako OpenFOAM-2.3.1.tgz. Postępuj zgodnie z instrukcjami w dalszej części tego artykułu, aby rozpakować i skompilować oprogramowanie OpenFOAM w węzłach obliczeniowych systemu Linux.
EnSight (opcjonalnie) — aby wyświetlić wyniki symulacji openFOAM, pobierz i zainstaluj program wizualizacji i analizy usługi EnSight . Informacje o licencjonowaniu i pobieraniu znajdują się w witrynie usługi EnSight.
Konfigurowanie wzajemnego zaufania między węzłami obliczeniowymi
Uruchomienie zadania między węzłami w wielu węzłach systemu Linux wymaga, aby węzły ufały sobie nawzajem ( rsh lub ssh). Podczas tworzenia klastra PAKIETU HPC Pack za pomocą skryptu wdrażania IaaS pakietu Microsoft HPC Pack skrypt automatycznie konfiguruje stałe wzajemne zaufanie dla określonego konta administratora. W przypadku użytkowników niebędących administratorami utworzonymi w domenie klastra należy skonfigurować tymczasowe wzajemne zaufanie między węzłami po ich przydzieleniu zadania i zniszczyć relację po zakończeniu zadania. Aby ustanowić zaufanie dla każdego użytkownika, podaj parę kluczy RSA w klastrze używanym przez pakiet HPC Pack dla relacji zaufania.
Generowanie pary kluczy RSA
Można łatwo wygenerować parę kluczy RSA, która zawiera klucz publiczny i klucz prywatny, uruchamiając polecenie ssh-keygen systemu Linux.
Zaloguj się na komputerze z systemem Linux.
Uruchom następujące polecenie:
ssh-keygen -t rsa
Uwaga
Naciśnij klawisz Enter , aby użyć ustawień domyślnych do momentu ukończenia polecenia. Nie wprowadzaj hasła tutaj; po wyświetleniu monitu o podanie hasła naciśnij klawisz Enter.
Zmień katalog na katalog ~/.ssh. Klucz prywatny jest przechowywany w id_rsa i klucz publiczny w usłudze id_rsa.pub.
Dodawanie pary kluczy do klastra HPC Pack
Utwórz połączenie pulpitu zdalnego z węzłem głównym przy użyciu konta administratora pakietu HPC Pack (konto administratora skonfigurowane podczas uruchamiania skryptu wdrażania).
Użyj standardowych procedur systemu Windows Server, aby utworzyć konto użytkownika domeny w domenie usługi Active Directory klastra. Na przykład użyj narzędzia Użytkownicy i komputery usługi Active Directory w węźle głównym. W przykładach w tym artykule założono, że utworzysz użytkownika domeny o nazwie hpclab\hpcuser.
Utwórz plik o nazwie C:\cred.xml i skopiuj do niego dane klucza RSA. Przykładowy plik cred.xml znajduje się na końcu tego artykułu.
<ExtendedData> <PrivateKey>Copy the contents of private key here</PrivateKey> <PublicKey>Copy the contents of public key here</PublicKey> </ExtendedData>
Otwórz wiersz polecenia i wprowadź następujące polecenie, aby ustawić dane poświadczeń dla konta hpclab\hpcuser. Parametr extendeddata służy do przekazywania nazwy pliku C:\cred.xml utworzonego dla danych klucza.
hpccred setcreds /extendeddata:c:\cred.xml /user:hpclab\hpcuser /password:<UserPassword>
To polecenie kończy się pomyślnie bez danych wyjściowych. Po ustawieniu poświadczeń dla kont użytkowników należy uruchomić zadania, zapisz plik cred.xml w bezpiecznej lokalizacji lub usuń go.
Jeśli para kluczy RSA została wygenerowana na jednym z węzłów systemu Linux, pamiętaj o usunięciu kluczy po zakończeniu ich używania. Jeśli pakiet HPC Pack znajdzie istniejący plik id_rsa lub plik id_rsa.pub, nie konfiguruje wzajemnego zaufania.
Ważne
Nie zalecamy uruchamiania zadania systemu Linux jako administratora klastra w klastrze udostępnionym, ponieważ zadanie przesłane przez administratora jest uruchamiane na koncie głównym w węzłach systemu Linux. Jednak zadanie przesłane przez użytkownika innego niż administrator jest uruchamiane na lokalnym koncie użytkownika systemu Linux o takiej samej nazwie jak użytkownik zadania. W takim przypadku pakiet HPC Pack konfiguruje wzajemne zaufanie dla tego użytkownika systemu Linux w węzłach przydzielonych do zadania. Użytkownik systemu Linux można skonfigurować ręcznie w węzłach systemu Linux przed uruchomieniem zadania lub pakiet HPC Pack tworzy użytkownika automatycznie po przesłaniu zadania. Jeśli pakiet HPC Pack tworzy użytkownika, pakiet HPC Pack usuwa go po zakończeniu zadania. Aby zmniejszyć zagrożenia bezpieczeństwa, pakiet HPC Pack usuwa klucze po zakończeniu zadania.
Konfigurowanie udziału plików dla węzłów systemu Linux
Teraz skonfiguruj standardowy udział SMB w folderze w węźle głównym. Aby umożliwić węzłom systemu Linux dostęp do plików aplikacji przy użyciu wspólnej ścieżki, zainstaluj folder udostępniony w węzłach systemu Linux. Jeśli chcesz, możesz użyć innej opcji udostępniania plików, takiej jak udział Azure Files — zalecany dla wielu scenariuszy — lub udziału NFS. Zobacz informacje o udostępnianiu plików i szczegółowe kroki opisane w temacie Wprowadzenie do węzłów obliczeniowych z systemem Linux w klastrze pakietu HPC Pack na platformie Azure.
Utwórz folder w węźle głównym i udostępnij go wszystkim, ustawiając uprawnienia do odczytu/zapisu. Na przykład udostępnij C:\OpenFOAM w węźle głównym jako \\SUSE12RDMA-HN\OpenFOAM. W tym miejscu SUSE12RDMA-HN jest nazwą hosta węzła głównego.
Otwórz okno Windows PowerShell i uruchom następujące polecenia:
clusrun /nodegroup:LinuxNodes mkdir -p /openfoam clusrun /nodegroup:LinuxNodes mount -t cifs //SUSE12RDMA-HN/OpenFOAM /openfoam -o vers=2.1`,username=<username>`,password='<password>'`,dir_mode=0777`,file_mode=0777
Pierwsze polecenie tworzy folder o nazwie /openfoam we wszystkich węzłach w grupie LinuxNodes. Drugie polecenie instaluje folder udostępniony //SUSE12RDMA-HN/OpenFOAM w węzłach systemu Linux z dir_mode i file_mode bitami ustawionymi na 777. Nazwa użytkownika i hasło w poleceniu powinny być poświadczeniami użytkownika w węźle głównym.
Uwaga
Symbol "'" w drugim poleceniu jest symbolem ucieczki dla programu PowerShell. "'," oznacza "", (znak przecinka) jest częścią polecenia.
Instalowanie interfejsu MPI i programu OpenFOAM
Aby uruchomić narzędzie OpenFOAM jako zadanie MPI w sieci RDMA, należy skompilować aplikację OpenFOAM z bibliotekami Intel MPI.
Najpierw uruchom kilka poleceń clusrun , aby zainstalować biblioteki MPI Intel (jeśli jeszcze nie zostały zainstalowane) i OpenFOAM w węzłach systemu Linux. Użyj udziału węzła głównego skonfigurowanego wcześniej, aby udostępnić pliki instalacyjne między węzłami systemu Linux.
Ważne
Te kroki instalacji i kompilowania są przykładami. Potrzebujesz wiedzy na temat administrowania systemem Linux, aby upewnić się, że zależne kompilatory i biblioteki są poprawnie zainstalowane. Może być konieczne zmodyfikowanie niektórych zmiennych środowiskowych lub innych ustawień dla wersji technologii Intel MPI i OpenFOAM. Aby uzyskać szczegółowe informacje, zobacz Intel MPI Library for Linux Installation Guide and OpenFOAM Source Pack Installation for your environment ( Przewodnik instalacji biblioteki Intel MPI dla systemu Linux ) i OpenFOAM Source Pack Installation for your environment (Instalacja pakietu źródłowego OpenFOAM dla danego środowiska).
Instalowanie programu Intel MPI
Zapisz pobrany pakiet instalacyjny dla środowiska Intel MPI (l_mpi_p_5.0.3.048.tgz w tym przykładzie) w folderze C:\OpenFoam w węźle głównym, aby węzły systemu Linux mogły uzyskać dostęp do tego pliku z /openfoam. Następnie uruchom polecenie clusrun , aby zainstalować bibliotekę Intel MPI na wszystkich węzłach systemu Linux.
Następujące polecenia kopiują pakiet instalacyjny i wyodrębniają go do /opt/intel w każdym węźle.
clusrun /nodegroup:LinuxNodes mkdir -p /opt/intel clusrun /nodegroup:LinuxNodes cp /openfoam/l_mpi_p_5.0.3.048.tgz /opt/intel/ clusrun /nodegroup:LinuxNodes tar -xzf /opt/intel/l_mpi_p_5.0.3.048.tgz -C /opt/intel/
Aby zainstalować bibliotekę Intel MPI w trybie dyskretnym, użyj pliku silent.cfg. Przykład można znaleźć w przykładowych plikach na końcu tego artykułu. Umieść ten plik w folderze udostępnionym /openfoam. Aby uzyskać szczegółowe informacje o pliku silent.cfg, zobacz Intel MPI Library for Linux Installation Guide - Silent Installation Guide (Biblioteka MPI intel dla systemu Linux — instalacja dyskretna).
Porada
Upewnij się, że zapiszesz plik silent.cfg jako plik tekstowy z zakończeniami wierszy systemu Linux (tylko LF, a nie CR LF). Ten krok gwarantuje, że działa prawidłowo w węzłach systemu Linux.
Zainstaluj bibliotekę Intel MPI w trybie dyskretnym.
clusrun /nodegroup:LinuxNodes bash /opt/intel/l_mpi_p_5.0.3.048/install.sh --silent /openfoam/silent.cfg
Konfigurowanie interfejsu MPI
Do testowania należy dodać następujące wiersze do pliku /etc/security/limits.conf w każdym z węzłów systemu Linux:
clusrun /nodegroup:LinuxNodes echo "* hard memlock unlimited" `>`> /etc/security/limits.conf
clusrun /nodegroup:LinuxNodes echo "* soft memlock unlimited" `>`> /etc/security/limits.conf
Uruchom ponownie węzły systemu Linux po zaktualizowaniu pliku limits.conf. Na przykład użyj następującego polecenia clusrun :
clusrun /nodegroup:LinuxNodes systemctl reboot
Po ponownym uruchomieniu upewnij się, że folder udostępniony jest zainstalowany jako /openfoam.
Kompilowanie i instalowanie oprogramowania OpenFOAM
Zapisz pobrany pakiet instalacyjny pakietu źródłowego OpenFOAM (OpenFOAM-2.3.1.tgz w tym przykładzie) do folderu C:\OpenFoam w węźle głównym, aby węzły systemu Linux mogły uzyskać dostęp do tego pliku z /openfoam. Następnie uruchom polecenia clusrun , aby skompilować protokół OpenFOAM we wszystkich węzłach systemu Linux.
Utwórz folder /opt/OpenFOAM w każdym węźle systemu Linux, skopiuj pakiet źródłowy do tego folderu i wyodrębnij go tam.
clusrun /nodegroup:LinuxNodes mkdir -p /opt/OpenFOAM clusrun /nodegroup:LinuxNodes cp /openfoam/OpenFOAM-2.3.1.tgz /opt/OpenFOAM/ clusrun /nodegroup:LinuxNodes tar -xzf /opt/OpenFOAM/OpenFOAM-2.3.1.tgz -C /opt/OpenFOAM/
Aby skompilować bibliotekę OpenFOAM z biblioteką Intel MPI, najpierw skonfiguruj kilka zmiennych środowiskowych zarówno dla technologii Intel MPI, jak i OpenFOAM. Użyj skryptu powłoki bash o nazwie settings.sh, aby ustawić zmienne. Przykład można znaleźć w przykładowych plikach na końcu tego artykułu. Umieść ten plik (zapisany z zakończeniami wierszy systemu Linux) w folderze udostępnionym /openfoam. Ten plik zawiera również ustawienia dla środowisk uruchomieniowych MPI i OpenFOAM używanych później do uruchamiania zadania OpenFOAM.
Instalowanie pakietów zależnych wymaganych do skompilowania programu OpenFOAM. W zależności od dystrybucji systemu Linux może być konieczne dodanie repozytorium. Uruchom polecenia clusrun podobne do następujących:
clusrun /nodegroup:LinuxNodes zypper ar http://download.opensuse.org/distribution/13.2/repo/oss/suse/ opensuse clusrun /nodegroup:LinuxNodes zypper -n --gpg-auto-import-keys install --repo opensuse --force-resolution -t pattern devel_C_C++
W razie potrzeby połączenie SSH z każdym węzłem systemu Linux w celu uruchomienia poleceń w celu potwierdzenia, że działają prawidłowo.
Uruchom następujące polecenie, aby skompilować aplikację OpenFOAM. Proces kompilacji zajmuje trochę czasu i generuje dużą ilość informacji dziennika do standardowych danych wyjściowych, dlatego użyj opcji /przeplatane , aby wyświetlić przeplatane dane wyjściowe.
clusrun /nodegroup:LinuxNodes /interleaved source /openfoam/settings.sh `&`& /opt/OpenFOAM/OpenFOAM-2.3.1/Allwmake
Uwaga
Symbol "'" w poleceniu jest symbolem ucieczki dla programu PowerShell. "'&" oznacza, że element "&" jest częścią polecenia .
Przygotowanie do uruchomienia zadania OpenFOAM
Teraz przygotuj się do uruchomienia zadania MPI o nazwie sloshingTank3D, który jest jednym z przykładów OpenFoam, w dwóch węzłach systemu Linux.
Konfigurowanie środowiska uruchomieniowego
Aby skonfigurować środowiska uruchomieniowe dla interfejsów MPI i OpenFOAM w węzłach systemu Linux, uruchom następujące polecenie w oknie Windows PowerShell w węźle głównym. (To polecenie jest prawidłowe tylko dla systemu SUSE Linux).
clusrun /nodegroup:LinuxNodes cp /openfoam/settings.sh /etc/profile.d/
Przygotowywanie przykładowych danych
Użyj wcześniej skonfigurowanego udziału węzła głównego do udostępniania plików między węzłami systemu Linux (zainstalowany jako /openfoam).
Połączenie SSH z jednym z węzłów obliczeniowych systemu Linux.
Uruchom następujące polecenie, aby skonfigurować środowisko uruchomieniowe OpenFOAM, jeśli jeszcze tego nie zrobiono.
$ source /openfoam/settings.sh
Skopiuj przykład sloshingTank3D do folderu udostępnionego i przejdź do niego.
$ cp -r $FOAM_TUTORIALS/multiphase/interDyMFoam/ras/sloshingTank3D /openfoam/ $ cd /openfoam/sloshingTank3D
Jeśli używasz domyślnych parametrów tego przykładu, uruchomienie niektórych parametrów może potrwać kilkadziesiąt minut, więc może być konieczne zmodyfikowanie niektórych parametrów, aby działało szybciej. Jednym z prostych wyborów jest zmodyfikowanie zmiennych kroku czasu deltaT i writeInterval w pliku system/controlDict. Ten plik przechowuje wszystkie dane wejściowe dotyczące kontroli czasu i odczytywania i zapisywania danych rozwiązania. Można na przykład zmienić wartość deltaT z 0,05 na 0,5 i wartość writeInterval z 0,05 do 0,5.
Określ żądane wartości zmiennych w pliku system/decomposeParDict. W tym przykładzie użyto dwóch węzłów systemu Linux z 8 rdzeniami, więc ustaw parametr numberOfSubdomains na 16 i n hierarchiiCoeffs na (1 1 16), co oznacza uruchamianie openFOAM równolegle z 16 procesami. Aby uzyskać więcej informacji, zobacz Przewodnik użytkownika openFOAM: 3.4 Uruchamianie aplikacji równolegle.
Uruchom następujące polecenia z katalogu sloshingTank3D, aby przygotować przykładowe dane.
$ . $WM_PROJECT_DIR/bin/tools/RunFunctions $ m4 constant/polyMesh/blockMeshDict.m4 > constant/polyMesh/blockMeshDict $ runApplication blockMesh $ cp 0/alpha.water.org 0/alpha.water $ runApplication setFields
W węźle głównym powinny zostać skopiowane przykładowe pliki danych do folderu C:\OpenFoam\sloshingTank3D. (C:\OpenFoam jest folderem udostępnionym w węźle głównym).
Plik hosta dla pliku mpirun
W tym kroku utworzysz plik hosta (listę węzłów obliczeniowych), którego używa polecenie mpirun .
W jednym z węzłów systemu Linux utwórz plik o nazwie hostfile w obszarze /openfoam, więc ten plik można uzyskać w lokalizacji /openfoam/hostfile we wszystkich węzłach systemu Linux.
Zapisz nazwy węzłów systemu Linux w tym pliku. W tym przykładzie plik zawiera następujące nazwy:
SUSE12RDMA-LN1 SUSE12RDMA-LN2
Porada
Ten plik można również utworzyć w folderze C:\OpenFoam\hostfile w węźle głównym. Jeśli wybierzesz tę opcję, zapisz go jako plik tekstowy z zakończeniami wierszy systemu Linux (tylko LF, a nie CR LF). Gwarantuje to, że działa prawidłowo w węzłach systemu Linux.
Otoka skryptów powłoki Bash
Jeśli masz wiele węzłów systemu Linux i chcesz, aby zadanie było uruchamiane tylko na niektórych z nich, nie jest dobrym pomysłem, aby użyć stałego pliku hosta, ponieważ nie wiesz, które węzły zostaną przydzielone do zadania. W takim przypadku napisz otokę skryptów powłoki bash dla elementu mpirun , aby automatycznie utworzyć plik hosta. Na końcu tego artykułu można znaleźć przykładową otokę skryptów powłoki bash o nazwie hpcimpirun.sh i zapisać ją jako /openfoam/hpcimpirun.sh. Ten przykładowy skrypt wykonuje następujące czynności:
Konfiguruje zmienne środowiskowe dla parametrów mpirun i niektóre parametry polecenia dodawania do uruchamiania zadania MPI za pośrednictwem sieci RDMA. W tym przypadku ustawia następujące zmienne:
- I_MPI_FABRICS=shm:dapl
- I_MPI_DAPL_PROVIDER=ofa-v2-ib0
- I_MPI_DYNAMIC_CONNECTION=0
Tworzy plik hosta zgodnie ze zmienną środowiskową $CCP_NODE_CORES, która jest ustawiana przez węzeł główny HPC po aktywowaniu zadania.
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>
— liczba węzłów przydzielonych do tego zadania. -
<Name of node_n_...>
— nazwa każdego węzła przydzielonego do tego zadania. -
<Cores of node_n_...>
— liczba rdzeni w węźle przydzielonym do tego zadania.
Jeśli na przykład zadanie wymaga uruchomienia dwóch węzłów, $CCP_NODES_CORES jest podobny do
2 SUSE12RDMA-LN1 8 SUSE12RDMA-LN2 8
-
Wywołuje polecenie mpirun i dołącza dwa parametry do wiersza polecenia.
-
--hostfile <hostfilepath>: <hostfilepath>
— ścieżka pliku hosta tworzonego przez skrypt -
-np ${CCP_NUMCPUS}: ${CCP_NUMCPUS}
— zmienna środowiskowa ustawiona przez węzeł główny pakietu HPC Pack, który przechowuje liczbę wszystkich rdzeni przydzielonych do tego zadania. W tym przypadku określa liczbę procesów dla parametru mpirun.
-
Przesyłanie zadania OpenFOAM
Teraz możesz przesłać zadanie w menedżerze klastra HPC. Należy przekazać skrypt hpcimpirun.sh w wierszach polecenia dla niektórych zadań podrzędnych zadania.
Połącz się z węzłem głównym klastra i uruchom menedżera klastra HPC.
W obszarze Zarządzanie zasobami upewnij się, że węzły obliczeniowe systemu Linux są w stanie Online . Jeśli tak nie jest, wybierz je i kliknij pozycję Bring Online (Przynieś online).
W obszarze Zarządzanie zadaniami kliknij pozycję Nowe zadanie.
Wprowadź nazwę zadania, takiego jak sloshingTank3D.
W obszarze Zasoby zadania wybierz typ zasobu jako "Węzeł" i ustaw wartość Minimum na 2. Ta konfiguracja uruchamia zadanie w dwóch węzłach systemu Linux, z których każdy ma osiem rdzeni w tym przykładzie.
Kliknij pozycję Edytuj zadania w obszarze nawigacji po lewej stronie, a następnie kliknij przycisk Dodaj , aby dodać zadanie do zadania. Dodaj cztery zadania do zadania przy użyciu następujących wierszy polecenia i ustawień.
Uwaga
Uruchomienie powoduje
source /openfoam/settings.sh
skonfigurowanie środowisk uruchomieniowych OpenFOAM i MPI, więc każde z poniższych zadań wywołuje je przed poleceniem OpenFOAM.Zadanie 1. Uruchom polecenie decomposePar , aby generować pliki danych na potrzeby równoległego uruchamiania aplikacji interDyMFoam .
- Przypisywanie jednego węzła do zadania
-
Wiersz polecenia -
source /openfoam/settings.sh && decomposePar -force > /openfoam/decomposePar${CCP_JOBID}.log
- Katalog roboczy — /openfoam/sloshingTank3D
Zobacz poniższą ilustrację. Pozostałe zadania można skonfigurować podobnie.
Zadanie 2. Uruchom równolegle interDyMFoam , aby obliczyć przykład.
- Przypisywanie dwóch węzłów do zadania
-
Wiersz polecenia -
source /openfoam/settings.sh && /openfoam/hpcimpirun.sh interDyMFoam -parallel > /openfoam/interDyMFoam${CCP_JOBID}.log
- Katalog roboczy — /openfoam/sloshingTank3D
Zadanie 3. Uruchom polecenie reconstructPar , aby scalić zestawy katalogów czasu z każdego katalogu processor_N_ w jeden zestaw.
- Przypisywanie jednego węzła do zadania
-
Wiersz polecenia -
source /openfoam/settings.sh && reconstructPar > /openfoam/reconstructPar${CCP_JOBID}.log
- Katalog roboczy — /openfoam/sloshingTank3D
Zadanie 4. Uruchom równolegle aplikację foamToEnsight , aby przekonwertować pliki wyników OpenFOAM na format EnSight i umieścić pliki EnSight w katalogu o nazwie Ensight w katalogu przypadku.
- Przypisywanie dwóch węzłów do zadania
-
Wiersz polecenia -
source /openfoam/settings.sh && /openfoam/hpcimpirun.sh foamToEnsight -parallel > /openfoam/foamToEnsight${CCP_JOBID}.log
- Katalog roboczy — /openfoam/sloshingTank3D
Dodaj zależności do tych zadań w kolejności rosnącej.
Kliknij przycisk Prześlij , aby uruchomić to zadanie.
Domyślnie pakiet HPC Pack przesyła zadanie jako bieżące zalogowanego konta użytkownika. Po kliknięciu przycisku Prześlij może zostać wyświetlone okno dialogowe z monitem o wprowadzenie nazwy użytkownika i hasła.
W niektórych warunkach pakiet HPC Pack zapamiętuje informacje o użytkowniku wprowadzone przed i nie wyświetla tego okna dialogowego. Aby ponownie wyświetlić pakiet HPC Pack, wprowadź następujące polecenie w wierszu polecenia, a następnie prześlij zadanie.
hpccred delcreds
Zadanie trwa od dziesiątek minut do kilku godzin zgodnie z parametrami ustawionymi dla próbki. Na mapie cieplnej zostanie wyświetlone zadanie uruchomione w węzłach systemu Linux.
W każdym węźle są uruchamiane osiem procesów.
Po zakończeniu zadania znajdź wyniki zadania w folderach w folderach C:\OpenFoam\sloshingTank3D i plikach dziennika w folderze C:\OpenFoam.
Wyświetlanie wyników w usłudze EnSight
Opcjonalnie użyj programu EnSight , aby wizualizować i analizować wyniki zadania OpenFOAM.
Po zainstalowaniu programu EnSight w węźle głównym uruchom go.
Otwórz plik C:\OpenFoam\sloshingTank3D\EnSight\sloshingTank3D.case.
Zobaczysz zbiornik w widzu.
Utwórz obraz Isosurface z warstwy internalMesh, a następnie wybierz zmienną alpha_water.
Ustaw kolor Isosurface_part utworzony w poprzednim kroku. Na przykład ustaw ją na niebieską.
Utwórz wolumin ISO ze ścian , wybierając ściany na panelu Części i klikając przycisk Isosurfaces na pasku narzędzi.
W oknie dialogowym wybierz pozycję Typ jako Isovolume i ustaw zakres Min of Isovolume na wartość 0,5. Aby utworzyć element isovolume, kliknij pozycję Utwórz z wybranymi częściami.
Ustaw kolor Iso_volume_part utworzony w poprzednim kroku. Na przykład ustaw ją na głęboką wodę niebieską.
Ustaw kolor ścian. Na przykład ustaw go na przezroczysty biały.
Teraz kliknij pozycję Odtwórz , aby wyświetlić wyniki symulacji.
Przykładowe pliki
Przykładowy plik konfiguracji XML na potrzeby wdrażania klastra za pomocą skryptu programu PowerShell
<?xml version="1.0" encoding="utf-8" ?>
<IaaSClusterConfig>
<Subscription>
<SubscriptionName>Subscription-1</SubscriptionName>
<StorageAccount>allvhdsje</StorageAccount>
</Subscription>
<Location>Japan East</Location>
<VNet>
<VNetName>suse12rdmavnet</VNetName>
<SubnetName>SUSE12RDMACluster</SubnetName>
</VNet>
<Domain>
<DCOption>HeadNodeAsDC</DCOption>
<DomainFQDN>hpclab.local</DomainFQDN>
</Domain>
<Database>
<DBOption>LocalDB</DBOption>
</Database>
<HeadNode>
<VMName>SUSE12RDMA-HN</VMName>
<ServiceName>suse12rdma-je</ServiceName>
<VMSize>A8</VMSize>
<EnableRESTAPI />
<EnableWebPortal />
</HeadNode>
<LinuxComputeNodes>
<VMNamePattern>SUSE12RDMA-LN%1%</VMNamePattern>
<ServiceName>suse12rdma-je</ServiceName>
<VMSize>A8</VMSize>
<NodeCount>2</NodeCount>
<ImageName>b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-hpc-v20150708</ImageName>
</LinuxComputeNodes>
</IaaSClusterConfig>
Przykładowy plik cred.xml
<ExtendedData>
<PrivateKey>-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAxJKBABhnOsE9eneGHvsjdoXKooHUxpTHI1JVunAJkVmFy8JC
qFt1pV98QCtKEHTC6kQ7tj1UT2N6nx1EY9BBHpZacnXmknpKdX4Nu0cNlSphLpru
lscKPR3XVzkTwEF00OMiNJVknq8qXJF1T3lYx3rW5EnItn6C3nQm3gQPXP0ckYCF
Jdtu/6SSgzV9kaapctLGPNp1Vjf9KeDQMrJXsQNHxnQcfiICp21NiUCiXosDqJrR
AfzePdl0XwsNngouy8t0fPlNSngZvsx+kPGh/AKakKIYS0cO9W3FmdYNW8Xehzkc
VzrtJhU8x21hXGfSC7V0ZeD7dMeTL3tQCVxCmwIDAQABAoIBAQCve8Jh3Wc6koxZ
qh43xicwhdwSGyliZisoozYZDC/ebDb/Ydq0BYIPMiDwADVMX5AqJuPPmwyLGtm6
9hu5p46aycrQ5+QA299g6DlF+PZtNbowKuvX+rRvPxagrTmupkCswjglDUEYUHPW
05wQaNoSqtzwS9Y85M/b24FfLeyxK0n8zjKFErJaHdhVxI6cxw7RdVlSmM9UHmah
wTkW8HkblbOArilAHi6SlRTNZG4gTGeDzPb7fYZo3hzJyLbcaNfJscUuqnAJ+6pT
iY6NNp1E8PQgjvHe21yv3DRoVRM4egqQvNZgUbYAMUgr30T1UoxnUXwk2vqJMfg2
Nzw0ESGRAoGBAPkfXjjGfc4HryqPkdx0kjXs0bXC3js2g4IXItK9YUFeZzf+476y
OTMQg/8DUbqd5rLv7PITIAqpGs39pkfnyohPjOe2zZzeoyaXurYIPV98hhH880uH
ZUhOxJYnlqHGxGT7p2PmmnAlmY4TSJrp12VnuiQVVVsXWOGPqHx4S4f9AoGBAMn/
vuea7hsCgwIE25MJJ55FYCJodLkioQy6aGP4NgB89Azzg527WsQ6H5xhgVMKHWyu
Q1snp+q8LyzD0i1veEvWb8EYifsMyTIPXOUTwZgzaTTCeJNHdc4gw1U22vd7OBYy
nZCU7Tn8Pe6eIMNztnVduiv+2QHuiNPgN7M73/x3AoGBAOL0IcmFgy0EsR8MBq0Z
ge4gnniBXCYDptEINNBaeVStJUnNKzwab6PGwwm6w2VI3thbXbi3lbRAlMve7fKK
B2ghWNPsJOtppKbPCek2Hnt0HUwb7qX7Zlj2cX/99uvRAjChVsDbYA0VJAxcIwQG
TxXx5pFi4g0HexCa6LrkeKMdAoGAcvRIACX7OwPC6nM5QgQDt95jRzGKu5EpdcTf
g4TNtplliblLPYhRrzokoyoaHteyxxak3ktDFCLj9eW6xoCZRQ9Tqd/9JhGwrfxw
MS19DtCzHoNNewM/135tqyD8m7pTwM4tPQqDtmwGErWKj7BaNZARUlhFxwOoemsv
R6DbZyECgYEAhjL2N3Pc+WW+8x2bbIBN3rJcMjBBIivB62AwgYZnA2D5wk5o0DKD
eesGSKS5l22ZMXJNShgzPKmv3HpH22CSVpO0sNZ6R+iG8a3oq4QkU61MT1CfGoMI
a8lxTKnZCsRXU1HexqZs+DSc+30tz50bNqLdido/l5B4EJnQP03ciO0=
-----END RSA PRIVATE KEY-----</PrivateKey>
<PublicKey>ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDEkoEAGGc6wT16d4Ye+yN2hcqigdTGlMcjUlW6cAmRWYXLwkKoW3WlX3xAK0oQdMLqRDu2PVRPY3qfHURj0EEellpydeaSekp1fg27Rw2VKmEumu6Wxwo9HddXORPAQXTQ4yI0lWSerypckXVPeVjHetbkSci2foLedCbeBA9c/RyRgIUl227/pJKDNX2Rpqly0sY82nVWN/0p4NAyslexA0fGdBx+IgKnbU2JQKJeiwOomtEB/N492XRfCw2eCi7Ly3R8+U1KeBm+zH6Q8aH8ApqQohhLRw71bcWZ1g1bxd6HORxXOu0mFTzHbWFcZ9ILtXRl4Pt0x5Mve1AJXEKb username@servername;</PublicKey>
</ExtendedData>
Przykładowy plik silent.cfg do zainstalowania interfejsu MPI
# Patterns used to check silent configuration file
#
# anythingpat - any string
# filepat - the file location pattern (/file/location/to/license.lic)
# lspat - the license server address pattern (0123@hostname)
# snpat - the serial number pattern (ABCD-01234567)
# accept EULA, valid values are: {accept, decline}
ACCEPT_EULA=accept
# optional error behavior, valid values are: {yes, no}
CONTINUE_WITH_OPTIONAL_ERROR=yes
# install location, valid values are: {/opt/intel, filepat}
PSET_INSTALL_DIR=/opt/intel
# continue with overwrite of existing installation directory, valid values are: {yes, no}
CONTINUE_WITH_INSTALLDIR_OVERWRITE=yes
# list of components to install, valid values are: {ALL, DEFAULTS, anythingpat}
COMPONENTS=DEFAULTS
# installation mode, valid values are: {install, modify, repair, uninstall}
PSET_MODE=install
# directory for non-RPM database, valid values are: {filepat}
#NONRPM_DB_DIR=filepat
# Serial number, valid values are: {snpat}
#ACTIVATION_SERIAL_NUMBER=snpat
# License file or license server, valid values are: {lspat, filepat}
#ACTIVATION_LICENSE_FILE=
# Activation type, valid values are: {exist_lic, license_server, license_file, trial_lic, serial_number}
ACTIVATION_TYPE=trial_lic
# Path to the cluster description file, valid values are: {filepat}
#CLUSTER_INSTALL_MACHINES_FILE=filepat
# Intel(R) Software Improvement Program opt-in, valid values are: {yes, no}
PHONEHOME_SEND_USAGE_DATA=no
# Perform validation of digital signatures of RPM files, valid values are: {yes, no}
SIGNING_ENABLED=yes
# Select yes to enable mpi-selector integration, valid values are: {yes, no}
ENVIRONMENT_REG_MPI_ENV=no
# Select yes to update ld.so.conf, valid values are: {yes, no}
ENVIRONMENT_LD_SO_CONF=no
Przykładowy skrypt settings.sh
#!/bin/bash
# impi
source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh
export MPI_ROOT=$I_MPI_ROOT
export I_MPI_FABRICS=shm:dapl
export I_MPI_DAPL_PROVIDER=ofa-v2-ib0
export I_MPI_DYNAMIC_CONNECTION=0
# openfoam
export FOAM_INST_DIR=/opt/OpenFOAM
source /opt/OpenFOAM/OpenFOAM-2.3.1/etc/bashrc
export WM_MPLIB=INTELMPI
Przykładowy skrypt hpcimpirun.sh
#!/bin/bash
# The path of this script
SCRIPT_PATH="$( dirname "${BASH_SOURCE[0]}" )"
# Set mpirun runtime evironment
source /opt/intel/impi/5.0.3.048/bin64/mpivars.sh
export MPI_ROOT=$I_MPI_ROOT
export I_MPI_FABRICS=shm:dapl
export I_MPI_DAPL_PROVIDER=ofa-v2-ib0
export I_MPI_DYNAMIC_CONNECTION=0
# mpirun command
MPIRUN=mpirun
# Argument of "--hostfile"
NODELIST_OPT="--hostfile"
# Argument of "-np"
NUMPROCESS_OPT="-np"
# Get node information from ENVs
NODESCORES=(${CCP_NODES_CORES})
COUNT=${#NODESCORES[@]}
if [ ${COUNT} -eq 0 ]
then
# CCP_NODES_CORES is not found or is empty, just run the mpirun without hostfile arg.
${MPIRUN} $*
else
# Create the hostfile file
NODELIST_PATH=${SCRIPT_PATH}/hostfile_$$
# Get every node name and write into the hostfile file
I=1
while [ ${I} -lt ${COUNT} ]
do
echo "${NODESCORES[${I}]}" >> ${NODELIST_PATH}
let "I=${I}+2"
done
# Run the mpirun with hostfile arg
${MPIRUN} ${NUMPROCESS_OPT} ${CCP_NUMCPUS} ${NODELIST_OPT} ${NODELIST_PATH} $*
RTNSTS=$?
rm -f ${NODELIST_PATH}
fi
exit ${RTNSTS}