Skip to content

Commit 0a8d40f

Browse files
committed
Better logging and error handling for build_pipelines.sh and watchdog.sh
1 parent 6a32769 commit 0a8d40f

2 files changed

Lines changed: 76 additions & 37 deletions

File tree

apps/random_pipeline/build_pipelines.sh

Lines changed: 66 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -3,35 +3,43 @@
33
PIPELINES=${1:-5}
44
SCHEDULES=${2:-32}
55
START_FROM=${3:-0}
6-
HL_RANDOM_DROPOUT=${4:-1}
6+
HL_RANDOM_DROPOUT=${4:-50} # setting according to Adams2019 paper
77
HL_BEAM_SIZE=${5:-1}
88
NUM_CORES=${6:-8}
9+
EPOCHS=${7:-4}
10+
LEARNING_RATE=${8:-0.001}
911
ADAMS2019_DIR=@adams2019_BINARY_DIR@
10-
INITIAL_WEIGHTS=${7:-$ADAMS2019_DIR/baseline.weights}
12+
BINARY_DIR=@random_pipeline_BINARY_DIR@
13+
INITIAL_WEIGHTS=${9:-$ADAMS2019_DIR/baseline.weights}
1114
PROGRAM_NAME=`basename $0 .sh`
12-
LOGFILEBASE=${8:-${PROGRAM_NAME}.log}
13-
TIME_ME=${9:-true}
14-
DATE=${10:-`date +'%F-%H-%M-%S'`}
15+
LOGFILEBASE=${10:-${PROGRAM_NAME}.log}
16+
TIME_ME=${11:-true}
17+
DATE=${12:-`date +'%F-%H-%M-%S'`}
1518

16-
LOG_DIR="./logs"
19+
LOG_DIR="$BINARY_DIR/logs"
1720
LOGFILE="$LOG_DIR/$LOGFILEBASE.$DATE"
18-
TIME_TMP_LOG="$LOGFILEBASE.$DATE.tmp"
21+
TIME_TMP_LOG="$LOG_DIR/$LOGFILEBASE.$DATE.tmp"
22+
23+
if [ ! -d $LOG_DIR ]; then
24+
mkdir $LOG_DIR
25+
fi
1926

2027
if [ "$TIME_ME" = true ]; then
2128
time /usr/bin/time -f "\nreal\t%E\nuser\t%U\nsys\t%S" -o $TIME_TMP_LOG \
2229
$0 $PIPELINES $SCHEDULES $START_FROM $HL_RANDOM_DROPOUT $HL_BEAM_SIZE \
23-
$NUM_CORES $INITIAL_WEIGHTS $LOGFILEBASE false $DATE
30+
$NUM_CORES $EPOCHS $LEARNING_RATE $INITIAL_WEIGHTS $LOGFILEBASE false $DATE
2431
cat $TIME_TMP_LOG >> $LOGFILE
2532
rm $TIME_TMP_LOG
2633
exit
2734
fi
2835

2936
# Start a watchdog to kill any compilations that take too long
30-
./watchdog.sh &
37+
$BINARY_DIR/watchdog.sh $LOGFILE &
3138
WATCHDOG_PID=$!
3239

3340
function finish {
3441
kill $WATCHDOG_PID
42+
echo watchdog killed | tee -a $LOGFILE
3543
}
3644
trap finish EXIT
3745

@@ -41,71 +49,95 @@ printf "Running %s with the following parameters:\n\
4149
START_FROM=%d\n\
4250
HL_RANDOM_DROPOUT=%d\n\
4351
HL_BEAM_SIZE=%d\n\
44-
NUM_CORES=%d\n\
52+
NUM_CORES=%d\n\
53+
EPOCHS=%d\n\
54+
LEARNING_RATE=%f\n\
4555
INITIAL_WEIGHTS=%s\n\
4656
LOGFILEBASE=%s\n " $PROGRAM_NAME $PIPELINES $SCHEDULES $START_FROM \
47-
$HL_RANDOM_DROPOUT $HL_BEAM_SIZE $NUM_CORES $INITIAL_WEIGHTS \
48-
$LOGFILEBASE | tee -a $LOGFILE
57+
$HL_RANDOM_DROPOUT $HL_BEAM_SIZE $NUM_CORES $EPOCHS $LEARNING_RATE \
58+
$INITIAL_WEIGHTS $LOGFILEBASE | tee -a $LOGFILE
4959

5060
b=0
5161
HL_TARGET=$($ADAMS2019_DIR/get_host_target)
5262
WEIGHTS_OUT=./updated.weights
53-
mkdir -p $LOG_DIR
5463

