神秘博士講起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

使用torque管理計算任務

到這里為止,使用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環境和硬件的一定了解,還需要花費大量的時間和精力,但是收獲也是巨大的,快來試試吧

登錄后免費查看全文
立即登錄
App下載
技術鄰APP
工程師必備
  • 項目客服
  • 培訓客服
  • 平臺客服

TOP

5
3