使用 Python 向超级计算机提交多个作业
Using Python to Submit Multiple Jobs to a Supercomputer
我目前正在使用超级计算机进行各种量子力学计算。我需要在任何给定时间提交大量文件(280 个单独的提交)。我正在尝试使用 python 来自动执行此过程,但对使用 python 到 运行 单独的提交脚本没有什么经验。我使用的提交脚本(名为 subOrca_mpi.sh)是:
#!/bin/bash
string=".inp"
root="${1%$string}"
#if [ -z ]
#then
# echo 'Usage: subGamess.sh <jobinput>'
# exit 1
#fi
#if [ ! -f ./$root.inp ]
#then
# echo '<jobinput> does not look like an Orca input \(*.inp\)'
# exit 1
#fi
if [ -f $root.slurm ]
then
rm $root.slurm
fi
echo '#!/bin/bash'>>$root.slurm
echo '#SBATCH --job-name='$root>>$root.slurm
echo '#SBATCH --output='$root'.out'>>$root.slurm
echo '#SBATCH --nodes=1'>>$root.slurm
echo '#SBATCH --ntasks-per-node=12 '>>$root.slurm
echo '#SBATCH --time=0-48:00:00 '>>$root.slurm
echo '#SBATCH --cluster=smp'>>$root.slurm
echo 'cd $SBATCH_O_WORKDIR'>>$root.slurm
echo 'module purge'>>$root.slurm
echo 'module load orca/3.0.3'>>$root.slurm
echo 'files=('>>$root.slurm
echo $root'.inp'>>$root.slurm
echo ')'>>$root.slurm
echo 'for i in ${files[@]}; do'>>$root.slurm
echo ' sbcast $SLURM_SUBMIT_DIR/$i $SLURM_SCRATCH/$i'>>$root.slurm
echo 'done'>>$root.slurm
echo 'export LD_LIBRARY_PATH=/usr/lib64/openmpi-
1.10/lib:$LD_LIBRARY_PATH'>>$root.slurm
echo 'export PATH=/usr/lib64/openmpi-1.10/bin:$PATH'>>$root.slurm
echo 'cd $SLURM_SCRATCH'>>$root.slurm
echo '$(which orca) '$root'.inp'>>$root.slurm
echo 'cp $SLURM_SCRATCH/*.{gbw,prop} $SLURM_SUBMIT_DIR'>>$root.slurm
sbatch $root.slurm
exit
据我所知,我需要导入 os,但我基本上是 lost。到目前为止我唯一的代码是:
import os
import glob
def orcasubmit():
for filename in glob.glob('*.inp'):
#execute subOrca_mpi.sh for all input files in given folder
orcasubmit()
任何意见都会非常有用。
这里有两种选择。您可能已经猜到,第一个是使用 os.system
。你可以这样做:
for filename in glob.glob('*.inp'):
os.system('./' + filename) # assuming these files lie in the same directory
或者,您可以使用 subprocess.Popen
模块,我推荐这个。
from subprocess import Popen
for filename in glob.glob('*.inp'):
process = Popen(['/bin/bash', filename])
我目前正在使用超级计算机进行各种量子力学计算。我需要在任何给定时间提交大量文件(280 个单独的提交)。我正在尝试使用 python 来自动执行此过程,但对使用 python 到 运行 单独的提交脚本没有什么经验。我使用的提交脚本(名为 subOrca_mpi.sh)是:
#!/bin/bash
string=".inp"
root="${1%$string}"
#if [ -z ]
#then
# echo 'Usage: subGamess.sh <jobinput>'
# exit 1
#fi
#if [ ! -f ./$root.inp ]
#then
# echo '<jobinput> does not look like an Orca input \(*.inp\)'
# exit 1
#fi
if [ -f $root.slurm ]
then
rm $root.slurm
fi
echo '#!/bin/bash'>>$root.slurm
echo '#SBATCH --job-name='$root>>$root.slurm
echo '#SBATCH --output='$root'.out'>>$root.slurm
echo '#SBATCH --nodes=1'>>$root.slurm
echo '#SBATCH --ntasks-per-node=12 '>>$root.slurm
echo '#SBATCH --time=0-48:00:00 '>>$root.slurm
echo '#SBATCH --cluster=smp'>>$root.slurm
echo 'cd $SBATCH_O_WORKDIR'>>$root.slurm
echo 'module purge'>>$root.slurm
echo 'module load orca/3.0.3'>>$root.slurm
echo 'files=('>>$root.slurm
echo $root'.inp'>>$root.slurm
echo ')'>>$root.slurm
echo 'for i in ${files[@]}; do'>>$root.slurm
echo ' sbcast $SLURM_SUBMIT_DIR/$i $SLURM_SCRATCH/$i'>>$root.slurm
echo 'done'>>$root.slurm
echo 'export LD_LIBRARY_PATH=/usr/lib64/openmpi-
1.10/lib:$LD_LIBRARY_PATH'>>$root.slurm
echo 'export PATH=/usr/lib64/openmpi-1.10/bin:$PATH'>>$root.slurm
echo 'cd $SLURM_SCRATCH'>>$root.slurm
echo '$(which orca) '$root'.inp'>>$root.slurm
echo 'cp $SLURM_SCRATCH/*.{gbw,prop} $SLURM_SUBMIT_DIR'>>$root.slurm
sbatch $root.slurm
exit
据我所知,我需要导入 os,但我基本上是 lost。到目前为止我唯一的代码是:
import os
import glob
def orcasubmit():
for filename in glob.glob('*.inp'):
#execute subOrca_mpi.sh for all input files in given folder
orcasubmit()
任何意见都会非常有用。
这里有两种选择。您可能已经猜到,第一个是使用 os.system
。你可以这样做:
for filename in glob.glob('*.inp'):
os.system('./' + filename) # assuming these files lie in the same directory
或者,您可以使用 subprocess.Popen
模块,我推荐这个。
from subprocess import Popen
for filename in glob.glob('*.inp'):
process = Popen(['/bin/bash', filename])