亚马逊AWS官方博客
使用 Slurm Federation 调度实现HPC混合云 Cloudburst
背景
Slurm集群调度系统支持创建集群联合(Federation),并在集群之间以对等方式调度作业。提交到联合集群的作业将收到唯一的作业ID,该ID在联合集群中的所有群集中都是唯一的。作业提交到本地集群(集群在slurm.conf中定义),然后跨联盟中的群集进行复制。然后,每个集群根据自己的调度策略独立地尝试调度作业。集群与“原始”集群(作业提交到的集群)协调以调度作业。
利用 Federation 作业调度,可以实现本地-云端混合 HPC 调度,提升本地已有 Slurm 集群的资源弹性和扩展,Slurm 本地与云端集群组成 Federation 集群联合,用户可以像往常一样在本地 Slurm 中提交作业,作业会同时复制到云端Slurm 集群中,每个集群都会试图调度作业运行,为作业分配资源。如果成功,它将通知原始集群(作业提交集群)它启动了作业,原始集群会通知其它集群终止和删除这个作业并置于吊销状态。
基本流程:
- 客户登录本地集群(on-prem)
- 客户提交作业到本地集群
- Slurm集群会将作业拷贝到 AWS 云上 Slurm 集群(aws)
- 如果本地集群可以执行作业,则通知云上集群(aws)取消作业
- 如果本地集群无调度执行作业,而云上集群可以调度执行,则云上集群(aws)开始调度执行作业,并通知本地集群(on-prem)取消(revoke)作业
- 可以使用 sinfo –federation, squeue –federation, sacct –federation命令查看所有的作业执行情况。
验证配置:
- 使用 Parallecluster在一个AWS 区域建立一个 Slurm 集群,最大节点和最小节点相同以模拟本地集群(on-prem);
- 启用本地集群 slurmdbd 进程和 accounting 服务,Slurm 多集群依赖 accounting 服务;
- 使用 Parallecluster 在另外一个区域建立一个 Slurm 集群,作为云上 cloudburst 集群(aws);
- 使用 VPC-peering,连接两个集群模拟混合云,必须配置 DNS 机器名解析;
- 配置多集群;
- 配置 Federation;
- 提交测试作业验证 Federation 集群调度;
具体配置流程:
- 安装Parallecluster ,使用虚拟环境,以便安装两套 Parallecluster
- 安装 升级 pip和 virtualenv
$ python3 -m pip install --user --upgrade virtualenv
-
- 创建虚拟环境
$ python3 -m virtualenv ~/.pcluster
-
- 激活虚拟环境
$ source ~/.pcluster/bin/activate
-
- 安装 Parallecluster 到虚拟环境中
(.pcluster) a483e778a9b5:~ xinxx$ python3 -m pip install --upgrade aws-parallelcluster
-
- 验证Parallecluster 安装
(.pcluster) a483e778a9b5:~ xinxx$ pcluster version
2.10.0
- 使用 Parallecluster 建立模拟本地 Slurm 集群(on-prem),可以配置initial_queue_size=max_queue_size,以模拟本地固定集群情况。在安装的时候,指定 pcluster 的配置文件,以区别本地(on-perm)和云端(aws)集群。
- 配置 on-perm 集群
-
- 建立 on-perm 集群
- 修改本地集群
- 更新集群名称为:on-perm
- 编辑 vi /opt/slurm/etc/slurm.conf,修改 ClusterName 参数为 on-perm
- 更新集群名称为:on-perm
ClusterName=on-perm
-
-
- 停止 slurm 集群
-
[root@ip-10-0-3-94 ]# systemctl stop slurmctld
-
-
- 删除/var/spool/slurm.state/下的所有文件
-
[root@ip-10-0-3-94 ]# rm -rf /var/spool/slurm.state/*
-
-
- 重启 Slurm
-
[root@ip-10-0-3-94 ]# systemctl start slurmctld
-
-
- 检查 Slurm 集群运行情况
-
-
- 在 on-perm 集群的管理节点安装 SlurmDBD,用于 Accounting 信息记录,多集群下这个服务必须安装
- 安装 MariaDB,本例为 Amazon Linux2作为管理节点,使用 root 身份执行下列命令
- 在 on-perm 集群的管理节点安装 SlurmDBD,用于 Accounting 信息记录,多集群下这个服务必须安装
[root@ip-10-0-3-94 ~]# yum install -y mariadb mariadb-server
-
-
- 启动 MariaDB
-
[root@ip-10-0-3-94 ]# systemctl start mariadb
[root@ip-10-0-3-94 ]# systemctl enable mariadb
-
-
- 设置 MariaDB root 密码
-
[root@ip-10-0-3-94 ]# mysqladmin -u root password <yourpassword>
-
-
- 登录
-
[root@ip-10-0-3-94 ]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
-
-
- 创建Slurm Accounting 需要的 database
-
-
- 在配置文件/opt/slurm/etc/slurm.conf中增加Accounting参数,JobCompHost用于保存作业完成信息,目前只支持直接访问 MySQL,所以,JobCompHost=<MySQL Server hostname>,JobCompPass=MySQL用户「slurm」的密码。AccountingStorageHost=slurmdbd进程运行的机器名。注意:缺省的配置中在 LOGGING 段中已有 JobCompType=jobcomp/none,需要注释掉
-
- 建立配置文件/opt/slurm/etc/slurmdbd.conf
-
- 重启 slurmctld,和启动 slurmdbd
[root@ip-10-0-3-94 etc]# systemctl stop slurmctld
[root@ip-10-0-3-94 etc]# systemctl start slurmctld
[root@ip-10-0-3-94 etc]# /opt/slurm/sbin/slurmdbd
-
- 检查 accounting 状态
- 建立云端集群
- 使用新的配置文件配置 pcluster
- 手动建立一个 VPC,因为组成多集群,CIDR不能重叠,使用10.100.0.0/16,注意要启用 DNS 主机名和解析
- 使用新的配置文件配置 pcluster
-
-
- 运行 pcluster configure -c ~/.parallecluster/pcluster-config-aws,使用上一部创建的 VPC
-
-
-
- 建立集群
-
-
-
- 检查集群
-
-
- 登录管理节点,修改 ClusterName=aws
- 登录管理节点,编辑/opt/slurm/etc/slurm.conf
- 登录管理节点,修改 ClusterName=aws
-
-
- 删除/var/spool/slurm.state/*,重启集群
-
- 配置 VPC peer,打开 双方 VPC 的DNS 解析,修改路由,安全组,建立双方连接
- 创建 VPC Peer
-
- 打开双方 DNS 解析
-
- 修改双方路由表,确保通过 DNS机器名 可以访问
-
- 修改本地集群(on-perm)和云端集群(aws)的安全组的入站规则,允许互相访问
- 本地(on-perm)管理节点
- 修改本地集群(on-perm)和云端集群(aws)的安全组的入站规则,允许互相访问
-
-
- 云端(aws)集群管理节点
-
-
- 修改 VPC 路由表,确认双方可以互相通信
- 配置云端集群 (aws)的 Accounting 配置
- 编辑/opt/slurm/etc/slurm.conf,增加下列内容
-
- 重启集群
[root@ip-10-100-0-216 etc]# systemctl restart slurmctld
- 登录本地集群(on-perm)管理节点,注册集群
- 注册集群,如果报告云端集群(aws)已经注册,请忽略
-
- 检查多集群状态
-
- 测试多集群作业提交,切换到普通用户 ec2-user
- 建立测试程序,赋予可执行权限
- 测试多集群作业提交,切换到普通用户 ec2-user
-
- 指定集群,提交作业
- 提交到本地集群(on-perm)
- 指定集群,提交作业
-
-
- 提交到云端集群(aws),使用-M指定集群。注意 squeue 和 sacct 也需要指定-M 参数才可以看到作业在云端集群(aws)的执行情况
-
- 建立集群 Federation 联合
- 使用 root,执行下面命令
- 提交测试作业,检查在 Federation 的执行情况
- 提交大量作业
-
- 检查作业情况,可以看到已经有作业在本地集群开始执行
-
- 检查集群情况
-
- 检查云端 集群的 EC2,发现已经有 EC2开始启动,并作为计算节点加入集群
-
- 检查最终运行情况,当本地资源不足的情况,作业会在云端集群分配计算节点并执行
参考资料:
- SchedMD Homepage
- Slurm on GCP ReadMe
- Slurm Quickstart Guide
- Slurm MAN Pages
- Slurm Command Summary (PDF)
- Slurm Accounting Guide
- Slurm Troubleshooting Guide
- Slurm Users Discussion Group
- AWS ParalleClusters