File size: 1,488 Bytes
e8ac551
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
from __future__ import annotations

from typing import Any

from transformers import PretrainedConfig


class HanseConfig(PretrainedConfig):
    model_type = "hanse"

    def __init__(
        self,
        vocab_size: int = 24_576,
        hidden_size: int = 640,
        num_layers: int = 14,
        layer_pattern: list[str] | tuple[str, ...] | None = None,
        num_query_heads: int = 10,
        num_kv_heads: int = 2,
        ffn_hidden_size: int = 1_792,
        max_seq_len: int = 2_048,
        rope_theta: float = 10_000.0,
        conv_kernel_size: int = 7,
        norm_eps: float = 1e-6,
        qk_norm: bool = True,
        tie_word_embeddings: bool = True,
        **kwargs: Any,
    ) -> None:
        super().__init__(tie_word_embeddings=tie_word_embeddings, **kwargs)
        self.vocab_size = vocab_size
        self.hidden_size = hidden_size
        self.num_layers = num_layers
        self.layer_pattern = tuple(
            layer_pattern
            or ("A", "A", "C", "A", "A", "A", "C", "A", "A", "A", "C", "A", "A", "A")
        )
        self.num_query_heads = num_query_heads
        self.num_kv_heads = num_kv_heads
        self.ffn_hidden_size = ffn_hidden_size
        self.max_seq_len = max_seq_len
        self.rope_theta = rope_theta
        self.conv_kernel_size = conv_kernel_size
        self.norm_eps = norm_eps
        self.qk_norm = qk_norm

    @property
    def head_dim(self) -> int:
        return self.hidden_size // self.num_query_heads