9月7日-8日,相约 2023 腾讯全球数字生态大会!聚焦产业未来发展新趋势! 了解详情
写点什么

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

  • 2020-03-19
  • 本文字数:4571 字

    阅读完需:约 15 分钟

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

背景

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


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


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



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

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:


2.使用 AMI 创建管理节点

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


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



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




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。



注册成功的日志如下:


检查 /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。



注册成功的日志如下:


检查 /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.
复制代码

运行测试任务

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



可以在管理节点上看到两个集群,并且可以把测试命令 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/


活动推荐:

2023年9月3-5日,「QCon全球软件开发大会·北京站」 将在北京•富力万丽酒店举办。此次大会以「启航·AIGC软件工程变革」为主题,策划了大前端融合提效、大模型应用落地、面向 AI 的存储、AIGC 浪潮下的研发效能提升、LLMOps、异构算力、微服务架构治理、业务安全技术、构建未来软件的编程语言、FinOps 等近30个精彩专题。咨询购票可联系票务经理 18514549229(微信同手机号)。

2020-03-19 21:421232

评论

发布
暂无评论
发现更多内容

鸿蒙学习笔记 下载和安装DevEco Studio

万里无云万里天

HarmonyOS DevEco Studio

北鲲云计算,用技术成就生物科学领域发展

北鲲云

八位阿里大牛耗时三年总结出Java面试复盘手册!带你实现逆风翻盘

模块-6 拆分电商系统为微服务

小遵

项目管理实践篇(一):技术人如何做好风险把控

后台技术汇

项目管理

华为18级工程师耗时三年才总结出这份Java亿级高并发核心编程手册

Java 编程 程序员

模块二作业

A先生

Python OpenCV 对象检测,图像处理取经之旅第 37 篇

梦想橡皮擦

7月日更

福布斯解读区块链行业如何改变全球人才供给

CECBC

华为数据治理及数据分类管理实践

王知无

模块二作业

SAKIN

和12岁小同志搞创客开发:检测按键状态的两件法宝

不脱发的程序猿

DIY 中断 创客开发 按键检测

微信朋友圈的高性能复杂度

张文龙

#架构实战营

Spark SQL和DataFrames:与外部数据源进行交互(五)

数据与智能

sql spark

OLAP 扫盲

Galaxy数据平台

OLAP 高基数

八位阿里大牛耗时三年总结出Java面试复盘手册!带你实现逆风翻盘

白亦杨

Java 编程 程序员

两个月面试5家,(美团、360、新浪网、完美世界、搜狐)已拿美团18k*16薪offer

Java 编程 程序员 架构 面试

一文入门 Go 的性能分析

Rayjun

pprof Go 语言

微服务架构服务容错设计分析

慕枫技术笔记

架构 微服务 后端

Fil矿机怎么购买?Fil矿机哪里买?

fil矿机怎么购买 fil矿机 ipfs矿机

模块 2. 架构设计

脉动

Data Mesh,数据网格的道与术

王知无

golang解析---进程,线程,协程

en

线程 进程 协程 Go 语言 goroutine

vivo S系列的爆款密码:自拍,自然,自出机杼

脑极体

模块-1 微信业务架构图 和 备选方案

小遵

模块一作业

A先生

智能运维(AIOps)系列之四:智能运维落地的思路

micklongen

AIOPS 智能运维

心理韧性:如何让自己从逆境中走出来

石云升

学习 心理学 7月日更

金九银十马上要来了,我熬夜整理10 万字节详细面试笔记(带完整目录) 良心分享

Java 编程 程序员 架构 面试

【面试&个人成长】2021年过半,社招和校招的经验之谈

王知无

科学主义 -- 个人进步的杀手

俞凡

认知

  • 扫码添加小助手
    领取最新资料包
利用 Slurm + ParallelCluster 多集群解决方案,助力云端高性能计算_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章