重要
经典 VM 将于 2023 年 3 月 1 日停用。
如果使用 ASM 中的 IaaS 资源,请在 2023 年 3 月 1 日完成迁移。 我们建议你尽快进行切换,以利用 Azure 资源管理器中的许多增强功能。
有关详细信息,请参阅在 2023 年 3 月 1 日之前将 IaaS 资源迁移到 Azure 资源管理器。
使用 Microsoft HPC Pack 和 支持 RDMA 的 HPC VM 大小 在 Azure 中设置 Windows RDMA 群集,以运行并行消息传递接口(MPI)应用程序。 在 HPC Pack 群集中设置支持 RDMA 的基于 Windows Server 的节点时,MPI 应用程序在 Azure 中基于远程直接内存访问(RDMA)技术的低延迟、高吞吐量网络高效通信。
HPC Pack 群集部署选项
Microsoft HPC Pack 是一种工具,无需额外付费即可在本地或 Azure 中创建 HPC 群集,以运行 Windows 或 Linux HPC 应用程序。 HPC Pack 包括 Microsoft 为 Windows 实现的消息传递接口的运行时环境(MS-MPI)。 在与受支持的 Windows Server 操作系统上运行的 RDMA 实例一起使用时,HPC Pack 提供了一个高效的选项,用于运行访问 Azure RDMA 网络的 Windows MPI 应用程序。
本文介绍了两个场景,并提供链接以获取使用 Microsoft HPC Pack 2012 R2 设置 Windows RDMA 群集的详细指南。
- 方案 1. 部署计算密集型辅助角色实例(PaaS)
- 方案 2. 在计算密集型 VM 中部署计算节点(IaaS)
方案 1:部署计算密集型工作角色实例(PaaS)
从现有的 HPC Pack 群集中,在云服务(PaaS)中运行的 Azure 辅助角色实例(Azure 节点)中添加额外的计算资源。 此功能也称为 HPC Pack 中的“突发到 Azure”,支持各种尺寸的工作角色实例。 添加 Azure 节点时,请指定支持 RDMA 的大小之一。
以下是从现有群集(通常为本地)迁移到支持 RDMA 的 Azure 实例的注意事项和步骤。 使用类似的过程,将工作角色实例添加到 Azure VM 中部署的 HPC Pack 头节点上。
注释
关于如何使用 HPC Pack 向 Azure 进行扩展的教程,请参阅 使用 HPC Pack 设置混合群集。 请注意以下步骤中适用于支持 RDMA 的 Azure 节点的注意事项。
步骤
部署和配置 HPC Pack 2012 R2 头节点
从 Microsoft下载中心下载 HPC Pack 安装包。 有关准备 Azure 突发部署的要求和说明,请参阅 使用 Microsoft HPC Pack 突发到 Azure 工作器实例。
在 Azure 订阅中配置管理证书
配置证书以保护头节点与 Azure 之间的连接。 有关选项和过程,请参阅 用于配置 HPC Pack 的 Azure 管理证书的方案。 对于测试部署,HPC Pack 会安装默认Microsoft HPC Azure 管理证书,可以快速上传到 Azure 订阅。
创建新的云服务和存储帐户
使用 Azure 门户创建云服务(经典)和存储帐户(经典)进行部署。 在可用 H 系列、A8 或 A9 大小的区域中创建这些资源。 按 区域查看 Azure 产品。
创建 Azure 节点模板
在 HPC 群集管理器中使用“创建节点模板向导”。 有关步骤,请参阅“使用 Microsoft HPC Pack 部署 Azure 节点的步骤” 中创建 Azure 节点模板 。
对于初始测试,我们建议在模板中配置手动可用性策略。
将节点添加到群集
在 HPC 群集管理器中使用“添加节点向导”。 有关详细信息,请参阅 将 Azure 节点添加到 Windows HPC 群集。
在指定节点大小时,请选择支持 RDMA 的实例大小之一。
注释
每次突发使用计算密集型实例进行 Azure 部署时,HPC Pack 除了您指定的 Azure 工作角色实例外,还会自动至少部署两个支持 RDMA 的实例(例如 A8)作为代理节点。 代理节点使用分配给订阅的处理核心,并导致费用产生,连同 Azure 工作角色实例。
启动(预配)节点并将其联机以运行作业
选择节点并使用 HPC 群集管理器中的 “启动” 操作。 预配完成后,选择节点并在 HPC 群集管理器中使用“上线”操作。 节点已准备好运行作业。
将作业提交到群集
使用 HPC Pack 作业提交工具运行群集作业。 请参阅 Microsoft HPC Pack:作业管理。
停止(取消预配)节点
完成运行作业后,使节点脱机,并在 HPC 群集管理器中使用 停止 操作。
方案 2:在计算密集型 VM 中部署计算节点(IaaS)
在此方案中,你将在 Azure 虚拟网络中的 VM 上部署 HPC Pack 头节点和群集计算节点。 HPC Pack 在 Azure VM 中提供了多个部署选项,包括自动部署脚本和 Azure 快速入门模板。 例如,以下注意事项和步骤指导你使用 HPC Pack IaaS 部署脚本 在 Azure 中自动部署 HPC Pack 2012 R2 群集。
步骤
通过在客户端计算机上运行 HPC Pack IaaS 部署脚本,创建群集头节点和计算节点 VM
从 Microsoft下载中心下载 HPC Pack IaaS 部署脚本包。
若要准备客户端计算机、创建脚本配置文件并运行脚本,请参阅 使用 HPC Pack IaaS 部署脚本创建 HPC 群集。
有关部署支持 RDMA 的计算节点的注意事项,请参阅 高性能计算 VM 大小 并注意以下事项:
虚拟网络:在有您想使用的 H 系列、A8 或 A9 大小可用的地区中指定一个新的虚拟网络。 按 区域查看 Azure 产品。
Windows Server作系统:若要支持 RDMA 连接,请为计算节点 VM 指定兼容的 Windows Server作系统,例如 Windows Server 2012 R2。
云服务:由于脚本使用经典部署模型,因此群集 VM 是使用 Azure 云服务部署的(
ServiceName
配置文件中的设置)。 建议将您的头节点部署在一个云服务中,并将您的计算节点部署在另一个云服务中。头节点大小:对于此方案,请考虑头节点的大小至少为 A4(特大)。
HpcVmDrivers 扩展:部署脚本在使用 Windows Server 操作系统部署 A8 或 A9 计算节点时自动安装 Azure VM 代理和 HpcVmDrivers 扩展。 HpcVmDrivers 在计算节点 VM 上安装驱动程序,以便它们可以连接到 RDMA 网络。 在支持 RDMA 的 H 系列 VM 上,必须手动安装 HpcVmDrivers 扩展。 请参阅 高性能计算 VM 大小。
群集网络配置:部署脚本会自动在拓扑 5(企业网络上的所有节点)中设置 HPC Pack 群集。 VM 中所有 HPC Pack 群集部署都需要此拓扑。 以后不要更改群集网络拓扑。
使计算节点联机以运行作业
选择节点并在 HPC 群集管理器中使用 “联机” 操作。 节点已准备好执行任务。
将作业提交到群集
连接到头节点以提交作业,或设置本地计算机以执行此作。 有关信息,请参阅 将作业提交到 Azure 中的 HPC 群集。
使节点脱机并停止(解除分配)
完成运行作业后,在 HPC 群集管理器中使节点脱机。 然后,使用 Azure 管理工具将其关闭。
在群集上运行 MPI 应用程序
示例:在 HPC Pack 群集上运行 mpipingpong
若要验证支持 RDMA 的实例的 HPC Pack 部署,请在群集上运行 HPC Pack mpipingpong 命令。 mpipingpong 重复发送配对节点之间的数据包,以计算已启用 RDMA 的应用程序网络的延迟和吞吐量度量和统计信息。 此示例演示了使用群集 mpiexec 命令运行 MPI 作业(在本例中为 mpipingpong)的典型模式。
此示例假定你在本文中的“快速扩展至 Azure”配置([方案 1](#scenario-1-deploy-compute-intensive-worker-role-instances-paas))中添加了 Azure 节点。 如果在 Azure VM 群集上部署了 HPC Pack,则需要修改命令语法以指定其他节点组,并设置其他环境变量以将网络流量定向到 RDMA 网络。
若要在群集上运行 mpipingpong,请执行以下操作:
在头节点上或正确配置的客户端计算机上,打开命令提示符。
若要估算 Azure 边缘部署中四个节点之间的延迟,请键入以下命令提交作业,以运行具有较小数据包大小和多次迭代的 mpipingpong:
job submit /nodegroup:azurenodes /numnodes:4 mpiexec -c 1 -affinity mpipingpong -p 1:100000 -op -s nul
该命令返回提交的作业的 ID。
如果部署在 Azure VM 上部署的 HPC Pack 群集,请指定一个节点组,其中包含在单个云服务中部署的计算节点 VM,并修改 mpiexec 命令,如下所示:
job submit /nodegroup:vmcomputenodes /numnodes:4 mpiexec -c 1 -affinity -env MSMPI_DISABLE_SOCK 1 -env MSMPI_PRECONNECT all -env MPICH_NETMASK 172.16.0.0/255.255.0.0 mpipingpong -p 1:100000 -op -s nul
作业完成后,若要查看输出(在这种情况下,作业的任务 1 的输出),请键入以下内容
task view <JobID>.1
其中 <JobID> 是提交的作业的 ID。
输出包括如下所示的延迟结果。
若要估计 Azure 突发节点对之间的吞吐量,请输入以下命令以提交一个运行 mpipingpong 的作业,并使用大数据包大小和几次迭代。
job submit /nodegroup:azurenodes /numnodes:4 mpiexec -c 1 -affinity mpipingpong -p 4000000:1000 -op -s nul
该命令返回提交的作业的 ID。
在部署在 Azure VM 上的 HPC Pack 群集上,按照步骤 2 中所述修改命令。
作业完成后,若要查看输出(在本例中,作业的任务 1 的输出),请键入以下内容:
task view <JobID>.1
输出包括类似于以下内容的吞吐量结果。
MPI 应用程序注意事项
以下是在 Azure 中使用 HPC Pack 运行 MPI 应用程序的注意事项。 某些实例仅适用于部署 Azure 节点(在“Azure 突发配置”中添加的工作角色实例)。
云服务中的辅助角色实例会被 Azure 定期在不通知的情况下重新预配(例如,系统维护或实例失败)。 如果在运行 MPI 作业时重新预配实例,该实例将丢失其数据,并在首次部署时返回状态,这可能导致 MPI 作业失败。 用于单个 MPI 作业的节点越多,运行作业的时间越长,在作业运行时,其中一个实例就越有可能重新预配。 如果将部署中的单个节点指定为文件服务器,则还要考虑这一点。
若要在 Azure 中运行 MPI 作业,无需使用支持 RDMA 的实例。 可以使用 HPC Pack 支持的任何实例大小。 但是,建议使用支持 RDMA 的实例来运行相对大规模的 MPI 作业,这些作业对连接节点的延迟和网络带宽很敏感。 如果使用其他大小来运行延迟和带宽敏感的 MPI 作业,我们建议运行小型作业,其中单个任务仅在几个节点上运行。
部署到 Azure 实例的应用程序受与应用程序关联的许可条款的约束。 请向商业应用程序的供应商咨询有关在云中运行的许可或其他限制。 并非所有供应商都提供即用即付许可。
Azure 实例需要进一步设置才能访问本地节点、共享和许可证服务器。 例如,若要使 Azure 节点能够访问本地许可证服务器,可以配置站点到站点 Azure 虚拟网络。
若要在 Azure 实例上运行 MPI 应用程序,请运行 hpcfwutil 命令,将每个 MPI 应用程序注册到实例上的 Windows 防火墙。 这样,MPI 通信就可以在防火墙动态分配的端口上进行。
注释
对于向 Azure 部署的突发请求,还可以配置防火墙例外命令,使其在添加到集群中的所有新 Azure 节点上自动运行。 运行 hpcfwutil 命令并验证应用程序是否正常工作后,将命令添加到 Azure 节点的启动脚本。 有关详细信息,请参阅 使用 Azure 节点的启动脚本。
HPC Pack 使用 CCP_MPI_NETMASK 群集环境变量来指定 MPI 通信的可接受地址范围。 从 HPC Pack 2012 R2 开始,CCP_MPI_NETMASK群集环境变量仅影响已加入域的群集计算节点(本地或 Azure VM)之间的 MPI 通信。 在突发添加到 Azure 配置中的节点会忽略此变量。
MPI 作业不能跨不同云服务中部署的 Azure 实例运行(例如,使用不同节点模板的突发到 Azure 部署,或部署在多个云服务中的 Azure VM 计算节点)。 如果有多个以不同节点模板启动的 Azure 节点部署,则 MPI 作业必须仅在一组 Azure 节点上运行。
将 Azure 节点添加到群集并使其联机时,HPC 作业计划程序服务会立即尝试在节点上启动作业。 如果只有一部分工作负荷可以在 Azure 上运行,请确保更新或创建作业模板以定义可在 Azure 上运行的作业类型。 例如,若要确保使用作业模板提交的作业仅在 Azure 节点上运行,请将 Node Groups 属性添加到作业模板,并选择 AzureNodes 作为所需值。 若要为 Azure 节点创建自定义组,请使用 Add-HpcGroup HPC PowerShell cmdlet。
后续步骤
- 作为使用 HPC Pack 的替代方法,请通过 Azure Batch 服务进行开发,在 Azure 中的计算节点托管池上运行 MPI 应用程序。 请参阅 使用多实例任务在 Azure Batch 中运行消息传递接口(MPI)应用程序。