| #!/usr/bin/env bash |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| exec 1> >(stdbuf -oL -eL cat) 2>&1 |
| set -euo pipefail |
| [[ "${DEBUG:-0}" == "1" ]] && set -x |
|
|
| RUN_NAME="${1:-videovae_ft_config_16z_tactile}" |
| DATA_ROOT="${2:-/group2/ct/weihanx/world_model/VideoVAEPlus/examples/videos/gt}" |
| OUT_ROOT="${3:-/group2/ct/weihanx/world_model/VideoVAEPlus/examples/videos/recon/${RUN_NAME}}" |
|
|
| REPO="/group2/ct/weihanx/world_model/VideoVAEPlus" |
| RUN_DIR="$REPO/finetune_runs/$RUN_NAME" |
| CHECKPOINT_DIR="$RUN_DIR/checkpoints" |
| BASE_CONFIG="${BASE_CONFIG:-$REPO/configs/inference/config_16z_infer_noloss.yaml}" |
| CONDA_HOME="${CONDA_HOME:-/group2/ct/weihanx/miniconda3}" |
| CONDA_ENV="${CONDA_ENV:-vae}" |
| PYTHON_BIN="${PYTHON_BIN:-$CONDA_HOME/envs/$CONDA_ENV/bin/python}" |
| DEVICE="${DEVICE:-cuda:0}" |
| CHUNK_SIZE="${CHUNK_SIZE:-16}" |
| RESOLUTION_H="${RESOLUTION_H:-128}" |
| RESOLUTION_W="${RESOLUTION_W:-128}" |
|
|
| mkdir -p /group2/ct/weihanx/world_model/slurm-logs "$OUT_ROOT" |
|
|
| echo "=== VideoVAE+ inference (tactile finetune) ===" |
| echo "Host: $(hostname)" |
| echo "Job ID: ${SLURM_JOB_ID:-N/A}" |
| echo "Run name: $RUN_NAME" |
| echo "Data root: $DATA_ROOT" |
| echo "Out root: $OUT_ROOT" |
| echo "Base config: $BASE_CONFIG" |
| echo "Python: $PYTHON_BIN" |
| echo "Device: $DEVICE" |
| echo "Chunk size: $CHUNK_SIZE" |
| echo "Resolution: ${RESOLUTION_H}x${RESOLUTION_W}" |
| echo |
|
|
| [[ -d "$REPO" ]] || { echo "ERROR: repo not found: $REPO" >&2; exit 2; } |
| [[ -d "$DATA_ROOT" ]] || { echo "ERROR: data_root not found: $DATA_ROOT" >&2; exit 2; } |
| [[ -f "$BASE_CONFIG" ]] || { echo "ERROR: base config not found: $BASE_CONFIG" >&2; exit 2; } |
| [[ -x "$PYTHON_BIN" ]] || { echo "ERROR: python not found: $PYTHON_BIN" >&2; exit 2; } |
|
|
| if [[ -n "${CKPT_PATH:-}" ]]; then |
| CKPT_PATH="$CKPT_PATH" |
| else |
| [[ -d "$CHECKPOINT_DIR" ]] || { echo "ERROR: checkpoint dir not found: $CHECKPOINT_DIR" >&2; exit 2; } |
| if [[ -f "$CHECKPOINT_DIR/last.ckpt" ]]; then |
| CKPT_PATH="$CHECKPOINT_DIR/last.ckpt" |
| else |
| shopt -s nullglob |
| ckpts=("$CHECKPOINT_DIR"/*.ckpt) |
| shopt -u nullglob |
| [[ ${#ckpts[@]} -gt 0 ]] || { echo "ERROR: no checkpoints found in $CHECKPOINT_DIR" >&2; exit 2; } |
| CKPT_PATH="$(ls -t "${ckpts[@]}" | head -n 1)" |
| fi |
| fi |
|
|
| [[ -f "$CKPT_PATH" ]] || { echo "ERROR: checkpoint not found: $CKPT_PATH" >&2; exit 2; } |
|
|
| export OMP_NUM_THREADS=8 |
| export PYTHONUNBUFFERED=1 |
| export PYTHONFAULTHANDLER=1 |
| export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True |
|
|
| TMP_CONFIG="${TMPDIR:-/tmp}/videovaeplus_infer_${RUN_NAME}_${SLURM_JOB_ID:-$$}.yaml" |
| trap 'rm -f "$TMP_CONFIG"' EXIT |
|
|
| echo "[$(date +%H:%M:%S)] checkpoint: $CKPT_PATH" |
| echo "[$(date +%H:%M:%S)] writing temp config: $TMP_CONFIG" |
| "$PYTHON_BIN" - "$BASE_CONFIG" "$CKPT_PATH" "$TMP_CONFIG" <<'PY' |
| import sys |
| from omegaconf import OmegaConf |
|
|
| base_cfg, ckpt_path, out_cfg = sys.argv[1:] |
| cfg = OmegaConf.load(base_cfg) |
| cfg.model.params.ckpt_path = ckpt_path |
| OmegaConf.save(config=cfg, f=out_cfg) |
| print(f"temp config written: {out_cfg}") |
| PY |
|
|
| cd "$REPO" |
| echo "[$(date +%H:%M:%S)] launching inference_video.py..." |
| "$PYTHON_BIN" inference_video.py \ |
| --data_root "$DATA_ROOT" \ |
| --out_root "$OUT_ROOT" \ |
| --config_path "$TMP_CONFIG" \ |
| --device "$DEVICE" \ |
| --chunk_size "$CHUNK_SIZE" \ |
| --resolution "$RESOLUTION_H" "$RESOLUTION_W" |
|
|
| echo "[$(date +%H:%M:%S)] Finished." |
|
|