Nova-1B / configuration_nova.py
Insightnova's picture
Upload Nova-1B (AutoTokenizer / AutoModel / AutoModelForCausalLM)
84a4b93 verified
Raw History Blame Contribute Delete
3.07 kB
"""Portable configuration for the trained Nova GDN2/GQA architecture."""
from transformers import PretrainedConfig
DEFAULT_OPTIONS = dict(d_model=1536, n_layers=26, n_heads=12, n_kv_heads=4,
head_dim=128, ffn_hidden=6144, rope_theta=500000, rope_full_precision=True,
layer_norm_eps=1e-5, layer_norm_bias=False, attn_qk_norm=True,
attention_bias=False, ffn_bias=False, lm_head_bias=False, tie_word_embeddings=True,
attention_backend="flash_2", enable_swa=True, swa_window=4096,
swa_full_attention_first_layer=False, swa_full_attention_last_layer=False,
gdn_expand_v=2.0, gdn_allow_neg_eigval=True, gdn_conv_size=4, gdn_conv_bias=False)
# Remote-code entry points written to config.json. The Hub resolves these with
# trust_remote_code=True; a local `pip install -e .` plus nova.register() maps the
# same classes without remote code.
AUTO_MAP = {
"AutoConfig": "configuration_nova.NovaConfig",
"AutoModel": "modeling_nova.NovaModel",
"AutoModelForCausalLM": "modeling_nova.NovaForCausalLM",
}
class NovaConfig(PretrainedConfig):
model_type = "nova_gdn2"
def __init__(self, architecture_preset="main", architecture_options=None, vocab_size=65536,
hidden_size=1536, num_hidden_layers=26, max_position_embeddings=8192,
fast_decode=True, compute_dtype="bfloat16", tokenizer_vocab_size=None,
generation_context_policy="remaining", inference_backend="torch", **kwargs):
kwargs.pop("use_cache", None)
kwargs.setdefault("bos_token_id", 1)
kwargs.setdefault("eos_token_id", 2)
kwargs.setdefault("pad_token_id", 0)
super().__init__(use_cache=False, **kwargs)
self.architecture_preset = architecture_preset
self.architecture_options = dict(DEFAULT_OPTIONS if architecture_options is None else architecture_options)
self.vocab_size = vocab_size
self.hidden_size = hidden_size
self.num_hidden_layers = num_hidden_layers
self.max_position_embeddings = max_position_embeddings
self.fast_decode = fast_decode
self.compute_dtype = compute_dtype
# Keep old exported configurations readable; new callers use torch/flash.
self.inference_backend = "flash" if inference_backend == "cuda" else inference_backend
self.tokenizer_vocab_size = tokenizer_vocab_size or vocab_size
self.generation_context_policy = generation_context_policy
if not 0 < self.tokenizer_vocab_size <= vocab_size:
raise ValueError("Tokenizer vocabulary must fit within the model vocabulary")
if compute_dtype not in ("float32", "float16", "bfloat16"):
raise ValueError("Unsupported compute_dtype")
if self.inference_backend not in ("torch", "flash", "cpu"):
raise ValueError("inference_backend must be torch, flash or cpu")
if generation_context_policy not in ("remaining", "error"):
raise ValueError("generation_context_policy must be remaining or error")
NovaConfig.register_for_auto_class("AutoConfig")