在 Azure 中的 Linux RDMA 群集上使用 Microsoft HPC Pack 运行 OpenFoam

重要

经典 VM 将于 2023 年 3 月 1 日停用。

如果使用 ASM 中的 IaaS 资源,请在 2023 年 3 月 1 日完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器中的许多增强功能。

有关详细信息,请参阅在 2023 年 3 月 1 日前将 IaaS 资源迁移到 Azure 资源管理器

本文介绍在 Azure 虚拟机中运行 OpenFoam 的一种方法。 在这里,你将使用 Azure 上的 Linux 计算节点部署Microsoft HPC Pack 群集,并使用 Intel MPI 运行 OpenFoam 作业。 可以将支持 RDMA 的 Azure VM 用于计算节点,以便计算节点通过 Azure RDMA 网络进行通信。 在 Azure 中运行 OpenFoam 的其他选项包括市场中提供的完全配置的商业映像,例如 UberCloud 的 CentOS 6 上的 OpenFoam 2.3,以及在 Azure Batch 上运行。

注释

Azure 有两种不同的部署模型用于创建和使用资源: 资源管理器和经典部署模型。 这篇文章介绍如何使用这两种模型,但 Microsoft 建议大多数最新部署使用 Resource Manager 模型。

OpenFOAM(即开放场操作和操作)是一种开源的计算流体动力学(CFD)软件包,广泛应用于工程和科学领域的商业和学术机构中。 它包括用于网格化的工具,尤其是 snappyHexMesh、用于复杂 CAD 几何图形的并行化网格器,以及预处理和后期处理的工具。 几乎所有进程都并行运行,使用户能够充分利用计算机硬件。

Microsoft HPC Pack 提供在 Microsoft Azure 虚拟机群集上运行大规模 HPC 和并行应用程序(包括 MPI 应用程序)的功能。 HPC Pack 还支持在 HPC Pack 群集中部署的 Linux 计算节点 VM 上运行 Linux HPC 应用程序。 有关将 Linux 计算节点与 HPC Pack 配合使用的简介,请参阅 Azure 中 HPC Pack 群集中的 Linux 计算节点入门

注释

本文演示如何使用 HPC Pack 运行 Linux MPI 工作负荷。 假设你熟悉 Linux 系统管理和在 Linux 群集上运行 MPI 工作负载。 如果使用的 MPI 和 OpenFOAM 版本与本文所示的版本不同,可能需要修改一些安装和配置步骤。

