babyloop-loop-text / configuration_babyloop.py
daichi812's picture
final model (main)
6a0cf5a verified
Raw
History Blame Contribute Delete
2.75 kB
"""BabyloopConfig — HF ``PretrainedConfig`` 互換のモデル設定。
このファイルは ``save_pretrained`` 時に checkpoint ディレクトリへ複製され、
公式 evaluation-pipeline 側(別プロセス)から ``trust_remote_code=True`` で
import される。そのため **transformers と標準ライブラリ以外に依存しない**
(``babyloop`` パッケージ内部を import しない)こと。
フィールドと configs/model/*.yaml の対応は docs/architecture.md §6 を参照。
"""
from __future__ import annotations
from transformers import PretrainedConfig
class BabyloopConfig(PretrainedConfig):
"""ループドTransformer(K=1で標準に縮退)の設定。
軸A(標準 vs 再帰)は ``k`` のみで切り替える単一実装。視覚(②④)の口も
持つが、テキストのみ(①③)では ``fusion=None`` で無効。
"""
model_type = "babyloop"
def __init__(
self,
d_model: int = 768,
n_layers: int = 12,
n_heads: int = 12,
ffn_hidden: int = 2048,
n_prelude: int = 0,
n_core: int = 12,
n_coda: int = 0,
k: int = 1,
inject_input: bool = False,
vocab_size: int = 16000,
max_seq_len: int = 512,
rope_base: float = 10000.0,
rms_eps: float = 1e-5,
tie_embeddings: bool = True,
bias: bool = False,
dropout: float = 0.0,
fusion: str | None = None,
pad_token_id: int | None = None,
bos_token_id: int | None = None,
eos_token_id: int | None = None,
**kwargs,
):
self.d_model = d_model
self.n_layers = n_layers
self.n_heads = n_heads
self.ffn_hidden = ffn_hidden
self.n_prelude = n_prelude
self.n_core = n_core
self.n_coda = n_coda
self.k = k
self.inject_input = inject_input
self.vocab_size = vocab_size
self.max_seq_len = max_seq_len
self.rope_base = rope_base
self.rms_eps = rms_eps
self.tie_embeddings = tie_embeddings
self.bias = bias
self.dropout = dropout
self.fusion = fusion
# HF 汎用ユーティリティが参照するエイリアス。
self.hidden_size = d_model
self.num_attention_heads = n_heads
self.num_hidden_layers = n_layers
self.max_position_embeddings = max_seq_len
super().__init__(
pad_token_id=pad_token_id,
bos_token_id=bos_token_id,
eos_token_id=eos_token_id,
tie_word_embeddings=tie_embeddings,
**kwargs,
)
@property
def head_dim(self) -> int:
return self.d_model // self.n_heads