首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

用 SLURM 优化超级计算机内的资源管理(1)

用 SLURM 优化超级计算机内的资源管理(1)

超级计算机是军备竞赛的一个典型示例。随着现代超级计算机不断增强的性能扩展到新的问题领域,这些巨大的系统也在提供解决新问题的平台。超级计算机是国家和企业荣誉感的来源,因为公司和国家都致力于提高 LINPACK 的成绩。 展示了过去五年间超级计算机军备竞赛的情况,同时 IBM Sequoia 超级计算机目前被预测为 2012 年内的领军者。如图所示,IBM Roadrunner 是第一台打破一直不变的千万亿次障碍的超级计算机(而 IBM Blue Gene®/L 则自 2004 年至 2008 年一直位居榜首)。
图 1. 超级计算机性能:2008-2012早期的超级计算机目的在于为核武器建模。如今,它们的应用更为广泛,可处理气候研究、分子建模、大型物理模拟甚至强力的密码破译等领域内的大量计算问题。
1964 年至今何为 LINPACK 基准?为了对比互相竞争的超级计算机的性能,就创建了 LINPACK 性能基准。LINPACK 度量的是浮点运算的执行速度。具体而言,LINPACK 是一组用来解决密集的线性方程系统的程序。

通常认为,第一台超级计算机是 1964 年发布的(由 Seymour Cray 设计)Control Data Corporation (CDC) 6600。6600 使用硬件、Freon 冷却系统和能完成每秒浮点操作数为 3 百万的单个 CPU 填充了四个机柜。虽然并不缺少美感,但它的机柜却明显可见很多用于将外围单元处理器连接到单个 CPU 上以使其尽量繁忙的彩色电线。
快速发展至今,目前的超级计算机的领先者是日本的 Kei 计算机(由 Fujitsu 构建)。此系统注重于蛮力计算功能,使用了超过 88,000 个 SPARC64 处理器,占用了 864 个机柜。Kei 超级计算机的一个显著特点是突破了 10 千万亿次的障碍。与 CDC 6600 类似,Kei 使用的是水冷加气冷。
什么是超级计算机?超级计算机不是关于任何特定的架构,它只是处在计算性能尖端的一种设计。如今,这意味着如果以 LINPACK 基准度量,该系统能够在千万亿次(或百万之四次方的 FLOPS)的性能范围内运行。
无论超级计算机如何实现这些 FLOPS,任何超级计算机架构的一个低层目标都是在有工作可做时最佳地保持计算资源忙碌。与 CDC 6600 用来保持其单个 CPC 忙碌的外围处理器类似,现代的超级计算机需要同样的基本性能。让我们来看这样一个计算节点资源管理的实现,其名为 Simple Linux® Utility for Resource Management (SLURM)。
SLURM 简介SLURM 是一种可用于大型计算节点集群的高度可伸缩和容错的集群管理器和作业调度系统。SLURM 维护着一个待处理工作的队列并管理此工作的整体资源利用。它还以一种排他或非排他的方式管理可用的计算节点(取决于资源的需求)。最后,SLURM 将作业分发给一组已分配的节点来执行工作并监视平行作业至其完成。
本质上,SLURM 是一个强健的集群管理器(更关注于对功能丰富性的需求方面),它高度可移植、可伸缩至大型节点集群、容错好,而且更重要的是它是开源的。SLURM 最早是一个开源的资源管理器,由几家公司(包括 Lawrence Livermore National Laboratory)协作开发。如今,SLURM 已经成为了很多最强大的超级计算机上使用的领先资源管理器。
SLURM 架构SLURM 实现的是一种非常传统的集群管理架构(参见 )。在顶部是一对冗余集群控制器(虽然冗余是可选项)。这些集群控制器可充当计算集群的管理器并实现一种管理守护程序,名为 slurmctld。slurmctld 守护程序提供了对计算资源的监视,但更重要的是,它将进入的作业(工作)映射到基本的计算资源。
每个计算节点实现一个守护程序,名为 slurmd。slurmd 守护程序管理在其上执行的节点,包括监视此节点上运行的任务、接受来自控制器的工作,以及将该工作映射到节点内部核心之上的任务。如果控制器发出请求,slurmd 守护程序也可以停止任务的执行。
图 2. SLURM 架构的高级别视图此架构内还存在其他的守护程序,比如,实现安全的身份验证。但是集群并不仅仅是节点的随机组合,因为这些节点可以是逻辑相关的,以适时实现平行计算。
一组节点也可以组成一个逻辑组,称为分区,分区通常会包含进入工作的队列。分区也可以配置各种约束条件,比如哪个用户可以使用它,分区支持的时限的作业大小。分区的更进一步优化,就是将分区内的一组节点在工作的一段时间内映射到一个用户,这就是一个作业。一个作业内,是一个或多个作业步骤,即在节点子集上执行的任务集。
展示了这个层次结构,进一步说明了资源的 SLURM 分区。请注意,这种分区包含了对资源的感知,相当于确保协作节点间的低延迟通信。
图 3. SLURM 内的资源分区安装 SLURM如何安装 SLURM 最终取决于您特定的 Linux 环境,但过程与使用一个包管理器一样简单。SLURM 是完全打包的,这就使其很容易进行安装和配置。对于我所钟爱的 distro、Ubuntu,我使用了 Advanced Packaging Tool (APT) 来安装 SLURM 包及其所有的依赖项:
1
$ sudo apt-get install slurm-llnl




