Download configuration_cherry_alpha.py from Banaxi-Tech/cherry-alpha: direct link, hf CLI and curl.
- Browser
- Download file 4.43 kB
-
https://huggingface.co/Banaxi-Tech/cherry-alpha/resolve/main/configuration_cherry_alpha.py
- Command line
-
hf download hf://Banaxi-Tech/cherry-alpha/configuration_cherry_alpha.py
-
curl -L -o configuration_cherry_alpha.py https://huggingface.co/Banaxi-Tech/cherry-alpha/resolve/main/configuration_cherry_alpha.py
4.43 kB
| """Configuration for Cherry Alpha.""" | |
| from __future__ import annotations | |
| from transformers import PretrainedConfig | |
| class CherryAlphaConfig(PretrainedConfig): | |
| model_type = "cherry_alpha" | |
| def __init__( | |
| self, | |
| vocab_size: int = 2048, | |
| hidden_size: int = 256, | |
| intermediate_size: int = 1488, | |
| num_hidden_layers: int = 3, | |
| num_attention_heads: int = 8, | |
| num_key_value_heads: int = 1, | |
| head_dim: int = 32, | |
| ngram_buckets: int = 156250, | |
| loop_schedule: tuple[int, ...] | list[int] = (0, 1, 1, 2), | |
| refresh_kernel_size: int = 9, | |
| max_position_embeddings: int = 4096, | |
| rope_theta: float = 100000.0, | |
| rms_norm_eps: float = 1e-5, | |
| initializer_range: float = 0.02, | |
| gradient_checkpointing: bool = True, | |
| tie_word_embeddings: bool = True, | |
| use_cache: bool = False, | |
| bos_token_id: int = 1, | |
| eos_token_id: int = 2, | |
| pad_token_id: int = 0, | |
| unk_token_id: int = 3, | |
| **kwargs, | |
| ): | |
| if hidden_size != num_attention_heads * head_dim: | |
| raise ValueError("hidden_size must equal num_attention_heads * head_dim") | |
| if num_attention_heads % num_key_value_heads: | |
| raise ValueError("num_attention_heads must be divisible by num_key_value_heads") | |
| if num_hidden_layers != 3: | |
| raise ValueError("Cherry Alpha requires exactly three physical layers") | |
| loop_schedule = tuple(int(index) for index in loop_schedule) | |
| if loop_schedule != (0, 1, 1, 2): | |
| raise ValueError("Cherry Alpha requires L1 -> L2 -> L2 -> L3") | |
| if ngram_buckets <= 0: | |
| raise ValueError("ngram_buckets must be positive") | |
| if refresh_kernel_size <= 0 or refresh_kernel_size % 2 == 0: | |
| raise ValueError("refresh_kernel_size must be a positive odd integer") | |
| self.vocab_size = vocab_size | |
| self.hidden_size = hidden_size | |
| self.intermediate_size = intermediate_size | |
| self.num_hidden_layers = num_hidden_layers | |
| self.num_attention_heads = num_attention_heads | |
| self.num_key_value_heads = num_key_value_heads | |
| self.head_dim = head_dim | |
| self.ngram_buckets = ngram_buckets | |
| self.loop_schedule = list(loop_schedule) | |
| self.refresh_kernel_size = refresh_kernel_size | |
| self.max_position_embeddings = max_position_embeddings | |
| self.rope_theta = rope_theta | |
| self.rms_norm_eps = rms_norm_eps | |
| self.initializer_range = initializer_range | |
| self.gradient_checkpointing = gradient_checkpointing | |
| self.use_cache = False | |
| super().__init__( | |
| tie_word_embeddings=tie_word_embeddings, | |
| bos_token_id=bos_token_id, | |
| eos_token_id=eos_token_id, | |
| pad_token_id=pad_token_id, | |
| unk_token_id=unk_token_id, | |
| **kwargs, | |
| ) | |
| def parameter_counts(self) -> dict[str, int]: | |
| hidden = self.hidden_size | |
| query_width = self.num_attention_heads * self.head_dim | |
| kv_width = self.num_key_value_heads * self.head_dim | |
| token_embedding = self.vocab_size * hidden | |
| ngram_embedding = self.ngram_buckets * hidden + 1 | |
| attention = ( | |
| hidden * query_width | |
| + 2 * hidden * kv_width | |
| + query_width * hidden | |
| + 2 * self.head_dim | |
| ) | |
| refresh = ( | |
| 3 * hidden * hidden | |
| + hidden * self.refresh_kernel_size | |
| + 3 * hidden | |
| + 1 | |
| ) | |
| mlp = 3 * hidden * self.intermediate_size | |
| block_norms = 2 * hidden | |
| physical_layer = attention + refresh + mlp + block_norms | |
| neural_core = ( | |
| token_embedding | |
| + self.num_hidden_layers * physical_layer | |
| + hidden | |
| ) | |
| total = neural_core + ngram_embedding | |
| if not self.tie_word_embeddings: | |
| total += token_embedding | |
| neural_core += token_embedding | |
| return { | |
| "total": total, | |
| "neural_core": neural_core, | |
| "ngram": ngram_embedding, | |
| "token_embedding": token_embedding, | |
| "physical_layer": physical_layer, | |
| "physical_layers": self.num_hidden_layers, | |
| "effective_layer_passes": len(self.loop_schedule), | |
| } | |
| CherryAlphaConfig.register_for_auto_class("AutoConfig") | |
| __all__ = ["CherryAlphaConfig"] | |