做语音的人很多都会用到的 kaldi,而在 kaldi 里使用最多的并行计算环境是 Sun Grid Engine(SGE),本人也在自己的服务器上部署了 SGE 环境。

部署 SGE

在管理节点上

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

增加管理员(am=add manager)

$ sudo qconf -am <your-user-id>

删除管理员(dm=delete manager)

$ sudo qconf -dm <your-user-id>

显示所有管理员(sm=show manager)

$ sudo qconf -sm

在所有计算节点上(管理节点也可以是计算节点)

$ sudo apt-get install gridengine-client gridengine-exec

使用下面的命令来查看当前自己的任务、查看其它用户的任务、以及集群的状态

huanglu@DeepNet1:~$ qstat
job-ID  prior   name       user         state submit/start at     queue                          slots ja-task-ID
-----------------------------------------------------------------------------------------------------------------
 342675 0.75000 train.431. huanglu      r     06/05/2017 10:03:20 all.q@DeepNet1.speech.local        1
 342677 0.25000 progress.4 huanglu      r     06/05/2017 10:00:20 all.q@DeepNet1.speech.local        1
 342678 0.75000 train.431. huanglu      r     06/05/2017 10:03:20 all.q@DeepNet1.speech.local        1
huanglu@DeepNet1:~$ qstat -u liuzuozhen
huanglu@DeepNet1:~$ qhost -q
HOSTNAME                ARCH         NCPU NSOC NCOR NTHR  LOAD  MEMTOT  MEMUSE  SWAPTO  SWAPUS
----------------------------------------------------------------------------------------------
global                  -               -    -    -    -     -       -       -       -       -
DeepNet1.speech.local   lx-amd64       48    2   24   48 12.93  126.1G    9.3G    7.5G   20.8M
   all.q                BIP   0/3/15

上面最后一行如果没有增加集群是不会显示的。

增加集群

使用下面的命令增加集群

$ qconf -aq

qnametemplate 改为 all.q,然后需要把 hostlist 处增加主机,以及想使用的主机的 cpu 线程数,如

qname                 all.q
hostlist              speech-WorkStation
......
slots                 18
...

之后我们可以通过下面的命令修改 all.q的配置。

$ qconf -mq all.q

SGE 使用的是资源的概念,我们可以修改或增加资源,使用下面的命令

$ qconf -mc

mem_free 一行的 0G 改为 1G,即

#name               shortcut    type        relop requestable consumable default  urgency
#------------------------------------------------------------------------------------------
<snip>
mem_free            mf         MEMORY      <=    YES         YES         1G        0

同样在最下面增加两行,分别对应 GPU 和 内存

#name               shortcut    type        relop requestable consumable default  urgency
#------------------------------------------------------------------------------------------
<snip>
gpu                 g           INT         <=    YES         YES        0        10000
ram_free            ram_free    MEMORY      <=    YES         JOB        1G       0

然后我们根据自己机器的内存和 GPU 数量,设置资源值,使用下面的命令

$ qconf -me <some-hostname> 

后面接的是主机名,修改 complex_values 域,如

complex_values        ram_free=112G,gpu=2

之后还需要执行

$ qconf -ap smp

并将 slots 修改为9999。

最后执行 qconf -mq all.q,将 pe_list 修改为

pe_list               make smp

常用的 command

查看状态

查看本人、他人、集群状态

$ qstat
$ qstat -u huanglu
$ qhost -q

管理资源

管理要使用的 CPU 核心数,下面命令,修改 slots

$ qconf -mq all.q

管理内存和 GPU 资源,后面接的是主机名,修改 complex_values 域。

$ qconf -me <some-hostname> 

调整任务提交的等待时间,修改 schedule_interval

$ qconf -msconf

任务管理

删除任务

$ qdel <job-id>

删除自己的所有任务

$ qdel -u <user-name>