【问题标题】:QSUB a process for every file in a directory?QSUB 为目录中的每个文件创建一个进程?
【发布时间】:2011-09-02 04:53:36
【问题描述】:

我一直在用

qsub -t 1-90000 do_stuff.sh

在 Sun GridEngine 集群上提交我的任务,但现在发现自己使用的数据集(也超大的)不太方便命名。解决这个问题的最佳方法是什么?我可以尝试将它们全部重命名,但名称中包含需要保留的信息,这显然会带来很多问题。我可以将所有内容预处理为 jsons,但如果有办法只使用 qsub -all_contents_of_directory,那将是理想的。

我是 SOL 吗?我应该去有问题的目录并找到 . -exec 'qsub setupscript.sh {}'?

【问题讨论】:

    标签: cluster-computing qsub sungridengine


    【解决方案1】:

    使用另一个脚本来提交作业 - 这是我使用的示例,我希望作业名称中包含目录名称。 "run_openfoam" 是特定目录中的 pbs 脚本。

    #!/bin/bash
    cd $1
    qsub -N $1 run_openfoam
    

    您可以调整此脚本以适合您的工作,然后通过命令行上的循环运行它。因此,您无需提交作业数组,而是为作为第一个参数传递给此脚本的每个目录名称提交作业。

    【讨论】:

      【解决方案2】:

      我倾向于使用 Makefile 来自动化这些东西:

      INPUTFILES=$(wildcard *.in)
      OUTPUTFILES=$(patsubst %.in,%.out,$(INPUTFILES))
      
      all : $(OUTPUTFILES)
      
      %.out : %.in
              @echo "mycommand here < $< > $@" | qsub 
      

      然后输入'make',所有文件都会提交给qsub。当然,这会一次性提交所有内容,这可能会对您的计算集群和系统管理员的血压造成不利影响。

      如果删除“| qsub”,make 的输出是要运行的命令列表。将该列表输入一个或多个 qsub 命令,您将提高效率并减少 qsub 作业。为此,我一直在使用 GNU 并行,但它需要一个 qsub 阻塞直到工作完成。我写了一个包装器来做到这一点,但它经常调用 qstat,这意味着对系统的大量访问。我应该以某种方式对其进行修改,但这里没有很多计算上“好的”选项。

      【讨论】:

        【解决方案3】:

        我无法理解您的 qsub 命令中的“-t 1-90000”。我对 qsub 手册的搜索没有显示这样的“-t”选项。

        【讨论】:

          【解决方案4】:

          创建一个包含数据集列表的文件 find . -print &gt;~/list_of_datasets 脚本:

          #!/bin/bash
          exec ~/setupscript.sh $(sed -n -e "${SGE_TASK_ID}p" <~/list_of_datasets)
          

          qsub -t 1-$(wc -l ~/list_of_datasets) job_script

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-07-07
            • 1970-01-01
            • 2015-08-29
            • 1970-01-01
            • 2021-03-26
            • 2019-10-17
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多