利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

阅读数:7 2020 年 3 月 19 日 21:42

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

背景

在云上进行高性能计算的客户越来越多,利用云计算资源充足、按需使用、弹性伸缩的特点,客户不仅能快速的得到结果,而且成本很低。为了让客户能快速的部署高性能计算集群,AWS 推出了开源的 ParallelCluster 集群管理软件,该软件可以让客户在数分钟之内部署一个高性能计算集群。ParallelCluster 支持 Torque、Slurm、SGE 等调度引擎,集群的大小可以根据任务数量动态伸缩,而且支持 SPOT 实例,能最大程度的帮助客户降低成本。

在某些高性能计算场景中,客户会同时使用到 CPU 实例和 GPU 实例,这样就需要创建两个 ParallelCluster 集群,比如,一个是 c5.xlarge 集群和一个 p3.2xlarge 实例集群。并且客户的程序通常运行在一个主节点上,这就要求可以在一个主节点上提交任务到任意集群。而 ParallelCluster 则要求到两个集群的主节点上分别提交任务,这种情况下,如果客户要使用 ParallelCluster ,必须需要修改程序,不仅耗时耗力,而且需要改变用户原来的使用习惯,很难快速使用起来。

Slurm +ParallelCluster 多集群解决方案,在两个 ParallelCluster 集群前面增加一个管理节点,通过该管理节点可以提交任务到任意集群,这样,客户的程序可以运行在管理节点上,不需要做任何改变。

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

这种方案不仅满足了客户多种实例类型的要求,而且保留了 ParallelCluster 弹性伸缩优点,可以支持 SPOT 实例,多个集群可以通过 EFS 共享数据。目前已经有客户通过该方案在 AWS 上进行高性能计算。

Slurm +ParallelCluster 多集群解决方案

Slurm +ParallelCluster 多集群架构如下:

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

该方案把两个 ParallelCluster 集群的 Slurm accounting 信息存储在一个独立的管理节点 (SlurmDBD 所在节点) 上,并保存在 MySQL 数据库中,这样在管理节点可以提交任务到任意的集群上。

以下是 Slurm +ParallelCluster 多集群方案详细配置步骤,主要包含以下几个步骤:

  • 使用 ParallelCluster 创建两个 slurm 集群,两个集群通过 EFS 共享数据
  • 创建并配置 Slurm 管理节点
  • 注册第一个 ParallelCluster 集群到管理节点
  • 注册第二个 ParallelCluster 集群到管理节点
  • 检查配置并提交测试任务

创建两个 ParallelCluster 集群

ParallelCluster 的安装步骤在这里不再赘述,在参考资料中有 ParallelCluster 的配置链接。

使用 ParallelCluster 创建两个集群,集群名称分别为 parallelcluster 和 pcluster2,每个节点初始配置为一个 master node 和两个 compute node。

1. 创建第一个集群

配置文件中需要增加 EFS 的配置,完整的配置文件参考附录。

复制代码
[efs customfs]
shared_dir = efs
encrypted = false
performance_mode = generalPurpose

创建第一个集群:

复制代码
88e9fe506815:~ liangmao$ pcluster create parallelcluster

2. 创建第二个集群

创建第二个集群时,需要在集群配置文件中指定第一个集群的 efs_fs_id,efs_fs_id 需要根据实际情况进行修改。

复制代码
[efs customfs]
shared_dir = efs
encrypted = false
performance_mode = generalPurpose
efs_fs_id = fs-165884bd

创建第二个集群:

复制代码
88e9fe506815:~ liangmao$ pcluster create pcluster2

创建 Slurm 管理节点

Slurm 管理节点需要部署在单独的服务器上,运行 SlurmDBD 进程,并且通过 Munge 进行身份认证,Slurm 管理节点可以使用 pcluster 集群的 master node 创建 AMI,再从 AMI 中创建,这样做有以下几个好处:

  • 不用安装 Munge 和 Slurm,master node 中已经包含。
  • 管理节点的 Slurm 和 Munge 用户的 uid 和 gid 和 pcluster 集群保持一致
  • 不用再额外配置 Munge key,使用 pcluster 创建的 key 即可。

1. 使用集群的 master node 创建 AMI

可以在管理控制台上创建 AMI:

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

2. 使用 AMI 创建管理节点