此操作会使用少于 40MB 的空间且不只包含了 SLURM,还包含了依赖项、基础插件以及其他所需的包。
配置 SLURM启动 SLURM 之前,必须根据特定的环境配置它。为了创建我的配置文件,我使用了在线的 SLURM 配置器,由它为我生成基于表单数据的配置文件。请注意此文件需要在末尾处进行修改以删除不再受支持的选项。 显示了我的结果配置文件(存储于 /etc/slurm-llnl/slurm.conf)。
清单 1. 面向单节点集群的 SLURM 配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# slurm.conf file generated by configurator.html.
# Put this file on all nodes of your cluster.
# See the slurm.conf man page for more information.
#
ControlMachine=mtj-VirtualBox
#
AuthType=auth/none
CacheGroups=0
CryptoType=crypto/openssl
MpiDefault=none
ProctrackType=proctrack/pgid
ReturnToService=1
SlurmctldPidFile=/var/run/slurmctld.pid
SlurmctldPort=6817
SlurmdPidFile=/var/run/slurmd.pid
SlurmdPort=6818
SlurmdSpoolDir=/tmp/slurmd
SlurmUser=slurm
StateSaveLocation=/tmp
SwitchType=switch/none
TaskPlugin=task/none
#
# TIMERS
InactiveLimit=0
KillWait=30
MinJobAge=300
SlurmctldTimeout=120
SlurmdTimeout=300
Waittime=0
#
# SCHEDULING
FastSchedule=1
SchedulerType=sched/backfill
SchedulerPort=7321
SelectType=select/linear
#
# LOGGING AND ACCOUNTING
AccountingStorageType=accounting_storage/none
ClusterName=cluster
JobCompType=jobcomp/none
JobCredentialPrivateKey = /usr/local/etc/slurm.key
JobCredentialPublicCertificate = /usr/local/etc/slurm.cert
JobAcctGatherFrequency=30
JobAcctGatherType=jobacct_gather/none
SlurmctldDebug=3
SlurmdDebug=3
#
# COMPUTE NODES
NodeName=mtj-VirtualBox State=UNKNOWN
PartitionName=debug Nodes=mtj-VirtualBox default=YES MaxTime=INFINITE State=UP




请注意在一个真实的集群内,NodeName 应指的是一组节点,比如 snode[0-8191],以表示此集群内的 8192 个独特的节点(名为 snode0 至 snode8191)。
最后一个步骤是为我的站点创建一组作业凭证密钥。我选择使用 openssl 作为我的凭证密钥(在  内的配置文件中作为 JobCredential* 引用)。我只使用 openssl 来生成这些凭证,如  所示。
清单 2. 为 SLURM 创建凭证
1
2
3
4
5
6
7
$ sudo openssl genrsa -out /usr/local/etc/slurm.key 1024
Generating RSA private key, 1024 bit long modulus
.................++++++
............................................++++++
e is 65537 (0x10001)
$ sudo openssl rsa -in /usr/local/etc/slurm.key -pubout -out /usr/local/etc/slurm.cert
writing RSA key




这些步骤完成后,就万事齐备了,我就能告诉 SLURM 我的配置了。我现在就可以启动 SLURM 并与其交互。
返回列表