在 Ubuntu 上安装 SLURM 集群资源管理器

SLURM 是一个类似 Sun Grid Engine (SGE) 的开源分布式资源管理软件,用于超级计算机和大型计算节点集群,可高度伸缩和容错。SUN 被卖给 Oracle 后,好用的 SGE 变成 Oracle Grid Engine 并且从 6.2u6 版本开始成为商业软件了(可以免费使用90天),所以我们不得不另寻其他的开源替代方案,SLURM 是上次在德班高性能会议的时候一位陌生人介绍的,听上去不错。

SLURM 通过一对冗余集群控制节点(冗余是可选的)来管理集群计算节点,是由一个名为 slurmctld 的管理守护程序实现的,slurmctld 提供了对计算资源的监视、分配和管理,并将进入的作业序列映射和分发到各个计算节点上。每个计算节点也有一个守护程序 slurmd,slurmd 管理在其上运行的节点,监视节点上运行的任务、接受来自控制节点的请求和工作、将工作映射到节点内部等等。图示如下:

slurm architecture

官方网站提供的 Super Quick Start 安装文档一点都不 quick,看了头大。以下步骤使用两台服务器演示:主机名为 slurm00 的服务器用作控制节点;主机名为 slurm01 的服务器用作计算节点。

在控制节点和计算结点分别安装 slurm 包,这个包里面既含有控制节点需要的 slurmctld 也含有计算结点需要的 slurmd:

# apt-get install slurm-llnl

控制节点和计算结点之间需要通信,通信就需要认证,slurm 支持两种认证方式:Brent Chun’s 的 authd 和 LLNL 的 MUNGE,MUNGE 是专为高性能集群计算打造的,这里我们选用 MUNGE,生成 key 后启动 munge 认证服务:

# /usr/sbin/create-munge-key
Generating a pseudo-random key using /dev/urandom completed.

# /etc/init.d/munge start

使用 SLURM Version 2.3 Configuration Tool 在线配置工具生成配置文件,然后把配置文件拷贝控制节点以及各个计算结点的 /etc/slurm-llnl/slurm.conf(是的,控制节点和计算结点使用同一个配置文件)。

有了配置文件和启动了 munge 服务后就可以在控制节点启动 slurmctld 服务了:

# /etc/init.d/slurm-llnl start
 * Starting slurm central management daemon slurmctld                             [ OK ]

把控制节点生成的 munge.key 拷贝到各个计算结点:

# scp /etc/munge/munge.key ubuntu@slurm01:/etc/munge/

登陆计算节点后启动 munge 服务(注意需要改变 munge.key 的 owner 和 group 为 munge,否则会启动失败)和 slurmd 服务:

# ssh ubuntu@slurm01

# chown munge:munge munge.key 
# /etc/init.d/munge start
 * Starting MUNGE munged                                                           [ OK ]

# slurmd

在控制节点上(slurm00)测试一下是否顺利连接到计算结点(slurm01),并且简单运行一个程序 /bin/hostname 看看效果吧:

# sinfo 
PARTITION AVAIL  TIMELIMIT  NODES  STATE NODELIST
debug*       up   infinite      1   idle slurm01

# srun -N1 /bin/hostname 
slurm01

在 Ubuntu 11.10 上安装 Sun Grid Engine

Sun Grid Engine(现在叫做 Oracle Gird Engine)是一套开源的分布式资源管理软件,用来统一管理和利用所有(愿意被管理的)电脑上的资源,使得这些电脑(集群)使用起来就像一台电脑一样,好处是可以随意扩展总的计算资源(买更多的电脑加入集群),并且管理上就像使用一台电脑一样方便。使用者只需要把需要计算的工作准备好,提交到 Sun Grid Engine (SGE),SGE 就会根据已经订好的管理策略以及使用者的需求在集群里找到合适的电脑来完成计算工作。SGE 主要用在高性能计算、网格计算等领域。

我们云计算项目里面有个想法就是能在我们的云计算平台上快速创建多个高配置虚拟机并自动接入到 SGE 集群,能迅速满足整个实验室高峰时期的计算需求。目前我们的 SGE 集群包含 2 台 IBM 超级计算机,n 台 PC 服务器和多个刀片服务器,以后为了临时满足高峰时期的计算要求会从云里申请多个虚拟机并自动配置到 SGE 集群里。

安装 Sun Grid Engine 需要 Java 的支持(最好是 SUN 的 Java 版本),所以所有结点都需要安装 Java 包。Ubuntu 从 11.10 版本不在提供 SUN 的官方 Java 版本,需要另外的源:

$ sudo apt-get install python-software-properties
$ sudo add-apt-repository ppa:ferramroberto/java
$ sudo apt-get update
$ sudo apt-get install sun-java6-jre

首先在所有结点上修改 /etc/hosts,grid00 是主控结点,grid01 和 grid02 是执行结点(我们一般把主控结点叫做 master 或者 head,执行结点叫做 client):

