gpt2 / check_model.py
triton329's picture
Upload folder using huggingface_hub
c21e887 verified
Raw
History Blame Contribute Delete
2.94 kB
import torch
from src.model.config import GPT124M_CONFIG, DEFAULT_DATA_URL, DEFAULT_DATASET_PATH
from src.data.utils import download_text, load_text
from src.data.dataset import create_gpt_dataloader
from src.model.gpt import GPTModel
from src.data.tokenizer import TikTokenizer
from src.engine.generate import generate_greedy
def main():
torch.manual_seed(22)
cfg = GPT124M_CONFIG
print("Downloading/loading text...")
download_text(DEFAULT_DATA_URL, DEFAULT_DATASET_PATH)
raw_text = load_text(DEFAULT_DATASET_PATH)
print(f"Loaded text: {len(raw_text)} characters")
tokenizer = TikTokenizer("gpt2")
num_workers = 0 # Override for Windows compatibility
dataloader = create_gpt_dataloader(
raw_text,
tokenizer=tokenizer,
max_len=cfg.context_window_size,
stride=cfg.stride,
batch_size=cfg.batch_size,
num_workers=num_workers
)
print(f"Dataset size: {len(dataloader.dataset)} samples")
# Show one train/target sample
sample_inputs, sample_targets = next(iter(dataloader))
print(f"\n=== Sample Batch (first sequence) ===")
print(f"Input text: {tokenizer.decode(sample_inputs[0].tolist())[:100]}...")
print(f"Target text: {tokenizer.decode(sample_targets[0].tolist())[:100]}...")
model = GPTModel(cfg)
total_params = sum(p.numel() for p in model.parameters())
print(f"\nGPTModel — {total_params:,} params")
# Group summary
print("\n=== Parameter Budget by Component ===")
groups = {
"token_embedding": 0,
"position_embedding": 0,
"attention (W_q/k/v)": 0,
"feed_forward": 0,
"layer_norm": 0,
"output_head": 0,
}
for name, param in model.named_parameters():
n = param.numel()
if "token_embedding" in name:
groups["token_embedding"] += n
elif "position_embedding" in name:
groups["position_embedding"] += n
elif "W_query" in name or "W_key" in name or "W_value" in name:
groups["attention (W_q/k/v)"] += n
elif "ff" in name:
groups["feed_forward"] += n
elif "norm" in name:
groups["layer_norm"] += n
elif "output_head" in name:
groups["output_head"] += n
for group, count in groups.items():
pct = count / total_params * 100
print(f" {group:<25} {count:>10,} ({pct:.1f}%)")
# --- Forward pass ---
print()
inputs, targets = next(iter(dataloader))
print(f"Batch shape: inputs={inputs.shape}, targets={targets.shape}")
logits = model(inputs)
print(f"Forward pass — input: {list(inputs.shape)} → logits: {list(logits.shape)}")
# --- Generation ---
prompt = "Gisburn had a curious smile in his eyes"
result = generate_greedy(model, tokenizer, torch.device("cpu"), prompt, num_tokens=20)
print("Generated:", result)
if __name__ == '__main__':
main()