在管理控制台上创建管理节点,使用上一步创建的 AMI。

注意:要把管理节点加入两个 slurm master 的安全组。

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

另外,两个 slurm master 的安全组需要增加一条规则,允许安全组内的实例互相访问。

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

3. 在管理节点上安装和配置 MySQL

复制代码
sudo yum install mysql
sudo yum install mysql-server
sudo yum install mysql-devel
service mysqld start
/usr/bin/mysqladmin -u root password <password>
chkconfig –add /etc/init.d/mysqld
chkconfig mysqld on
mysql -u root -p
create database slurm_acct_db;
create user ‘slurm’@’localhost’ identified by ‘<password>’;
create user ‘slurm’@’%’ identified by ‘<password>’;
GRANT ALL PRIVILEGES ON slurm_acct_db.* TO ‘slurm’@’localhost’;
GRANT ALL PRIVILEGES ON slurm_acct_db.* TO ‘slurm’@’%’ ;

4. 修改 SlurmDBD 配置文件 /opt/slurm/etc/slurmdbd.conf

复制代码
[ec2-user@ip-172-31-30-63 ~]$ more /opt/slurm/etc/slurmdbd.conf
\#
\# slurmDBD info
\#DbdAddr=192.168.80.13
DbdHost=localhost
\#DbdBackupHost=node14
DbdPort=6819
SlurmUser=slurm
\#MessageTimeout=60
\#DebugLevel=6
\#DefaultQOS=normal
**LogFile=/var/log/SlurmdbdLogFile**
PidFile=/var/run/slurmdbd.pid
PluginDir=/opt/slurm/lib/slurm
\#PrivateData=accounts,users,usage,jobs
\#TrackWCKey=yes
\#
\# Database info
**StorageType=accounting_storage/mysql**
**StorageHost=localhost**
**StoragePort=3306**
**StoragePass=<password>**
**StorageUser=slurm**
**StorageLoc=slurm_acct_db**

5. 启动 slurmdbd 进程

复制代码
\#/opt/slurm/sbin/slurmdbd

可以查看日志文件 /var/log/SlurmdbdLogFile 是否有报错。

复制代码
[2019-05-27T06:45:59.410] error: Processing last message from connection 10(172.31.23.185) uid(496)
[2019-05-27T06:45:59.494] error: Processing last message from connection 10(172.31.23.185) uid(496)
[2019-05-27T13:24:08.546] error: Problem getting jobs for cluster test
[2019-05-27T14:45:34.646] error: Problem getting jobs for cluster test
[2019-05-28T02:45:39.496] error: Database settings not recommended values: innodb_buffer_pool_size innodb_log_file_size innodb_lock_wait_timeout
[2019-05-28T02:45:39.537] error: chdir(/var/log): Permission denied
[2019-05-28T02:45:39.537] chdir to /var/tmp
**[2019-05-28T02:45:39.538] slurmdbd version 18.08.6-2 started**

注:日志建议修改 innodb 的参数 innodb_buffer_pool_size innodb_log_file_size innodb_lock_wait_timeout,可以按实际要求修改。

6. 修改 /opt/slurm/etc/slurm.conf

测试中发现要在管理节点上执行 slurm 相关命令,会检查 slurm.conf 文件中的配置。因管理节点没有集群,可以把 ClusterName 和 ControlMachine 改成任意一个名称和地址, 以免和另外两个集群冲突,并注释最后两行配置。

复制代码
ClusterName=dummy
ControlMachine=dummyip
\#include slurm_parallelcluster_nodes.conf
\#PartitionName=compute Nodes=ALL Default=YES MaxTime=INFINITE State=UP

注册第一个集群到管理节点

1. 修改 master node slurm.conf 配置文件

修改 /opt/slurm/etc/slurm.conf 配置,主要是以下几个配置,其中 ip-172-31-30-63 为管理节点的主机名。

复制代码
**ClusterName=parallelcluster**
ControlMachine=ip-172-31-20-39
\# JobComp
**JobCompType=jobcomp/mysql**
**JobCompHost=ip-172-31-30-63**
**JobCompPort=3306**
**JobCompPass=<password>**
**JobCompUser=slurm**
**JobCompLoc=slurm_acct_db**
\#
\# ACCOUNTING
JobAcctGatherType=jobacct_gather/linux
\#JobAcctGatherFrequency=30
\#
**AccountingStorageType=accounting_storage/slurmdbd**
**AccountingStorageHost=ip-172-31-30-63**

