计算化学公社

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

[Molclus] 分解合并Molclus任务的小脚本splitMC 1.1

[复制链接 Copy URL]

909

帖子

37

威望

5527

eV
积分
7176

Level 6 (一方通行)

本帖最后由 ggdh 于 2020-7-20 21:14 编辑

sob在Molclus的教程: 使用molclus程序做团簇构型搜索和分子构象搜索中提到,Molclus有个技巧来提高并行效率:
“Molclus可以同时运行多个以试图节约时间。大家都知道支持并行的计算程序的计算耗时不会和调用的核数线性相关,随着核数增加并行效率必然会愈发降低。比如你的机子核数很多,有56核,traj.xyz里有1000个结构需要处理,你希望降低molclus处理这个traj.xyz的总耗时,那么你可以比如把molclus文件夹复制成四份,比如分别叫molc1、molc2、molc3、molc4,分别将这四个目录下的settings.ini里的ngeom设为1,250、251,500、501,750、751,1000。然后开启四个终端,分别进入这四个目录并且运行molclus。等都运行完了,使用这条命令把四个目录下产生的isomers.xyz合并在一起:cat molc1\isomers.xyz molc2\isomers.xyz molc3\isomers.xyz molc4\isomers.xyz”
0.更新内容:ver1.1:
1.添加两个选项
-b 设定开始帧
-e 设定结束帧
2.采用更新的方法判断traj.xyz中的结构数量,这次不依赖关键词了。

对于构象很多时,这个技巧非常有用,不过手动分解的情况下,能够分解的任务数有限,比如我有10000个构象,想分解成1000个任务,每个任务10个构象,使用MOPAC计算,每个任务分配1核,提交到超算中心上,这种情况下,如果手动分解,基本不可能,于是就编写了这个脚本。使用步骤如下:

1.准备molclus文件夹
准备好molclus的计算文件夹(这里假设文件夹名为molc),里面应该有设置好的settings.ini文件和模板文件,以及traj.xyz文件,确定在该文件夹下运行molclus可以正常计算。把这个脚本加入PATH路径中

2.分解任务
运行本程序:
  1. splitMC -t 50 molc
复制代码
其中-t 的意思是把该任务分解成50份
得到类似如下的结果:

列出了新产生的文件夹名,和其中对应的帧的编号。每个文件夹中settings.ini中的ngeom部分也做了相应的更改。
此时文件夹下已经产生了molc_01到molc_50的50个文件夹。以及三个批处理模板文件,分别是runall.sh,runall.pbs,runall.slurm。
注意这里如果设定任务数大于总的结构数,那么最后得到的任务数就会等于结构数,每个任务一个结构。

3.批量运算
如果本机运行,直接运行sh runall.sh就行,这时候会同时计算所有的任务,所以应该保证任务数乘以每任务cpu数小于总cpu数;
如果提交到超算中心,根据作业调度系统的类型,编辑runall.pbs或runall.slurm文件(主要需要添加队列名称,账户名称)后,运行
sh runall.pbs 或 sh runall.slurm就可以进行批量提交。

4.合并结果
全部算完后运行命令:
  1. splitMC molc
复制代码
不加任何参数表示进行合并任务,得到类似如下的结果:

显示了每个文件夹中的计算情况,其中1/1的意思是该文件夹中需要计算1帧,实际获得1帧。如果是10/8,就说明文件夹中需要计算10帧,实际只得到了8帧,这时候可以到那个文件夹下看看出了什么状况导致两帧没算。最后会在当前目录下得到isomers.xyz文件,供后续isostat处理。

5. 脚本的选项说明
-t 选项设定一共有多少个任务
-g 选项设定每个任务算多少个结构(-g 和 -t同时设定的话-t会失效,任务数由-g决定)
-n 选项设定每个任务分配多少核,这个选项只影响最后生成的runall.pbs 和runall.slurm文件中的配置。
-b 设定开始帧
-e 设定结束帧

最后欢迎提出意见和bug反馈。



splitMC

3.26 KB, 下载次数 Times of downloads: 188

评分 Rate

参与人数
Participants 8
威望 +1 eV +33 收起 理由
Reason
ezez + 5 赞!
Satoru + 5 好物!
丁越 + 5 233333
benzon222 + 4 好物!
panernie + 4 好物!
zsu007 + 5 牛!
captain + 5 赞!
sobereva + 1 GJ!

