Freigeben über


Erstellen von HPC Pack Linux RDMA Cluster in Azure

Bereitstellen eines Clusters mit ARM-Vorlage

Intel MPI Benchmark Pingpong ausführen

  • Melden Sie sich am Kopfknoten hpc6267 an, und nehmen Sie Knoten online

    Knoten

  • Übermitteln eines Auftrags zum Ausführen von MPI Pingpong unter Linux-Computeknoten

    job submit /numnodes:2 "source /opt/intel/impi/`ls /opt/intel/impi`/bin64/mpivars.sh && mpirun -env I_MPI_FABRICS=shm:dapl -env I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -env I_MPI_DYNAMIC_CONNECTION=0 -env I_MPI_FALLBACK_DEVICE=0 -f $CCP_MPI_HOSTFILE -ppn 1 IMB-MPI1 pingpong | tail -n30"
    
  • Die Hostdatei oder Computerdatei für die MPI-Aufgabe wird automatisch generiert.

    • Umgebungsvariable $CCP_MPI_HOSTFILE kann im Aufgabenbefehl verwendet werden, um den Dateinamen abzurufen.

    • Die Umgebungsvariable $CCP_MPI_HOSTFILE_FORMAT kann so festgelegt werden, dass das Format der Hostdatei oder computerdatei angegeben wird.

      • Das Standardmäßige Hostdateiformat ist wie folgt:

        nodename1
        nodename2
        …
        nodenameN
        
      • Wenn $CCP_MPI_HOSTFILE_FORMAT=1das Format wie folgt aussieht:

        nodename1:4
        nodename2:4
        …
        nodenameN:4
        
      • Wenn $CCP_MPI_HOSTFILE_FORMAT=2das Format wie folgt aussieht:

        nodename1 slots=4
        nodename2 slots=4
        …
        nodenameN slots=4
        
      • Wenn $CCP_MPI_HOSTFILE_FORMAT=3das Format wie folgt aussieht:

        nodename1 4
        nodename2 4
        …
        nodenameN 4
        
  • Überprüfen des Vorgangsergebnisses im HPC Pack 2016 Cluster Manager

    Pingpong

Ausführen der OpenFOAM-Workload

Herunterladen und Installieren von Intel MPI

  • Intel MPI ist bereits im Linux-Image CentOS_7.4_HPCinstalliert, aber für die Erstellung von OpenFOAM ist eine neuere Version erforderlich, die aus der Intel MPI-Bibliothek heruntergeladen werden kann.

  • Herunterladen und automatische Installation von Intel MPI mit clusrun

    clusrun /nodegroup:LinuxNodes /interleaved "wget https://registrationcenter-download.intel.com/akdlm/irc_nas/tec/13063/l_mpi_2018.3.222.tgz && tar -zxvf l_mpi_2018.3.222.tgz && sed -i -e 's/ACCEPT_EULA=decline/ACCEPT_EULA=accept/g' ./l_mpi_2018.3.222/silent.cfg && ./l_mpi_2018.3.222/install.sh --silent ./l_mpi_2018.3.222/silent.cfg"
    

