archon-final-backup / _forward.py
jescy525's picture
Upload folder using huggingface_hub
612c58c verified
Raw
History Blame Contribute Delete
2.41 kB
"""Smoke test: load ArchonBrain + state_dict + forward pass V100."""
import sys, time, torch
sys.path.insert(0, 'source')
from config import ArchonBrainConfig
import model as model_module
print('=== model.py classes ===')
print([c for c in dir(model_module) if not c.startswith('_') and c[0].isupper()])
# Identify Brain class
ArchonBrain = None
for name in ['ArchonBrain', 'Brain', 'ArchonBrainModel', 'Model']:
if hasattr(model_module, name):
ArchonBrain = getattr(model_module, name)
print(f'Found: {name}')
break
cfg = ArchonBrainConfig()
print(f'\nConfig param_count estimate: {cfg.param_count_human}')
print('\n[1] Instantiating model...')
m = ArchonBrain(cfg)
n_params = sum(p.numel() for p in m.parameters())
print(f' Instantiated: {n_params/1e6:.1f}M params')
print('\n[2] Loading ckpt state_dict...')
ckpt = torch.load('ckpts/step_259567/archon.pt', map_location='cpu', weights_only=False)
missing, unexpected = m.load_state_dict(ckpt['model'], strict=False)
print(f' missing: {len(missing)} (first 5: {missing[:5]})')
print(f' unexpected: {len(unexpected)} (first 5: {unexpected[:5]})')
print('\n[3] Moving to GPU bf16...')
m = m.to(device='cuda', dtype=torch.bfloat16)
torch.cuda.synchronize()
free, total = torch.cuda.mem_get_info()
print(f' VRAM used: {(total-free)/1e9:.2f}GB / {total/1e9:.2f}GB')
print('\n[4] Forward pass batch=4 seq=4096...')
x = torch.randint(0, 32000, (4, 4096), device='cuda')
with torch.no_grad():
torch.cuda.synchronize()
t0 = time.time()
out = m(x) if not hasattr(m, 'forward_impl') else m.forward(x)
torch.cuda.synchronize()
dt = time.time() - t0
print(f' output type: {type(out).__name__}')
if isinstance(out, torch.Tensor):
print(f' output shape: {tuple(out.shape)} dtype: {out.dtype}')
elif isinstance(out, (tuple, list)):
for i, o in enumerate(out):
if isinstance(o, torch.Tensor):
print(f' out[{i}]: {tuple(o.shape)} {o.dtype}')
elif isinstance(out, dict):
for k, v in out.items():
if isinstance(v, torch.Tensor):
print(f' out[{k}]: {tuple(v.shape)} {v.dtype}')
print(f' forward time: {dt*1000:.1f}ms')
print('\n[5] Throughput estimate (forward only, no grad):')
tokens = 4 * 4096
print(f' {tokens/dt:.0f} tok/s forward bf16')
print(f' (training est ~3x slower = ~{tokens/(dt*3):.0f} tok/s with backward+optim)')
print('\nSMOKE_TEST_OK')