计算化学公社

 找回密码 Forget password
 注册 Register
Views: 20858|回复 Reply: 17
打印 Print 上一主题 Last thread 下一主题 Next thread

[Gaussian/gview] 批量提交Gaussian任务至pbs队列的脚本

[复制链接 Copy URL]

195

帖子

0

威望

4029

eV
积分
4224

Level 6 (一方通行)

跳转到指定楼层 Go to specific reply
楼主
最近尝试使用PBS作业管理系统对Gaussian作业进行排队管理,参考论坛的一些脚本,尝试写了个批量提交Gaussian任务的脚本,单节点任务提交没有问题。
  • 脚本会首先创建一个pbs.sh脚本,里面的参数可以按照实际情况自行修改,包括任务名称、核心数、内存、队列名称;注意某些符号需要使用\转义,如$
  • 该脚本会自动读取当前文件夹下的所有gjf文件名称,然后对pbs脚本里面的Gaussian文件名称进行替换操作,通过qsub命令提交至PBS队列
  • pbs脚本会被自动创建,不需要单独准备,因此只需一个bash g.sh命令即可提交当前文件夹下的所有gjf文件
  1. #!/bin/bash
  2. cat > pbs.sh << EOF
  3. #PBS -N Gaussian
  4. #PBS -o job.log
  5. #PBS -e err.log
  6. #PBS -l nodes=1:ppn=12
  7. #PBS -l mem=24000mb
  8. #PBS -q normal
  9. #PBS -j oe
  10. cd \$PBS_O_WORKDIR
  11. INPUT_NAME=1       ##这里输入文件名,不含拓展名##
  12. g09 \$INPUT_NAME.gjf
  13. wait
  14. formchk \$INPUT_NAME.chk
  15. EOF
  16. for inf in *.gjf
  17. do
  18. name="INPUT_NAME="${inf%.*}
  19. sed -i -r "s/(INPUT_NAME=)[^#]*/$name    /" pbs.sh
  20. qsub pbs.sh
  21. echo ${inf} has been submitted
  22. done
复制代码
g.sh (435 Bytes, 下载次数 Times of downloads: 126)




评分 Rate

参与人数
Participants 3
eV +14 收起 理由
Reason
shenxiangang + 4 谢谢
北大-陶豫 + 5 好物!
sobereva + 5

查看全部评分 View all ratings

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

2#
发表于 Post on 2021-3-20 09:30:00 | 只看该作者 Only view this author
本帖最后由 abin 于 2021-3-20 09:34 编辑

我机器上也有一个。

输入文件堆进去,
bash run-me.sh
就搞定了。
啥都不需要修改。

会问一下, 当前目录中只有输入,
没有之前的输出吗?

%mem
%cpu
都不用写。
思路和你类似的。
不过用了一个basename 而已。

用一下子提交数百个计算之类的。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

195

帖子

0

威望

4029

eV
积分
4224

Level 6 (一方通行)

3#
 楼主 Author| 发表于 Post on 2021-3-20 09:43:15 | 只看该作者 Only view this author
abin 发表于 2021-3-20 09:30
我机器上也有一个。

输入文件堆进去,

个人会把不同的计算内容是放在不同的文件夹中,因此不会判断当前文件夹中的gjf文件是否已经被计算过,其实也可以添加一个判断条件;
%mem%cpu我是依据Gaussian安装文件夹中的Default.Route来设置的,不需要在gjf里面添加,其实也不需要在pbs里面设置;
同时提交数百个计算只能在集群上了,单机那得算到什么时候。

68

帖子

0

威望

1637

eV
积分
1705

Level 5 (御坂)

4#
发表于 Post on 2021-3-20 09:56:31 | 只看该作者 Only view this author
abin 发表于 2021-3-20 09:30
我机器上也有一个。

输入文件堆进去,

请问一下 我们集群的pbs系统有个节点坏了 比如说是node2
在pbs脚本中可以怎么指定将任务不投到node2上面呢

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

5#
发表于 Post on 2021-3-20 12:29:10 | 只看该作者 Only view this author
心向暖阳 发表于 2021-3-20 09:56
请问一下 我们集群的pbs系统有个节点坏了 比如说是node2
在pbs脚本中可以怎么指定将任务不投到node2上面 ...

节点故障,
系统就不会派任务呀。

手动屏蔽某个节点,
每个调度系统,语法不同。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

68

帖子

0

威望

1637

