다음을 통해 공유


Azure에서 HPC 팩 Linux RDMA 클러스터 만들기

ARM 템플릿을 사용하여 클러스터 배포

Intel MPI 벤치마크 Pingpong 실행

  • 헤드 노드 hpc6267에 로그온하고 노드를 온라인으로 설정

    노드

  • Linux 컴퓨팅 노드 간에 MPI Pingpong을 실행하는 작업 제출

    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"
    
  • MPI 태스크에 대한 호스트 파일 또는 컴퓨터 파일이 자동으로 생성됩니다.

    • 작업 명령에서 환경 변수 $CCP_MPI_HOSTFILE 를 사용하여 파일 이름을 가져올 수 있습니다.

    • 환경 변수 $CCP_MPI_HOSTFILE_FORMAT 를 설정하여 호스트 파일 또는 컴퓨터 파일의 형식을 지정할 수 있습니다.

      • 기본 호스트 파일 형식은 다음과 같습니다.

        nodename1
        nodename2
        …
        nodenameN
        
      • 형식 $CCP_MPI_HOSTFILE_FORMAT=1은 다음과 같습니다.

        nodename1:4
        nodename2:4
        …
        nodenameN:4
        
      • 형식 $CCP_MPI_HOSTFILE_FORMAT=2은 다음과 같습니다.

        nodename1 slots=4
        nodename2 slots=4
        …
        nodenameN slots=4
        
      • 형식 $CCP_MPI_HOSTFILE_FORMAT=3은 다음과 같습니다.

        nodename1 4
        nodename2 4
        …
        nodenameN 4
        
  • HPC Pack 2016 클러스터 관리자에서 작업 결과 확인

    pingpong

OpenFOAM 워크로드 실행

Intel MPI 다운로드 및 설치

  • Intel MPI는 Linux 이미지CentOS_7.4_HPC에 이미 설치되어 있지만 Intel MPI 라이브러리에서 다운로드할 수 있는 OpenFOAM을 빌드하려면 최신 버전이 필요합니다.

  • clusrun을 사용하여 Intel MPI 다운로드 및 자동 설치

    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"
    

OpenFOAM 다운로드 및 컴파일

  • OpenFOAM 다운로드 페이지에서 OpenFOAM 패키지를 다운로드할 수 있습니다.

  • OpenFOAM을 빌드하기 전에 Linux 컴퓨팅 노드(CentOS)를 설치 zlib-devel 하고, 변수 WM_MPLIB 값을 OpenFOAM 환경 설정 파일bashrc에서 SYSTEMOPENMPIINTELMPI 변경하고, Intel MPI 환경 설정 파일 및 OpenFOAM 환경 설정 파일을 mpivars.sh 원본으로 Development Tools 지정해야 합니다.bashrc

  • 필요에 따라 환경 변수 WM_NCOMPPROCS 를 설정하여 OpenFoam 컴파일에 사용할 프로세서 수를 지정하여 컴파일을 가속화할 수 있습니다.

  • clusrun을 사용하여 위의 모든 것을 달성합니다.

    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"
    

클러스터에서 공유 만들기

  • 헤드 노드에 명명된 openfoam 폴더를 만들고 사용 권한으로 EveryoneRead/Write 공유

  • 디렉터리를 /openfoam 만들고 clusrun을 사용하여 Linux 컴퓨팅 노드에 공유 탑재

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

    복사할 때 위의 코드에서 사용자 이름과 암호를 바꿔야 합니다.

MPI 작업을 실행하기 위한 환경 설정 파일 준비

  • 코드를 사용하여 공유에 파일을 settings.sh 만듭니다.

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

    헤드 노드에서 파일을 편집하는 경우 줄 끝은 주의해야 \n 합니다. \r\n

OpenFOAM 작업에 대한 샘플 데이터 준비

  • OpenFOAM 자습서 디렉터리의 샘플을 sloshingTank3D 공유에 복사 openfoam

  • 필요에 따라 데이터 처리를 가속화하기 위해 0.5 원본 0.05 값과 인/0.50.05/openfoam/sloshingTank3D/system/controlDict 값을 writeInterval 수정 deltaT 합니다.

  • 사용할 코어 수 측면에서 파일을 /openfoam/sloshingTank3D/system/decomposeParDict 수정합니다. OpenFOAM 사용자 가이드: 3.4 애플리케이션을 병렬로 실행

    /*--------------------------------*- 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           ( );
    
    // ************************************************************************* //
    
  • 에서 /openfoam/sloshingTank3D샘플 데이터 준비 아래 코드는 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
    
  • 위의 모든 작업을 달성하기 위해 작업 제출

    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"
    

날짜를 처리하는 MPI 작업이 포함된 작업 만들기

  • 작업 만들기 및 4개 작업 추가

    태스크 이름 종속 작업 코어 명령어 환경 변수
    task1 해당 없음(N/A) 1 source /openfoam/settings.sh &&decomposePar -force 해당 없음(N/A)
    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 해당 없음(N/A)
    task4 task3 32 source /openfoam/settings.sh &> mpirun -machinefile $CCP_MPI_HOSTFILE foamToEnsight -parallel CCP_MPI_HOSTFILE_FORMAT=1
  • 작업 디렉터리를 각 작업의 표준 출력으로 /openfoam/sloshingTank3D${CCP_JOBID}.${CCP_TASKID}.log 설정

  • 명령을 사용하여 위의 모든 작업을 수행합니다.

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

결과 가져오기

  • HPC 팩 2016 클러스터 관리자에서 작업 결과 확인

    openfoam

  • 샘플 sloshingTank3D의 결과는 Ensight에서 볼 수 있는 파일\\hpc6267\openfoam\sloshingTank3D\EnSight\sloshingTank3D.case로 생성됩니다.