服务器上并行提交任务

发布于:2024-07-01 ⋅ 阅读:(16) ⋅ 点赞:(0)

实用场景

1你的任务是相互独立的
2你本来使用的是for循环,你想提高时间想要把全部这些独立的文件,一起提交一起跑
3你的任务数量很多并且任务同时用一个脚本,只是不同任务的参数不一样呀,本质上你一个个提交也可以,但是显的很呆。

需要的文件

  1. config.txt (参数文件)
1  40 1 1457
2  40 1457 2913
3  40 2913 4369
4  40 4369 5825
5  40 5825 7281
6  40 7281 8737
7  40 8737 10193
8  40 10193 11649

参数文件就是传入你python文件的参数。上面的第一个数字是任务的编号,分别是任务1,2,3。每个任务编号传入3个参数,例如1号任务传入参数是40,1,1457

  1. test.py (这些任务的共同脚本)
 a = [sys.argv[1],sys.argv[2],sys.argv[3]]

在你的脚本里面加入这行代码就可以从python脚本的外部导入参数了。

  1. bash.sh (bash脚本)
#!/bin/bash
#SBATCH --job-name=p1
#SBATCH --ntasks=1
#SBATCH --cpus-per-task=1
##指定每个任务占用几个核
#SBATCH --array=1-5
## 设定你的全部的任务数
#SBATCH --output=out/array_%A-%a.out
##可以把out文件都统一放好
#SBATCH --nodelist=c003
##指定服务器的节点c003,或者你也可以不指定,这样的话,你就可以同时使用多个核去运行任务

config=config.txt

scan=$(awk -v ArrayTaskID=$SLURM_ARRAY_TASK_ID '$1==ArrayTaskID {print $2}' $config)
chan1=$(awk -v ArrayTaskID=$SLURM_ARRAY_TASK_ID '$1==ArrayTaskID {print $3}' $config)
chan2=$(awk -v ArrayTaskID=$SLURM_ARRAY_TASK_ID '$1==ArrayTaskID {print $4}' $config)
#分别读取config.txt文件中每一行的第2,3,4的参数

srun  each_scan_pocal.py ${scan} ${chan1} ${chan2} 
#运行你的python程序