前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >slurm--大型集群管理指南

slurm--大型集群管理指南

作者头像
姚华
发布2023-03-08 12:40:48
1.8K0
发布2023-03-08 12:40:48
举报
文章被收录于专栏:运维民工运维民工

大型集群管理指南

这份文件包含了Slurm管理员的信息,专门针对包含1024个节点以上的集群。目前由Slurm管理的大型系统包括天河二号(位于中国国防科技大学,拥有16000个计算节点和310万个内核)和Sequoia(位于劳伦斯-利弗莫尔国家实验室的IBM Bluegene/Q,拥有98304个计算节点和160万个内核)。Slurm在更大数量级的系统上的运行已经通过仿真验证。在这种规模下获得最佳性能确实需要一些调整,本文件应该有助于让你有一个好的开始。对Slurm的工作知识应该被认为是本资料的先决条件。

性能表现

以下时间是执行MPI程序打印 "Hello world "并退出的时间,包括处理输出的时间。由于硬件、软件和配置的不同,你的性能可能会有所不同。

  • BlueGene/Q的122,880个计算节点上的1,966,080个任务:322秒
  • 一个Linux集群的15,000个计算节点上的30,000个任务。30秒

系统配置

必须设置三个系统配置参数,以支持大量打开的文件和有大量突发信息的TCP连接。可以使用/etc/rc.d/rc.local或/etc/sysctl.conf脚本进行更改,以便在重启后保留更改。在这两种情况下,你都可以直接将数值写入这些文件(例如,"echo 32832 > /proc/sys/fs/file-max")。

  • /proc/sys/fs/file-max:同时打开的文件的最大数量。我们推荐的限制是至少32832个。
  • /proc/sys/net/ipv4/tcp_max_syn_backlog:被记住的连接请求的最大数量,这些请求仍然没有收到来自连接客户端的确认。对于内存超过128Mb的系统,默认值为1024,对于低内存机器,默认值为128。如果服务器出现过载,可以尝试增加这个数字。
  • /proc/sys/net/core/somaxconn: socket listen()积压的极限,在用户空间称为SOMAXCONN。默认值为128。这个值应该被大幅提高,以支持请求的爆发。例如,为了支持1024个请求的爆发,将somaxconn设置为1024。

发送队列长度(txqueuelen)可能也需要用ifconfig命令来修改。对于一个拥有非常大的集群的站点来说,4096的值被发现是很好的(例如,"ifconfig txqueuelen 4096")。

线程/进程限制

在SLES 12 SP2中,有一个新引入的限制(用于Cray系统的CLE 6.0UP04,将于2017年中发布)。随SLES 12 SP2一起发行的systemd版本包含对PIDs cgroup控制器的支持。在新的systemd版本下,每个init脚本或systemd服务默认限制为512个线程/进程。这可能会给大型集群或作业吞吐率较高的系统中的slurmctld和slurmd守护进程带来问题。要增加默认值以外的限制。

  • 如果使用systemd服务文件。在 [Service] 部分添加 TasksMax=N。N可以是一个特定的数字,也可以是特殊值无穷大。
  • 如果使用init脚本。创建文件/etc/systemd/system/.service.d/override.conf的内容。
代码语言:javascript
复制
[Service]
TasksMax=N

注意:早期版本的systemd不支持PIDs cgroup控制器,因此忽略了TasksMax的设置。

用户限制

对slurmctld守护进程有效的ulimit值应该对内存大小、打开的文件数和堆栈大小设置得相当高。

节点选择插件(SelectType)

虽然在一个节点内分配单个处理器对于较小的集群来说是很好的,但是在每个节点内跟踪单个处理器和内存的开销会增加很大的开销。为了获得最佳的可扩展性,使用select/linear来分配整个节点,避免select/cons_res。

作业会计收集插件(JobAcctGatherType)

