在 Azure 中的 Linux RDMA 群集上运行 STAR-CCM+ 和 Microsoft HPC Pack

09/13/2016

本文内容

重要

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

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

本文说明如何在 Azure 上部署 Microsoft HPC Pack 群集,并在与 InfiniBand 互连的多个 Linux 计算节点上运行 CD-adapco STAR-CCM+ 作业。

备注

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

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

设置 HPC Pack 群集

从下载中心下载 HPC Pack IaaS 部署脚本,并在本地将其解压缩。

Azure PowerShell 是必备组件。 如果未在本地计算机上配置 PowerShell,请阅读 How to install and configure Azure PowerShell(如何安装和配置 Azure PowerShell)一文。

编写本文时,Azure 市场中的 Linux 映像(包含 Azure 的 InfiniBand 驱动程序)适用于 SLES 12、CentOS 6.5 和 CentOS 7.1。 本文假设使用的是 SLES 12。 若要检索市场中支持 HPC 的所有 Linux 映像的名称,可以运行以下 PowerShell 命令:

get-azurevmimage | ?{$_.ImageName.Contains("hpc") -and $_.OS -eq "Linux" }

输出将列出提供这些映像的位置以及稍后要在部署模板中使用的映像名称 (ImageName)。

在部署群集之前,必须构建 HPC Pack 部署模板文件。 由于我们的目标是小型群集,因此头节点是域控制器并托管本地 SQL 数据库。

以下模板将部署此类头节点,创建名为 MyCluster.xml 的 XML 文件,并将 SubscriptionId、StorageAccount、Location、VMName 和 ServiceName 的值替换为自己的值。

99999999-9999-9999-9999-999999999999

mystorageaccount

North Europe

hpcvnetne

subnet-hpc

HeadNodeAsDC

hpc.local

LocalDB

myhpchn

myhpchn

Standard_D4

lnxcn-%0001%

mylnxcn%01%

20

mylnxstorage%01%

A9

0

b4590d9e3ed742e4a1d46e5424aa335e__suse-sles-12-hpc-v20150708

在权限提升的命令提示符下运行 PowerShell 命令,以开始创建头节点:

.\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml

20 到 30 分钟后,头节点应准备就绪。 可以在 Azure 门户中单击虚拟机的“连接”图标连接到头节点。

最终可能需要修复 DNS 转发器。 为此,请启动 DNS 管理器。

在 DNS 管理器中右键单击服务器名称,选择“属性”,并单击“转发器”选项卡。

单击“编辑”按钮删除所有转发器,并单击“确定”。

确保已选中“如果没有转发器可用,请使用根提示”复选框,并单击“确定”。

设置 Linux 计算节点

使用用于创建头节点的同一部署模板来部署 Linux 计算节点。

将文件“MyCluster.xml”从本地计算机复制到头节点,并使用要部署的节点数 (<=20) 更新“NodeCount”标记。 请确保在 Azure 配额中保留足够的可用核心,因为每个 A9 实例将占用订阅中的 16 个核心。 在预算不变的情况下,若要使用更多的 VM,可以使用 A8 实例(8 核心)而不要使用 A9。

在头节点上,复制 HPC Pack IaaS 部署脚本。

在权限提升的命令提示符下运行以下 Azure PowerShell 命令:

运行 Add-AzureAccount 连接到 Azure 订阅。

如果有多个订阅,请运行 Get-AzureSubscription 列出这些订阅。

运行 Select-AzureSubscription -SubscriptionName xxxx -Default 命令设置默认订阅。

运行 .\New-HPCIaaSCluster.ps1 -ConfigFile MyCluster.xml 开始部署 Linux 计算节点。

打开 HPC Pack 群集管理器工具。 几分钟后,Linux 计算节点会规则地显示在群集计算节点列表中。 使用经典部署模式可依序创建 IaaS VM。 因此,如果节点数目十分重要,则部署所有节点可能需要很长时间。

现在,群集中的所有节点都已启动并运行,接下来可进行其他基础结构设置。

为 Windows 和 Linux 节点设置 Azure 文件共享

可以使用 Azure 文件服务来存储脚本、应用程序包和数据文件。 Azure 文件在用作持久性存储的 Azure Blob 存储顶层提供 CIFS 功能。 请注意,这不是缩放性最高的解决方案,但它是最简单且不需要专用 VM 的解决方案。

遵循 Get started with Azure File storage on Windows(在 Windows 上开始使用 Azure 文件存储)一文中的说明创建 Azure 文件共享。

将存储帐户名保留为 saname,将文件共享名保留为 sharename,将存储帐户密钥保留为 sakey。

在头节点上装载 Azure 文件共享

打开权限提升的命令提示符,然后运行以下命令,将凭据存储在本地计算机保管库中:

