slurm作业管理:一次提交运行多个任务
# slurm作业管理:一次提交运行多个任务
针对抢占式的作业调度系统,如果分配节点时候是独占节点,那么每次申请的资源最少就是1个节点。如何实现一次提交作业,计算多个任务呢?(包括串行、openmp或mpi的任务)。最简单的方式就是按照自己的需求写一个运行脚本,然后通过作业管理系统提交即可。下面给出一个具体的例子加以说明,先给出实例,然后给出详细解释:
#!/bin/bash
cd ~/helloworld
yhrun -N1 -n1 ./helloworld &
cd ~/gaussian
export OMP_NUM_THREADS=2
yhrun -N1 -n1 ./g09 &
cd ~/vasp
yhrun -N1 -n3 ./vasp &
cd ~/lmp
export OMP_NUM_THREADS=3
yhrun -N1 -n2 ./lmp < in.lj &
wait
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
详细解释如下:
#!/bin/bash
# 这是一个bash的脚本
# 脚本里面写什么,就会执行什么
# 我将会申请1个有12cpu核的计算节点,具体如何分配这些核做计算,我自己说了算
# 先用1个核运行一个helloworld吧
cd ~/helloworld # 进入到helloworld所在目录
yhrun -N1 -n1 ./helloworld &
# yhrun 是天河系列的集群的"mpirun"
# -N1表示1个节点
# -n1表示一个核
# helloworld 是 可执行程序的名字
# & 表示放到后台执行(计算节点的后台),如果不写的话,脚本就会卡在这一行,
# 直到执行完这一行,才会往下执行。而我们希望同时执行多个任务,所以放到后台
# 再用2个核,运行一个openmp的程序吧
cd ~/gaussian
export OMP_NUM_THREADS=2
yhrun -N1 -n1 ./g09 &
# OMP_NUM_THREADS=2 表示用OMP线程数=2
# ./g09 是一个openmp程序的名字(举例)
# 再用3个核,运行一个mpi的程序吧
cd ~/vasp
yhrun -N1 -n3 ./vasp &
# -n3 启用3个mpi进程,运行mpi任务
# 最后用6个核,运行一个mpi+openmp的程序吧
cd ~/lmp
export OMP_NUM_THREADS=3
yhrun -N1 -n2 ./lmp < in.lj &
# 设置n=2,omp=3 开启2个mpi进程,每个mpi进程开启3个omp线程
# ./lmp 是mpi+openmp的程序名
# < in.lj 给定输入文件
# 末尾增加
wait
# 增加wait,让脚本等待以上后台任务运行结束后再停止
# 不添加的话,脚本运行到末尾就结束了,作业也就结束了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
当然,其实还有一种更为“精确”的控制每个进程运行哪个任务的高阶写法,但对于普通用户,一般没这个需求,故不在此介绍了。如确实有这个需求的欢迎留言。