eV
积分
1705

Level 5 (御坂)

6#
发表于 Post on 2021-3-20 17:13:59 | 只看该作者 Only view this author
abin 发表于 2021-3-20 12:29
节点故障,
系统就不会派任务呀。

这个节点只是不能算高斯,其他都能用,所以一直没修过~~~
PBS的系统呢

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

7#
发表于 Post on 2021-3-20 20:04:58 | 只看该作者 Only view this author
心向暖阳 发表于 2021-3-20 17:13
这个节点只是不能算高斯,其他都能用,所以一直没修过~~~
PBS的系统呢

我也是翻手册,
你自己翻吧。
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

68

帖子

0

威望

1637

eV
积分
1705

Level 5 (御坂)

8#
发表于 Post on 2021-3-21 10:10:19 | 只看该作者 Only view this author
abin 发表于 2021-3-20 20:04
我也是翻手册,
你自己翻吧。

好的 谢谢您

25

帖子

0

威望

983

eV
积分
1008

Level 4 (黑子)

9#
发表于 Post on 2021-3-23 22:29:21 | 只看该作者 Only view this author
你这样会有一个问题,如果有一个输入文件是错误的,你还能敲么?所以要加一个判断,对应名字的log是否存在。若无,则提交。否则pass。你既然用了for inf in *.gjf,inf变量里就是你想要的,再输入名字多此一举。另外,可以搞一个sub命令,然后给单独的gjf添加执行文件。

195

帖子

0

威望

4029

eV
积分
4224

Level 6 (一方通行)

10#
 楼主 Author| 发表于 Post on 2021-3-24 08:26:13 | 只看该作者 Only view this author
本帖最后由 tiandikuoyuan 于 2021-3-24 08:44 编辑
123qwertybobo 发表于 2021-3-23 22:29
你这样会有一个问题,如果有一个输入文件是错误的,你还能敲么?所以要加一个判断,对应名字的log是否存在 ...

