Submitting Multiple Jobs in Individual Directories
This guide demonstrates how to submit multiple jobs, using a specific directory structure. It is relevant to:
- Researchers who have used CHTC's "ChtcRun" tools in the past
- Anyone who wants to submit multiple jobs, where each job has its own directory for input/output files on the submit server.
1. Software and Input Preparation
The first time you submit jobs, you will need to prepare a portable version of your software and a script (what we call the job's "executable") that runs your code. We have guides for preparing:
Choose the right guide for you and follow the directions for compiling your code (Matlab) or building an installation (Python, R). Also follow the instructions for writing a shell script that runs your program. These are typically steps 1 and 2 of the above guides.
2. Directory Structure
Once you've prepared your code and script, create the same directory structure that you would normally use with ChtcRun. For a single batch of jobs, the directories will look like this:
project_name/
run_code.sh
shared/
scripts, code_package
shared_input
job1/
input/
job_input
job2/
input/
job_input
job3/
input/
job_input
You'll want to put all your code and files required for every job in
shared/
and individual input files in the individual job directories
in an input
folder. In the submit file below, it matters that the
individual job directories start with the word "job".
Note: the job directories need to be hosted in your
/home
directory on the submit node. The following instructions will not work for files hosted on/staging
!
3. Submit File
Note: if you are submitting more than 10,000 jobs at once, you'll need to use a different submit file. Please email the CHTC Research Computing Facilitators at chtc@cs.wisc.edu if this is the case!
Your submit file, which should go in your main project directory, should look like this:
# Specify the HTCondor Universe (vanilla is the default and is used
# for almost all jobs), the desired name of the HTCondor log file,
# and the desired name of the standard error and standard output file.
universe = vanilla
log = process.log
error = process.err
output = process.out
#
# Specify your executable (single binary or a script that runs several
# commands) and arguments
executable = run_code.sh
# arguments = arguments to your script go here
#
# Specify that HTCondor should transfer files to and from the
# computer where each job runs.
should_transfer_files = YES
when_to_transfer_output = ON_EXIT
# Set the submission directory for each job with the $(directory)
# variable (set below in the queue statement). Then transfer all
# files in the shared directory, and from the input folder in the
# submission directory
initialdir = $(directory)
transfer_input_files = ../shared/,input/
#
# Tell HTCondor what amount of compute resources
# each job will need on the computer where it runs.
request_cpus = 1
request_memory = 1GB
request_disk = 1GB
#
# Create a job for each "job" directory.
queue directory matching job*
You must change the name of the executable to your own script, and in certain cases, add arguments.
Note that the final line matches the pattern of your directory names
created in the second step. You can use a different name for the
directories (like data
or seed
), but you should use whatever word
they share in the final queue statement in place of "job".
Jobs can then be submitted as described in our Introduction to HTC
Guide, using condor_submit
.