先决条件

  • 具有支持 RDMA 的 Linux 计算节点的 HPC Pack 群集 - 使用 Azure 资源管理器模板Azure PowerShell 脚本部署大小为 A8、A9、H16r 或 H16rm Linux 计算节点的 HPC Pack 群集。 有关任一选项的先决条件和步骤,请参阅 Azure HPC Pack 群集中的 Linux 计算节点入门 。 如果选择 PowerShell 脚本部署选项,请参阅本文末尾的示例文件中的示例配置文件。 使用此配置部署基于 Azure 的 HPC Pack 群集,该群集由大小 A8 Windows Server 2012 R2 头节点和 2 个大小的 A8 SUSE Linux Enterprise Server 12 计算节点组成。 请为您的订阅和服务名称替换合适的值。

    需要了解的其他事项

    • 有关 Azure 中的 Linux RDMA 网络先决条件,请参阅 高性能计算 VM 大小
    • 如果使用 Powershell 脚本部署选项,请在一个云服务中部署所有 Linux 计算节点以使用 RDMA 网络连接。
    • 部署 Linux 节点后,通过 SSH 进行连接以执行任何其他管理任务。 在 Azure 门户中查找每个 Linux VM 的 SSH 连接详细信息。
  • Intel MPI - 若要在 Azure 中的 SLES 12 HPC 计算节点上运行 OpenFOAM,需要从 Intel.com 站点安装 Intel MPI 库 5 运行时。 (Intel MPI 5 预安装在基于 CentOS 的 HPC 映像上。在后面的步骤中,如有必要,请在 Linux 计算节点上安装 Intel MPI。 若要准备此步骤,在注册 Intel 后,请按照确认电子邮件中的链接链接到相关网页。 然后,复制适用于适当版本的 Intel MPI 的 .tgz 文件的下载链接。 本文基于 Intel MPI 版本 5.0.3.048。

  • OpenFOAM 源包 - 从 OpenFOAM Foundation 站点下载适用于 Linux 的 OpenFOAM 源包软件。 本文基于源包版本 2.3.1,可作为 OpenFOAM-2.3.1.tgz 下载。 按照本文后面的说明在 Linux 计算节点上解压缩和编译 OpenFOAM。

  • EnSight (可选) - 若要查看 OpenFOAM 模拟的结果,请下载并安装 EnSight 可视化和分析程序。 许可和下载信息位于 EnSight 站点。

建立计算节点之间的相互信任

在多个 Linux 节点上运行跨节点作业需要节点相互信任(通过 rshssh)。 使用 Microsoft HPC Pack IaaS 部署脚本创建 HPC Pack 群集时,该脚本会自动为指定的管理员帐户设置永久互信。 对于在群集域中创建的非管理员用户,必须在分配作业时在节点之间设置临时互信,并在作业完成后销毁关系。 若要为每个用户建立信任,请向 HPC Pack 用于信任关系的群集提供 RSA 密钥对。

生成 RSA 密钥对

通过运行 Linux ssh-keygen 命令,可以轻松生成包含公钥和私钥的 RSA 密钥对。

  1. 登录到 Linux 计算机。

  2. 运行下面的命令:

    ssh-keygen -t rsa
    

    注释

    Enter 以使用默认设置,直到命令完成。 不要在此处输入通行短语;当系统提示输入密码时,只需按 Enter

    生成 RSA 密钥对

  3. 将目录更改为 ~/.ssh 目录。 私钥存储在 id_rsa 中,公钥存储在 id_rsa.pub 中。

    私钥和公钥

将密钥对添加到 HPC Pack 群集

  1. 使用 HPC Pack 管理员帐户(运行部署脚本时设置的管理员帐户)与头节点建立远程桌面连接。

  2. 使用标准 Windows Server 过程在群集的 Active Directory 域中创建域用户帐户。 例如,在头节点上使用 Active Directory 用户和计算机工具。 本文中的示例假定创建名为 hpclab\hpcuser 的域用户。

  3. 创建名为 C:\cred.xml 的文件,并将 RSA 密钥数据复制到其中。 本文末尾提供了一个示例 cred.xml 文件。

    <ExtendedData>
      <PrivateKey>Copy the contents of private key here</PrivateKey>
      <PublicKey>Copy the contents of public key here</PublicKey>
    </ExtendedData>
    
  4. 打开命令提示符并输入以下命令以设置 hpclab\hpcuser 帐户的凭据数据。 使用 extendeddata 参数来传递您为关键数据创建的名为 C:\cred.xml 的文件的名称。

    hpccred setcreds /extendeddata:c:\cred.xml /user:hpclab\hpcuser /password:<UserPassword>
    

    此命令在未输出的情况下成功完成。 设置用户帐户的凭据后,需要运行作业,将 cred.xml 文件存储在安全位置,或删除该文件。

  5. 如果在某个 Linux 节点上生成了 RSA 密钥对,请记得在使用完密钥后删除这些密钥。 如果 HPC Pack 找到现有的id_rsa文件或 id_rsa.pub 文件,则它不会设置相互信任。

重要

不建议在共享群集上以群集管理员身份运行 Linux 作业,因为由管理员提交的作业在 Linux 节点上的根帐户下运行。 但是,非管理员用户提交的作业在与作业用户同名的本地 Linux 用户帐户下运行。 在这种情况下,HPC Pack 会在分配给任务的节点上为此 Linux 用户建立节点间的相互信任。 可以在运行作业之前手动在 Linux 节点上设置 Linux 用户,或者 HPC Pack 会在提交作业时自动创建用户。 如果 HPC Pack 创建用户,则 HPC Pack 会在作业完成后将其删除。 为了减少安全威胁,HPC Pack 会在作业完成后删除密钥。

为 Linux 节点设置文件共享

现在,在头节点上的文件夹上设置标准 SMB 共享。 若要允许 Linux 节点使用通用路径访问应用程序文件,请装载 Linux 节点上的共享文件夹。 如果需要,可以使用另一个文件共享选项,例如 Azure 文件共享(建议用于许多方案)或 NFS 共享。 请参阅 Azure HPC Pack 群集中 Linux 计算节点入门中的文件共享信息和详细步骤。

  1. 在头节点上创建一个文件夹,并通过设置读/写权限将其共享给每个人。 例如,将头节点上的 C:\OpenFOAM 共享为 \\SUSE12RDMA-HN\OpenFOAM。 此处, SUSE12RDMA-HN 是头节点的主机名。

  2. 打开 Windows PowerShell 窗口并运行以下命令:

    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
    

第一个命令在 LinuxNodes 组中的所有节点上创建一个名为 /openfoam 的文件夹。 第二个命令在 Linux 节点上装载共享文件夹 //SUSE12RDMA-HN/OpenFOAM,并将dir_mode和file_mode位设置为 777。 命令中的用户名和密码应该是头节点上用户的凭据。

注释

第二个命令中的“`”符号是 PowerShell 的转义字符。 “,”表示“,”(逗号字符)是命令的一部分。

安装 MPI 和 OpenFOAM

若要在 RDMA 网络上以 MPI 作业的形式运行 OpenFOAM,需要使用 Intel MPI 库编译 OpenFOAM。

首先,运行多个 clusrun 命令,在 Linux 节点上安装 Intel MPI 库(如果尚未安装)和 OpenFOAM。 使用以前配置的头节点共享在 Linux 节点之间共享安装文件。

重要

这些安装和编译步骤是示例。 你需要对 Linux 系统管理有一些了解,以确保正确安装依赖编译器和库。 可能需要修改 Intel MPI 和 OpenFOAM 版本的某些环境变量或其他设置。 有关详细信息,请参阅 适用于 Linux 的 Intel MPI 库安装指南适用于环境的 OpenFOAM 源包安装

安装 Intel MPI

将下载的 Intel MPI 安装包(在本示例中的 l_mpi_p_5.0.3.048.tgz)保存在头节点上的 C:\OpenFoam 中,以便 Linux 节点可以从 /openfoam 访问此文件。 然后运行 clusrun ,在所有 Linux 节点上安装 Intel MPI 库。

  1. 以下命令复制安装包并将其解压到每个节点的 /opt/intel 目录。

    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/
    
  2. 若要以无提示方式安装 Intel MPI 库,请使用 silent.cfg 文件。 可以在本文末尾的示例文件中找到一个示例。 将此文件放在共享文件夹 /openfoam 中。 有关 silent.cfg 文件的详细信息,请参阅 Intel MPI Library for Linux 安装指南 - 无提示安装

    小提示

    请确保将 silent.cfg 文件保存为带有 Linux 行尾的文本文件(仅 LF,而不是 CR LF)。 此步骤可确保它在 Linux 节点上正常运行。

  3. 以无提示模式安装 Intel MPI 库。

    clusrun /nodegroup:LinuxNodes bash /opt/intel/l_mpi_p_5.0.3.048/install.sh --silent /openfoam/silent.cfg
    

配置 MPI

若要进行测试,应在每个 Linux 节点上将以下行添加到 /etc/security/limits.conf:

clusrun /nodegroup:LinuxNodes echo "*               hard    memlock         unlimited" `>`> /etc/security/limits.conf
clusrun /nodegroup:LinuxNodes echo "*               soft    memlock         unlimited" `>`> /etc/security/limits.conf

更新 limits.conf 文件后重启 Linux 节点。 例如,使用以下 clusrun 命令:

clusrun /nodegroup:LinuxNodes systemctl reboot

重新启动后,请确保共享文件夹装载为 /openfoam。

编译并安装 OpenFOAM

将 OpenFOAM 源包(此示例中的 OpenFOAM-2.3.1.tgz)下载的安装包保存到头节点上的 C:\OpenFoam,以便 Linux 节点可以从 /openfoam 访问此文件。 然后运行 clusrun 命令,在所有 Linux 节点上编译 OpenFOAM。

  1. 在每个 Linux 节点上创建一个文件夹 /opt/OpenFOAM,将源包复制到此文件夹,并将其解压缩到该文件夹。

    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/
    
  2. 若要使用 Intel MPI 库编译 OpenFOAM,请先为 Intel MPI 和 OpenFOAM 设置一些环境变量。 使用名为 settings.sh 的 bash 脚本设置变量。 可以在本文末尾的示例文件中找到一个示例。 将此文件(以 Linux 行结尾保存)放在共享文件夹 /openfoam 中。 此文件还包含用于稍后运行 OpenFOAM 作业的 MPI 和 OpenFOAM 运行时设置。

  3. 安装编译 OpenFOAM 所需的依赖包。 根据 Linux 分发版,可能需要先添加存储库。 运行类似于以下内容的 clusrun 命令:

    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++
    

    如有必要,请通过 SSH 连接到每个 Linux 节点,以运行命令以确认它们是否正常运行。

  4. 运行以下命令以编译 OpenFOAM。 编译过程需要一段时间才能完成,并会在标准输出流生成大量日志信息,因此,请使用/interleaved选项以交错方式显示输出。

    clusrun /nodegroup:LinuxNodes /interleaved source /openfoam/settings.sh `&`& /opt/OpenFOAM/OpenFOAM-2.3.1/Allwmake
    

    注释

    命令中的“`”符号是 PowerShell 的转义符号。 “'&”表示“&”是命令的一部分。

准备运行 OpenFOAM 作业

现在可以在两个 Linux 节点上运行名为 sloshingTank3D 的 MPI 作业,该作业是 OpenFoam 示例之一。

设置运行时环境

若要在 Linux 节点上为 MPI 和 OpenFOAM 设置运行时环境,请在头节点上的 Windows PowerShell 窗口中运行以下命令。 (此命令仅适用于 SUSE Linux。)

clusrun /nodegroup:LinuxNodes cp /openfoam/settings.sh /etc/profile.d/

准备示例数据

使用您之前配置的头节点,在 Linux 节点之间共享文件(挂载为 /openfoam)。

  1. 通过 SSH 连接到 Linux 计算节点之一。

  2. 运行以下命令以设置 OpenFOAM 运行时环境(如果尚未执行此作)。

    $ source /openfoam/settings.sh
    
  3. 将 sloshingTank3D 示例复制到共享文件夹并导航到该文件夹。

    $ cp -r $FOAM_TUTORIALS/multiphase/interDyMFoam/ras/sloshingTank3D /openfoam/
    
    $ cd /openfoam/sloshingTank3D
    
  4. 使用此示例的默认参数时,可能需要数十分钟才能运行,因此可能需要修改一些参数,使其运行速度更快。 一个简单的选择是在 system/controlDict 文件中修改时间步骤变量 deltaT 和 writeInterval。 此文件存储与时间控制、读取和写入解决方案数据相关的所有输入数据。 例如,可以将 deltaT 的值从 0.05 更改为 0.5,将 writeInterval 的值从 0.05 更改为 0.5。

    修改步骤变量

  5. 为系统/decomposeParDict文件中的变量指定所需的值。 此示例使用两个具有 8 个核心的 Linux 节点,因此将 numberOfSubdomains 设置为 16,将分层Coeffs 的 n 个节点设置为 (1 1 1 16),这意味着与 16 个进程并行运行 OpenFOAM。 有关详细信息,请参阅 OpenFOAM 用户指南:3.4 并行运行应用程序

    分解流程

  6. 从 sloshingTank3D 目录运行以下命令,准备示例数据。

    $ . $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  
    
  7. 在头节点上,应会看到示例数据文件复制到 C:\OpenFoam\sloshingTank3D 中。 (C:\OpenFoam 是头节点上的共享文件夹。

    头节点上的数据文件

mpirun 的主机文件

在此步骤中,将创建 mpirun 命令使用的主机文件(计算节点列表)。

  1. 在一个 Linux 节点上,在 /openfoam 下创建名为 hostfile 的文件,以便可以在所有 Linux 节点上的 /openfoam/hostfile 上访问此文件。

  2. 将 Linux 节点名称写入此文件中。 在此示例中,该文件包含以下名称:

    SUSE12RDMA-LN1
    SUSE12RDMA-LN2
    

    小提示

    还可以在头节点上的 C:\OpenFoam\hostfile 中创建此文件。 如果选择此选项,请将其保存为包含 Linux 行尾的文本文件(仅 LF,而不是 CR LF)。 这可确保它在 Linux 节点上正常运行。

    Bash 脚本封装器

    如果有多个 Linux 节点,并且希望作业仅在其中一些节点上运行,则使用固定主机文件不是一个好主意,因为不知道将哪个节点分配给作业。 在这种情况下,为 mpirun 编写 bash 脚本包装器以自动创建主机文件。 可以在本文末尾找到名为 hpcimpirun.sh 的示例 bash 脚本包装器,并将其另存为 /openfoam/hpcimpirun.sh。此示例脚本执行以下作:

    1. 设置 mpirun 的环境变量,以及一些新增命令参数,以便通过 RDMA 网络运行 MPI 作业。 在这种情况下,它将设置以下变量:

      • I_MPI_FABRICS=shm:dapl
      • I_MPI_DAPL_PROVIDER=ofa-v2-ib0
      • I_MPI_DYNAMIC_CONNECTION=0
    2. 根据环境变量$CCP_NODES_CORES 创建主机文件,该变量由 HPC 头节点在激活作业时设置。

      $CCP_NODES_CORES 的格式遵循以下模式:

      <Number of nodes> <Name of node1> <Cores of node1> <Name of node2> <Cores of node2>...`
      

      其中

      • <Number of nodes> - 分配给此作业的节点数。
      • <Name of node_n_...> - 分配给此作业的每个节点的名称。
      • <Cores of node_n_...> - 分配给此作业的节点上的核心数。

      例如,如果作业需要两个节点才能运行,$CCP_NODES_CORES 类似于

      2 SUSE12RDMA-LN1 8 SUSE12RDMA-LN2 8
      
    3. 调用 mpirun 命令,并将两个参数追加到命令行。

      • --hostfile <hostfilepath>: <hostfilepath> - 脚本创建的主机文件的路径
      • -np ${CCP_NUMCPUS}: ${CCP_NUMCPUS} - 由 HPC Pack 头节点设置的环境变量,用于存储分配给此作业的总核心数。 在这种情况下,它指定 mpirun 的进程数。

提交 OpenFOAM 任务

现在可以在 HPC 群集管理器中提交作业。 需要为某些作业任务在命令行中传递脚本 hpcimpirun.sh。

  1. 连接到群集头节点并启动 HPC 群集管理器。

  2. 在资源管理中,确保 Linux 计算节点处于 联机 状态。 如果没有,请选择它们,然后单击“ 联机引入”。

  3. 作业管理中,单击“ 新建作业”。

  4. 输入作业的名称,例如 sloshingTank3D

    作业详细信息

  5. 作业资源中,选择资源类型作为“节点”,并将最小值设置为 2。 此配置在两个 Linux 节点上运行作业,每个节点在此示例中都有 8 个核心。

    作业资源

  6. 单击左侧导航中的 “编辑任务 ”,然后单击“ 添加 ”将任务添加到作业。 使用以下命令行和设置将四个任务添加到作业。

    注释

    运行 source /openfoam/settings.sh 设置 OpenFOAM 和 MPI 运行时环境,因此以下每个任务都会在 OpenFOAM 命令之前调用它。

    • 任务 1. 运行 decomposePar 以生成数据文件,以便并行运行 interDyMFoam

      • 将一个节点分配给任务
      • 命令行 - source /openfoam/settings.sh && decomposePar -force > /openfoam/decomposePar${CCP_JOBID}.log
      • 工作目录 - /openfoam/sloshingTank3D

      请参阅下图。 可以类似地配置剩余的任务。

      任务 1 详细信息

    • 任务 2. 并行运行 interDyMFoam 以计算示例。

      • 向任务分配两个节点
      • 命令行 - source /openfoam/settings.sh && /openfoam/hpcimpirun.sh interDyMFoam -parallel > /openfoam/interDyMFoam${CCP_JOBID}.log
      • 工作目录 - /openfoam/sloshingTank3D
    • 任务 3. 运行 reconstructPar 将每个 processor_N_ 目录中的时间目录集合合并为一个完整集合。

      • 将一个节点分配给任务
      • 命令行 - source /openfoam/settings.sh && reconstructPar > /openfoam/reconstructPar${CCP_JOBID}.log
      • 工作目录 - /openfoam/sloshingTank3D
    • 任务 4. 并行运行 foamToEnsight ,将 OpenFOAM 结果文件转换为 EnSight 格式,并将 EnSight 文件放置在案例目录中名为 Ensight 的目录中。

      • 向任务分配两个节点
      • 命令行 - source /openfoam/settings.sh && /openfoam/hpcimpirun.sh foamToEnsight -parallel > /openfoam/foamToEnsight${CCP_JOBID}.log
      • 工作目录 - /openfoam/sloshingTank3D
  7. 按升序向这些任务添加依赖项。

    任务依赖项

  8. 单击“ 提交 ”以运行此作业。

    默认情况下,HPC Pack 会以您当前登录的用户帐户提交作业。 单击“ 提交”后,可能会看到一个对话框,提示输入用户名和密码。

    作业凭据

    在某些情况下,HPC Pack 会记住之前输入的用户信息,并且不显示此对话框。 若要再次显示 HPC Pack,请在命令提示符处输入以下命令,然后提交作业。

    hpccred delcreds
    
  9. 根据为示例设置的参数,作业需要数十分钟到几小时。 在热度映射中,可以看到在 Linux 节点上运行的作业。

    热度地图

    在每个节点上,将启动八个进程。

    Linux 进程

  10. 作业完成后,在 C:\OpenFoam\sloshingTank3D 下的文件夹中找到作业结果,以及 C:\OpenFoam 上的日志文件。

在 EnSight 中查看结果

(可选)使用 EnSight 可视化和分析 OpenFOAM 作业的结果。

  1. 在头节点上安装 EnSight 后,启动它。

  2. 打开 C:\OpenFoam\sloshingTank3D\EnSight\sloshingTank3D.case。

    你在查看器中看到坦克。

    EnSight 中的坦克

  3. internalMesh 创建 Isosurface,然后选择变量alpha_water

    创建等值面

  4. 设置在上一步中创建 Isosurface_part 的颜色。 例如,将其设置为水蓝色。

    编辑等值面颜色

  5. 通过在“部件”面板中选择“墙壁”,然后单击工具栏中的“Isosurfaces”按钮,从“墙壁”创建Iso-volume

  6. 在对话框中,选择 “类型 ”作为 Isovolume ,并将 Isovolume 范围的 最小值设置为 0.5。 要创建 isovolume,请单击 使用所选部件创建

  7. 设置在上一步中创建 Iso_volume_part 的颜色。 例如,将其设置为深水蓝色。

  8. 设置 墙壁的颜色。 例如,将其设置为透明白色。

  9. 现在,单击 “播放 ”以查看模拟的结果。

    容器测试结果

示例文件

PowerShell 脚本用于群集部署的示例 XML 配置文件

<?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>

示例 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>

用于安装 MPI 的示例 silent.cfg 文件

# 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


示例 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

示例 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}