神秘博士讲起Linux超算集群搭建,是在暗示什么?
写在前面
并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。
并行计算集群在数值计算领域是重要的基础工具。强大的计算能力可以使研究人员事半功倍。计算机技术的发展使得我们可以非常容易地构建自己的并行计算集群。目前,大多数是基于x86处理器搭建的,既有多次位居TOP500的神威-太湖之光这种超级集群。也有几十个节点组成的小型集群。甚至有基于树莓派和ps4搭建的集群。本文简要介绍如何搭建一个自己的计算集群。
基本结构
采用一台管理节点+多台计算节点的形式,管理节点和计算节点之间通过NFS共享存储。编译器,MPI和计算用到的程序软件也安装在共享分区。计算节点只安装基本的系统环境。所有计算任务使用torque脚本通过管理节点进行提交。
每个用户与其他用户隔离,只可以操作自己家目录下的文件。
安装系统
Linux由于其开源,可定制性强,资源消耗低的特点,已经成为事实上的并行计算操作系统。TOP500几乎全部使用了Linux。这里我们使用了ubuntu-server作为集群的操作系统。首先将系统安装到所有节点上。当节点数目较少时可以逐个安装,如果数目很多,逐个安装的工作量难以想象。这时可以首先在一台节点上搭建DPCP和PXE服务,然后其他节点通过PXE启动进行安装。
使用NFS共享存储
作用:所有节点共享同一个存储空间,便于安装程序和软件,管理算例。避免在每台节点上重复安装软件。
NFS是server-client架构。首先在管理节点上安装nfs-kernel-server
然后在/etc/exports文件中添加要共享的分区,如:
/public hostIP/24(rw,sync,no_root_squash,no_subtree_check)
在计算节点上安装nfs-common
在管理节点的/etc/fstab文件中中写入要挂载的分区,如:
serverIP:/public /public nfs defaults 0 0
使用NIS管理用户账号
作用:NIS可以只在主节点上创建和管理用户,然后同步到所有节点上,不必再逐台操作。大大简化用户管理。
先在主节点上安装nis,安装过程中填写nis域名,可直接写主机名。
编辑主节点上的/etc/default/nis文件,进行下面设置:
NISSERVER=masterNISMASTER=this_hostname
编辑/etc/yp.conf文件,加入:
ypserver this_hostname
重启主节点上的ypserv服务,并执行:
sudo /usr/lib/yp/ypinit -m
在所有计算节点上安装nis,安装过程中填写的nis域名应与主节点相同。然后编辑/etc/nsswitch.conf文件,在passwd,group,shadow,gshadow等行的行尾加上nis
到这里为止,使用MPI可以直接进行并行计算了,但是管理起来并不方便,多个用户往往需要通过kill命令来停止算例。这时我们需要一个作业调试系统。常用的有slurm,torque等等。这里我们采用的是torque。
作用:便捷、安全地管理各个用户提交的计算任务,分配计算资源。
主要命令:qsub,qstat,qdel,tracejob
管理节点的配置
安装torque-server torque-mom和torque-sched
配置torque-server,在/var/spool/torque下创建nodes文件,写入各节点的主机名和可用资源数目。更改server_name文件中的内容为管理节点的主机名,
在/var/spool/torque/mom_priv中创建config文件,加入以下内容:
$pbsserver admin_node_name$logevent 225
在/etc/hosts中加入所有节点的IP和主机名的对称关系
重启pbs_server,pbs_sched和pbs_mom进程。
计算节点的配置
安装torque-mom
然后与管理节点类似,在/var/spool/torque/mom_priv中创建config文件,加入以下内容:
$pbsserver admin_node_name$logevent 225
在/etc/hosts中加入所有节点的IP和主机名的对称关系
重启pbs_mom进程
创建队列
使用qmgr命令来创建队列,一个配置例子如下:
## Create queues and set their attributes.### Create and define queue batch#create queue batchset queue batch queue_type = Executionset queue batch acl_user_enable = Trueset queue batch acl_users = gzzset queue batch acl_users += test2set queue batch acl_users += zd04set queue batch resources_default.nodes = 1set queue batch resources_default.walltime = 100000:00:00set queue batch enabled = Trueset queue batch started = True## Set server attributes.#set server scheduling = Trueset server acl_hosts = node0set server managers = zd04@node0set server default_queue = batchset server log_events = 511set server mail_from = admset server query_other_jobs = Trueset server scheduler_iteration = 600set server node_check_rate = 150set server tcp_timeout = 300set server poll_jobs = Trueset server keep_completed = 100set server allow_node_submit = Trueset server next_job_number = 617 # Create queues and set their attributes. # # # Create and define queue batch # create queue batch set queue batch queue_type = Execution set queue batch acl_user_enable = True set queue batch acl_users = gzz set queue batch acl_users += lhg set queue batch acl_users += test2 set queue batch acl_users += zd04 set queue batch resources_default.nodes = 1 set queue batch resources_default.walltime = 100000:00:00 set queue batch enabled = True set queue batch started = True # # Set server attributes. # set server scheduling = True set server acl_hosts = node0 set server managers = zd04@node0 set server default_queue = batch set server log_events = 511 set server mail_from = adm set server query_other_jobs = True set server scheduler_iteration = 600 set server node_check_rate = 150 set server tcp_timeout = 300 set server poll_jobs = True set server keep_completed = 100 set server allow_node_submit = True set server next_job_number = 617
完成后可以使用qmgr -c "p s"查看队列设置,使用qstat -q查看已有队列
添加新用户
先在管理节点上添加用户,对应的家目录设置在/public/home下:
sudo adduser new_user --home=/public/home/new_user
然后执行:
sudo /usr/lib/yp/ypinit -m
然后生成ssh密钥,并拷贝到各个计算节点。
最后,通过qmgr将新用户添加到相应的队列中:
set queue batch acl_users +=new_user
即可提交算例。
如果无法使用qsub提交,可能是因为在安装nis之前先安装了torque,需要重启计算节点上的pbs_mom进程
结束语
搭建一个集群不仅要求对Linux环境和硬件的一定了解,还需要花费大量的时间和精力,但是收获也是巨大的,快来试试吧