Herunterladen und Kompilieren von OpenFOAM

  • OpenFOAM-Pakete können von der OpenFOAM-Downloadseite heruntergeladen werden

  • Vor dem Erstellen von OpenFOAM müssen wir Linux-Computeknoten (CentOS) installieren zlib-devel und Development Tools verwenden, um den Wert der Variablen WM_MPLIB in INTELMPISYSTEMOPENMPI die Einstellungsdatei bashrcder OpenFOAM-Umgebung zu ändern und die Einstellungsdatei der Intel MPI-Umgebung und die OpenFOAM-Umgebungseinstellungsdatei mpivars.sh zu erstellen.bashrc

  • Optional kann die Umgebungsvariable WM_NCOMPPROCS festgelegt werden, um anzugeben, wie viele Prozessoren für die Kompilierung von OpenFoam verwendet werden sollen, wodurch die Kompilierung beschleunigt werden kann.

  • Verwenden Sie clusrun, um alles oben zu erreichen

    clusrun /nodegroup:LinuxNodes /interleaved "yum install -y zlib-devel && yum groupinstall -y 'Development Tools' && wget https://sourceforge.net/projects/openfoamplus/files/v1806/ThirdParty-v1806.tgz && wget https://sourceforge.net/projects/openfoamplus/files/v1806/OpenFOAM-v1806.tgz && mkdir /opt/OpenFOAM && tar -xzf OpenFOAM-v1806.tgz -C /opt/OpenFOAM && tar -xzf ThirdParty-v1806.tgz -C /opt/OpenFOAM && cd /opt/OpenFOAM/OpenFOAM-v1806/ && sed -i -e 's/WM_MPLIB=SYSTEMOPENMPI/WM_MPLIB=INTELMPI/g' ./etc/bashrc && source /opt/intel/impi/2018.3.222/bin64/mpivars.sh && source ./etc/bashrc && export WM_NCOMPPROCS=$((`grep -c ^processor /proc/cpuinfo`-1)) && ./Allwmake"
    

Erstellen der Freigabe im Cluster

  • Erstellen eines Ordners mit dem Namen openfoam "Kopfknoten" und Freigeben Everyone für den Ordner mit Read/Write Berechtigung

  • Erstellen eines Verzeichnisses /openfoam und Bereitstellen der Freigabe auf Linux-Computeknoten mit clusrun

    clusrun /nodegroup:LinuxNodes "mkdir /openfoam && mount -t cifs //hpc6267/openfoam /openfoam -o vers=2.1,username=hpcadmin,dir_mode=0777,file_mode=0777,password='********'"
    

    Denken Sie daran, beim Kopieren den Benutzernamen und das Kennwort im obigen Code zu ersetzen.

Vorbereiten der Umgebungseinstellungsdatei für die Ausführung von MPI-Aufgaben

  • Erstellen Sie die Datei settings.sh in der Freigabe mit Code:

    #!/bin/bash
    # impi
    source /opt/intel/impi/2018.3.222/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
    source /opt/OpenFOAM/OpenFOAM-v1806/etc/bashrc
    

    Achten Sie darauf, dass die Zeile endet, wenn die Datei auf dem Kopfknoten bearbeitet wird und nicht \n\r\n

Vorbereiten von Beispieldaten für den OpenFOAM-Auftrag

  • Kopieren des Beispiels sloshingTank3D im OpenFOAM-Lernprogrammverzeichnis in die Freigabe openfoam

  • Ändern Sie optional den Wert von deltaT "von" in "Von0.05" in 0.5 "In" und "Von 0.05 in0.5"/openfoam/sloshingTank3D/system/controlDict, um die writeInterval Datenverarbeitung zu beschleunigen.

  • Ändern Sie die Datei /openfoam/sloshingTank3D/system/decomposeParDict in Bezug auf die zu verwendende Kernnummer. Weitere Informationen finden Sie im OpenFOAM-Benutzerhandbuch: 3.4 Parallel ausgeführte Anwendungen

    /*--------------------------------*- C++ -*----------------------------------*\
    | =========                 |                                                 |
    | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
    |  \\    /   O peration     | Version:  v1806                                 |
    |   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
    |    \\/     M anipulation  |                                                 |
    \*---------------------------------------------------------------------------*/
    FoamFile
    {
        version     2.0;
        format      ascii;
        class       dictionary;
        object      decomposeParDict;
    }
    // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
    
    numberOfSubdomains 32;
    
    method          hierarchical;
    
    coeffs
    {
        n           (1 1 32);
        //delta       0.001; // default=0.001
        //order       xyz;   // default=xzy
    }
    
    distributed     no;
    
    roots           ( );
    
    // ************************************************************************* //
    
  • Vorbereiten von Beispieldaten in /openfoam/sloshingTank3D. Der folgende Code kann verwendet werden, wenn er manuell auf linux-Computeknoten ausgeführt wird:

    cd /openfoam/sloshingTank3D
    source /openfoam/settings.sh
    source /home/hpcadmin/OpenFOAM/OpenFOAM-v1806/bin/tools/RunFunctions
    m4 ./system/blockMeshDict.m4 > ./system/blockMeshDict
    runApplication blockMesh
    cp ./0/alpha.water.orig ./0/alpha.water
    runApplication setFields
    
  • Stellen Sie einen Auftrag ein, um alles oben zu erreichen.

    set CORE_NUMBER=32
    job submit "cp -r /opt/OpenFOAM/OpenFOAM-v1806/tutorials/multiphase/interFoam/laminar/sloshingTank3D /openfoam/ && sed -i 's/deltaT          0.05;/deltaT          0.5;/g' /openfoam/sloshingTank3D/system/controlDict &&  sed -i 's/writeInterval   0.05;/writeInterval   0.5;/g' /openfoam/sloshingTank3D/system/controlDict && sed -i 's/numberOfSubdomains 16;/numberOfSubdomains %CORE_NUMBER%;/g' /openfoam/sloshingTank3D/system/decomposeParDict && sed -i 's/n           (4 2 2);/n           (1 1 %CORE_NUMBER%);/g' /openfoam/sloshingTank3D/system/decomposeParDict && cd /openfoam/sloshingTank3D/ && m4 ./system/blockMeshDict.m4 > ./system/blockMeshDict && source /opt/OpenFOAM/OpenFOAM-v1806/bin/tools/RunFunctions && source /opt/OpenFOAM/OpenFOAM-v1806/etc/bashrc && runApplication blockMesh && cp ./0/alpha.water.orig ./0/alpha.water && runApplication setFields"
    

