计算化学公社

标题: 怎么同时执行当前目录下所有Gaussian输入文件并在完成时再显示finish? [打印本页]

作者
Author:
laomalao    时间: 2022-4-10 23:31
标题: 怎么同时执行当前目录下所有Gaussian输入文件并在完成时再显示finish?
本帖最后由 laomalao 于 2022-4-10 23:34 编辑



参照了http://sobereva.com/258的写法,发现只能一个一个算,算完一个显示finish了再提交下一个任务。时间上太划不来了。如下所示,我只是在time g09这一行后加了&,实现了同时计算,但是finish也同时全部显示出来了。。。
请问怎么同时执行当前目录下所有Gaussian输入文件并在完成时再显示finish?


#!/bin/bash
[size=11.375px]icc=0
[size=11.375px]nfile=`ls ./*.gjf|wc -l`
[size=11.375px]for inf in *.gjf
[size=11.375px]do
[size=11.375px]((icc++))
[size=11.375px]echo Running ${inf} ... \($icc of $nfile\)
[size=11.375px]time g09 < ${inf} > ${inf//gjf/out} &
[size=11.375px]echo ${inf} has finished
[size=11.375px]echo
[size=11.375px]done




作者
Author:
wzkchem5    时间: 2022-4-11 02:32
我一般用的方法是,在命令后面加&、把所有任务都跑上以后,用一个while循环,不断ps aux(或者不断top、不断jobs可能也行),检查任务有没有跑完,如果没有跑完就sleep一秒,如果跑完了就跳出循环,往后执行(也就是你这里的显示finish)。
当然这个方法比较ugly,看看别人有没有更加elegant的解决方法
作者
Author:
abin    时间: 2022-4-11 08:28
本帖最后由 abin 于 2022-4-11 10:22 编辑

workload manager.

鄙人做了一个工具, hpc4you toolkit solo, 可以轻松在工作站,
轻松安装slurm调度器.
【Linux工作站自动配置SLURM调度器-哔哩哔哩】 https://b23.tv/1jiksSW


不用workload manager,
也可以使用别的暴力方案,

比如有10个文件, 先生成10个run-fileXX.sh,
然后再把这10个run-fileXX.sh一股脑提交即可.

简单示例, 自己修改.
  1. cat demo.demo

  2. # BOF
  3. #!/bin/bash
  4. echo "Starting DEMO run at node `hostname`" on `date` > DEMO.time.txt
  5. g09 DEMO
  6. echo "Finished DEMO run at node `hostname`" on `date` >> DEMO.time.txt

  7. # EOF

  8. for f in `ls *.com`
  9. do
  10. cp demo.demo tmp.sh
  11. sed -i "s/DEMO/$f/g" tmp.sh
  12. mv tmp.sh `basename $f .com`.sh
  13. bash `basename $f .com`.sh &
  14. done
复制代码




如果是一堆小任务还可以凑合,
任务较多的话, 这种模式容易造成机器过载, 计算效率反而低下.

使用workload manager是最佳的方案.





作者
Author:
sai77    时间: 2022-4-11 08:33
不是应该装个作业管理系统吗?比如torque
作者
Author:
wzkchem5    时间: 2022-4-11 14:46
abin 发表于 2022-4-11 01:28
workload manager.

鄙人做了一个工具, hpc4you toolkit solo, 可以轻松在工作站,

这个不解决跑完所有任务再显示finish的问题,只解决了一次跑太多任务会把机器搞崩掉的问题。不知道如果要在跑完所有任务以后显示finish,除了我说的办法以外还有没有更好的办法
作者
Author:
abin    时间: 2022-4-11 15:24
workload manager
Mail notification when job finished.
Or use job array, supported by slurm.

作者
Author:
冰释之川    时间: 2022-4-11 15:24
装一个作业管理系统就行了
作者
Author:
wzkchem5    时间: 2022-4-11 16:08
abin 发表于 2022-4-11 08:24
workload manager
Mail notification when job finished.
Or use job array, supported by slurm.

学习了,刚才查了一下job array,确实挺有用的,还可以指定同时最多只能跑多少个任务。
谢谢!
作者
Author:
abin    时间: 2022-4-11 16:36
来一个workload manager,
如果机器就是自己用,
所有计算任务一股脑打上去就行了,
workload manager可以自动加载计算, 并防止机器过载.
在脚本中开启mail,
算完自动电邮(本地)通知, 当然也可以调试为给你的其他邮件发送电邮通知. (免费, 但是需要自己配置, 需要时间).

或者, 经由微信等推送,
可能需要部分API, 也许用几次免费, 多次可能需要付费.

纯shell也可以实现....
就是麻烦点.
取决于, 是需要每一个文件执行完毕后, 都需要写一个done,
还是, 所有文件都写完后, 再写一个done?

如果是我,
当然借助于workload manager来实施了.

方法多的是, 看你能搞定哪一个.
能干活就行.
作者
Author:
laomalao    时间: 2022-4-11 16:41
刚看了下slurm的安装,还需要花点时间调试和两台linux的服务器,目前就自己一台仪器。
没有job array确实可能内存和cpu分配超标,那样仪器是会突然卡住还是怎么办呢?可以直接写个脚本kill掉卡住的任务么
作者
Author:
abin    时间: 2022-4-11 17:15
laomalao 发表于 2022-4-11 16:41
刚看了下slurm的安装,还需要花点时间调试和两台linux的服务器,目前就自己一台仪器。
没有job array确实 ...

slurm 可用于单机,也就是一台机器,
也可以用于集群。

qdel jobID
就可以停止对应任务。

我用workload manager 十多年,
没见过还有workload manager 能导致机器卡住的。

上文,我提到的演示视频可以观摩一下。


用shell来操作也可以。
不过没有Linux指令行经验的,容易误伤自己,也容易误伤他人计算任务。

或者看看这里的介绍信息,
先了解一下,workload manager 到底能做啥。
https://gitee.com/hpc4you/hpc


作者
Author:
laomalao    时间: 2022-4-12 09:47
abin 发表于 2022-4-11 17:15
slurm 可用于单机,也就是一台机器,
也可以用于集群。

Thanks for reminding me the qdel code!

链接里找到了slurm单机安装的bilibili视频,看着有点眼花 我再找找网页版的试试




欢迎光临 计算化学公社 (http://bbs.keinsci.com/) Powered by Discuz! X3.3