diff options
Diffstat (limited to 'notebooks/upload_to_hf.py')
| -rw-r--r-- | notebooks/upload_to_hf.py | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/notebooks/upload_to_hf.py b/notebooks/upload_to_hf.py new file mode 100644 index 0000000..dfdd87e --- /dev/null +++ b/notebooks/upload_to_hf.py @@ -0,0 +1,60 @@ +"""Bundle model code + checkpoints + configs + a small Sudoku test set and push to a HuggingFace +model repo so the notebook is fully self-contained. Run AFTER `huggingface-cli login`. + python upload_to_hf.py # creates/updates HF_REPO (public) +""" +import shutil, json +from pathlib import Path +import numpy as np +from huggingface_hub import HfApi, create_repo + +HF_REPO = "YurenHao0426/recursive-reasoning-chaos" +RRM = Path("/home/yurenh2/rrm") +TRM_CK = RRM / "trm/checkpoints/Sudoku-extreme-1k-aug-1000-ACT-torch/pretrain_mlp_t_sudoku_official_gbs768_repro" +HRM_CK = RRM / "hrm/checkpoints/Sudoku-extreme-1k-aug-1000 ACT-torch/HierarchicalReasoningModel_ACTV1 righteous-python" +DATA = RRM / "data/sudoku-extreme-1k-aug-1000" + +stage = Path("/tmp/hf_chaos_upload") +if stage.exists(): + shutil.rmtree(stage) +stage.mkdir(parents=True) + +# 1. model code (separate packages) +shutil.copytree(RRM / "trm/models", stage / "code_trm/models", ignore=shutil.ignore_patterns("__pycache__")) +shutil.copytree(RRM / "hrm/models", stage / "code_hrm/models", ignore=shutil.ignore_patterns("__pycache__")) + +# 2. checkpoints + configs +(stage / "trm_sudoku").mkdir(); (stage / "hrm_sudoku").mkdir() +shutil.copy(TRM_CK / "step_58590", stage / "trm_sudoku/weights.pt") +shutil.copy(TRM_CK / "all_config.yaml", stage / "trm_sudoku/all_config.yaml") +shutil.copy(HRM_CK / "step_26040", stage / "hrm_sudoku/weights.pt") +shutil.copy(HRM_CK / "all_config.yaml", stage / "hrm_sudoku/all_config.yaml") + +# 3. small test set (2000 puzzles) + meta +(stage / "data").mkdir() +rng = np.random.default_rng(0) +inp = np.load(DATA / "test/all__inputs.npy"); lab = np.load(DATA / "test/all__labels.npy") +pid = np.load(DATA / "test/all__puzzle_identifiers.npy") +sel = rng.choice(len(inp), 2000, replace=False) +np.save(stage / "data/sudoku_test_inputs.npy", inp[sel]) +np.save(stage / "data/sudoku_test_labels.npy", lab[sel]) +np.save(stage / "data/sudoku_test_pid.npy", pid[sel]) +meta = json.loads((DATA / "train/dataset.json").read_text()) +(stage / "data/sudoku_meta.json").write_text(json.dumps(meta)) + +(stage / "README.md").write_text( + "# recursive-reasoning-chaos\n\n" + "Trained TRM/HRM checkpoints (Sudoku-Extreme) + model code + a 2000-puzzle test set, for the\n" + "companion notebook (github.com/YurenHao0426/recursive-reasoning-dynamics, " + "notebooks/recursive_reasoning_chaos.ipynb). Reproduces 'recursive-reasoning failures are\n" + "(transient) chaos': TRM failures escape with more inference compute; HRM failures stay trapped.\n\n" + "Layout: `code_trm/`, `code_hrm/` (model packages), `trm_sudoku/`, `hrm_sudoku/` " + "(weights.pt + all_config.yaml), `data/` (sudoku test subset + meta).\n\n" + "Upstream model code: TRM (SamsungSAILMontreal/TinyRecursiveModels), HRM (sapientinc/HRM).\n") + +print("staged at", stage, "-> sizes:") +import subprocess; print(subprocess.run(["du", "-sh", str(stage)], capture_output=True, text=True).stdout.strip()) + +api = HfApi() +create_repo(HF_REPO, repo_type="model", private=False, exist_ok=True) +api.upload_folder(folder_path=str(stage), repo_id=HF_REPO, repo_type="model") +print(f"uploaded to https://huggingface.co/{HF_REPO}") |
