TORQUE

来自 ArchWiki
注意: TORQUE 不再是自由软件。

TORQUE 是一个资源管理器,提供对批处理作业和分布式计算节点的控制。基本上,人们可以建立一个家庭或小型办公室 Linux 集群,并使用此软件排队作业。一个集群由一个主节点和多个计算节点组成。主节点运行 torque-server 守护进程,计算节点运行 torque-client 守护进程。主节点还运行一个调度器守护进程。

安装

注意: 尽管 TORQUE 是一个非常强大的排队系统,但如果集群的目标仅仅是为了提高编译吞吐量,那么 distcc 是一个更容易和更优雅的解决方案。

安装 torqueAUR 软件包。

必备条件

/etc/hosts

确保集群中所有计算机上的 /etc/hosts 文件都包含集群中每台计算机的主机名。例如,集群由 3 台计算机组成:mars、phobos 和 deimos。

192.168.0.20   mars
192.168.0.21   phobos
192.168.0.22   deimos

防火墙配置 (如果已安装)

确保为所有使用 TORQUE 的机器打开 TCP。

默认情况下,pbs_server (服务器) 和 pbs_mom (客户端) 使用 TCP 和 UDP 端口 15001-15004。如果配置了特权端口 (默认配置),pbs_mom (客户端) 还使用 UDP 端口 1023 及以下端口。

NFS

从技术上讲,不需要使用 NFS,但这样做可以简化整个过程。强烈建议在服务器或另一台机器上使用 NFS 共享,以简化共享通用构建磁盘空间的过程。

配置

服务器 (主节点) 配置

在主节点/调度器上按照以下步骤操作。

编辑 /var/spool/torque/server_name 以命名主节点。建议与 /etc/hostname 中的主机名匹配,以简化操作。

创建并配置 torque 服务器

# pbs_server -t create
PBS_Server localhost.localdomain: Create mode and server database exists,
do you wish to continue y/(n)?y

然后通过运行以下命令启动 trqauthd

# trqauthd

此处提供了一组最少的选项。调整第一行,将 “mars” 替换为在 /var/spool/torque/server_name 中输入的主机名

qmgr -c "set server acl_hosts = mars"
qmgr -c "set server scheduling=true"
qmgr -c "create queue batch queue_type=execution"
qmgr -c "set queue batch started=true"
qmgr -c "set queue batch enabled=true"
qmgr -c "set queue batch resources_default.nodes=1"
qmgr -c "set queue batch resources_default.walltime=3600"
qmgr -c "set server default_queue=batch"

保留队列中已完成的作业一段时间可能会很有用。

qmgr -c "set server keep_completed = 86400"

这里,86400 秒 = 24 小时,之后作业将自动从队列中删除。可以使用 qstat 上的 -f 开关查看从队列中删除的作业的完整日志

qstat -f

使用此命令验证服务器配置

# qmgr -c 'p s'

编辑 /var/spool/torque/server_priv/nodes,添加所有计算节点。同样,建议与 LAN 上计算机的主机名匹配。语法为 HOSTNAME np=x gpus=y properties

  • HOSTNAME=计算机的主机名
  • np=处理器数量
  • gpus=GPU 数量
  • properties=注释

仅主机名是必需的,所有其他字段都是可选的。

示例

mars np=4
phobos np=2
deimos np=2
注意
  • 可以在同一台计算机上同时运行服务器和客户端。
  • 重新运行 pbs_server -t create 可能会删除此节点文件。

重启服务器,新的选项将被加载。

客户端 (计算节点) 配置

在集群中的每个计算节点上按照以下步骤操作。

注意: 如果在同一台计算机上同时运行服务器和客户端,请务必为该计算机以及集群上的其他客户端完成这些步骤。

编辑 /var/spool/torque/mom_priv/config 以包含一些基本信息来标识服务器

$pbsserver      mars          # note: this is the hostname of the headnode
$logevent       255           # bitmap of which events to log

重启服务器

应该就是这样了。现在重启服务器,以便设置生效。

# killall -s 9 pbs_server
# pbs_server

启动客户端

为了启动客户端,请在每个客户端上运行以下命令,包括作为客户端的服务器

# pbs_mom

验证集群状态

要检查集群的状态,请发出以下命令

$ pbsnodes -a

如果节点正常运行,则应指示它已准备好接收作业,并回显 statefree。如果节点无法工作,它将报告 down 状态。

示例输出

     mars
     state = free
     np = 4
     ntype = cluster
     status = rectime=1308479899,varattr=,jobs=0.localhost.localdomain,state=free,netload=1638547057,
gres=,loadave=2.69,ncpus=4,physmem=8195892kb,availmem=7172508kb,totmem=8195892kb,
idletime=24772,nusers=1,nsessions=5,sessions=1333 1349 1353 1388 9095,
uname=Linux mars 2.6.39-ck #1 SMP PREEMPT Sat Jun 18 14:19:01 EDT 2011 x86_64,opsys=linux
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 2

