使用作业调度系统
约2分钟
使用作业调度系统
我们的配方支持一些作业调度系统,如SGE、PBS/Torque和Slurm,这是根据Kaldi中的并行化实现的。默认情况下,作业在本地机器上运行。如果您的环境中存在任何作业调度系统,您可以使用多台机器提交更多数量的作业。
如果您有多台机器,请让管理员进行安装。
选择作业调度器
cmd.sh 是一个配置文件,被 run.sh 用来设置一些shell变量。这些shell变量应该设置为以下perl脚本之一:
| 命令 | 后端 | 配置文件 |
|---|---|---|
| run.pl | 本地机器(默认) | - |
| queue.pl | Sun网格引擎或类似网格引擎的工具 | conf/queue.conf |
| slurm.pl | Slurm | conf/slurm.conf |
| pbs.pl | PBS/Torque | conf/pbs.conf |
| ssh.pl | SSH | .queue/machines |
run.pl的使用方法
run.pl、queue.pl、slurm.pl、pbs.pl 和 ssh.pl 具有统一的接口,因此我们可以在shell脚本中将其中任何一个分配给 ${cmd}:
nj=4
${cmd} JOB=1:${nj} JOB.log echo JOBJOB=1:${nj} 表示并行化处理,也称为"数组作业",包含 ${nj} 个任务。JOB.log 是任务标准输出和错误输出的目标文件。如果日志文件名或命令行参数中包含 JOB 字符串,它将被替换为实际的任务编号。例如,以下命令与上述内容基本等效:
echo 1 &> 1.log &
echo 2 &> 2.log &
echo 3 &> 3.log &
echo 4 &> 4.log &
wait配置
您还需要修改特定作业调度程序的配置文件,以更改提交作业的命令行选项,例如队列设置、资源请求等。
以下文本是conf/queue.conf的示例。
# Default configuration
command qsub -v PATH -cwd -S /bin/bash -j y -l arch=*64*
option mem=* -l mem_free=$0,ram_free=$0
option mem=0 # Do not add anything to qsub_opts
option num_threads=* -pe smp $0
option num_threads=1 # Do not add anything to qsub_opts
option max_jobs_run=* -tc $0
default gpu=0
option gpu=0
option gpu=* -l gpu=$0 -q g.q请注意,队列/分区名称 -q g.q 仅作为示例,您必须将其更改为集群中现有的队列/分区。
在我们的脚本中,您不能使用针对每个系统的特定选项,例如不能直接为queue.pl使用-q选项。这种情况下,您可以使用--mem、--num_threads、--max_jobs_run和--gpu选项。
请看以下内容:
option gpu=* -l gpu=$0 -q g.q这一行表示第二列指定的可选参数gpu=*将被转换为后面的选项:-l gpu=$0 -q g.q:
queue.pl --gpu 2将被转换为
qsub -v PATH -cwd -S /bin/bash -j y -l arch=*64* -l gpu=2 -q g.q您也可以使用此语法为系统添加新选项。
option foo=* --bar $0