Skip to content

Commit ef538c6

Browse files
committed
added job array example
1 parent bd0564f commit ef538c6

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

docs/hpc/13_tutorial_intro_hpc/04_scheduler_fundamentals.mdx

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,59 @@ We can also cancel all of our jobs at once using the `-u` option. This will dele
189189
Try submitting multiple jobs and then cancelling them all with `scancel -u NetID`.
190190
:::
191191

192+
## Job Arrays
193+
> Job arrays offer a mechanism for submitting and managing collections of similar jobs quickly and easily, useful for repetitive workloads that follow a common job pattern. This greatly improves overall performance, since job arrays with millions of tasks can be submitted in milliseconds (subject to configured size limits) and the scheduler can quickly identify cases when no more array tasks are eligible to start.<br />
194+
-- [Slurm documentation](https://slurm.schedmd.com/job_array.html)
195+
196+
### Job Array Example
197+
As stated above, you can have a single sbatch job submit multiple jobs by using Job Arrays. This example show how you can run the same python file with a range of input parameters from a single sbatch file.
198+
199+
Copy the following code into a file named `run_array.sh`:
200+
```bash
201+
#!/bin/bash
202+
#SBATCH --job-name=array_test
203+
#SBATCH --output=array_%j.out
204+
#SBATCH --nodes=1
205+
#SBATCH --ntasks=1
206+
#SBATCH --cpus-per-task=1
207+
#SBATCH --mem=1M
208+
#SBATCH --time=00:10:00
209+
#SBATCH --account=torch_pr_XXX_XXXXX
210+
#SBATCH --array=0-4
211+
212+
LEARNING_RATES=(0.01 0.05 0.1 0.5 1.0)
213+
CURRENT_LR=${LEARNING_RATES[$SLURM_ARRAY_TASK_ID]}
214+
215+
python array_test.py --lr $CURRENT_LR
216+
217+
```
218+
Be aware that you'll need to put in your own account.
219+
220+
Copy the following code into a file named `array_test.py`:
221+
```bash
222+
import argparse
223+
224+
def main():
225+
parser = argparse.ArgumentParser(description="Job Array Demo")
226+
parser.add_argument('--lr', type=float, default=0.01,
227+
help="Learning Rate")
228+
args = parser.parse_args()
229+
current_lr = args.lr
230+
print(f"Starting training with learing rate: {current_lr}")
231+
232+
if __name__ == '__main__':
233+
main()
234+
235+
```
236+
237+
Place those files in the same directory and then submit with the command:
238+
```bash
239+
sbatch run_array.sh
240+
```
241+
When they're done running you should find 5 files in your directory named `array_job_id.out` where the `job_id` will be a long integer. Each of those files will contain one of the values in the learning rate array in `run_array.sh`
242+
243+
Please see the [Slurm Documentation](https://slurm.schedmd.com/job_array.html) for more details.
244+
192245
## Other Types of Jobs
193246
Up to this point, we’ve focused on running jobs in batch mode. Slurm also provides the ability to start an interactive session.
194247

0 commit comments

Comments
 (0)