如何从 bash 脚本在不同的 GPU 上 运行 程序?
How to run programs from a bash script on different GPUs?
我通常 运行 在两个不同的 GPU 上执行两个独立的作业(program1 和 program2)。
我希望能够从一个 bash 脚本中 运行 这两个作业,但仍然在两个不同的 GPU 上 每个程序都有一个 slurm .out 文件。这可能吗?
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
program1
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
program2
下面的脚本似乎 运行 两个程序都在同一个 GPU 上使用单个 .out 文件作为输出。
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
program1 &
program2 &
wait
感谢您的帮助。
第一种方式
您可以编写一个提交脚本,将可执行文件的名称作为命令行参数,并编写另一个调用提交脚本的脚本。提交脚本“submit.sh”可能如下所示:
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
第二个脚本“run_all.sh”可能如下所示:
#!/bin/bash
sbatch submit.sh program1
sbatch submit.sh program2
现在您可以开始工作:$ ./run_all.sh
第二种方式
您不必使用脚本来为 slurm 提供所有信息。可以将作业信息作为 sbatch 调用的参数传递:sbatch [OPTIONS(0)...] [ : [OPTIONS(N)...]] script(0) [args(0)...]
像这样的脚本可能会有用:
#!/bin/bash -l
slurm_opt= --time=1:00:00 --gres=gpu:v100:1 --mem=90g --cpus-per-task=6 -N 1 --wrap
sbatch $slurm_opt program1
sbatch $slurm_opt program2
注意 --wrap
选项。它允许您在其后拥有任何可执行文件而不仅仅是脚本。
我通常 运行 在两个不同的 GPU 上执行两个独立的作业(program1 和 program2)。
我希望能够从一个 bash 脚本中 运行 这两个作业,但仍然在两个不同的 GPU 上 每个程序都有一个 slurm .out 文件。这可能吗?
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
program1
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
program2
下面的脚本似乎 运行 两个程序都在同一个 GPU 上使用单个 .out 文件作为输出。
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
program1 &
program2 &
wait
感谢您的帮助。
第一种方式
您可以编写一个提交脚本,将可执行文件的名称作为命令行参数,并编写另一个调用提交脚本的脚本。提交脚本“submit.sh”可能如下所示:
#!/bin/bash -l
#SBATCH --time=1:00:00
#SBATCH --gres=gpu:v100:1
#SBATCH --mem=90g
#SBATCH --cpus-per-task=6 -N 1
第二个脚本“run_all.sh”可能如下所示:
#!/bin/bash
sbatch submit.sh program1
sbatch submit.sh program2
现在您可以开始工作:$ ./run_all.sh
第二种方式
您不必使用脚本来为 slurm 提供所有信息。可以将作业信息作为 sbatch 调用的参数传递:sbatch [OPTIONS(0)...] [ : [OPTIONS(N)...]] script(0) [args(0)...]
像这样的脚本可能会有用:
#!/bin/bash -l
slurm_opt= --time=1:00:00 --gres=gpu:v100:1 --mem=90g --cpus-per-task=6 -N 1 --wrap
sbatch $slurm_opt program1
sbatch $slurm_opt program2
注意 --wrap
选项。它允许您在其后拥有任何可执行文件而不仅仅是脚本。