cmdkey /add:.file.core.windows.net /user: /pass:

然后,要装载 Azure 文件共享,请运行:

net use Z: \\.file.core.windows.net\ /persistent:yes

在 Linux 计算节点上装载 Azure 文件共享

HPC Pack 随附的一个有用工具是 clusrun 工具。 可以使用此命令行工具,在一组计算节点上同时运行同一个命令。 在本例中,将使用该工具装载 Azure 文件共享,然后持久保存该文件共享以避免重新启动。

在头节点上的权限提升的命令提示符下运行以下命令。

创建装载目录:

clusrun /nodegroup:LinuxNodes mkdir -p /hpcdata

装载 Azure 文件共享:

clusrun /nodegroup:LinuxNodes mount -t cifs //.file.core.windows.net/ /hpcdata -o vers=2.1,username=,password='',dir_mode=0777,file_mode=0777

持久保存装载共享:

clusrun /nodegroup:LinuxNodes "echo //.file.core.windows.net/ /hpcdata cifs vers=2.1,username=,password='',dir_mode=0777,file_mode=0777 >> /etc/fstab"

安装 STAR-CCM+

Azure VM 实例 A8 和 A9 提供 InfiniBand 支持和 RDMA 功能。 启用这些功能的内核驱动程序适用于 Azure 市场中的 Windows Server 2012 R2、SUSE 12、CentOS 6.5 和 CentOS 7.1 映像。 Microsoft MPI 和 Intel MPI(5.x 版)是 Azure 中可支持这些驱动程序的两个 MPI 库。

CD-adapco STAR-CCM+ 11.x 和更高版本与 Intel MPI 版本5.x 捆绑在一起,因此包含 Azure 的 InfiniBand 支持。

从 CD-adapco 门户获取 Linux64 STAR-CCM+ 包。 本例使用了混合精度的 11.02.010 版本。

在头节点上的 /hpcdata Azure 文件共享中,创建包含以下内容的名为 setupstarccm.sh 的 shell 脚本。 此脚本会在每个计算节点上运行,以便在本地设置 STAR-CCM+。

示例 setupstarcm.sh 脚本

#!/bin/bash

# setupstarcm.sh to set up STAR-CCM+ locally

# Create the CD-adapco main directory

mkdir -p /opt/CD-adapco

# Copy the STAR-CCM package from the file share to the local directory

cp /hpcdata/StarCCM/STAR-CCM+11.02.010_01_linux-x86_64.tar.gz /opt/CD-adapco/

# Extract the package

tar -xzf /opt/CD-adapco/STAR-CCM+11.02.010_01_linux-x86_64.tar.gz -C /opt/CD-adapco/

# Start a silent installation of STAR-CCM without the FLEXlm component

/opt/CD-adapco/starccm+_11.02.010/STAR-CCM+11.02.010_01_linux-x86_64-2.5_gnu4.8.bin -i silent -DCOMPUTE_NODE=true -DNODOC=true -DINSTALLFLEX=false

# Update memory limits

echo "* hard memlock unlimited" >> /etc/security/limits.conf

echo "* soft memlock unlimited" >> /etc/security/limits.conf

现在,若要在所有 Linux 计算节点上设置 STAR-CCM+,请打开权限提升的命令提示符并运行以下命令:

clusrun /nodegroup:LinuxNodes bash /hpcdata/setupstarccm.sh

运行该命令时,可以使用群集管理器的热度地图来监视 CPU 使用率。 几分钟后,所有节点应已正确设置。

运行 STAR-CCM+ 作业

将 HPC Pack 与其作业计划程序功能配合使用可以运行 STAR-CCM+ 作业。 为此,我们需要支持几个用于启动作业和运行 STAR-CCM+ 的脚本。 为方便起见,我们首先将输入数据保留在 Azure 文件共享上。

以下 PowerShell 脚本用于将 STAR-CCM+ 作业排入队列。 该脚本使用了三个参数:

模型名称

要使用的节点数

要在每个节点上使用的核心数

由于 STAR-CCM+ 可能会占用内存带宽,因此,通常更好的做法是在每个计算节点上使用较少的核心和添加新节点。 每个节点的确切核心数取决于处理器系列和互连速度。

节点是专门为该作业分配的,不能与其他作业共享。 该作业不会直接作为 MPI 作业启动。 runstarccm.sh shell 脚本将启动 MPI 启动器。

输入模型和 runstarccm.sh 脚本存储在前面装载的 /hpcdata 共享中。

日志文件以作业 ID 命名,并连同 STAR-CCM+ 输出文件一起存储在 /hpcdata 共享中。

示例 SubmitStarccmJob.ps1 脚本

Add-PSSnapin Microsoft.HPC -ErrorAction silentlycontinue