phobos
     state = free
     np = 2
     ntype = cluster
     status = rectime=1308479933,varattr=,jobs=,state=free,netload=1085755815,
gres=,loadave=2.84,ncpus=2,physmem=4019704kb,availmem=5753552kb,totmem=6116852kb,
idletime=7324,nusers=2,nsessions=6,sessions=1565 1562 1691 1716 1737 1851,
uname=Linux phobos 2.6.37-ck #1 SMP PREEMPT Sun Apr 3 17:16:35 EDT 2011 x86_64,opsys=linux
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 1

deimos
     state = free
     np = 2
     ntype = cluster
     status = rectime=1308479890,varattr=,jobs=2.localhost.localdomain,state=free,netload=527239670,
gres=,loadave=0.52,ncpus=2,physmem=4057808kb,availmem=3955624kb,totmem=4057808kb,
idletime=644,nusers=1,nsessions=1,sessions=865,
uname=Linux deimos 2.6.39-ck #1 SMP PREEMPT Sat Jun 11 12:36:21 EDT 2011 x86_64,opsys=linux
     mom_service_port = 15002
     mom_manager_port = 15003
     gpus = 1

排队作业

通过 qsub 命令完成向集群排队作业。

一个简单的测试是简单地运行 sleep

$ echo "sleep 30" | qsub

通过下面描述的 qstat 命令检查队列的状态。此时,作业的状态将为“Q”,这意味着已排队。要启动它,请运行调度器

# pbs_sched

可以修改 torque-server systemd 守护进程以在启动时激活 pbs_sched。

qsub 的另一个用途是命名作业并排队脚本

$ qsub -N x264 /home/facade/bin/x264_HQ.sh
注意: 默认情况下,排队作业的 STDOUT 和 STDERR 将以文本文件形式记录,分别对应于输出 pid.opid.e,并将写入发出 qsub 命令的路径。

另一个示例可以使用包装器脚本自动批量创建和排队工作。

检查作业状态

qstat 用于检查工作状态。

$ qstat
Job id                    Name             User            Time Use S Queue
------------------------- ---------------- --------------- -------- - -----
13.localhost               generic-i686.pbs facade         00:05:06 R batch          
14.localhost               atom-i686.pbs    facade         00:03:09 R batch          
15.localhost               core2-i686.pbs   facade         00:01:02 R batch          
16.localhost               k7-i686.pbs      facade                0 Q batch          
17.localhost               k8-i686.pbs      facade                0 Q batch          
18.localhost               k10-i686.pbs     facade                0 Q batch          
19.localhost               p4-i686.pbs      facade                0 Q batch          
20.localhost               pentm-i686.pbs   facade                0 Q batch          
21.localhost               ...ic-x86_64.pbs facade                0 Q batch          
22.localhost               atom-x86_64.pbs  facade                0 Q batch          
23.localhost               core2-x86_64.pbs facade                0 Q batch          
24.localhost               k8-x86_64.pbs    facade                0 Q batch          
25.localhost               k10-x86_64.pbs   facade                0 Q batch          

附加 -n 开关以查看哪些节点正在执行哪些作业。

$ qstat -n
localhost.localdomain:
405.localhost.lo     facade  batch    i686-generic       3035     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
406.localhost.lo     facade  batch    i686-atom          5768     1   0    --  01:00 C 00:46
   phobos/1+phobos/0
407.localhost.lo     facade  batch    i686-core2        22941     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
408.localhost.lo     facade  batch    i686-k7           10152     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
409.localhost.lo     facade  batch    i686-k8           29657     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
410.localhost.lo     facade  batch    i686-k10          16838     1   0    --  01:00 C 00:12
   mars/3+mars/2+mars/1+mars/0
411.localhost.lo     facade  batch    i686-p4           25340     1   0    --  01:00 C 00:46
   deimos/1+deimos/0
412.localhost.lo     facade  batch    i686-pentm        12544     1   0    --  01:00 R 00:20
   phobos/1+phobos/0
413.localhost.lo     facade  batch    x86_64-generic     4024     1   0    --  01:00 C 00:13
   mars/3+mars/2+mars/1+mars/0
414.localhost.lo     facade  batch    x86_64-atom       19330     1   0    --  01:00 C 00:13
   mars/3+mars/2+mars/1+mars/0
415.localhost.lo     facade  batch    x86_64-core2       2146     1   0    --  01:00 C 00:13
   mars/3+mars/2+mars/1+mars/0
416.localhost.lo     facade  batch    x86_64-k8         17234     1   0    --  01:00 R 00:11
   mars/3+mars/2+mars/1+mars/0
417.localhost.lo     facade  batch    x86_64-k10          --      1   0    --  01:00 Q   -- 
    -- 

参见