Files
party2d/validation/run_blocked_validation.sh
T

77 lines
2.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
cd "$repo_root"
if [[ "${PARTY2D_APPROVE_MODEL_FIT:-}" != "YES" ]]; then
echo "Refusing to start a Stan fit without explicit approval." >&2
echo "After approval, rerun with PARTY2D_APPROVE_MODEL_FIT=YES." >&2
exit 64
fi
run_dir="${1:-$repo_root/_local/validation/blocked_party}"
mkdir -p "$run_dir" "$repo_root/_local/tmp/blocked_validation"
if pgrep -af 'stan_model_2dim_v6.*sample|src/julia/01_run_model.jl' | grep -v "$$" >/dev/null; then
echo "Refusing to start: another party2d model process appears to be running." >&2
pgrep -af 'stan_model_2dim_v6.*sample|src/julia/01_run_model.jl' >&2 || true
exit 1
fi
if [[ -f "$run_dir/model_fit.complete" ]]; then
echo "Blocked validation already marked complete: $run_dir/model_fit.complete" >&2
exit 1
fi
required_kb=$((80 * 1024 * 1024))
available_kb="$(df -Pk "$run_dir" | awk 'NR==2 {print $4}')"
if (( available_kb < required_kb )); then
echo "Refusing to start: less than 80 GiB free on the run volume." >&2
exit 1
fi
julia --project=. validation/prepare_blocked_validation.jl "$run_dir"
sha256sum "$run_dir"/text_data.csv "$run_dir"/expert.csv "$run_dir"/lr_data.csv \
"$run_dir"/expert_test.csv "$run_dir"/lr_data_test.csv \
> "$run_dir/input_sha256sums.txt"
export CMDSTAN_HOME="${CMDSTAN_HOME:-/opt/agent-tools/cmdstan-2.39.0}"
export TMPDIR="$repo_root/_local/tmp/blocked_validation"
export JULIA_NUM_THREADS="${JULIA_NUM_THREADS:-4}"
export STAN_NUM_THREADS=1
export STAN_REFRESH="${STAN_REFRESH:-50}"
export PARTY2D_NUM_CHAINS="${PARTY2D_NUM_CHAINS:-4}"
export PARTY2D_NUM_WARMUP="${PARTY2D_NUM_WARMUP:-1000}"
export PARTY2D_NUM_SAMPLES="${PARTY2D_NUM_SAMPLES:-1000}"
if [[ ! -x "$CMDSTAN_HOME/bin/stanc" ]]; then
echo "Refusing to start: no executable stanc compiler at $CMDSTAN_HOME/bin/stanc" >&2
exit 1
fi
"$CMDSTAN_HOME/bin/stanc" --version > "$run_dir/stanc_version.txt"
date --iso-8601=seconds > "$run_dir/model_fit.started"
echo "$$" > "$run_dir/model_fit.pid"
echo "CMDSTAN_HOME=$CMDSTAN_HOME" > "$run_dir/model_fit.environment"
echo "JULIA_NUM_THREADS=$JULIA_NUM_THREADS" >> "$run_dir/model_fit.environment"
echo "STAN_NUM_THREADS=$STAN_NUM_THREADS" >> "$run_dir/model_fit.environment"
echo "PARTY2D_NUM_CHAINS=$PARTY2D_NUM_CHAINS" >> "$run_dir/model_fit.environment"
echo "PARTY2D_NUM_WARMUP=$PARTY2D_NUM_WARMUP" >> "$run_dir/model_fit.environment"
echo "PARTY2D_NUM_SAMPLES=$PARTY2D_NUM_SAMPLES" >> "$run_dir/model_fit.environment"
set +e
nice -n 10 julia --project=. src/julia/01_run_model.jl --data-dir "$run_dir" \
2>&1 | tee "$run_dir/model_fit.log"
status="${PIPESTATUS[0]}"
set -e
echo "$status" > "$run_dir/model_fit.exit_code"
if [[ "$status" -eq 0 ]]; then
rm -f "$run_dir/model_fit.failed"
date --iso-8601=seconds > "$run_dir/model_fit.complete"
else
date --iso-8601=seconds > "$run_dir/model_fit.failed"
fi
exit "$status"