Views
No views yet
Note: This is an experimental research artifact, not a production assistant. The model is undertrained for its size and is best used as a small teacher for narrow data-generation tasks, not as a free-form chatbot. See the honest evaluation below.
train_powergqa_4090.py)Qwen/Qwen2.5-0.5B (vocab 151,665)Per layer:
q,k,v,o = nn.Linear (GQA: 24 query heads, 6 KV heads)
RMSNorm on Q and K
RoPE on Q and K
scores = (Q @ K^T) / sqrt(d_h)
scores = einsum('bhij,hg->bgij', scores, pre_talk) # learnable head mix
causal mask + softmax (bf16)
attn = einsum('bhij,hg->bgij', attn, post_talk) # learnable head mix
y = attn @ V
y *= sigmoid(head_gate)
loc = depthwise Conv1d(k=5) branch
out = o(y) + sigmoid(local_gate) * loc
Block: residual( attn ) + residual( SwiGLU MLP )
Stack: 22 layers, dim=1536, heads=24, kv_heads=6pre_talk / post_talk learnable mixing matrices between attention heads
are what make this not a drop-in for AutoModelForCausalLM. You need the
included train_powergqa_4090.py to instantiate the model.| File | What it is |
|---|---|
PowerGQA-778M.pt | Model checkpoint (state_dict + cfg + step). 1.5 GB. |
train_powergqa_4090.py | Full training script — also the architecture definition. |
sample_chat_manual_12300.py | Reference dialogue sampling script. |
powergqa_identity_sft_static_1000.jsonl | Identity SFT pack (1k examples, not yet applied to this checkpoint). |
tokenizer.json, tokenizer_config.json, vocab.json, merges.txt, special_tokens_map.json | Qwen2.5 tokenizer files. |
1pip install torch transformers huggingface_hub
2huggingface-cli download Asilarknes/PowerGQA-778M --local-dir powergqa
3cd powergqa
4python sample_chat_manual_12300.py PowerGQA-778M.pt1import sys, torch
2sys.path.insert(0, "./") # for train_powergqa_4090.py
3import train_powergqa_4090 as tm
4from transformers import AutoTokenizer
5
6tok = AutoTokenizer.from_pretrained("./")
7tm.cfg.vocab_size = len(tok)
8model = tm.LM().cuda().to(torch.bfloat16)
9state = torch.load("PowerGQA-778M.pt", map_location="cuda", weights_only=False)
10model.load_state_dict(state["model"])
11model.eval()
12
13prompt = "User: Explain why sleep helps memory.\nAssistant: "
14ids = tok.encode(prompt, add_special_tokens=False)
15x = torch.tensor([ids], device="cuda", dtype=torch.long)
16with torch.no_grad(), torch.autocast("cuda", dtype=torch.bfloat16):
17 for _ in range(120):
18 logits = model(x[:, -1024:])[:, -1, :]
19 nxt = torch.argmax(logits, dim=-1, keepdim=True)
20 x = torch.cat([x, nxt], dim=1)
21 if nxt.item() == tok.eos_token_id:
22 break
23print(tok.decode(x[0][len(ids):].tolist(), skip_special_tokens=True))| Phase | What | Result |
|---|---|---|
| Phase17 (Arena/WildChat/UltraChat/OASST1) | dialogue recovery from earlier MCQ/drill overfit | repetition loops, abandoned |
| Phase18 (28% reasoning weight) | Bespoke + SmolTalk + OpenHermes + Tulu3 + OpenR1-Math | math improved (5 cups bug fixed once), but "The answer is X" formatting leaked everywhere |
| Phase18b (13% reasoning weight) | rebalanced mix, dialogue heavier | best numeric score 75% (vs 81.7% baseline); first correct ratio on the recipe bug |
| Phase19 (this ckpt) | LIMA mix: Capybara(45) + Pure-Dove(25) + NoRobots(20) + Bespoke-Stratos(10), lr=1e-5 | first time Q8/Q9 produced genuinely helpful structured answers |
2*10/4=5 on some samples, drifts on others1@misc{powergqa778m,
2 title = {PowerGQA-778M: a custom small LM with learnable head-mixing GQA},
3 author = {Asilarknes},
4 year = {2026},
5 howpublished = {\url{https://huggingface.co/Asilarknes/PowerGQA-778M}}
6}