|
本帖最后由 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.分解任务
运行本程序:
其中-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/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: 90
评分 Rate
-
查看全部评分 View all ratings
|