$sudo vi /etc/hosts
127.0.0.1	localhost.localdomain	localhost
192.168.2.10	grid00.vpsee.com	grid00
192.168.2.11	grid01.vpsee.com	grid01
192.168.2.12	grid02.vpsee.com	grid02

在主控结点(grid00)上安装 gridengine-master 以及一些管理工具 qhost/qconf/qstat 等(包含在 gridengine-client 中):

$ sudo apt-get install gridengine-client gridengine-common gridengine-master

如果不习惯命令行界面,可以在主控结点上装个 qmon 图形管理工具,界面如下:

$ sudo apt-get install xserver-xorg gridengine-qmon

sun grid engine qmon guy

在所有执行结点(grid01 和 grid02)上安装 gridengine-exec:

$ sudo apt-get install gridengine-exec

在主控结点上执行以下操作把所有的执行结点加到集群里:

$ sudo -i

# qconf -ah grid01
# qconf -ah grid02

在所有执行结点执行以下操作,通过 act_qmaster 这个文件识别主控结点,然后启动服务:

$ sudo echo "grid00.vpsee.com" > /var/lib/gridengine/default/common/act_qmaster

$ sudo /etc/init.d/gridengine-exec start

最后在主控结点上查看一下是否成功:

# qhost
HOSTNAME                ARCH         NCPU  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS
-------------------------------------------------------------------------------
global                  -               -     -       -       -       -       -
grid00.vpsee.com        -               -     -       -       -       -       -
grid01.vpsee.com        lx26-amd64     24 24.00   63.0G    1.7G    3.7G     0.0
grid02.vpsee.com        lx26-amd64      8  0.01   55.2G  642.2M    1.0G     0.0

测试

如何知道这个集群是否能正常工作呢?提交一个任务(job)测试一下。在主控结点上写一个简单脚本打印当前 Linux 内核版本:

# vi uname.sge 
#!/bin/bash
uname -a

然后用 qsub 提交这个脚本到 SGE 集群:

# vi uname.sge 
#!/bin/bash
uname -a

# qsub uname.sge
qsub uname.sge 
Your job 3557 ("uname.sge") has been submitted

如果运行成功就会在某个执行结点的自己目录下面(我这里用的是 root 帐号,所以是 /root 目录)得到2个文件,执行结果就在 uname.sge.o3557 这个文件里:

# ls
uname.sge.e3557  uname.sge.o3557

# cat uname.sge.o3557 
Linux grid02 3.0.0-16-server #29-Ubuntu SMP Tue Feb 14 13:08:12 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

超级计算机11月数据统计

一年前讨论 Linux 发行版的时候提到了一些超级计算机的数据,今年6月份数据有点变化,这次刚发布的11月份超级计算机统计报告的亮点依然是中国,中国的 “天河1A” 第一次拿到冠军宝座,并且前十占有两个席位,排名都很靠前(第一和第三),6月份中国有24台超级计算机上榜,按照国家排名与德国并列第四,这次有42台计算机进入 Top500,仅次于美国。上次上榜的超级计算机的处理能力加起来中国排名第二,这次不管是计算机处理能力还是上榜的超级计算机台数都跃升为第二,短短6个月就造了18台超级计算机并进榜,非常惊讶,难道开始造航母了?(新浪:中国造航母须具备五大科技能力 超级计算机居首

还有一个亮点值得讨论的地方是 Amazon 的云计算集群计算系统(Amazon EC2 Cluster, Xeon X5570 2.95 Ghz, 10G Ethernet)进入 Top500,排名第231位,这是云计算的一次非常大的尝试和进步,VPSee 去年还讨论了 “云计算可以用来替代高性能计算吗?”,当时云计算的性能远远没有达到高性能计算(HPC )的要求,时过一年居然就上了榜,现在普通人用信用卡就可以用上超级计算机服务,这在以前是不敢想象的事情,会不会有人利用这种云计算 HPC 破译密码呢?

Linux 依然是超级计算机的绝对主力,对比6月份数据发现 Linux 总体上升5台,牢牢占有82%的份额,其中 CentOS 上升1台,SLES 9 下降1台,SLES 10 下降2台,SUSE/openSUSE/SLES 系还在下降。以下数据来自:Top 500 Super Computer Sites

操作系统版本 使用的个数 所占百分比 处理器个数
Linux(未知版本) 410 82.00 % 4540212
SLES 9 4 0.80 % 59504
CNK/SLES 9 14 2.80 % 1134592
SUSE Linux 1 0.20 % 26304
Redhat Linux 4 0.80 % 48800
RedHat Enterprise 4 3 0.60 % 14736
UNICOS/SUSE Linux 1 0.20 % 8192
SLES 10 2 0.40 % 14328
SLES10 + SGI ProPack 5 15 3.00 % 135200
RedHat Enterprise 5 2 0.40 % 11928
CentOS 8 1.60 % 114792

Avatar,好看好强大

周末去看了《Avatar》,很强大,感觉更像是一部环保+爱情大片。愚蠢的人类把那棵大树毁掉的时候很让人气愤,是人类该好好反省自己在地球上所作所为的时候了。这几天欧洲普降大雪气温降至历史低位,前天美国加州发生6.5级地震,感觉有点像《2012》的开头,难道气候、环境问题还没有引起前不久结束的哥本哈根大会的注意么?

Avatar 的特效是由一家新西兰公司 Weta Digital 制作的,从 Processing AVATAR 了解到制作 Avatar 的超级计算机使用了约 4,000 台 HP BL2×220c 刀片服务器,Intel EM64T Xeon 2500 MHz 处理器和 104TB 的内存,刀片服务器通过光纤通道传输数据,数据存储在 BlueArc 和 NetApp 上,网络使用的是 multiple 10-gigabit 连接。目前这台 Weta Digital 的超级计算机排在世界超级计算机500强的第193位,看似不起眼的 Weta Digital 公司在世界超级计算机500强中占有7个席位。制作 Avatar 的这台超级计算机采用的是 Linux 操作系统,3D 动画、建模和渲染软件使用的是 Autodesk 公司的 Maya 和 Pixar 公司的 RenderMan.

Weta Digital 数据中心的系统管理员 Paul Gunn 在 Data Center Lessons from AVATAR 中提到虚拟化不是有效提高并行计算能力的唯一方式,像制作 Avatar 电影特效这种需要巨量超负荷计算的任务,虚拟化会导致速度更慢,这也让 VPSee 想到前段时间写的一篇 云计算可以用来替代高性能计算吗? 文中提到的几篇学术论文的研究成果都显示当前的云计算(以虚拟化的方式)还远没有达到高性能计算(HPC)的要求。

avatar

云计算可以用来替代高性能计算吗?

周末看了两篇有趣的论文,关于云计算的,云计算被称为 “scale by credit card” 的技术,看看 credit card 足够多的话能不能用来替代高性能计算(HPC),能不能替代那些超级计算机和集群:)。一篇是:Benchmarking Amazon EC2 for high-performance scientific computing;另一篇是:Can Cloud Computing Reach The TOP500?

