slurm prefix for selecting least allocated node

This commit is contained in:
ville rantanen
2013-11-06 10:24:15 +02:00
parent 3d30b69342
commit 9c9ed213b4
2 changed files with 85 additions and 0 deletions

77
anduril/slurm-leastalloc Executable file
View File

@@ -0,0 +1,77 @@
#!/bin/bash
if [ -z "$1" ]
then echo provide the script to run
exit 1
fi
if [ -z "${ANDURIL_NODELIST}" ]
then NODELIST=( vm3 vm4 vm5 vm6 )
else read -a NODELIST <<< "$ANDURIL_NODELIST"
fi
if [ "$1" == "-h" ]
then echo -ne '
This prefix selects the lowest cpu allocated node for slurm run.
Use it with anduril: --exec-mode prefix --prefix '$( basename $0 )'
To change the list of nodes (preferred order):
export ANDURIL_NODELIST="vm3 vm4 vm5"
Current nodelist: "'${NODELIST[@]}'"'"( ${#NODELIST[@]} nodes)\n"
exit
fi
NODERUNS=( )
# find node with least allocated CPUs
for e in ${NODELIST[@]}
#do NODERUNS+=( $( squeue | grep $e | wc -l ) )
do NODERUNS+=( $( scontrol show node $e | grep CPUAlloc | sed 's,.*CPUAlloc=\([0-9]\+\).*,\1,' ) )
done
MIN=${NODERUNS[0]}
INDEX=0
for (( i=0; i<${#NODERUNS[@]}; i++ ))
do (( ${NODERUNS[$i]} < MIN )) && {
MIN=${NODERUNS[$i]}
INDEX=$i
}
echo -n "${NODELIST[$i]}:${NODERUNS[$i]} "
done
echo sending to ${NODELIST[$INDEX]}
JOBROOT="$HOME/.srun"
mkdir -p "$JOBROOT"
JOBNAME=job_$( date +"%y%m%d_%H%M%S" )_$( echo $@ | md5sum | cut -f1 -d" " )
JOBPATH="$JOBROOT/$JOBNAME"
while [ -d "$JOBPATH" ]
do echo Jobpath "$JOBPATH" exists
JOBNAME=job_$( date +"%y%m%d_%H%M%S" )_$( echo $@ | md5sum | cut -f1 -d" " )
JOBPATH="$JOBROOT/$JOBNAME"
done
mkdir -p "$JOBPATH"
JOBFILE="$JOBPATH/job"
STATFILE="$JOBPATH/statistics"
STRMFILE="$JOBPATH/stream"
EXECPATH=$( pwd )
# create the jobfile
echo '#!/bin/bash' > "$JOBFILE"
chmod 755 "$JOBFILE"
echo 'echo Node: $HOSTNAME'" >> \"$STATFILE\" " >> "$JOBFILE"
echo "pwd >> \"$STATFILE\" " >> "$JOBFILE"
echo "date +'Start: %s' >> \"$STATFILE\" " >> "$JOBFILE"
echo -n "/usr/bin/time -o \"$STATFILE\" --append " >> "$JOBFILE"
for (( i=1; i<=$#; i++ ))
do echo -n "\"${!i}\" " >> "$JOBFILE"
done
#Catch the input stream (for R launcher)
cat - >> "$STRMFILE"
echo -n ' < "'$STRMFILE'"' >> "$JOBFILE"
echo -e "\n" >> "$JOBFILE"
echo "date +'Stop: %s' >> \"$STATFILE\" " >> "$JOBFILE"
echo "The job file is in $JOBFILE"
# send the job
srun --nodelist=${NODELIST[$INDEX]} "$JOBFILE"

View File

@@ -157,3 +157,11 @@ function whenfilechanges() {
}
function nhead {
head $@ | ncsv -c
}
function ntail {
tail $@ | ncsv -c
}