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

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

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

启动 SLURM要启动 SLURM,只需使用 /etc/init.d/slurm 内定义的管理脚本。此脚本接受 start、stop、restart 和 startclean(以忽略之前保存的所有状态)。用这种方法启动 SLURM 会导致 slurmctld 守护程序的启动(在这个简单配置中,还包括您节点上的 slurmd 守护程序):
1
$ sudo /etc/init.d/slurm-llnl start




为了验证 SLURM 是否在运行,可以使用 sinfo 命令。sinfo 命令会返回有关这些 SLURM 节点和分区的信息(在本例中,集群由单个节点组成),如  所示。
清单 3. 使用 sinfo 命令来查看集群
1
2
3
4
$ sinfo
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      1   idle mtj-VirtualBox
$




更多的 SLURM 命令SLURM 内还有更多的命令可用来获得有关 SLURM 集群的更多信息。在  这个章节内,您会看到 sinfo 命令,可用来了解您的集群。您还可以用 scontrol 命令获得更多信息,这就使您可以查看集群各方面的详细信息(例如  内的分区和节点)。
清单 4. 用 scontrol 获得有关集群的详细信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ scontrol show partition
PartitionName=debug
   AllocNodes=ALL AllowGroups=ALL Default=YES
   DefaultTime=NONE DisableRootJobs=NO Hidden=NO
   MaxNodes=UNLIMITED MaxTime=UNLIMITED MinNodes=1
   Nodes=mtj-VirtualBox
   Priority=1 RootOnly=NO Shared=NO PreemptMode=OFF
   State=UP TotalCPUs=1 TotalNodes=1
  
$ scontrol show node mtj-VirtualBox
NodeName=mtj-VirtualBox Arch=i686 CoresPerSocket=1
   CPUAlloc=0 CPUErr=0 CPUTot=1 Features=(null)
   Gres=(null)
   OS=Linux RealMemory=1 Sockets=1
   State=IDLE ThreadsPerCore=1 TmpDisk=0 Weight=1
   BootTime=2012-03-07T14:59:01 SlurmdStartTime=2012-04-17T11:10:43
   Reason=(null)




要测试这个简单的 SLURM 集群,可以使用 srun 命令。srun 命令可以为您的作业分配一个计算资源并启动一个任务。请注意您也可以分别实现这两个目的(通过 salloc 和 sbatch)。如  内所示,您可以提交一个简单的 shell 命令作为您的作业来演示 srun,然后再提交一个 sleep 命令(带参数)来演示 squeue 命令的使用,从而展示集群内存在的作业。
清单 5. 向集群提交作业并检查队列状态
1
2
3
4
5
6
7
8
9
10
$ srun -l hostname
0: mtj-VirtualBox
$ srun -l sleep 5 &
[1] 24127
$ squeue
  JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
     15     debug    sleep      mtj   R       0:03      1 mtj-VirtualBox
$
[1]+  Done                    srun -l sleep 5
$




注意在  内,向集群提交的作业可以是一个简单的 Linux 命令、一个 shell 脚本文件或一个适当的可执行文件。
作为最后一个例子,让我们来看看如何停止一个作业。在本例中,您启动一个运行较长的作业并使用 squeue 来识别其 ID。然后,使用 scancel 命令与这个作业 ID 来终止该作业步骤(参见 )。
清单 6. 终止一个作业步骤
1
2
3
4
5
6
7
8
9
10
11
12
13
$ srun -l sleep 60 &
[1] 24262
$ squeue
  JOBID PARTITION     NAME     USER  ST       TIME  NODES NODELIST(REASON)
     16     debug    sleep      mtj   R       0:03      1 mtj-VirtualBox
$ scancel 16
srun: Force Terminated job 16
$ srun: Job step aborted: Waiting up to 2 seconds for job step to finish.
0: slurmd[mtj-VirtualBox]: error: *** STEP 16.0 CANCELLED AT 2012-04-17T12:08:08 ***
srun: error: mtj-VirtualBox: task 0: Terminated
  
[1]+  Exit 15                 srun -l sleep 60
$




最后,可以使用相同的 slurm-llnl 脚本来停止集群,如  所示。
清单 7. 停止 SLURM 集群
1
2
3
4
5
$ sudo /etc/init.d/slurm-llnl stop
* Stopping slurm central management daemon slurmctld                           [ OK ]
* Stopping slurm compute node daemon slurmd                                    [ OK ]
slurmd is stopped
$




与 Apache Hadoop 不同,SLURM 没有分布式文件系统的概念。因此,为了一个给定的计算,它需要更多的处理才能将数据分布到节点。SLURM 包含了这样一个命令,名为 sbcast,可用来将一个文件传递到一个 SLURM 作业分配的所有节点。跨 SLURM 集群的节点使用平行或分布式的文件系统是很有可能的(而且更为高效),这样一来,就不需要 sbcast 来分布要处理的数据了。
在这个简单 SLURM 的演示中,我们使用的只是可用命令的一个子集,以及这些命令可用选项的一个更小的子集(比如,参见 srun 命令的可用选项)。即便是用最少数量的可用命令,SLURM 都能实现一个有效和高效的集群管理器。
定制 SLURMSLURM 并不是一个静态的资源管理器,而是一个可以结合新行为的高度动态的资源管理器。SLURM 实现了一个插件应用程序编程接口 (API),允许运行时库在运行时动态加载。这个 API 已经用于开发各种新行为,包括互连结构、身份验证和调度。插件接口支持各种其他功能,比如作业统计、加密功能、消息传递接口 (MPI)、过程跟踪以及资源选择。所有这些都允许 SLURM 可以轻松支持不同的集群架构和实现。请查看  部分的 SLURM 程序员指南,以了解详细信息。
SLURM 的前景2011 年,SLURM 因各种新特性的加入而得到了更新,包括对 IBM Blue Gene/Q 超级计算机和 Cray XT 以及 XE 计算机的支持。此外,还添加了对 Linux 控制组 (cgroups) 的支持,这对 Linux 过程容器提供了更大的控制。
2012 年,Blue Gene/Q 支持将会全面实现,同时实现的还有改进的资源选择,该资源选择取决于作业需求和资源功能(比如,节点特性 AMD)。一种新的工具计划用来报告调度统计,而且在不久的将来,还将会有一种基于 Web 的管理工具。SLURM 的另一个未来计划是在云爆发的上下文中,这会涉及到在云提供者中分配资源,以及将溢出的工作从一个本地集群迁移到云中(也要运行 SLURM 守护程序)。这个模型非常有用,而且支持某些超级计算机工作负载弹性的理念。
最后,SLURM 开发人员也在考虑使用功率和热量数据,以便更有效地分配集群内的工作,比如,将消耗大功率(也会产生更多热量)的作业放在集群内散热较好的区域。
结束语对 SLURM 的简单介绍阐明了这个开源资源管理器的简便性。虽然现代的超级计算机超出了大多数人的价格范围,SLURM 仍提供了可伸缩的集群管理器的基础,可将商用服务器转变成高性能集群。而且,SLURM 的架构还使得更易于对超级计算机(或商品集群)架构定制资源管理器。这可能也是其成为超级计算机领域内领先的集群管理器的原因。
返回列表