From 045b1ace5533a5554c84d85f84fdb25aec957c3e Mon Sep 17 00:00:00 2001 From: dinhhuy Date: Thu, 5 Jun 2025 00:21:17 +0900 Subject: [PATCH 01/28] llama: attempt to add modern-bert --- convert_hf_to_gguf.py | 25 ++++ convert_hf_to_gguf_update.py | 1 + gguf-py/gguf/constants.py | 19 +++ gguf-py/gguf/gguf_writer.py | 3 + gguf-py/gguf/tensor_mapping.py | 14 ++ models/ggml-vocab-modern-bert.gguf | Bin 0 -> 1114684 bytes models/ggml-vocab-modern-bert.gguf.inp | 112 +++++++++++++++ models/ggml-vocab-modern-bert.gguf.out | 46 ++++++ src/llama-arch.cpp | 20 +++ src/llama-arch.h | 3 + src/llama-context.cpp | 1 + src/llama-graph.cpp | 113 ++++++++++++++- src/llama-graph.h | 40 +++++- src/llama-model-saver.cpp | 1 + src/llama-model.cpp | 192 ++++++++++++++++++++++++- src/llama-model.h | 3 + 16 files changed, 590 insertions(+), 3 deletions(-) create mode 100644 models/ggml-vocab-modern-bert.gguf create mode 100644 models/ggml-vocab-modern-bert.gguf.inp create mode 100644 models/ggml-vocab-modern-bert.gguf.out diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py index ec3b5697d8f6f..c6d80a9220cd3 100755 --- a/convert_hf_to_gguf.py +++ b/convert_hf_to_gguf.py @@ -809,6 +809,9 @@ def get_vocab_base_pre(self, tokenizer) -> str: if chkhsh == "1431a23e583c97432bc230bff598d103ddb5a1f89960c8f1d1051aaa944d0b35": # ref: https://huggingface.co/sapienzanlp/Minerva-7B-base-v1.0 res = "minerva-7b" + if chkhsh == "a0b64b4385f123663873756336c085744376d015ff328bb1d901598f63c44152": + # ref: https://huggingface.co/answerdotai/ModernBERT-base + res = "modern-bert" if res is None: logger.warning("\n") @@ -3932,6 +3935,28 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter return super().modify_tensors(data_torch, name, bid) +@ModelBase.register("ModernBert", "ModernBertForMaskedLM", "ModernBertForSequenceClassification") +class ModernBertModel(BertModel): + model_arch = gguf.MODEL_ARCH.MODERN_BERT + + def set_gguf_parameters(self): + self.gguf_writer.add_sliding_window(self.hparams["local_attention"]) + self.gguf_writer.add_rope_freq_base(self.hparams["global_rope_theta"]) + self.gguf_writer.add_rope_freq_base_swa(self.hparams["local_rope_theta"]) + self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.NONE) + self.gguf_writer.add_vocab_size(self.hparams["vocab_size"]) + + super().set_gguf_parameters() + + def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]: + # These layers act as MLM head, so we don't need them + if name.startswith("decoder."): + return [] + + if name.startswith("model."): + name = name[6:] + + return super().modify_tensors(data_torch, name, bid) @ModelBase.register("RobertaModel", "RobertaForSequenceClassification") class RobertaModel(BertModel): diff --git a/convert_hf_to_gguf_update.py b/convert_hf_to_gguf_update.py index 2f733f0973686..dc8a956b8f160 100755 --- a/convert_hf_to_gguf_update.py +++ b/convert_hf_to_gguf_update.py @@ -128,6 +128,7 @@ class TOKENIZER_TYPE(IntEnum): {"name": "llama4", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/meta-llama/Llama-4-Scout-17B-16E-Instruct", }, {"name": "pixtral", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/mistral-community/pixtral-12b", }, {"name": "seed-coder", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/ByteDance-Seed/Seed-Coder-8B-Base", }, + {"name": "modern-bert", "tokt": TOKENIZER_TYPE.WPM, "repo": "https://huggingface.co/answerdotai/ModernBERT-base", }, ] # some models are known to be broken upstream, so we will skip them as exceptions diff --git a/gguf-py/gguf/constants.py b/gguf-py/gguf/constants.py index 3ee2b2064e1b4..0e1730d728976 100644 --- a/gguf-py/gguf/constants.py +++ b/gguf-py/gguf/constants.py @@ -147,6 +147,7 @@ class Rope: DIMENSION_COUNT = "{arch}.rope.dimension_count" DIMENSION_SECTIONS = "{arch}.rope.dimension_sections" FREQ_BASE = "{arch}.rope.freq_base" + FREQ_BASE_SWA = "{arch}.rope.freq_base_swa" SCALING_TYPE = "{arch}.rope.scaling.type" SCALING_FACTOR = "{arch}.rope.scaling.factor" SCALING_ATTN_FACTOR = "{arch}.rope.scaling.attn_factor" @@ -289,6 +290,7 @@ class MODEL_ARCH(IntEnum): STARCODER = auto() REFACT = auto() BERT = auto() + MODERN_BERT = auto() NOMIC_BERT = auto() NOMIC_BERT_MOE = auto() JINA_BERT_V2 = auto() @@ -477,6 +479,7 @@ class MODEL_TENSOR(IntEnum): ENC_FFN_UP = auto() ENC_OUTPUT_NORM = auto() CLS = auto() # classifier + CLS_NORM = auto() # classifier normalization CLS_OUT = auto() # classifier output projection CONV1D = auto() CONVNEXT_DW = auto() @@ -569,6 +572,7 @@ class MODEL_TENSOR(IntEnum): MODEL_ARCH.STARCODER: "starcoder", MODEL_ARCH.REFACT: "refact", MODEL_ARCH.BERT: "bert", + MODEL_ARCH.MODERN_BERT: "modern-bert", MODEL_ARCH.NOMIC_BERT: "nomic-bert", MODEL_ARCH.NOMIC_BERT_MOE: "nomic-bert-moe", MODEL_ARCH.JINA_BERT_V2: "jina-bert-v2", @@ -757,6 +761,7 @@ class MODEL_TENSOR(IntEnum): MODEL_TENSOR.ENC_FFN_UP: "enc.blk.{bid}.ffn_up", MODEL_TENSOR.ENC_OUTPUT_NORM: "enc.output_norm", MODEL_TENSOR.CLS: "cls", + MODEL_TENSOR.CLS_NORM: "cls.norm", MODEL_TENSOR.CLS_OUT: "cls.output", MODEL_TENSOR.CONV1D: "conv1d", MODEL_TENSOR.CONVNEXT_DW: "convnext.{bid}.dw", @@ -1047,6 +1052,20 @@ class MODEL_TENSOR(IntEnum): MODEL_TENSOR.CLS, MODEL_TENSOR.CLS_OUT, ], + MODEL_ARCH.MODERN_BERT: [ + MODEL_TENSOR.TOKEN_EMBD, + MODEL_TENSOR.TOKEN_EMBD_NORM, + MODEL_TENSOR.ATTN_NORM, + MODEL_TENSOR.ATTN_QKV, + MODEL_TENSOR.ATTN_OUT, + MODEL_TENSOR.ATTN_OUT_NORM, + MODEL_TENSOR.FFN_DOWN, + MODEL_TENSOR.FFN_UP, + MODEL_TENSOR.ENC_OUTPUT_NORM, + MODEL_TENSOR.CLS, + MODEL_TENSOR.CLS_NORM, + MODEL_TENSOR.CLS_OUT, + ], MODEL_ARCH.NOMIC_BERT: [ MODEL_TENSOR.TOKEN_EMBD, MODEL_TENSOR.TOKEN_EMBD_NORM, diff --git a/gguf-py/gguf/gguf_writer.py b/gguf-py/gguf/gguf_writer.py index de6e45ae827b9..b8aadc4e216a4 100644 --- a/gguf-py/gguf/gguf_writer.py +++ b/gguf-py/gguf/gguf_writer.py @@ -812,6 +812,9 @@ def add_rope_dimension_sections(self, dims: Sequence[int]) -> None: def add_rope_freq_base(self, value: float) -> None: self.add_float32(Keys.Rope.FREQ_BASE.format(arch=self.arch), value) + + def add_rope_freq_base_swa(self, value: float) -> None: + self.add_float32(Keys.Rope.FREQ_BASE_SWA.format(arch=self.arch), value) def add_rope_scaling_type(self, value: RopeScalingType) -> None: self.add_string(Keys.Rope.SCALING_TYPE.format(arch=self.arch), value.value) diff --git a/gguf-py/gguf/tensor_mapping.py b/gguf-py/gguf/tensor_mapping.py index 93dd1d8028f3d..dbdcb69c77d29 100644 --- a/gguf-py/gguf/tensor_mapping.py +++ b/gguf-py/gguf/tensor_mapping.py @@ -16,6 +16,7 @@ class TensorNameMap: "model.embed_tokens", # llama-hf nemotron olmoe olmo2 rwkv6qwen2 glm4-0414 "tok_embeddings", # llama-pth "embeddings.word_embeddings", # bert nomic-bert + "embeddings.tok_embeddings", # modern-bert "language_model.embedding.word_embeddings", # persimmon "wte", # gpt2 "transformer.embd.wte", # phi2 @@ -42,6 +43,7 @@ class TensorNameMap: MODEL_TENSOR.TOKEN_EMBD_NORM: ( "word_embeddings_layernorm", # bloom "embeddings.LayerNorm", # bert + "embeddings.norm", # modern-bert "emb_ln", # nomic-bert "transformer.norm", # openelm "rwkv.blocks.0.pre_ln", # rwkv @@ -134,6 +136,7 @@ class TensorNameMap: "rwkv.blocks.{bid}.ln1", # rwkv6 "model.layers.{bid}.ln1", # rwkv7 "model.layers.{bid}.input_layernorm", # llama4 + "layers.{bid}.attn_norm", # modern-bert ), # Attention norm 2 @@ -161,6 +164,7 @@ class TensorNameMap: "model.layers.{bid}.self_attn.qkv_proj", # phi3 "encoder.layers.{bid}.self_attention.query_key_value", # chatglm "transformer.layers.{bid}.attn.qkv_proj", # openelm + "layers.{bid}.attn.Wqkv", # modern-bert ), # Attention query @@ -236,6 +240,7 @@ class TensorNameMap: "transformer.layers.{bid}.attn.out_proj", # openelm "transformer.h.{bid}.attn.attention.out_proj", # exaone "model.layers.{bid}.self_attn.o_proj", # llama4 + "layers.{bid}.attn.Wo", # modern-bert ), # Attention output norm @@ -245,6 +250,7 @@ class TensorNameMap: "encoder.layers.{bid}.norm1", # nomic-bert "transformer.decoder_layer.{bid}.rms_norm_1", # Grok "transformer.blocks.{bid}.norm_attn_norm.norm_2", # dbrx + "layers.{bid}.mlp_norm" # modern-bert ), MODEL_TENSOR.ATTN_POST_NORM: ( @@ -338,6 +344,7 @@ class TensorNameMap: "encoder.layers.{bid}.mlp.dense_h_to_4h", # chatglm "transformer.h.{bid}.mlp.c_fc_1", # exaone "model.layers.{bid}.feed_forward.up_proj", # llama4 + "layers.{bid}.mlp.Wi" # modern-bert ), MODEL_TENSOR.FFN_UP_EXP: ( @@ -420,6 +427,7 @@ class TensorNameMap: "encoder.layers.{bid}.mlp.dense_4h_to_h", # chatglm "model.layers.h.{bid}.mlp.c_proj", # exaone "model.layers.{bid}.feed_forward.down_proj", # llama4 + "layers.{bid}.mlp.Wo" # modern-bert ), MODEL_TENSOR.FFN_DOWN_EXP: ( @@ -830,12 +838,18 @@ class TensorNameMap: # TODO: these do not belong to block_mappings_cfg - move them to mappings_cfg MODEL_TENSOR.ENC_OUTPUT_NORM: ( "encoder.final_layer_norm", # t5 + "final_norm", # modern-bert ), MODEL_TENSOR.CLS: ( "classifier", # jina "classifier.dense", # roberta "pre_classifier", # distillbert + "head.dense", # modern-bert + ), + + MODEL_TENSOR.CLS_NORM: ( + "head.norm", # modern-bert ), MODEL_TENSOR.CLS_OUT: ( diff --git a/models/ggml-vocab-modern-bert.gguf b/models/ggml-vocab-modern-bert.gguf new file mode 100644 index 0000000000000000000000000000000000000000..0b612dfa861b98da7cb128ac8368fe601e4d61a6 GIT binary patch literal 1114684 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