55-
if [ -d "./bin" ]; then
64+
if [ -d "$BINARY_DIR/bin" ]; then
5665
# Don't clobber existing samples
57-
FIRST=$(ls ./bin | cut -d_ -f2 | sort -n | tail -n1)
66+
FIRST=$(ls $BINARY_DIR/bin | cut -d_ -f2 | sort -n | tail -n1)
5867
# Change initial weights to the updated.weights in FIRST directory
5968
P=$FIRST # ignore b*$PIPELINES term for now
6069
STAGES=$(((P % 30) + 10))
61-
INITIAL_WEIGHTS=`pwd`/bin/pipeline_${P}_${STAGES}/updated.weights
70+
INITIAL_WEIGHTS=$BINARY_DIR/bin/pipeline_${P}_${STAGES}/updated.weights
6271
else
63-
mkdir -p bin
72+
mkdir -p $BINARY_DIR/bin
6473
FIRST=$((START_FROM-1))
6574
fi
6675

6776
# Build lots of pipelines
6877
for ((p=$((FIRST+1));p<$((FIRST+PIPELINES+1));p++)); do
6978
P=$((b * $PIPELINES + p))
7079
STAGES=$(((P % 30) + 10))
71-
mkdir -p bin/pipeline_${P}_${STAGES}
80+
mkdir -p $BINARY_DIR/bin/pipeline_${P}_${STAGES}
7281

73-
# First, renerate and compile all the schedules
82+
# First, generate and compile all the schedules
7483
for ((s=0;s<$SCHEDULES;s++)); do
7584
PIPELINE_DIR=./bin/pipeline_${P}_${STAGES}/schedule_${s}_${HL_RANDOM_DROPOUT}_${HL_BEAM_SIZE}_0
7685
echo "export HL_SEED=$s && \
7786
export HL_RANDOM_DROPOUT=$HL_RANDOM_DROPOUT && \
7887
export HL_BEAM_SIZE=$HL_BEAM_SIZE && \
7988
export HL_WEIGHTS_DIR=$INITIAL_WEIGHTS && \
8089
mkdir -p $PIPELINE_DIR && \
81-
./random_pipeline.generator -n random_pipeline -d 0 -g random_pipeline -f random_pipeline \
90+
$BINARY_DIR/random_pipeline.generator -n random_pipeline -d 0 -g random_pipeline -f random_pipeline \
8291
-e c_header,object,schedule,python_schedule,static_library,registration,featurization \
8392
-o $PIPELINE_DIR -p $ADAMS2019_DIR/libautoschedule_adams2019.so \
8493
target=${HL_TARGET}-no_runtime auto_schedule=true seed=$P max_stages=$STAGES && \
8594
@CMAKE_CXX_COMPILER@ -std=c++17 -O3 -DNDEBUG -I@Halide_BINARY_DIR@/include @Halide_SOURCE_DIR@/tools/RunGenMain.cpp \
8695
$PIPELINE_DIR/random_pipeline.registration.cpp \
87-
$PIPELINE_DIR/random_pipeline.a librandom_pipeline.runtime.a \
96+
$PIPELINE_DIR/random_pipeline.a $BINARY_DIR/librandom_pipeline.runtime.a \
8897
-o $PIPELINE_DIR/bench -DHALIDE_NO_PNG -DHALIDE_NO_JPEG -pthread -ldl" | tee -a $LOGFILE
89-
done | xargs -P16 -I{} bash -c "{}" | tee -a $LOGFILE
98+
done | xargs -P${NUM_CORES} -I{} bash -c "{}" | tee -a $LOGFILE
9099

