一个包含 k 层的循环模型,若循环运行 L 次,其推理效果可媲美拥有 kL 层的传统非循环模型,但参数量却仅相当于 k 层网络。在 Mythos 这类大规模模型的实际部署中,这一优势极具价值: 作者借鉴了这个图,(Parcae, Prairie et al., 2026))
模型占用的显存不会随推理深度增加而膨胀
推理阶段的计算开销随循环次数增长,而非模型规模
这意味着在不增加参数成本的前提下,就能实现更深层次的推理
5. 安装使用
安装如下:
pip install open-mythos
使用如下:
import torch from open_mythos.main import OpenMythos, MythosConfig attn_type = "mla"# or "gqa" base = { "vocab_size": 1000, "dim": 256, "n_heads": 8, "max_seq_len": 128, "max_loop_iters": 4, "prelude_layers": 1, "coda_layers": 1, "n_experts": 8, "n_shared_experts": 1, "n_experts_per_tok": 2, "expert_dim": 64, "lora_rank": 8, "attn_type": attn_type, } if attn_type == "gqa": cfg = MythosConfig(base, n_kv_heads=2) else: cfg = MythosConfig( base, n_kv_heads=8, kv_lora_rank=32, q_lora_rank=64, qk_rope_head_dim=16, qk_nope_head_dim=16, v_head_dim=16, ) model = OpenMythos(cfg) total = sum(p.numel() for p in model.parameters()) print(f"\n[{attn_type.upper()}] Parameters: {total:,}") ids = torch.randint(0, cfg.vocab_size, (2, 16)) logits = model(ids, n_loops=4) print(f"[{attn_type.upper()}] Logits shape: {logits.shape}") out = model.generate(ids, max_new_tokens=8, n_loops=8) print(f"[{attn_type.upper()}] Generated shape: {out.shape}") A = model.recurrent.injection.get_A() print( f"[{attn_type.upper()}] Spectral radius ρ(A) max: {A.max().item():.4f} (must be < 1)" )
我们看下不同参数的模型大小
from open_mythos import ( mythos_1b, mythos_3b, mythos_10b, mythos_50b, mythos_100b, mythos_500b, mythos_1t, OpenMythos, ) cfg = mythos_7b() # returns a MythosConfig model = OpenMythos(cfg) total = sum(p.numel() for p in model.parameters()) print(f"Parameters: {total:,}")