EmergentTwilight/MMCoT / experiments /src /probe_opd_generation.py
EmergentTwilight's picture
download
raw
3.79 kB
"""Replay one failed OPD query with phase progress and a bounded continuation."""
import argparse
import faulthandler
import json
from pathlib import Path
import time
import torch
from opd.config import load_config
from opd.contracts import VerifierInput
from opd.rollout_artifacts import save_rollout
from opd.trainer import _build_rollout_runtime, _rollout_sampling_seed
from opd.verifier import build_verifier, evaluate_verifier
from shared.artifacts import claim_run_directory, seed_everything, write_json
from shared.data import PackedTrajectoryCache, answer_reference
from shared.modeling import load_model, load_processor
def main():
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("--config", required=True)
parser.add_argument("--checkpoint", required=True)
parser.add_argument("--output-dir", required=True)
parser.add_argument("--sample-index", type=int, default=4834)
parser.add_argument("--query-update", type=int, default=72)
args = parser.parse_args()
root = Path(args.output_dir)
claim_run_directory(root, resume=(root / ".run-claim.json").exists())
if (root / "result.json").exists():
print((root / "result.json").read_text(), flush=True)
return
config = load_config(args.config)
config.checkpoint.resume_from = args.checkpoint
seed_everything(config.run.seed)
torch.cuda.set_device(0)
torch.backends.cuda.matmul.allow_tf32 = config.trainer.tf32
processor = load_processor(config.model.path)
model = load_model(config, torch.device("cuda", 0), for_training=True).eval()
cache = PackedTrajectoryCache(config.data.cache_root)
item = cache.load(args.sample_index)
controller = _build_rollout_runtime(model, processor, config)
started = time.monotonic()
last = {"time": 0., "phase": None}
def progress(**payload):
now = time.monotonic()
if payload["phase"] != last["phase"] or now - last["time"] > 5:
payload["seconds"] = now - started
write_json(root / "progress.json", payload)
print("OPD_GENERATION_PROBE " + json.dumps(payload), flush=True)
last.update(time=now, phase=payload["phase"])
faulthandler.dump_traceback_later(180)
controller.backend.progress_callback = progress
try:
faulthandler.dump_traceback_later(180)
rollout = controller.collect(args.sample_index, item, sampling_seed=_rollout_sampling_seed(config, phase="train", update=args.query_update, sample_id=cache.sample_id(args.sample_index)))
save_rollout(root / "rollout", rollout, processor.tokenizer)
correct = False
if rollout.protocol_valid and rollout.has_scored_window:
verifier = build_verifier(config.verifier, processor.tokenizer)
correct = evaluate_verifier(verifier, VerifierInput.from_rollout(rollout, reference=answer_reference(item)), timeout_seconds=config.verifier.timeout_seconds)
result = {
"sample_index": args.sample_index, "sample_id": rollout.sample_id,
"stop_reason": rollout.stop_reason, "protocol_valid": rollout.protocol_valid,
"correct": bool(correct), "generated_tokens": rollout.input_ids.numel()-rollout.prefix_length,
"max_generated_tokens": config.rollout.max_generated_tokens,
"seconds": time.monotonic()-started,
}
if result["generated_tokens"] > config.rollout.max_generated_tokens:
raise RuntimeError("generated continuation exceeded configured cap")
write_json(root / "result.json", result)
print("OPD_GENERATION_PROBE_COMPLETE " + json.dumps(result), flush=True)
finally:
faulthandler.cancel_dump_traceback_later()
if __name__ == "__main__":
main()

Xet Storage Details

Size:
3.79 kB
·
Xet hash:
63f952607a743f115a207946816c016cd25dedbb12d5d0d4daaf3cb6e6c15124

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.