2. 重启 slurmctld 进程

复制代码
[root@ip-172-31-20-39 ~]# /etc/init.d/slurm stop
stopping slurmctld: [ OK ]
slurmctld is stopped
slurmctld is stopped
[root@ip-172-31-20-39 ~]# /etc/init.d/slurm start
starting slurmctld: [ OK ]

3. 查看 /var/log/slurmctld.log 日志是否有报错

4. 注册集群到管理节点

复制代码
\#sacctmgr add cluster parallelcluster

5. 查看是否注册成功

用 sacctmgr list cluster 查看 ControlHost,ControlPort 的信息是否为空,如果为空,表示注册失败,可以尝试重启 slurmctld。

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

注册成功的日志如下:

检查 /var/log/slurmctld.log:

复制代码
[2019-05-27T14:35:17.062] cons_res: select_p_node_init
[2019-05-27T14:35:17.062] cons_res: preparing for 1 partitions
[2019-05-27T14:35:17.062] Running as primary controller
**[2019-05-27T14:35:17.062] Registering slurmctld at port 6817 with slurmdbd.**
[2019-05-27T14:35:17.326] No parameter for mcs plugin, default values set
[2019-05-27T14:35:17.326] mcs: MCSParameters = (null). ondemand set.

注册第二个集群到管理节点

1. 修改 master node slurm.conf 配置文件

修改 /opt/slurm/etc/slurm.conf 配置,主要是以下几个配置,其中 ip-172-31-30-63 为管理节点的主机名。

复制代码
**ClusterName=pcluster2**
ControlMachine=ip-172-31-23-185
\# JobComp
**JobCompType=jobcomp/mysql**
**JobCompHost=ip-172-31-30-63**
**JobCompPort=3306**
**JobCompPass=slurm**
**JobCompUser=slurm**
**JobCompLoc=slurm_acct_db**
\#
\# ACCOUNTING
JobAcctGatherType=jobacct_gather/linux
\#JobAcctGatherFrequency=30
\#
**AccountingStorageType=accounting_storage/slurmdbd**
**AccountingStorageHost=ip-172-31-30-63**

2. 重启 slurmctld 进程

复制代码
[root@ip-172-31-20-39 ~]# /etc/init.d/slurm stop
stopping slurmctld: [ OK ]
slurmctld is stopped
slurmctld is stopped
[root@ip-172-31-20-39 ~]# /etc/init.d/slurm start
starting slurmctld: [ OK ]

3. 查看 /var/log/slurmctld.log 日志是否有报错

4. 注册集群到管理节点

复制代码
\#sacctmgr add cluster pcluster2

5. 查看是否注册成功

用 sacctmgr list cluster 查看 ControlHost,ControlPort 的信息是否为空,如果为空,表示注册失败,可以尝试重启 slurm。

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

注册成功的日志如下:

检查 /var/log/slurmctld.log:

复制代码
[2019-05-27T14:42:31.654] cons_res: select_p_reconfigure
[2019-05-27T14:42:31.654] cons_res: select_p_node_init
[2019-05-27T14:42:31.654] cons_res: preparing for 1 partitions
[2019-05-27T14:42:31.654] Running as primary controller
**[2019-05-27T14:42:31.654] Registering slurmctld at port 6817 with slurmdbd.**
[2019-05-27T14:42:31.912] No parameter for mcs plugin, default values set
[2019-05-27T14:42:31.912] mcs: MCSParameters = (null). ondemand set.

运行测试任务

登陆管理节点,执行以下脚本:

利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算

可以在管理节点上看到两个集群,并且可以把测试命令 hostname 发送到不同的集群。

作者介绍:廖良茂,AWS 解决方案架构师,负责基于 AWS 云计算方案架构的咨询和设计,在国内推广 AWS 云平台技术和各种解决方案,目前专注于高性能计算领域。在加入 AWS 之前就职于微软、甲骨文公司,熟悉数据库、备份和容灾等解决方案。

本文转载自 AWS 技术博客。

原文链接: https://amazonaws-china.com/cn/blogs/china/power-high-performance-computing-in-the-cloud-with-slurm-parallelcluster-multi-cluster-solution/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布