变量名称里面包含了后缀,chk文件转换时有些不方便,因此单独生成了一个变量;后来重新写了判断语句,包括是否提交成功、文件是否已经计算过、计算完成,这些信息会自动写入到log文件。我个人现在是把脚本路径写入到环境变量,这样可以无论在哪个文件夹只要输入脚本名称就可以自动提交任务,不需要每次都复制脚本,并且保存了log信息,包含了时间和文件具体位置。
  1. #!/bin/bash
  2. for inf in *.gjf
  3. do
  4. cat > pbs.sh << "EOF"
  5. #PBS -N Gaussian
  6. #PBS -l nodes=1:ppn=12
  7. #PBS -l mem=24000mb
  8. #PBS -q normal
  9. #PBS -j oe
  10. cd $PBS_O_WORKDIR
  11. INPUT_NAME=1       ##这里输入文件名,不含拓展名##
  12. g09 $INPUT_NAME.gjf
  13. wait
  14. formchk $INPUT_NAME.chk
  15. echo `date +"%Y-%m-%d %H:%M:%S"` job has been completed! >> /home/gaussian/pbs.log
  16. EOF
  17. path=$(cd "$(dirname "$inf")";pwd)
  18. if [ ! -f ${inf//gjf/log} ];  ##判断gjf文件是否存在对应的log文件
  19. then
  20. name="INPUT_NAME="${inf%.*}
  21. filename="$path/$inf"
  22. sed -i -r "s/(INPUT_NAME=)[^#]*/$name    /" pbs.sh
  23. sed -i -r "s?job?$filename?" pbs.sh   ##替换pbs.sh中文件路径
  24. qsub pbs.sh
  25. echo `date +"%Y-%m-%d %H:%M:%S"` ${path}/${inf} has been submitted! >> /home/gaussian/pbs.log
  26. else
  27. echo `date +"%Y-%m-%d %H:%M:%S"` ${path}/${inf} has been calculated! >> /home/gaussian/pbs.log
  28. fi
  29. done
  30. rm -f pbs.sh
复制代码






25

帖子

0

威望

983

eV
积分
1008

Level 4 (黑子)

11#
发表于 Post on 2021-3-24 22:04:29 | 只看该作者 Only view this author
tiandikuoyuan 发表于 2021-3-24 08:26
变量名称里面包含了后缀,chk文件转换时有些不方便,因此单独生成了一个变量;后来重新写了判断语句,包 ...

如果你知道“${inf%.gjf}”的话,那么可以简化你的shell。且看我的sh。
#!bin/bash
for inf in *.gjf
do
echo -e "#PBS -N Gaussian\n#PBS -l nodes=1:ppn=12\n#PBS -l mem=24000mb\n#PBS -q normal\n#PBS -j oe\ng09 ${inf}\nwait\nformchk ${inf%.gjf}.chk" >> ${inf%.gjf}.pbs
done

24

帖子

0

威望

179

eV
积分
203

Level 3 能力者

12#
发表于 Post on 2021-10-30 23:39:09 | 只看该作者 Only view this author
请问如果PBS请求核心数与Gaussian 输入文件请求的核心数不一致,是以PBS的为准吗?
比如
#PBS -l nodes=1:ppn=12
gjf里面%nprocshared=20

24

帖子

0

威望

179

eV
积分
203

Level 3 能力者

13#
发表于 Post on 2021-10-30 23:45:06 | 只看该作者 Only view this author
Zhuoran 发表于 2021-10-30 23:39
请问如果PBS请求核心数与Gaussian 输入文件请求的核心数不一致,是以PBS的为准吗?
比如
#PBS -l nodes=1 ...

比如我pbs请求两个8核任务(gjf内部写的请求13核),我提交之后pestat下面显示的是两个8核的任务,

| node        |  state  |  ncpu  |  ngpu  |  mem  |  tasks  |  jobid/user:task  |
+-------------+---------+--------+--------+-------+---------|-------------------+
| mgr         |   free  |   112  |    0   | 376Gb |     16  |        33/test:8        34/test:8

但是top里面显示的就是两个1300%的CPU任务。
用PBS请求资源一般应当怎么管理?

2301

帖子

1

威望

5473

eV
积分
7794

Level 6 (一方通行)

14#
发表于 Post on 2021-10-31 00:12:28 | 只看该作者 Only view this author
Zhuoran 发表于 2021-10-30 23:45
比如我pbs请求两个8核任务(gjf内部写的请求13核),我提交之后pestat下面显示的是两个8核的任务,

|  ...

未开启/未支援cgroup限定,
这种调度系统形同虚设.

工作正常的调度系统是,
申请了4个CPU,
写4个MPI进程, 看到4个进程, 各100%;
写8个MPI进程, 看到8个进程, 各50%.

在正常的调度系统下, 用户实际进程数量和PBS限定不一致的时候,
用户只能在系统分派的资源上, 祸害自己,
不会殃及其他用户.
High-Performance Computing for You
为您专属定制的高性能计算解决方案

更多讯息,请访问:
https://labitc.top
http://tophpc.top:8080
电邮: ask@hpc4you.top

24

帖子

0

威望

179

eV
积分
203

Level 3 能力者

15#
发表于 Post on 2021-10-31 15:42:22 | 只看该作者 Only view this author
abin 发表于 2021-10-31 00:12
未开启/未支援cgroup限定,
这种调度系统形同虚设.

不好意思请问大神能否指点一下怎么操作这个?我在网上查的云里雾里。我看到我的cproup状态是

[root@mgr]# cat /boot/config-3.10.0-957.el7.x86_64 | grep CGROUP
CONFIG_CGROUPS=y
# CONFIG_CGROUP_DEBUG is not set
CONFIG_CGROUP_FREEZER=y
CONFIG_CGROUP_PIDS=y
CONFIG_CGROUP_DEVICE=y
CONFIG_CGROUP_CPUACCT=y
CONFIG_CGROUP_HUGETLB=y
CONFIG_CGROUP_PERF=y
CONFIG_CGROUP_SCHED=y
CONFIG_BLK_CGROUP=y
# CONFIG_DEBUG_BLK_CGROUP is not set
CONFIG_NETFILTER_XT_MATCH_CGROUP=m
CONFIG_NET_CLS_CGROUP=y
CONFIG_NETPRIO_CGROUP=y

是要创建一个组之类的东西吗?

本版积分规则 Credits rule

手机版 Mobile version|北京科音自然科学研究中心 Beijing Kein Research Center for Natural Sciences|京公网安备 11010502035419号|计算化学公社 — 北京科音旗下高水平计算化学交流论坛 ( 京ICP备14038949号-1 )|网站地图

GMT+8, 2024-11-23 20:16 , Processed in 0.186185 second(s), 25 queries , Gzip On.

快速回复 返回顶部 返回列表 Return to list