91100
echo Benchmarking schedules | tee -a $LOGFILE
92101
# Now let's benchmark them
93102
for ((s=0;s<$SCHEDULES;s++)); do
94-
PIPELINE_DIR=./bin/pipeline_${P}_${STAGES}/schedule_${s}_${HL_RANDOM_DROPOUT}_${HL_BEAM_SIZE}_0
95-
echo $PIPELINE_DIR | tee -a $LOGFILE
96-
benchmark_time=$($PIPELINE_DIR/bench --estimate_all --benchmarks=all)
97-
echo $benchmark_time | tee -a $LOGFILE
98-
t=$(echo $benchmark_time | head -1 | awk '{print $8}')
99-
id=$(printf "%04d%02d%02d%02d%02d" $P $STAGES $s $HL_RANDOM_DROPOUT $HL_BEAM_SIZE)
100-
echo Producing featurization for ID: $id | tee -a $LOGFILE
101-
$ADAMS2019_DIR/featurization_to_sample $PIPELINE_DIR/random_pipeline.featurization $t onnx $id $PIPELINE_DIR/random_pipeline.sample
103+
PIPELINE_DIR=$BINARY_DIR/bin/pipeline_${P}_${STAGES}/schedule_${s}_${HL_RANDOM_DROPOUT}_${HL_BEAM_SIZE}_0
104+
echo PIPELINE_DIR is $PIPELINE_DIR | tee -a $LOGFILE
105+
CMD="$PIPELINE_DIR/bench --estimate_all --benchmarks=all --parsable_output --benchmark_min_time=1.0"
106+
echo Running benchmark | tee -a $LOGFILE
107+
echo $CMD | tee -a $LOGFILE
108+
benchmark_time=$(eval $CMD)
109+
echo "$benchmark_time" | tee -a $LOGFILE
110+
t=$(echo "$benchmark_time" | head -1 | awk '{print $3}')
111+
pid=$(printf "%04d%02d" $P $STAGES)
112+
sid=$(printf "%02d%02d%02d" $s $HL_RANDOM_DROPOUT $HL_BEAM_SIZE)
113+
if [ ! -z "$t" ]; then
114+
echo Producing featurization for pid: $pid sid: $sid | tee -a $LOGFILE
115+
CMD="$ADAMS2019_DIR/featurization_to_sample $PIPELINE_DIR/random_pipeline.featurization $t $pid $sid $PIPELINE_DIR/random_pipeline.sample"
116+
echo $CMD | tee -a $LOGFILE
117+
eval $CMD | tee -a $LOGFILE
118+
else
119+
echo not running featurization_to_sample: benchmark was likely killed due to timeout | tee -a $LOGFILE
120+
fi
102121
done
103122

104123
echo Retraining weights | tee -a $LOGFILE
105124
cd bin/pipeline_${P}_${STAGES}
106-
find . -name "*.sample" | $ADAMS2019_DIR/retrain_cost_model --epochs=4 --rates=0.001 --num_cores=$NUM_CORES \
107-
--initial_weights=$INITIAL_WEIGHTS --weights_out=$WEIGHTS_OUT --best_benchmark=./best.onnx.benchmark.txt \
108-
--best_schedule=./best.onnx.schedule.h --best_python_schedule=./best_onnx_schedule.py | tee -a ../../$LOGFILE
109-
INITIAL_WEIGHTS=`pwd`/updated.weights
125+
CMD="find . -name '*.sample'"
126+
echo Trying to find samples | tee -a $LOGFILE
127+
samples=$(eval $CMD)
128+
if [ ! -z "$samples" ]; then
129+
echo Found samples: $samples | tee -a $LOGFILE
130+
CMD="echo $samples | $ADAMS2019_DIR/retrain_cost_model --epochs=$EPOCHS --rates=$LEARNING_RATE --num_cores=$NUM_CORES \
131+
--initial_weights=$INITIAL_WEIGHTS --weights_out=$WEIGHTS_OUT --best_benchmark=./best.onnx.benchmark.txt \
132+
--best_schedule=./best.onnx.schedule.h --best_python_schedule=./best_onnx_schedule.py"
133+
echo Retraining cost model with the following command: | tee -a $LOGFILE
134+
echo $CMD | tee -a $LOGFILE
135+
eval $CMD | tee -a $LOGFILE
136+
else
137+
echo Samples not found! skipping retraining cost model! | tee -a $LOGFILE
138+
fi
139+
if [ -e `pwd`/updated.weights ]; then
140+
INITIAL_WEIGHTS=`pwd`/updated.weights
141+
fi
110142
cd ../..
111143
done

apps/random_pipeline/watchdog.sh

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
#!/bin/bash
22

3-
echo "Starting watchdog"
3+
LOGFILE=${1}
4+
TIMEOUT=${2:-10}
5+
echo "Starting watchdog" | tee -a $LOGFILE
46
while [ 1 ]; do
5-
sleep 10
6-
ps -ax | grep 'bench --estimate_all' | grep -v grep | cut -dp -f1 | cut -d? -f1 | xargs kill 2>/dev/null
7+
sleep $TIMEOUT
8+
CMD="ps -ax | grep 'bench --estimate_all' | grep -v grep | cut -dp -f1 | cut -d? -f1"
9+
RES=$(eval $CMD)
10+
if [ ! -z "$RES" ]; then
11+
echo watchdog: killing $RES - waited for $TIMEOUT seconds | tee -a $LOGFILE
12+
echo $RES | xargs kill 2>/dev/null
13+
fi
714
done
815

0 commit comments

Comments
 (0)