$scheduler="headnodename"

$modelName=$args[0]

$nbCoresPerNode=$args[2]

$nbNodes=$args[1]

#---------------------------------------------------------------------------------------------------------

# Create a new job; this will give us the job ID that's used to identify the name of the uploaded package in Azure

#

$job = New-HpcJob -Name "$modelName $nbNodes $nbCoresPerNode" -Scheduler $scheduler -NumNodes $nbNodes -NodeGroups "LinuxNodes" -FailOnTaskFailure $true -Exclusive $true

$jobId = [String]$job.Id

#---------------------------------------------------------------------------------------------------------

# Submit the job

$workdir = "/hpcdata"

$execName = "$nbCoresPerNode runner.java $modelName.sim"

$job | Add-HpcTask -Scheduler $scheduler -Name "Compute" -stdout "$jobId.log" -stderr "$jobId.err" -Rerunnable $false -NumNodes $nbNodes -Command "runstarccm.sh $execName" -WorkDir "$workdir"

Submit-HpcJob -Job $job -Scheduler $scheduler

将 runner.java 替换为首选的 STAR-CCM+ Java 模型启动器和日志记录代码。

示例 runstarccm.sh 脚本

#!/bin/bash

echo "start"

# The path of this script

SCRIPT_PATH="$( dirname "${BASH_SOURCE[0]}" )"

echo ${SCRIPT_PATH}

# Set the mpirun runtime environment

export CDLMD_LICENSE_FILE=1999@flex.cd-adapco.com

# mpirun command

STARCCM=/opt/CD-adapco/STAR-CCM+11.02.010/star/bin/starccm+

# Get node information from ENVs

NODESCORES=(${CCP_NODES_CORES})

