aryadomain's picture
Add files using upload-large-folder tool
533920b verified
Raw
History Blame Contribute Delete
5.83 kB
#!/usr/bin/env bash
set -euo pipefail
# bash examples.sh
if [[ -n "${TERM:-}" ]]; then
clear
fi
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
# Shared HF cache used on this cluster.
HF_HUB_CACHE_DIR="${HF_HUB_CACHE_DIR:-/scratch/rr81/ma5430/.cache/huggingface/hub}"
export HF_HUB_CACHE="$HF_HUB_CACHE_DIR"
export HUGGINGFACE_HUB_CACHE="$HF_HUB_CACHE_DIR"
export HF_HOME="$(dirname "$HF_HUB_CACHE_DIR")"
# GPU nodes have no internet, while login nodes do.
# Auto default: offline on GPU nodes, online on login nodes.
DEFAULT_OFFLINE_MODE="1"
if ! (command -v nvidia-smi >/dev/null 2>&1 && nvidia-smi -L >/dev/null 2>&1); then
DEFAULT_OFFLINE_MODE="0"
fi
OFFLINE_MODE="${OFFLINE_MODE:-$DEFAULT_OFFLINE_MODE}"
if [[ "$OFFLINE_MODE" == "1" ]]; then
export HF_DATASETS_OFFLINE="1"
export HF_METRICS_OFFLINE="1"
export HF_MODULES_OFFLINE="1"
export TRANSFORMERS_OFFLINE="1"
export DIFFUSERS_OFFLINE="1"
export HF_HUB_OFFLINE="1"
else
export HF_DATASETS_OFFLINE="0"
export HF_METRICS_OFFLINE="0"
export HF_MODULES_OFFLINE="0"
export TRANSFORMERS_OFFLINE="0"
export DIFFUSERS_OFFLINE="0"
export HF_HUB_OFFLINE="0"
fi
# Existing environment requested by user.
PYTHON_BIN="${PYTHON_BIN:-/g/data/rr81/aev/bin/python}"
if [[ ! -x "$PYTHON_BIN" ]]; then
echo "[examples.sh] Missing Python executable: $PYTHON_BIN" >&2
exit 1
fi
DATASET_NAME="${DATASET_NAME:-pickapic}" # coco | pickapic
GRAD_CONFIG="${GRAD_CONFIG:-one_step_rectification_config}"
MODEL_PROFILE="${MODEL_PROFILE:-sana_600m_512}" # sana_600m_512 | sana_1600m_512 | sana_sprint_0_6b_1024 | sana_sprint_1_6b_1024
MODE="${MODE:-gradient_ascent}" # gradient_ascent | baseline | both
# Empty MAX_SAMPLES means evaluate all available samples.
MAX_SAMPLES="${MAX_SAMPLES:-}"
NUM_STEPS="${NUM_STEPS:-20}"
CFG_SCALE="${CFG_SCALE:-4.5}"
DTYPE="${DTYPE:-bf16}" # auto | bf16 | fp16 | fp32
METRICS="${METRICS:-clip aesthetic pickscore hpsv2 hpsv21 imagereward}"
PREFETCH_ONLY="${PREFETCH_ONLY:-0}"
# Override this path whenever you want to swap reward weights.
# LRM_MODEL_PATH="${LRM_MODEL_PATH:-/g/data/rr81/LPO/lrm/lrm_sana/logs/v8/reward_model/step_sana_sana_600m_512_variable-t_lr1e-5_step-8000_filter2_time951/checkpoint-gstep33000}"
LRM_MODEL_PATH="${LRM_MODEL_PATH:-/g/data/rr81/LPO/lrm/lrm_sana/logs/v7/reward_model/step_sana_sana_600m_512_variable-t_lr1e-5_step-8000_filter2_time951/checkpoint-gstep32000}"
if [[ -z "${GPU_ID:-}" ]]; then
if command -v nvidia-smi >/dev/null 2>&1 && nvidia-smi -L >/dev/null 2>&1; then
GPU_ID="$(nvidia-smi --query-gpu=index,memory.used --format=csv,noheader,nounits | sort -k2 -n | head -n1 | cut -d',' -f1 | tr -d ' ')"
GPU_ID="${GPU_ID:-0}"
else
GPU_ID="0"
echo "[examples.sh] No visible NVIDIA GPU on this node. Defaulting GPU_ID=0."
echo "[examples.sh] eval.py will run on CPU if CUDA is unavailable."
fi
fi
echo "Using GPU ID: $GPU_ID"
echo "Using LRM weights: $LRM_MODEL_PATH"
echo "HF offline mode: $OFFLINE_MODE"
echo "Generation dtype: $DTYPE"
if [[ "$PREFETCH_ONLY" == "1" ]]; then
echo "[examples.sh] PREFETCH_ONLY=1 -> downloading required model files to shared cache and exiting."
export MODEL_PROFILE
export METRICS
"$PYTHON_BIN" - <<'PY'
import os
from huggingface_hub import hf_hub_download, snapshot_download
cache_dir = os.environ["HF_HUB_CACHE"]
model_profile = os.environ.get("MODEL_PROFILE", "sana_600m_512")
metrics = set(os.environ.get("METRICS", "clip aesthetic").split())
profile_to_repo = {
"sana_600m_512": "Efficient-Large-Model/Sana_600M_512px_diffusers",
"sana_1600m_512": "Efficient-Large-Model/Sana_1600M_512px_diffusers",
"sana_sprint_0_6b_1024": "Efficient-Large-Model/Sana_Sprint_0.6B_1024px_diffusers",
"sana_sprint_1_6b_1024": "Efficient-Large-Model/Sana_Sprint_1.6B_1024px_diffusers",
}
def snap(repo_id):
print(f"[prefetch] snapshot_download: {repo_id}")
snapshot_download(repo_id=repo_id, cache_dir=cache_dir, local_files_only=False)
def one(repo_id, filename):
print(f"[prefetch] hf_hub_download: {repo_id}/{filename}")
hf_hub_download(repo_id=repo_id, filename=filename, cache_dir=cache_dir, local_files_only=False)
if model_profile not in profile_to_repo:
raise ValueError(f"Unknown MODEL_PROFILE={model_profile}")
# Base SANA model used for generation + reward backbone
snap(profile_to_repo[model_profile])
# Required for CLIP-based metrics and LRM text projection init fallback
if "clip" in metrics or "aesthetic" in metrics:
snap("openai/clip-vit-large-patch14")
if "pickscore" in metrics:
snap("laion/CLIP-ViT-H-14-laion2B-s32B-b79K")
snap("yuvalkirstain/PickScore_v1")
if "hpsv2" in metrics or "hpsv21" in metrics:
one("laion/CLIP-ViT-H-14-laion2B-s32B-b79K", "open_clip_pytorch_model.bin")
if "hpsv2" in metrics:
one("xswu/HPSv2", "HPS_v2_compressed.pt")
if "hpsv21" in metrics:
one("xswu/HPSv2", "HPS_v2.1_compressed.pt")
if "imagereward" in metrics:
one("THUDM/ImageReward", "ImageReward.pt")
one("THUDM/ImageReward", "med_config.json")
print("[prefetch] done")
PY
exit 0
fi
read -r -a METRICS_ARR <<< "$METRICS"
CMD=(
"$PYTHON_BIN" eval.py
--model_variant "$MODEL_PROFILE"
--dataset_type "$DATASET_NAME"
--lrm_model "$LRM_MODEL_PATH"
--grad_config "$GRAD_CONFIG"
--metrics "${METRICS_ARR[@]}"
--num_steps "$NUM_STEPS"
--cfg_scale "$CFG_SCALE"
--dtype "$DTYPE"
--hf_cache_dir "$HF_HUB_CACHE_DIR"
--output_dir "RESULTS/$DATASET_NAME/${GRAD_CONFIG}_${MODEL_PROFILE}"
--cuda "$GPU_ID"
--mode "$MODE"
)
if [[ -n "$MAX_SAMPLES" ]]; then
CMD+=(--max_samples "$MAX_SAMPLES")
fi
if [[ "$OFFLINE_MODE" == "1" ]]; then
CMD+=(--offline)
fi
"${CMD[@]}"