Erstellen eines Auftrags, der MPI-Aufgaben zum Verarbeiten des Datums enthält

  • Erstellen eines Auftrags und Hinzufügen von vier Aufgaben mit Abhängigkeit

    Aufgabenname Abhängiger Vorgang Kerne Befehl Umgebungsvariable
    Vorgang1 Nicht verfügbar 1 source /openfoam/settings.sh && decomposePar -force Nicht verfügbar
    Task2 Vorgang1 32 source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE interFoam -parallel CCP_MPI_HOSTFILE_FORMAT=1
    Task3 Task2 1 source /openfoam/settings.sh && rekonstruierenPar Nicht verfügbar
    Task4 Task3 32 source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE foamToEnsight -parallel CCP_MPI_HOSTFILE_FORMAT=1
  • Festlegen des Arbeitsverzeichnisses auf und Standardausgabe für /openfoam/sloshingTank3D${CCP_JOBID}.${CCP_TASKID}.log jede Aufgabe

  • Alles oben mit Befehlen erreichen:

    set CORE_NUMBER=32
    job new
    job add !! /workdir:/openfoam/sloshingTank3D /name:task1 /stdout:${CCP_JOBID}.${CCP_TASKID}.log "source /openfoam/settings.sh && decomposePar -force"
    job add !! /workdir:/openfoam/sloshingTank3D /name:task2 /stdout:${CCP_JOBID}.${CCP_TASKID}.log /depend:task1 /numcores:%CORE_NUMBER% /env:CCP_MPI_HOSTFILE_FORMAT=1 "source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE interFoam -parallel"
    job add !! /workdir:/openfoam/sloshingTank3D /name:task3 /stdout:${CCP_JOBID}.${CCP_TASKID}.log /depend:task2 "source /openfoam/settings.sh && reconstructPar"
    job add !! /workdir:/openfoam/sloshingTank3D /name:task4 /stdout:${CCP_JOBID}.${CCP_TASKID}.log /depend:task3 /numcores:%CORE_NUMBER% /env:CCP_MPI_HOSTFILE_FORMAT=1 "source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE foamToEnsight -parallel"
    job submit /id:!!
    

Ergebnis abrufen

  • Überprüfen des Auftragsergebnisses im HPC Pack 2016 Cluster Manager

    openfoam

  • Das Ergebnis des Beispiels sloshingTank3D wird als Datei \\hpc6267\openfoam\sloshingTank3D\EnSight\sloshingTank3D.casegeneriert, die von Ensight angezeigt werden kann.