1.4.1.3. Transferring files¶
1.4.1.3.1. Implicit transfer of executable¶
The simplest example that involve file transfer is the job script itself.
create a file repl.ini,
universe = parallel
executable = repl.sh
log = repl.log
output = repl-$(Node).out
error = repl-$(Node).err
stream_error = True
stream_output = True
should_transfer_files = Yes
when_to_transfer_output = ON_EXIT
machine_count = 2
request_cpus = 2
request_memory = 512M
request_disk = 1G
queue
and a file repl.sh,
#!/bin/bash -l
# helpers ##############################################################
COLUMNS=72
print_double_line() {
eval printf %.0s= '{1..'"${COLUMNS}"\}
echo
}
print_line() {
eval printf %.0s- '{1..'"${COLUMNS}"\}
echo
}
########################################################################
print_double_line
echo "hostname: $(hostname)"
print_line
echo "CPU:"
print_line
lscpu
echo Hello from $_CONDOR_PROCNO of $_CONDOR_NPROCS
print_double_line
echo "HTCondor config summary:"
print_line
condor_config_val -summary
print_double_line
echo "Current environment:"
print_line
env | sort
print_double_line
echo "Avaiable MPI:"
module avail mpi
module load mpi/openmpi3-x86_64
print_double_line
echo "Current environment:"
print_line
env | sort
print_double_line
echo "module path:"
which mpicc
which mpirun
This ClassAd involve transferring a script named repl.sh, and be default it will be copied to worker nodes.
And then you can submit your job using
condor_submit repl.ini
After waiting for a while as the job finished, you can see what happened by reading the contents of log, output, and error as specified in the ClassAd.
See Monitor your jobs to see how to monitor the status of your job. For advance use, use this command instead,
condor_submit repl.ini; tail -F repl.log repl-0.out repl-0.err repl-1.out repl-1.err
and see Streaming stdout & stderr with tail for an explanation on what it does.
Note
We normally won’t use the module system here, but if needed, notice the shebang #!/bin/bash -l is necessary for module to be found.
This example also includes some information specific to HTCondor that you can play around.
1.4.1.3.2. Explicit file transfer¶
Create a file cat.ini,
universe = parallel
executable = /usr/bin/cat
arguments = cat.txt
log = cat.log
output = cat-$(Node).out
error = cat-$(Node).err
stream_error = True
stream_output = True
transfer_input_files = cat.txt
should_transfer_files = Yes
when_to_transfer_output = ON_EXIT
machine_count = 2
request_cpus = 2
request_memory = 512M
request_disk = 1G
queue
Over here, we use transfer_input_files to specify which input files to be copied to the worker nodes. If it is a relative path, it will be the relative path w.r.t. the current directory that you are submitting the job from.
To prepare the file for transfer_input_files, let’s create cat.txt with the content,
hello world
And then submit your job using
condor_submit cat.ini
After waiting for a while as the job finished, you can see what happened by reading the contents of log, output, and error as specified in the ClassAd.
See Monitor your jobs to see how to monitor the status of your job. For advance use, use this command instead,
condor_submit cat.ini; tail -F cat.log cat-0.out cat-0.err cat-1.out cat-1.err
and see Streaming stdout & stderr with tail for an explanation on what it does.
If you want to transfer more than one files, delimit them with a comma, like so:
transfer_input_files = file1,file2,/path/to/file3