| #!/bin/bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| set -uo pipefail |
| |
| unset HF_TOKEN |
|
|
| ROOT=/data2/hyeongjinkim/behavior-challenge |
| CFG=${CFG:-pi05_b1k_pytorch_local} |
| EXP_NAME=${EXP_NAME:-b1_sft_$(date +%Y%m%d)} |
| BATCH=${BATCH:-16} |
| STEPS=${STEPS:-50000} |
| SAVE_INTERVAL=${SAVE_INTERVAL:-2000} |
| LOG_INTERVAL=${LOG_INTERVAL:-100} |
| HF_REPO=${HF_REPO:-madokalif/pi05-b1k-turning-on-radio-lora} |
| NGPU=$(echo "$CUDA_VISIBLE_DEVICES" | tr ',' '\n' | wc -l) |
|
|
| export OPENPI_LORA=${OPENPI_LORA:-1} |
| export OPENPI_LORA_RANK=${OPENPI_LORA_RANK:-32} |
|
|
| CKPT_DIR=$ROOT/repos/openpi-sft/outputs/checkpoints/$CFG/$EXP_NAME |
|
|
| echo "=== job $SLURM_JOB_ID $EXP_NAME ===" |
| echo "cfg=$CFG gpus=$NGPU batch=$BATCH steps=$STEPS save_every=$SAVE_INTERVAL" |
| echo "lora=$OPENPI_LORA rank=$OPENPI_LORA_RANK" |
| echo "hf_repo=$HF_REPO" |
| echo "ckpt_dir=$CKPT_DIR" |
| nvidia-smi --query-gpu=index,name,memory.total --format=csv |
|
|
| cd "$ROOT/repos/openpi-sft" |
|
|
| |
| .venv/bin/python "$ROOT/upload_ckpt_hf.py" \ |
| --watch-dir "$CKPT_DIR" \ |
| --repo-id "$HF_REPO" \ |
| --interval 300 > "$ROOT/logs/hf_upload_${SLURM_JOB_ID}.log" 2>&1 & |
| UPLOADER_PID=$! |
| trap 'echo "stopping uploader $UPLOADER_PID"; kill $UPLOADER_PID 2>/dev/null' EXIT |
| echo "uploader pid=$UPLOADER_PID -> logs/hf_upload_${SLURM_JOB_ID}.log" |
|
|
| .venv/bin/torchrun --standalone --nnodes=1 --nproc_per_node="$NGPU" \ |
| scripts/train_pytorch.py "$CFG" \ |
| --exp_name="$EXP_NAME" \ |
| --overwrite \ |
| --batch-size="$BATCH" \ |
| --num-train-steps="$STEPS" \ |
| --save-interval="$SAVE_INTERVAL" \ |
| --log-interval="$LOG_INTERVAL" |
| rc=$? |
| echo "TRAIN_B1_SFT_rc=$rc" |
|
|
| |
| echo "--- final upload sweep ---" |
| .venv/bin/python "$ROOT/upload_ckpt_hf.py" --watch-dir "$CKPT_DIR" --repo-id "$HF_REPO" --once 2>&1 | tail -5 |
| exit $rc |
|
|