亚马逊AWS官方博客

使用 Elastic Fabric Adapter 和 AWS ParallelCluster 扩展 HPC 工作负载

2019 年 4 月,AWS 宣布正式发布 Elastic Fabric Adapter (EFA),这是一种 EC2 网络设备,它可以提高分布式高性能计算 (HPC) 和机器学习 (ML) 工作负载的吞吐量和可扩展性。今天,我们很高兴宣布通过 AWS ParallelCluster 支持 EFA。

EFA 是一种适用于 Amazon EC2 实例的网络接口,您可以借助它在 AWS 上大规模运行需要高水平实例间通信的 HPC 应用程序(例如计算流体动力学、天气建模以及库区模拟等)。它使用行业标准的操作系统绕过技术,借助新的自定义可扩展可靠数据报 (SRD) 协议来增强实例间通信性能,这对于 HPC 应用程序的扩展至关重要。有关 EFA 和所支持实例类型的更多信息,请参阅 Elastic Fabric Adapter (EFA) for Tightly-Coupled HPC Workloads

建立启用 EFA 功能的 HPC 集群涉及许多并无重要价值的繁重工作,这些全部都由 AWS ParallelCluster 负责。当您在“cluster”部分设置 enable_efa = compute 标签时,AWS ParallelCluster 将会为所有网络增强实例添加 EFA。具体而言,AWS ParallelCluster 将会执行下列步骤:

  1. 在启动模板中设置 InterfaceType = efa
  2. 确保安全组的规则允许指向自己的所有入站和出站流量。与传统 TCP 流量不同,EFA 要求有一条入站规则和一条出站规则明确允许指向自己的安全组 (ID sg-xxxxx) 的所有流量。更多信息请参阅准备启用了 EFA 的安全组
  3. 安装 EFA 内核模块(这是一个 AWS 专用版本的 Libfabric 网络堆栈)和 OpenMPI 3.1.4
  4. 验证实例类型、基础操作系统和置放组。

如要开始使用,您需要安装 AWS ParallelCluster,具体请参阅 AWS ParallelCluster 入门。对于本教程,我们将假设您已经安装了 AWS ParallelCluster 并且熟悉 ~/.parallelcluster/config 文件。

修改您的 ~/.parallelcluster/config 以使“cluster”部分至少包含下列参数:

[global]
cluster_template = efa
update_check = true
sanity_check = true

[aws]
aws_region_name = [your_aws_region]

[cluster efa]
key_name =               [your_keypair]
vpc_settings =           public
base_os =                alinux
master_instance_type =   c5.xlarge
compute_instance_type =  c5n.18xlarge
placement_group =        DYNAMIC
enable_efa = compute [vpc public]
vpc_id = [your_vpc]
master_subnet_id = [your_subnet]
  • base_os — 目前我们支持启用 EFA 的 Amazon Linux (alinux)、Centos 7 (centos7) 和 Ubuntu 16.04 (ubuntu1604)。
  • master_instance_type 可以是任何实例类型(它位于为计算节点组件的置放组之外,不启用 EFA)。我们选择的是 c5n.xlarge,因为与 c5n.18xlarge 相比,它的价格更便宜但仍具有极佳的网络性能。
  • compute_instance_type EFA 仅在计算节点上启用;这是您通过某个计划程序提交作业时运行代码的地方,这些实例应为支持的实例类型(在本文执笔之时包括 c5n.18xlarge、i3en.24xlarge、p3dn.24xlarge)。请参阅文档以了解当前支持的实例类型
  • placement_group 以物理相邻的方式放置您的计算节点,便于您充分发挥 EFA 的低网络延迟和高吞吐量优势。
  • enable_efa 这是唯一的新增新参数,用于为计算节点增加 EFA 支持。目前只有一个选项,即 compute。这是为了提醒您注意 EFA 仅在计算节点上启用。

然后您可以创建集群:

$ pcluster create efa
Status: CREATE_COMPLETE
MasterServer: RUNNING
MasterPublicIP: 3.215.238.41
ClusterUser: ec2-user
MasterPrivateIP: 172.31.25.64

完成集群创建后,您可以为集群添加 SSH:

$ pcluster ssh efa -i ~/path/to/ssh_key

这时您可以看到其中有一个模块 openmpi/3.1.4 可用。该模块加载时,您可以在 /opt/amazon/efa 中确认 PATH 中的 mpirun 已正确设置为启用 EFA 的版本:

[ec2-user@ip-172-31-17-220 ~]$ module avail

----------------------------------------------- /usr/share/Modules/modulefiles ------------------------------------------------
dot           module-git    module-info   modules       null          openmpi/3.1.3 use.own
[ec2-user@ip-172-31-17-220 ~]$ module load openmpi/3.1.4
[ec2-user@ip-172-31-17-220 ~]$ which mpirun
/opt/amazon/efa/bin/mpirun

此版本的 openmpi 是借助 libfabric 的支持编译的。libfabric 库可让我们使用标准的 mpi 命令通过 EFA 设备通信。在本文执笔之时,Open MPI 是唯一支持 EFA 的 mpi 库。Intel MPI 预计也将很快发布。

现在您可以提交作业。首先创建一个包含下列参数的文件 submit.sge

#!/bin/bash
#$ -pe mpi 2

module load openmpi
mpirun -N 1 -np 2 [command here]

CFD++ 示例

EFA 可加速计算流体动力学等常见工作负载。在下面的示例中,我们将使用启用 EFA 的 c5n.18xlarge 实例,在 24M 电池箱上运行 CFD++。CFD++ 是 Metacomp Technologies 开发的一种流量求解器。此模型是三倍音速外流计算(克林贡猎禽舰)的一个例子:

3 倍音速外流计算示例。

您可以看到下面的两个扩展曲线;蓝色曲线显示了启用 EFA 的扩展;紫色曲线为未启用 EFA 的扩展。EFA 提供的扩展能力明显更高,以更高的内核数提供远超多倍的性能。

扩展曲线,启用和不启用 EFA 对比。

新文档!

最后(当然不是最不重要),我们也非常高兴地宣布推出新的 AWS ParallelCluster 文档。这些文档现提供十种语言以及支持多种访问方式的 readthedocs 版本。立即阅读,先睹为快! 当然,您仍可以通过在 AWS Docs GitHub 存储库上创建 pull 请求以提交文档更新。

AWS ParallelCluster 是一个以社区为中心的项目。欢迎提交 pull 请求或通过 GitHub 问题提供反馈。用户反馈促进了我们的开发,推动我们全面做到卓越!

本篇作者

Sean Smith

Sean Smith

Sean Smith 是 Amazon Web Services 的一名软件开发工程师。他最初从事 HPC 领域的工作,作为一名实习生参与 CfnCluster 项目,成为该团队(后来成为 AWS ParallelCluster)的首位工程师。