Upload training and eval scripts
Browse files
openpi/scripts/run_twin_dual_push_128_packed_5k.sh
ADDED
|
@@ -0,0 +1,110 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env bash
|
| 2 |
+
set -euo pipefail
|
| 3 |
+
|
| 4 |
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
| 5 |
+
VENV="$ROOT/.venv/bin/activate"
|
| 6 |
+
RUN_LOG_DIR="/workspace/run_logs"
|
| 7 |
+
mkdir -p "$RUN_LOG_DIR"
|
| 8 |
+
|
| 9 |
+
export HF_HOME=/workspace/.hf
|
| 10 |
+
export HF_HUB_CACHE=/workspace/.hf/hub
|
| 11 |
+
export HF_DATASETS_CACHE=/workspace/.hf/datasets
|
| 12 |
+
export HUGGINGFACE_HUB_CACHE=/workspace/.hf/hub
|
| 13 |
+
export XDG_CACHE_HOME=/workspace/.cache
|
| 14 |
+
export OPENPI_LEROBOT_HOME=/workspace/lerobot
|
| 15 |
+
export OPENPI_TORCH_COMPILE_SAMPLE_ACTIONS=0
|
| 16 |
+
export TOKENIZERS_PARALLELISM=false
|
| 17 |
+
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
|
| 18 |
+
|
| 19 |
+
cd "$ROOT"
|
| 20 |
+
source "$VENV"
|
| 21 |
+
|
| 22 |
+
BASELINE_CONFIG="pi05_twin_dual_push_128_packed_baseline_pytorch_5k"
|
| 23 |
+
PARALLEL_CONFIG="pi05_twin_dual_push_128_packed_parallel_pytorch_5k"
|
| 24 |
+
BASELINE_EXP="dual_push_128_packed_baseline_5k"
|
| 25 |
+
PARALLEL_EXP="dual_push_128_packed_parallel_5k"
|
| 26 |
+
VAL_REPO="lsnu/twin_dual_push_128_val"
|
| 27 |
+
INTERMEDIATE_VAL_BATCHES=50
|
| 28 |
+
FINAL_VAL_BATCHES=100
|
| 29 |
+
SAMPLE_VAL_BATCHES=16
|
| 30 |
+
SAMPLE_NUM_STEPS="4,10"
|
| 31 |
+
RUN_WARMSTART_CHECK="${RUN_WARMSTART_CHECK:-0}"
|
| 32 |
+
|
| 33 |
+
BASELINE_CKPT_ROOT="$ROOT/checkpoints/$BASELINE_CONFIG/$BASELINE_EXP"
|
| 34 |
+
PARALLEL_CKPT_ROOT="$ROOT/checkpoints/$PARALLEL_CONFIG/$PARALLEL_EXP"
|
| 35 |
+
|
| 36 |
+
BASELINE_LOG="$RUN_LOG_DIR/${BASELINE_EXP}.log"
|
| 37 |
+
PARALLEL_LOG="$RUN_LOG_DIR/${PARALLEL_EXP}.log"
|
| 38 |
+
WARMSTART_LOG="$RUN_LOG_DIR/warmstart_dual_push_128_5k.log"
|
| 39 |
+
|
| 40 |
+
wait_for_checkpoint_dir() {
|
| 41 |
+
local ckpt_dir="$1"
|
| 42 |
+
while [[ ! -d "$ckpt_dir" ]]; do
|
| 43 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] waiting for checkpoint dir: $ckpt_dir"
|
| 44 |
+
sleep 30
|
| 45 |
+
done
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
run_eval() {
|
| 49 |
+
local config_name="$1"
|
| 50 |
+
local ckpt_dir="$2"
|
| 51 |
+
local num_batches="$3"
|
| 52 |
+
local log_path="$4"
|
| 53 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] eval start config=$config_name ckpt=$ckpt_dir batches=$num_batches"
|
| 54 |
+
python scripts/eval_twin_val_loss_pytorch.py \
|
| 55 |
+
--config_name "$config_name" \
|
| 56 |
+
--checkpoint_dir "$ckpt_dir" \
|
| 57 |
+
--repo_id "$VAL_REPO" \
|
| 58 |
+
--num_batches "$num_batches" \
|
| 59 |
+
--num_workers 0 \
|
| 60 |
+
--sample_num_batches "$SAMPLE_VAL_BATCHES" \
|
| 61 |
+
--sample_num_steps "$SAMPLE_NUM_STEPS" \
|
| 62 |
+
>"$log_path" 2>&1
|
| 63 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] eval done log=$log_path"
|
| 64 |
+
}
|
| 65 |
+
|
| 66 |
+
run_train_and_evals() {
|
| 67 |
+
local config_name="$1"
|
| 68 |
+
local exp_name="$2"
|
| 69 |
+
local ckpt_root="$3"
|
| 70 |
+
local train_log="$4"
|
| 71 |
+
|
| 72 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] train start config=$config_name exp=$exp_name"
|
| 73 |
+
torchrun --standalone --nproc_per_node=4 scripts/train_pytorch.py \
|
| 74 |
+
"$config_name" \
|
| 75 |
+
--exp_name "$exp_name" \
|
| 76 |
+
--overwrite \
|
| 77 |
+
>"$train_log" 2>&1
|
| 78 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] train done config=$config_name exp=$exp_name"
|
| 79 |
+
|
| 80 |
+
for step in 1000 2000 5000; do
|
| 81 |
+
wait_for_checkpoint_dir "$ckpt_root/$step"
|
| 82 |
+
local num_batches="$INTERMEDIATE_VAL_BATCHES"
|
| 83 |
+
if [[ "$step" == "5000" ]]; then
|
| 84 |
+
num_batches="$FINAL_VAL_BATCHES"
|
| 85 |
+
fi
|
| 86 |
+
run_eval \
|
| 87 |
+
"$config_name" \
|
| 88 |
+
"$ckpt_root/$step" \
|
| 89 |
+
"$num_batches" \
|
| 90 |
+
"$RUN_LOG_DIR/${exp_name}_val_${step}.log"
|
| 91 |
+
done
|
| 92 |
+
}
|
| 93 |
+
|
| 94 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] packed dual-push 128 5k runner started"
|
| 95 |
+
if [[ "$RUN_WARMSTART_CHECK" == "1" ]]; then
|
| 96 |
+
python -u scripts/check_parallel_warmstart_equivalence.py \
|
| 97 |
+
--baseline_config_name "$BASELINE_CONFIG" \
|
| 98 |
+
--parallel_config_name "$PARALLEL_CONFIG" \
|
| 99 |
+
--repo_id "lsnu/twin_dual_push_128_train" \
|
| 100 |
+
--batch_size 1 \
|
| 101 |
+
>"$WARMSTART_LOG" 2>&1
|
| 102 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] warm-start equivalence check logged to $WARMSTART_LOG"
|
| 103 |
+
else
|
| 104 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] skipping warm-start equivalence gate (RUN_WARMSTART_CHECK=$RUN_WARMSTART_CHECK)"
|
| 105 |
+
fi
|
| 106 |
+
|
| 107 |
+
run_train_and_evals "$BASELINE_CONFIG" "$BASELINE_EXP" "$BASELINE_CKPT_ROOT" "$BASELINE_LOG"
|
| 108 |
+
run_train_and_evals "$PARALLEL_CONFIG" "$PARALLEL_EXP" "$PARALLEL_CKPT_ROOT" "$PARALLEL_LOG"
|
| 109 |
+
|
| 110 |
+
echo "[$(date -u '+%Y-%m-%d %H:%M:%S UTC')] packed dual-push 5k runner finished successfully"
|