Add frozen Thinker cache-path control

This commit is contained in:
Xin Wang
2026-08-24 01:07:42 +08:00
parent c5e2e044a8
commit 3cc0c3da85
2 changed files with 69 additions and 15 deletions

View File

@@ -1,5 +1,5 @@
#!/usr/bin/env python3
"""Evaluate Thinker LoRA + turn head from dense Omni AV caches.
"""Evaluate a frozen or LoRA-adapted Thinker from dense Omni AV caches.
The script accepts one dense cache directory per EasyCom session. With
``torchrun``, complete sessions are assigned round-robin to ranks; rank zero
@@ -55,7 +55,14 @@ def parse_args(argv: Sequence[str] | None = None) -> argparse.Namespace:
required=True,
help="Dense cache directory from cache_omni_av_pieces.py; repeat per session",
)
parser.add_argument("--adapter-checkpoint", type=Path, required=True)
parser.add_argument(
"--adapter-checkpoint",
type=Path,
help=(
"PEFT adapter directory. Omit it to evaluate the frozen base "
"Thinker as a cache-path control."
),
)
parser.add_argument("--head-checkpoint", type=Path, required=True)
parser.add_argument("--output-dir", type=Path, required=True)
parser.add_argument("--batch-size", type=int, default=2)
@@ -267,18 +274,30 @@ def _run(args: argparse.Namespace, run: DistributedRun) -> None:
base_model, processor = _load_base_model(args, run)
base_model.requires_grad_(False)
try:
from peft import PeftModel
except ImportError as exc:
raise RuntimeError("PEFT is required to evaluate the LoRA adapter") from exc
adapter_path = args.adapter_checkpoint.expanduser().resolve()
if not (adapter_path / "adapter_config.json").is_file():
raise FileNotFoundError(f"Missing adapter config: {adapter_path}")
language_model = PeftModel.from_pretrained(
base_model.model,
str(adapter_path),
is_trainable=False,
).eval()
adapter_path = None
if args.adapter_checkpoint is None:
language_model = base_model.model.eval()
model_variant = "frozen_base_thinker"
print(
f"[rank {run.rank}] frozen control: no LoRA adapter loaded",
flush=True,
)
else:
try:
from peft import PeftModel
except ImportError as exc:
raise RuntimeError(
"PEFT is required to evaluate the LoRA adapter"
) from exc
adapter_path = args.adapter_checkpoint.expanduser().resolve()
if not (adapter_path / "adapter_config.json").is_file():
raise FileNotFoundError(f"Missing adapter config: {adapter_path}")
language_model = PeftModel.from_pretrained(
base_model.model,
str(adapter_path),
is_trainable=False,
).eval()
model_variant = "thinker_lora"
language_model.config.use_cache = False
model_dtype = next(language_model.parameters()).dtype
head, head_payload = _load_head(args.head_checkpoint, run.device)
@@ -336,7 +355,10 @@ def _run(args: argparse.Namespace, run: DistributedRun) -> None:
"classes": list(CLASS_NAMES),
"prediction_layout": "[target_time, class, future_horizon]",
"model_id": args.model_id,
"adapter_checkpoint": str(adapter_path),
"model_variant": model_variant,
"adapter_checkpoint": (
None if adapter_path is None else str(adapter_path)
),
"head_checkpoint": str(args.head_checkpoint.expanduser().resolve()),
"head_training_step": head_payload.get("training_step"),
"cache_dirs": [str(item.cache_dir) for item in sessions],