作业核算依赖于每个计算节点上的slurmstepd守护程序定期采样数据。这种数据收集会占用应用程序的计算周期,从而引起所谓的系统噪音。对于大型并行应用来说,这种系统噪音会影响到应用的可扩展性。为了获得最佳的应用性能,最好禁用作业会计(jobacct_gather/none)。考虑使用作业完成记录(JobCompType)进行核算,因为这需要的开销要少得多。如果需要作业核算,将采样间隔配置成相对较大的尺寸(例如JobAcctGatherFrequency=300)。可能需要进行一些实验来处理数据传输中的碰撞问题。

节点配置

虽然Slurm可以跟踪每个计算节点上实际发现的内存和磁盘空间的数量,并将其用于调度目的,但这需要额外的开销。通过使用可用的参数(RealMemory、CPU和TmpDisk)指定预期配置来优化性能。如果发现节点包含的资源比配置的少,它将被标记为 "下降 "而不被使用。虽然Slurm可以很容易地处理一个异构的集群,但使用slurm.conf中最少的行数来配置节点,既可以使管理更容易,也可以使性能更好。

计时器

EioTimeout配置参数控制当用户应用程序终止时,srun命令将等待多长时间来关闭用于在用户应用程序和srun之间传递数据的TCP/IP连接。默认值是60秒。较大的系统和/或较慢的网络可能需要一个较高的值。

如果预计作业的吞吐量很高(即大量作业的执行时间很短),那么将MinJobAge配置为对你的环境实用的最小的间隔时间。MinJobAge指定了Slurm的控制守护程序在清除前保留已终止作业的最小秒数。在这个时间之后,关于终止作业的信息只能通过会计记录获得。

配置参数SlurmdTimeout决定了slurmctld与slurmd进行常规通信的间隔时间。通信发生在SlurmdTimeout值的一半。这样做的目的是为了确定一个计算节点何时发生故障,从而不应该被分配工作。较长的时间间隔可以减少计算节点上的系统噪音(我们确实在整个集群中同步这些请求,但对应用程序会有一些影响)。对于真正的大型集群,SlurmdTimeout值为120秒或更多是合理的。

如果使用MPICH-2,srun命令将管理用于启动应用程序的密钥对。取决于处理器的速度和结构,密钥对信息的通信可能需要额外的时间。这可以通过在执行srun启动任务之前设置一个环境变量PMI_TIME来完成。PMI_TIME的默认值是500,这是分配给传输每个密钥对的微秒数量。我们用PMI_TIME=4000的值执行了多达16000个任务。

计算节点上的各个slurmd守护进程只有在启动时或作业的尾声完成时才会向slurmctld守护进程发起消息。当一个分配了大量节点的作业完成后,会导致这些节点上的slurmd守护进程同时向slurmctld守护进程发送非常多的消息。为了将这种消息流量分散到不同的时间,避免消息丢失,可以使用EpilogMsgTime参数。注意,即使消息丢失,也会被重新传送,但这将导致重新分配资源给新作业的延迟。

其他

Slurm在slurmd守护进程之间使用分层通信,以增加并行性和提高性能。TreeWidth配置参数控制消息的扇出。默认值是50,这意味着每个slurmd守护进程可以与其他50个slurmd守护进程进行通信,并且可以通过两个消息跳来联系超过2500个节点。默认值对大多数集群来说是很好的。如果将TreeWidth设置为集群中节点数的平方根,对于不超过2500个节点的系统来说,通常可以达到最佳的系统性能,对于更大的系统来说,则是立方根。

srun命令会自动将其打开文件的限制增加到硬限制,以便处理所有启动任务的标准输入和输出连接。建议你将整个集群的开放文件硬限制设置为8192。

本文系外文翻译,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系外文翻译前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 大型集群管理指南
    • 性能表现
      • 系统配置
        • 线程/进程限制
      • 用户限制
        • 节点选择插件(SelectType)
          • 作业会计收集插件(JobAcctGatherType)
            • 节点配置
              • 计时器
                • 其他
                领券
                问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档