查看全部评分 View all ratings

42

帖子

0

威望

329

eV
积分
371

Level 3 能力者

24#
发表于 Post on 2025-1-24 12:54:07 | 只看该作者 Only view this author
在slurm作业集群上提交你修改的splitMC脚本,再运行sbatch  < molclus.sh, 出现以下问题,请问是什么原因?

1.PNG (13.7 KB, 下载次数 Times of downloads: 29)

1.PNG

42

帖子

0

威望

329

eV
积分
371

Level 3 能力者

23#
发表于 Post on 2025-1-24 08:12:12 | 只看该作者 Only view this author
用splitMC 分割完成后,直接运行runall.sh ,出现如下提示,请问是什么原因?单个任务运行molclus是正常的。

202501240812088525..png (18.76 KB, 下载次数 Times of downloads: 26)

202501240812088525..png

172

帖子

0

威望

3441

eV
积分
3613

Level 5 (御坂)

22#
发表于 Post on 2021-5-4 18:39:51 | 只看该作者 Only view this author
请问运行pbs脚本出现如下报错需要如何解决呢?
/home/xxx/.bashrc: line 91: ulimit: stack size: cannot modify limit: Operation not permitted


参考论坛的 《Centos7 安装torque,在pbs提交作业的脚本中加入ulimit –s unlimited 报错!》帖子 操作完成后依然是上述报错
http://bbs.keinsci.com/thread-11055-1-1.html

222

帖子

5

威望

2589

eV
积分
2911

Level 5 (御坂)

21#
发表于 Post on 2021-1-14 19:14:23 | 只看该作者 Only view this author
TDHFjiang 发表于 2021-1-14 17:44
awk 'BEGIN{countflag=1;count=0}{if(NF==1 && countflag==1){count=count+1;countflag=0;next}if(NF==4){c ...
  1. awk 'NF==1 && !/[A-Za-z]/ {count++} END{print count}'
复制代码

62

帖子

1

威望

1501

eV
积分
1583

Level 5 (御坂)

20#
发表于 Post on 2021-1-14 17:44:36 | 只看该作者 Only view this author
awk 'BEGIN{countflag=1;count=0}{if(NF==1 && countflag==1){count=count+1;countflag=0;next}if(NF==4){countflag=1}}END{print count}'

62

帖子

1

威望

1501

eV
积分
1583

Level 5 (御坂)

19#
发表于 Post on 2021-1-14 17:31:31 | 只看该作者 Only view this author
老师,新版本的splitMC 读取traj.xyz中的个数有点问题,我把这个$TOT判断条件改成原来的可以用,如果遇到结构数大于10001, genmer产生的traj.xyz文件中Configuration:20000作为1列,那么这个判断标准失效,对结构总数判断出错。

split-2.png (22.68 KB, 下载次数 Times of downloads: 88)

split-2.png

split-1.png (19.85 KB, 下载次数 Times of downloads: 78)

split-1.png

62

帖子

1

威望

1501

eV
积分
1583

Level 5 (御坂)

18#
发表于 Post on 2020-12-7 13:13:14 | 只看该作者 Only view this author
这个地方是否应该再加入一个[], 否则会报$i为空时不符合一元运算的错误,不过不影响分割的结果

11.png (18.07 KB, 下载次数 Times of downloads: 102)

11.png

6万

帖子

99

威望

6万

eV
积分
125141

管理员

公社社长

17#
发表于 Post on 2020-11-25 04:43:04 | 只看该作者 Only view this author
TDHFjiang 发表于 2020-11-24 20:05
将splitMC 和 svp文件夹放在同一个目录下,直接执行splitMC -t 10 svp, 或者将splitMC执行路径写在环境 ...

