| """Diagnose meta-skeleton ↔ checkpoint key divergence (Robometer NF4 load fix).""" |
|
|
| from __future__ import annotations |
|
|
| import pathlib |
| from dataclasses import fields |
|
|
| import torch |
| import yaml |
|
|
| CKPT = pathlib.Path("/tmp/robometer-nf4-ckpt/model.safetensors") |
|
|
|
|
| def main() -> int: |
| from huggingface_hub import hf_hub_download |
| from robometer.configs.experiment_configs import ExperimentConfig |
| from robometer.models.rbm import RBM |
| from safetensors import safe_open |
| from transformers import AutoConfig |
|
|
| base_id = "Qwen/Qwen3-VL-4B-Instruct" |
| raw = yaml.safe_load(open(hf_hub_download("robometer/Robometer-4B", "config.yaml"))) |
| valid = {f.name for f in fields(ExperimentConfig)} |
| exp_config = ExperimentConfig(**{k: v for k, v in raw.items() if k in valid}) |
|
|
| for cfg_src in ("robometer/Robometer-4B", base_id): |
| config = AutoConfig.from_pretrained(cfg_src) |
| with torch.device("meta"): |
| model = RBM( |
| config, |
| None, |
| None, |
| base_model=None, |
| base_model_id=base_id, |
| model_config=exp_config.model, |
| ) |
| mkeys = set(model.state_dict().keys()) |
| vis_fc1 = [k for k in mkeys if "visual.blocks.0.mlp" in k] |
| vt = type(dict(model.named_modules()).get("model.visual.blocks.0.mlp.linear_fc1")) |
| lin = dict(model.named_modules()).get("model.visual.blocks.0.mlp.linear_fc1") |
| numel = lin.weight.numel() if lin is not None else None |
| print(f"\n=== config from {cfg_src} ===") |
| print(f" model.visual.blocks.0.mlp keys: {vis_fc1}") |
| print(f" linear_fc1 type={vt} numel={numel}") |
|
|
| with safe_open(str(CKPT), framework="pt") as f: |
| skeys = set(f.keys()) |
| print("\n=== checkpoint file ===") |
| print(f" total keys: {len(skeys)}") |
| print(f" visual.blocks.0.mlp keys: {sorted(k for k in skeys if 'visual.blocks.0.mlp' in k)}") |
| |
| only_model = sorted(mkeys - skeys)[:8] |
| only_file = sorted(skeys - mkeys)[:8] |
| print(f"\n in model not file (sample): {only_model}") |
| print(f" in file not model (sample): {only_file}") |
| return 0 |
|
|
|
|
| if __name__ == "__main__": |
| raise SystemExit(main()) |
|
|