计算化学公社

标题: 分解合并Molclus任务的小脚本splitMC 1.1 [打印本页]

作者
Author:
ggdh    时间: 2019-8-27 19:06
标题: 分解合并Molclus任务的小脚本splitMC 1.1
本帖最后由 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份
得到类似如下的结果:
(, 下载次数 Times of downloads: 114)
列出了新产生的文件夹名,和其中对应的帧的编号。每个文件夹中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
复制代码
不加任何参数表示进行合并任务,得到类似如下的结果:
(, 下载次数 Times of downloads: 114)
显示了每个文件夹中的计算情况,其中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反馈。




作者
Author:
sobereva    时间: 2019-8-27 19:12
好物。已经把这个帖子在molclus的主贴里提及了
作者
Author:
TDHFjiang    时间: 2019-10-4 14:51
嗯嗯~ 好物~ 用起来很舒适,需要运行任务3*1万 ,用起来比较方便,适合计算体系较大资源丰富的组~  1万个优化任务,分为50个,18个小时200个任务,用的方法是PM6-DH+,平均 5.4min 一个,共100个原子包括C,H,O,F ~   

如果你是用genmer产生的结构,根据molclus 版本问题,记得修改splitMC中Conformation 为 Configuration
作者
Author:
NYFRANK    时间: 2019-12-2 22:30
TDHFjiang 发表于 2019-10-4 14:51
嗯嗯~ 好物~ 用起来很舒适,需要运行任务3*1万 ,用起来比较方便,适合计算体系较大资源丰富的组~  1万个优 ...

你好,我也用这个脚本准备并行运算,已经测试过了,单独能算,用这个脚本出现如图问题,修改为Configuration也做了, 还是一样的问题,请帮忙指正一下。C:\Users\Frank\Desktop\1.png
作者
Author:
ggdh    时间: 2019-12-2 22:54
本帖最后由 ggdh 于 2019-12-2 22:56 编辑
NYFRANK 发表于 2019-12-2 22:30
你好,我也用这个脚本准备并行运算,已经测试过了,单独能算,用这个脚本出现如图问题,修改为Configurat ...
你要准备一个文件夹,里面包含计算所需的settings.ini 和 traj.xyz,然后用我的脚本去拆分这个文件夹
mkdir molc
cp settings.ini molc
cp traj.xyz molc
splitMC -t 2 molc
作者
Author:
NYFRANK    时间: 2019-12-3 09:41
本帖最后由 NYFRANK 于 2019-12-3 09:43 编辑
ggdh 发表于 2019-12-2 22:54
你要准备一个文件夹,里面包含计算所需的settings.ini 和 traj.xyz,然后用我的脚本去拆分这个文件夹
mkdi ...

谢谢你的帮助,但到最后我runall.sh 还是出问题了,如图所示。单独不分割文件夹是能运行的,分割之后我修改了模板的核数,我这个是提交到我们组内的服务器上算。请在帮忙指正下,谢谢~
作者
Author:
TDHFjiang    时间: 2020-5-28 14:47
NYFRANK 发表于 2019-12-3 09:41
谢谢你的帮助,但到最后我runall.sh 还是出问题了,如图所示。单独不分割文件夹是能运行的,分割之后我修 ...

不好意思,刚看到,你要根据你们组里提交任务的格式,你把runall.sh 里面第四行报错的sh run.sh & 修改成服务器提交任务的版本,比如 bsub < run.sh,
run.sh 也要做修改如:(这跟你服务器有关)
#!/bin/bash
#BSUB -q normal
#BSUB -n 1
#BSUB -o %J.out
#BSUB -e %J.err
#BSUB -J molclus
#BSUB -R span[ptile=28]

./molclus > molclus.log


作者
Author:
TDHFjiang    时间: 2020-5-28 15:43
还有一个问题,顺便提一下,最新版本的molclus 不支持旧版的xtb, 而且如果是阴离子体系,记得把molclus 里面的settings.ini
xtb_arg= "--gfn 1 '--chrg -2' --uhf 0"   charge 部分用单引号引起来,别来说是这个脚本导致的 0.0
作者
Author:
TDHFjiang    时间: 2020-7-17 14:52
本帖最后由 TDHFjiang 于 2020-7-17 15:25 编辑

如果你要计算的结构是从非1开始的,比如要计算20-100的结构,并分割成5个,不太适合这个脚本,这个脚本就是先看看你的初始setting.ini 里面有多少个结构20-100,那就按照取前100个直接平均分割成5个任务,可以去每个分割后的文件夹,手动修改setting.ini 里面对应ngeom
作者
Author:
ggdh    时间: 2020-7-17 21:58
TDHFjiang 发表于 2020-7-17 14:52
如果你要计算的结构是从非1开始的,比如要计算20-100的结构,并分割成5个,不太适合这个脚本,这个脚本就是 ...

为啥会有这样的要求呢?
作者
Author:
TDHFjiang    时间: 2020-7-17 22:11
ggdh 发表于 2020-7-17 21:58
为啥会有这样的要求呢?

有时候任务中断了,没办法,只能手动了
作者
Author:
ggdh    时间: 2020-7-20 21:15
TDHFjiang 发表于 2020-7-17 22:11
有时候任务中断了,没办法,只能手动了

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

作者
Author:
junjiqiangzhe    时间: 2020-8-9 11:56
请问这个脚本能单纯的用于合并多个.xyz文件吗?可以的话要如何操作呢?

作者
Author:
ggdh    时间: 2020-8-9 11:59
junjiqiangzhe 发表于 2020-8-9 11:56
请问这个脚本能单纯的用于合并多个.xyz文件吗?可以的话要如何操作呢?

多个.xyz直接用命令合并
rm all.xyz
for i in *.xyz
do
cat $i >> all.xyz
done
作者
Author:
TDHFjiang    时间: 2020-11-24 19:56
ggdh 发表于 2020-7-20 21:15
更新了版本,现在可以指定从哪里开始(-b)到哪里结束了 (-e)
另外你之前提到的哪个conformation和configu ...

-b 10 -e 200 这个功能很好用,谢谢
作者
Author:
TDHFjiang    时间: 2020-11-24 20:05
本帖最后由 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,提交任务

作者
Author:
sobereva    时间: 2020-11-25 04:43
TDHFjiang 发表于 2020-11-24 20:05
将splitMC 和 svp文件夹放在同一个目录下,直接执行splitMC -t 10 svp, 或者将splitMC执行路径写在环境 ...

请通过上传图片方式贴图,否则其他人看不到,如这里注明的:http://bbs.keinsci.com/thread-18961-1-1.html
作者
Author:
TDHFjiang    时间: 2020-12-7 13:13
这个地方是否应该再加入一个[], 否则会报$i为空时不符合一元运算的错误,不过不影响分割的结果

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

作者
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){countflag=1}}END{print count}'
作者
Author:
liuyuje714    时间: 2021-1-14 19:14
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}'
复制代码

作者
Author:
neocc    时间: 2021-5-4 18:39
请问运行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
作者
Author:
qcn1211    时间: 2025-1-24 08:12
用splitMC 分割完成后,直接运行runall.sh ,出现如下提示,请问是什么原因?单个任务运行molclus是正常的。


作者
Author:
qcn1211    时间: 2025-1-24 12:54
在slurm作业集群上提交你修改的splitMC脚本,再运行sbatch  < molclus.sh, 出现以下问题,请问是什么原因?




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