请通过上传图片方式贴图,否则其他人看不到,如这里注明的:http://bbs.keinsci.com/thread-18961-1-1.html
北京科音自然科学研究中心http://www.keinsci.com)致力于计算化学的发展和传播,长期开办极高质量的各种计算化学类培训:初级量子化学培训班中级量子化学培训班高级量子化学培训班量子化学波函数分析与Multiwfn程序培训班分子动力学与GROMACS培训班CP2K第一性原理计算培训班,内容介绍以及往届资料购买请点击相应链接查看。这些培训是计算化学从零快速入门以及进一步全面系统性提升研究水平的高速路!培训各种常见问题见《北京科音办的培训班FAQ》
欢迎加入北京科音微信公众号获取北京科音培训的最新消息,并避免错过网上有价值的计算化学文章!
欢迎加入人气极高、专业性特别强的理论与计算化学综合交流群思想家公社QQ群(群号见此链接),合计达一万多人。北京科音培训班的学员在群中可申请VIP头衔,提问将得到群主Sobereva的最优先解答。
思想家公社的门口Blog:http://sobereva.com(发布大量原创计算化学相关博文)
Multiwfn主页:http://sobereva.com/multiwfn(十分强大、极为流行的量子化学波函数分析程序)
Google Scholar:https://scholar.google.com/citations?user=tiKE0qkAAAAJ
ResearchGate:https://www.researchgate.net/profile/Tian_Lu

62

帖子

1

威望

1501

eV
积分
1583

Level 5 (御坂)

16#
发表于 Post on 2020-11-24 20:05:36 | 只看该作者 Only view this author
本帖最后由 TDHFjiang 于 2020-12-3 10:34 编辑


将splitMC 和 svp文件夹放在同一个目录下,直接执行splitMC -t 10 svp, 或者将splitMC执行路径写在环境变量.bashrc里,可以全局调用,就可以分解为10个文件夹,svp目录下的内容如图所示,其中比较重要的molclus.sh, 这是我用来提交集群作业的脚本,内容如下,

提交任务就是bsub < molclus.sh, 如果是单机,直接就是nohup ./molclus > molclus.log  &, 我把splitMC 里面的,runall.sh 对应的部分,做了相应的修改,
分割完成后,直接运行runall.sh ,就是去每个文件夹下,执行bsub < molclus.sh,提交任务

splitMC-修改.png (63.29 KB, 下载次数 Times of downloads: 95)

splitMC-修改.png

molclus.sh.png (23.2 KB, 下载次数 Times of downloads: 99)

molclus.sh.png

svp-molc.png (19.42 KB, 下载次数 Times of downloads: 73)

svp-molc.png

62

帖子

1

威望

1501

eV
积分
1583

Level 5 (御坂)

15#
发表于 Post on 2020-11-24 19:56:10 | 只看该作者 Only view this author
ggdh 发表于 2020-7-20 21:15
更新了版本,现在可以指定从哪里开始(-b)到哪里结束了 (-e)
另外你之前提到的哪个conformation和configu ...

-b 10 -e 200 这个功能很好用,谢谢

909

帖子

37

威望

5527

eV
积分
7176

Level 6 (一方通行)

14#
 楼主 Author| 发表于 Post on 2020-8-9 11:59:23 | 只看该作者 Only view this author
junjiqiangzhe 发表于 2020-8-9 11:56
请问这个脚本能单纯的用于合并多个.xyz文件吗?可以的话要如何操作呢?

多个.xyz直接用命令合并
rm all.xyz
for i in *.xyz
do
cat $i >> all.xyz
done

14

帖子

0

威望

33

eV
积分
47

Level 2 能力者

13#
发表于 Post on 2020-8-9 11:56:20 | 只看该作者 Only view this author
请问这个脚本能单纯的用于合并多个.xyz文件吗?可以的话要如何操作呢?

909

帖子

37

威望

5527

eV
积分
7176

Level 6 (一方通行)

12#
 楼主 Author| 发表于 Post on 2020-7-20 21:15:57 | 只看该作者 Only view this author
TDHFjiang 发表于 2020-7-17 22:11
有时候任务中断了,没办法,只能手动了

更新了版本,现在可以指定从哪里开始(-b)到哪里结束了 (-e)
另外你之前提到的哪个conformation和configuration的问题也解决了。

62

帖子

1

威望

1501

eV
积分
1583

Level 5 (御坂)

11#
发表于 Post on 2020-7-17 22:11:04 | 只看该作者 Only view this author
ggdh 发表于 2020-7-17 21:58
为啥会有这样的要求呢?

有时候任务中断了,没办法,只能手动了

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

GMT+8, 2026-2-22 01:22 , Processed in 0.183748 second(s), 25 queries , Gzip On.

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