在 Azure 中创建 HPC Pack Linux RDMA 群集
使用 ARM 模板部署群集
-
请注意,
Compute Node Image
应为后缀HPC
为 的 ,并且Compute Node VM Size
应为Standard_H16r
H 系列中的 或Standard_H16mr
,以便群集可以支持 RDMA。
运行 Intel MPI 基准 Pingpong
登录头节点 hpc6267 并使节点联机
提交作业以在 Linux 计算节点之间运行 MPI Pingong
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 群集管理器中检查任务结果
运行 OpenFOAM 工作负载
下载并安装 Intel MPI
Linux 映像
CentOS_7.4_HPC
中已安装 Intel MPI,但生成 OpenFOAM 需要更新版本,可从 Intel MPI 库下载使用 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 计算节点上安装
zlib-devel
和Development Tools
(CentOS) ,以在 OpenFOAM 环境设置文件中bashrc
将 变量WM_MPLIB
的值从SYSTEMOPENMPI
更改为INTELMPI
,并源 Intel MPI 环境设置文件和mpivars.sh
OpenFOAM 环境设置文件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
的文件夹,并使用权限将其共享到Read/Write
Everyone
使用 clusrun 在 Linux 计算节点上创建目录
/openfoam
并装载共享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
(可选)修改从 到 的值
deltaT
和从0.05
到0.5
中的/openfoam/sloshingTank3D/system/controlDict
值writeInterval
以加快0.5
数据处理速度0.05
根据要使用的核心数修改文件
/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 不可用 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 Pack 2016 群集管理器中检查作业结果
示例 sloshingTank3D 的结果生成为文件
\\hpc6267\openfoam\sloshingTank3D\EnSight\sloshingTank3D.case
,可由 Ensight 查看