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 将会执行下列步骤:
- 在启动模板中设置
InterfaceType = efa
。
- 确保安全组的规则允许指向自己的所有入站和出站流量。与传统 TCP 流量不同,EFA 要求有一条入站规则和一条出站规则明确允许指向自己的安全组 (ID
sg-xxxxx
) 的所有流量。更多信息请参阅准备启用了 EFA 的安全组。
- 安装 EFA 内核模块(这是一个 AWS 专用版本的 Libfabric 网络堆栈)和 OpenMPI 3.1.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
:
本篇作者