云计算大致可以分为以下三种,目前关于云计算做 HPC 的探讨主要集中在 IaaS,Amazon EC2/S3 是 IaaS 的典型代表,也是目前最好的 IaaS 服务商:

1、Infrastructure-as-a-Service(IaaS)
2、Platform-as-a-Service(PaaS)
3、Software-as-a-Service(SaaS)

第一篇文章作者使用 NAS Parallel Benchmarks 比较了云计算的 Amazon EC2 Cluster 和传统 HPC 的 NCSA Cluster,为了测试两者硬件配置基本相同:

Amazon EC2 Cluster NCSA Cluster
7 GB memory, 4 CPU cores per processor (2.33-GHz Xeon), 8 CPU per node, 64 bits, 1690 GB storage 8 GB memory, 4 CPU cores per processor (2.33-GHz Xeon), 8 CPU per node, 64 bits, 73 GB storage
High I/O performance (specific
interconnect technology unknown)
Infiniband switch

测试结果一点也不惊讶,显然专门的 HPC 集群要快一些。在计算方面,即使在单个 node 上,EC2 也要慢7-21%,如果在 32 CPUs 上则要慢40-1000%,而且 node 之间还没有通信,算上通信会慢更多;在网络性能和延迟方面,EC2 没办法和专门为 HPC 打造的 Infinband switch 比。

第二篇文章得到类似的结果并且认为,如果云计算厂商有意进入 HPC 市场的话,并且能在内存、网络延迟、价格方面有所改进的话,对于 HPC 来说云计算还是很有吸引力的。两篇文章都得出类似的结论,虽然云计算在 web services 领域如火如荼,但是在 HPC 领域还没有准备好。用 Cloud Computing 进行计算的花费随着计算复杂度的增加而指数增加,这一点和 HPC 是一样的,并不能带来特别的好处。

Amazon EC2 远远没有达到 HPC 的性能,目前替代 HPC 还太早。我们知道一台超级计算机的价格太高,而且资源稀缺,不是买一个放在那里就完了,电源、机房、设备、人力导致总体成本更高。一般高校、研究机构都养不起超级计算机。个人认为云计算在 HPC 领域还是可以有所作为的,对与要求不高的 HPC 云计算可以按需付费使用,不必自己养一台庞然大物,养超级计算机每年的电费可能都超过了付给云计算的服务费。虽然目前云计算对于商业 HPC 的应用还不成熟,但足够用来运行一个小计算机集群,供小规模的 HPC 应用。或者云计算可以作为已有的超级计算机集群的扩展,某个高峰时期现有集群不够用时临时扩展到云计算应急一下。云计算还有一个显而易见的好处就是马上就可以获得,付费马上就可以使用,不必等待超级计算机预算、决策、购买、安装、调试漫长的等待过程,如果对于性能不是很在意,不关心计算速度有多快,云计算是个不错的替代选择。