计算化学公社

标题: 求助slurm一键提交批量Gaussian任务的实现 [打印本页]

作者
Author:
量化小王子    时间: 2023-11-3 00:08
标题: 求助slurm一键提交批量Gaussian任务的实现
请教各位大神,小菜鸟最近在做计算,使用的省内超算中心,作业调度系统使用的是slurm软件,由于一次提交计算任务很多,需要同时新建好多个sh作业脚本,然后一个一个提交,感觉有点麻烦,能不能请各位大神,在原有的脚本基础上,做出修改,可以一次提交N多个到队[attach]77926[/attach]列,同时计算,不用一个一个的提交。提交任务命令是sbatch 1.sh (, 下载次数 Times of downloads: 15)

作者
Author:
wzkchem5    时间: 2023-11-3 00:20
我觉得比较好的方法不是写一个作业脚本然后用这个脚本提交很多个高斯任务,而是写一个脚本自动产生很多作业脚本、每个作业脚本只提交一个高斯任务,然后批量调用sbatch提交这些作业脚本。
自动批量产生作业脚本可以用for循环加sed解决,自动批量提交作业脚本用for循环就行了
作者
Author:
量化小王子    时间: 2023-11-3 00:27
wzkchem5 发表于 2023-11-3 00:20
我觉得比较好的方法不是写一个作业脚本然后用这个脚本提交很多个高斯任务,而是写一个脚本自动产生很多作业 ...

谢谢你的意见,但这个功能需要怎么实现呢?能不能给个具体的操作步骤呀
作者
Author:
wzkchem5    时间: 2023-11-3 02:54
量化小王子 发表于 2023-11-2 17:27
谢谢你的意见,但这个功能需要怎么实现呢?能不能给个具体的操作步骤呀

for循环怎么写,任何讲bash的线上教程都会讲
sed命令怎么写也是一搜就有一大堆教程的
作者
Author:
snljty2    时间: 2023-11-3 09:35
给你个最小修改版本的
文件开头所有#开头的行后面,加上这样一句
  1. jobname=$1
复制代码

然后
  1. dos2unix 1.gjf
  2. g16 1.gjf
复制代码

改成
  1. dos2unix $1
  2. g16 $1
复制代码

保存,把这个脚本放到一个路径好找的目录比如~/scripts/里,名字叫sub_g16.sh。之后比如你想算~/folder1/job1.gjf,就用
  1. sbatch ~/script/sub_g16.sh ~/folder1/job1.gjf
复制代码
把文件名作为第一个参数传给脚本就行。批量处理示例如下,假设你有如下目录结构的4个文件要批量处理,root_folder在~下
root_folder
├── sub_folder1
│   ├── job1_1.gjf
│   └── job1_2.gjf
└── sub_folder2
    ├── job2_1.gjf
    └── job2_2.gjf
那只需要如此提交
  1. cd ~/root_folder
  2. for i in $(ls -d *); do
  3.     cd $i
  4.     for j in *.gjf; do
  5.         sbatch ~/script/sub_g16.sh $j
  6.     done
  7.     cd ..
  8. done
复制代码

其实都是最最基本的Linux命令行常识,随便搜一下就有一大堆。
作者
Author:
量化小王子    时间: 2023-11-4 10:58
snljty2 发表于 2023-11-3 09:35
给你个最小修改版本的
文件开头所有#开头的行后面,加上这样一句

大哥,按照你的提示,我已经修改了脚本,并且提交了命令,但是发现所有的任务的都提交到同一个节点,而不是不同的节点,这是怎么回事呀




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