| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
|
|
| import sys |
| import torch |
| from pathlib import Path |
|
|
| def main(): |
| if len(sys.argv) < 2: |
| print("Usage: python diagnostics_print_jit_constants.py <jit_model_path>") |
| return |
| path = Path(sys.argv[1]) |
| if not path.exists(): |
| print("File not found:", path) |
| return |
|
|
| print("Loading JIT model (map_location='cpu') for safe inspection...") |
| m = torch.jit.load(str(path), map_location='cpu') |
| print("Loaded. Collecting info...\n") |
|
|
| print("Named parameters (name, device, shape):") |
| try: |
| for n, p in m.named_parameters(): |
| print(" PARAM:", n, p.device, tuple(p.shape)) |
| except Exception as e: |
| print(" (named_parameters() not available / raised):", e) |
|
|
| print("\nNamed buffers (name, device, shape):") |
| try: |
| for n, b in m.named_buffers(): |
| print(" BUFFER:", n, b.device, tuple(b.shape)) |
| except Exception as e: |
| print(" (named_buffers() not available / raised):", e) |
|
|
| print("\nstate_dict keys and devices:") |
| try: |
| sd = m.state_dict() |
| devices = set() |
| for k, v in sd.items(): |
| try: |
| devices.add(v.device) |
| print(" ", k, v.device, tuple(v.shape)) |
| except Exception: |
| print(" ", k, " - (non-tensor?)") |
| print("Devices in state_dict():", devices) |
| except Exception as e: |
| print(" state_dict() failed:", e) |
|
|
| print("\nAttempt to show TorchScript graph (short version). Look for prim::Constant Tensor entries:") |
| try: |
| g = m.graph |
| print(g) |
| except Exception as e: |
| print(" Could not print graph directly:", e) |
| try: |
| print("m.code():") |
| print(m.code) |
| except Exception as e2: |
| print(" Also could not print m.code():", e2) |
|
|
| print("\nIf you find prim::Constant values with Tensor on CPU, those likely cause device mismatch.") |
| print("Recommendation: re-create JIT on target device (see retrace_to_cuda.py).") |
|
|
| if __name__ == "__main__": |
| main() |