COUNT=${#NODESCORES[@]}

NBCORESPERNODE=$1

# Create the hostfile file

NODELIST_PATH=${SCRIPT_PATH}/hostfile_$$

echo ${NODELIST_PATH}

# Get every node name and write into the hostfile file

I=1

NBNODES=0

while [ ${I} -lt ${COUNT} ]

do

echo "${NODESCORES[${I}]}" >> ${NODELIST_PATH}

let "I=${I}+2"

let "NBNODES=${NBNODES}+1"

done

let "NBCORES=${NBNODES}*${NBCORESPERNODE}"

# Run STAR-CCM with the hostfile argument

#

${STARCCM} -np ${NBCORES} -machinefile ${NODELIST_PATH} \

-power -podkey "" -rsh ssh \

-mpi intel -fabric UDAPL -cpubind bandwidth,v \

-mppflags "-ppn $NBCORESPERNODE -genv I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -genv I_MPI_DAPL_UD=0 -genv I_MPI_DYNAMIC_CONNECTION=0" \

-batch $2 $3

RTNSTS=$?

rm -f ${NODELIST_PATH}

exit ${RTNSTS}

在测试中,我们使用了 Power-On-Demand 许可证令牌。 对于该令牌,必须在命令行的 -podkey 选项中将 $CDLMD_LICENSE_FILE1999@flex.cd-adapco.com 环境变量设置为 和密钥。

在完成一些初始化之后,该脚本将从 HPC Pack 设置的 $CCP_NODES_CORES 环境变量中提取节点列表,构建 MPI 启动器使用的 hostfile。 此 hostfile 将包含作业使用的计算节点名称列表(每行包含一个名称)。

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

...`

其中:

是分配给此作业的节点数。

是分配给此作业的每个节点的名称。

是分配给此作业的节点上的核心数。

核心数目 ( $NBCORES) 也是根据节点数目 ( $NBNODES) 和每个节点的核心数目(以 $NBCORESPERNODE 参数的形式提供)计算得出的。

在 Azure 上配合 Intel MPI 使用的 MPI 选项如下:

-mpi intel:指定 Intel MPI。

-fabric UDAPL:使用 Azure InfiniBand 谓词。

-cpubind bandwidth,v:使用 STAR-CCM+ 优化 MPI 的带宽。

-mppflags "-ppn $NBCORESPERNODE -genv I_MPI_DAPL_PROVIDER=ofa-v2-ib0 -genv I_MPI_DAPL_UD=0 -genv I_MPI_DYNAMIC_CONNECTION=0":让 Intel MPI 与 Azure InfiniBand 配合使用,以及设置每个节点的所需核心数。

-batch:在批处理模式下(不使用 UI)启动 STAR-CCM+。

最后,若要启动作业,请确保节点已启动并运行,并已在群集管理器中联机。 然后在 PowerShell 命令提示符下运行以下命令:

.\ SubmitStarccmJob.ps1

停止节点

稍后在完成测试后,可以使用以下 HPC Pack PowerShell 命令来停止和启动节点:

Stop-HPCIaaSNode.ps1 -Name -00*

Start-HPCIaaSNode.ps1 -Name -00*

后续步骤

尝试运行其他 Linux 工作负荷。 有关示例,请参阅:

star ccm 报java错误_在 Linux VM 上运行 STAR-CCM+ 与 HPC Pack - Azure Virtual Machines | Microsoft Docs...相关推荐

  1. azure linux 配置端口,快速入门 - 在 Azure 门户中创建 Linux VM - Azure Virtual Machines | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 快速入门:在 Azur ...

  2. 服务器如何运行java文件_在linux服务器上运行java文件

    1.  在windows环境下编写java类,如java类是Test类. 2.  将该Test类上传到linux服务器上,命令如下: mapred@10:/bwdata168_2/hyg$rz  -b ...

  3. xrdp linux 3389 端口,在 Linux 中使用 xrdp - Azure Virtual Machines | Microsoft Docs

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. 安装并配置 xrdp ...

  4. linux 计算标准差,Azure Linux VM 的计算基准测试分数 - Azure Virtual Machines | Microsoft Docs...

    您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn. Linux VM 的计 ...

  5. Linux移动光标指令hkjl,使用 HPC Pack 在 Linux VM 上執行 OpenFOAM - Azure Virtual Machines | Microsoft Docs...

    在 Azure 中的 Linux RDMA 叢集以 Microsoft HPC Pack 執行 OpenFoam 07/22/2016 本文內容 重要 傳統 Vm 將于2023年3月1日淘汰. 如果您 ...

  6. linux 内核配置raid,在 Linux VM 上配置软件 RAID - Azure Virtual Machines | Microsoft Docs

    在 Linux 上配置软件 RAID 02/02/2017 本文内容 一种比较常见的情况是,在 Azure 中的 Linux 虚拟机上使用软件 RAID 将多个附加的数据磁盘显示为单个 RAID 设备 ...

  7. 负载均衡mysql的使用_使用负载均衡集群集化 MySQL - Azure Virtual Machines | Microsoft Docs...

    使用负载均衡的集来群集化 Linux 上的 MySQL 04/14/2015 本文内容 重要 经典 VM 将于 2023 年 3 月 1 日停用. 如果从 ASM 使用 IaaS 资源,请在 2023 ...

  8. Java程序部署到Linux环境上运行

    文章目录 前言 一.Java环境安装 二.Eclipse编译java程序并导出jar包 三.Linux环境上运行jar包 前言 想要在Linux上运行java程序,可以将java程序编译成功后导出成j ...

  9. linux如何查看jupyter日志_在Linux服务器上运行Jupyter notebook server教程

    在Linux服务器上运行Jupyter notebook server教程 很多deep learning教程都推荐在jupyter notebook运行python代码,方便及时交互.但只在本地运行 ...

最新文章

  1. ubuntu下配置华为交换机s2016
  2. JEESZ分布式框架之技术介绍文档
  3. mybatis mysql rownum_MyBatis怎样实现MySQL动态分页?
  4. 软件质量保证与测试——Smoke Test
  5. Angular中实现路由跳转并通过get方式传递参数
  6. Python 网络爬虫笔记11 -- Scrapy 实战
  7. 在考生文件夹存有JAVA3_注意:下面出现的“考生文件夹”均为%USER%在考生文件夹下存有文件名为J_网考网(Netkao.com)...
  8. How to check bad fix
  9. DM入门之Apriori小结
  10. html get请求_99% 的人都理解错了 HTTP 中 GET 与 POST 的区别【面试必问】
  11. java环形队列测试,JAVA数据结构之循环队列的实现
  12. centos7.5 supervisor +nginx 开机启动设置(实测最有效)以及出现问题思路
  13. TOONTRACK Electronic Edge EZX(Toontrack打击乐扩展包)
  14. 帆软动态分页之单数据集行式报表(模板-引擎设设置启用及行数)
  15. gpt分区安装的Win7激活工具
  16. MySQL数据库面试题(2022最新版)
  17. 电子科学与技术毕业论文题目【452个】
  18. 大学四年,工作2年我总结了后端面试的所有知识点(持续更新)
  19. 微信小程序实现全局登陆状态
  20. 小程序webview应用实践

热门文章

  1. python数据分析常见错误_Python数据分析常用语句(一)
  2. 力求颜值与干货齐高,出品人深度解读三大专场
  3. MVC与三层架构模型笔记
  4. 如何下载电脑版音频剪辑软件?
  5. 搜狗输入法输入,字母全是大写且之间有间隔
  6. 数学实验2:微分方程的数值解与解析解
  7. Android 分区
  8. 时间复杂度和空间复杂度简介
  9. Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
  10. 流量分析“Understanding Traffic Density from Large-Scale Web Camera Data”