Compartir vía


Creación de un clúster de RDMA de LINUX de HPC Pack en Azure

Implementación de un clúster con una plantilla de ARM

Ejecución de Pingpong de Pruebas comparativas de Intel MPI

  • Inicie sesión en el nodo principal hpc6267 y tome nodos en línea

    Nodos

  • Envío de un trabajo para ejecutar pingpong de MPI entre nodos de proceso de Linux

    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"
    
  • El archivo host o el archivo de máquina para la tarea MPI se genera automáticamente.

    • La variable $CCP_MPI_HOSTFILE de entorno se puede usar en el comando task para obtener el nombre de archivo.

    • La variable $CCP_MPI_HOSTFILE_FORMAT de entorno podría establecerse para especificar el formato del archivo host o del archivo de máquina

      • El formato de archivo host predeterminado es similar al siguiente:

        nodename1
        nodename2
        …
        nodenameN
        
      • Cuando $CCP_MPI_HOSTFILE_FORMAT=1, el formato es similar al siguiente:

        nodename1:4
        nodename2:4
        …
        nodenameN:4
        
      • Cuando $CCP_MPI_HOSTFILE_FORMAT=2, el formato es similar al siguiente:

        nodename1 slots=4
        nodename2 slots=4
        …
        nodenameN slots=4
        
      • Cuando $CCP_MPI_HOSTFILE_FORMAT=3, el formato es similar al siguiente:

        nodename1 4
        nodename2 4
        …
        nodenameN 4
        
  • Comprobación del resultado de la tarea en el Administrador de clústeres de HPC Pack 2016

    pingpong

Ejecución de la carga de trabajo de OpenFOAM

Descarga e instalación de Intel MPI

  • Intel MPI ya está instalado en la imagen CentOS_7.4_HPCde Linux, pero se necesita una versión más reciente para compilar OpenFOAM, que se puede descargar de la biblioteca de Intel MPI.

  • Descarga e instalación silenciosa de Intel MPI con 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"
    

Descarga y compilación de OpenFOAM

  • Los paquetes openFOAM se pueden descargar desde la página de descarga de OpenFOAM

  • Antes de compilar OpenFOAM, es necesario instalar zlib-devel y Development Tools en nodos de proceso de Linux (CentOS) para cambiar el valor de la variable WM_MPLIB de SYSTEMOPENMPI a INTELMPI en el archivo bashrcde configuración del entorno de OpenFOAM y para obtener el archivo de configuración del entorno de Intel MPI y el archivo mpivars.sh de configuración del entorno openFOAM. bashrc

  • Opcionalmente, se podría establecer una variable WM_NCOMPPROCS de entorno para especificar cuántos procesadores se usarán para compilar OpenFoam, lo que podría acelerar la compilación.

  • Uso de clusrun para lograr todo lo anterior

    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"
    

Creación de un recurso compartido en el clúster

  • Cree una carpeta denominada openfoam en el nodo principal y compártala con Everyone permiso.Read/Write

  • Creación de un directorio /openfoam y montaje del recurso compartido en nodos de proceso de Linux con 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='********'"
    

    Recuerde reemplazar el nombre de usuario y la contraseña en el código anterior al copiar.

Preparar el archivo de configuración del entorno para ejecutar tareas de MPI

  • Cree un archivo en el recurso settings.sh compartido con código:

    #!/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
    

    Tenga cuidado con los finales de línea si el archivo se edita en el nodo principal, que debe ser \n en lugar de \r\n

Preparación de datos de ejemplo para el trabajo de OpenFOAM

  • Copia del ejemplo sloshingTank3D en el directorio tutoriales de OpenFOAM en el recurso compartido openfoam

  • Opcionalmente, modifique el valor de deltaT de 0.05 a y 0.5 el valor de de 0.05 a 0.5 en /openfoam/sloshingTank3D/system/controlDict para acelerar el procesamiento de writeInterval datos.

  • Modifique el archivo /openfoam/sloshingTank3D/system/decomposeParDict en términos del número principal que se va a usar; más información, consulte la Guía del usuario de OpenFOAM: 3.4 En ejecución de aplicaciones en paralelo

    /*--------------------------------*- 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           ( );
    
    // ************************************************************************* //
    
  • Prepare los datos de ejemplo en /openfoam/sloshingTank3D. El código siguiente se puede usar al realizarlo manualmente en el nodo de proceso de Linux:

    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
    
  • Envío de un trabajo para lograr todo lo anterior

    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"
    

Creación de un trabajo que contenga tareas de MPI para procesar la fecha

  • Creación de un trabajo y adición de 4 tareas con dependencia

    Nombre de la tarea Tarea dependiente Núcleos Comando Variable del entorno
    task1 No disponible 1 source /openfoam/settings.sh && decomposePar -force No disponible
    task2 task1 32 source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE interFoam -parallel CCP_MPI_HOSTFILE_FORMAT=1
    task3 task2 1 source /openfoam/settings.sh && reconstructPar No disponible
    task4 task3 32 source /openfoam/settings.sh && mpirun -machinefile $CCP_MPI_HOSTFILE foamToEnsight -parallel CCP_MPI_HOSTFILE_FORMAT=1
  • Establezca el directorio /openfoam/sloshingTank3D de trabajo en y la salida estándar en ${CCP_JOBID}.${CCP_TASKID}.log de cada tarea.

  • Logre todo lo anterior con comandos:

    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:!!
    

Obtención del resultado

  • Comprobación del resultado del trabajo en el Administrador de clústeres de HPC Pack 2016

    openfoam

  • El resultado de ejemplo sloshingTank3D se genera como archivo \\hpc6267\openfoam\sloshingTank3D\EnSight\sloshingTank3D.case, que Ensight podría ver.