Skip to content

Commit d0a6a31

Browse files
o7siCISC
andauthored
model : add support for JinaBertModel with non-gated ffn (ggml-org#18475)
* WIP: Initial commit for fixing JinaBert original FF type support * convert: add jina-v2-de tokenizer variant for German_Semantic_V3 * convert: fix token collision in BERT phantom vocab conversion * convert: add feed_forward_type metadata * model: add feed_forward_type metadata for jina-bert-v2 * model: jina-bert-v2 support standard GELU FFN variant * model: remove ffn_type, detect FFN variant from tensor dimensions * Update src/llama-model.cpp Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com> * Update src/llama-model.cpp Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com> * Update src/models/bert.cpp Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com> * Update src/models/bert.cpp Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com> * revert collision fix to be handled in separate PR --------- Co-authored-by: Sigbjørn Skjæret <sigbjorn.skjaeret@scala.com>
1 parent 2b2afad commit d0a6a31

4 files changed

Lines changed: 17 additions & 3 deletions

File tree

convert_hf_to_gguf.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1062,6 +1062,9 @@ def get_vocab_base_pre(self, tokenizer) -> str:
10621062
if chkhsh == "66b8d4e19ab16c3bfd89bce5d785fb7e0155e8648708a1f42077cb9fe002c273":
10631063
# ref: https://huggingface.co/alvarobartt/grok-2-tokenizer
10641064
res = "grok-2"
1065+
if chkhsh == "b3d1dd861f1d4c5c0d2569ce36baf3f90fe8a102db3de50dd71ff860d91be3df":
1066+
# ref: https://huggingface.co/aari1995/German_Semantic_V3
1067+
res = "jina-v2-de"
10651068
if chkhsh == "0ef9807a4087ebef797fc749390439009c3b9eda9ad1a097abbe738f486c01e5":
10661069
# ref: https://huggingface.co/meta-llama/Meta-Llama-3-8B
10671070
res = "llama-bpe"

convert_hf_to_gguf_update.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -166,6 +166,8 @@ class TOKENIZER_TYPE(IntEnum):
166166
{"name": "kimi-k2", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/moonshotai/Kimi-K2-Base", "chkhsh": "81212dc7cdb7e0c1074ca62c5aeab0d43c9f52b8a737be7b12a777c953027890"},
167167
{"name": "qwen2", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/Qwen/Qwen3-Embedding-0.6B", "chkhsh": "d4540891389ea895b53b399da6ac824becc30f2fba0e9ddbb98f92e55ca0e97c"},
168168
{"name": "grok-2", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/alvarobartt/grok-2-tokenizer", "chkhsh": "66b8d4e19ab16c3bfd89bce5d785fb7e0155e8648708a1f42077cb9fe002c273"},
169+
# jina-v2-de variants
170+
{"name": "jina-v2-de", "tokt": TOKENIZER_TYPE.BPE, "repo": "https://huggingface.co/aari1995/German_Semantic_V3", "chkhsh": "b3d1dd861f1d4c5c0d2569ce36baf3f90fe8a102db3de50dd71ff860d91be3df"},
169171
]
170172

171173

src/llama-model.cpp

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3322,7 +3322,14 @@ bool llama_model::load_tensors(llama_model_loader & ml) {
33223322
layer.attn_norm_2_b = create_tensor(tn(LLM_TENSOR_ATTN_NORM_2, "bias", i), {n_embd}, TENSOR_NOT_REQUIRED);
33233323

33243324
layer.ffn_gate = create_tensor(tn(LLM_TENSOR_FFN_GATE, "weight", i), {n_embd, n_ff}, TENSOR_NOT_REQUIRED);
3325-
layer.ffn_up = create_tensor(tn(LLM_TENSOR_FFN_UP, "weight", i), {n_embd, layer.ffn_gate ? n_ff : n_ff * 2}, 0);
3325+
3326+
const auto tn_ffn_up_weight = tn(LLM_TENSOR_FFN_UP, "weight", i);
3327+
ggml_tensor * t_ffn_up = ml.get_tensor_meta(tn_ffn_up_weight.str().c_str());
3328+
const int64_t n_ffn_up = t_ffn_up ? t_ffn_up->ne[1] : n_ff;
3329+
3330+
GGML_ASSERT(n_ffn_up == n_ff || n_ffn_up == n_ff * 2);
3331+
layer.ffn_up = create_tensor(tn_ffn_up_weight, {n_embd, n_ffn_up}, 0);
3332+
layer.ffn_up_b = create_tensor(tn(LLM_TENSOR_FFN_UP, "bias", i), {n_ffn_up}, TENSOR_NOT_REQUIRED);
33263333

33273334
layer.ffn_down = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "weight", i), {n_ff, n_embd}, 0);
33283335
layer.ffn_down_b = create_tensor(tn(LLM_TENSOR_FFN_DOWN, "bias", i), {n_embd}, 0);

src/models/bert.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -142,11 +142,13 @@ llm_build_bert::llm_build_bert(const llama_model & model, const llm_graph_params
142142
LLM_FFN_GELU, LLM_FFN_SEQ, il);
143143
cb(cur, "ffn_out", il);
144144
} else if (model.arch == LLM_ARCH_JINA_BERT_V2) {
145+
const bool up_contains_gate = !model.layers[il].ffn_gate && model.layers[il].ffn_up->ne[1] != hparams.n_ff();
146+
auto type_op = up_contains_gate ? LLM_FFN_GEGLU : LLM_FFN_GELU;
145147
cur = build_ffn(cur,
146-
model.layers[il].ffn_up, NULL, NULL,
148+
model.layers[il].ffn_up, model.layers[il].ffn_up_b, NULL,
147149
model.layers[il].ffn_gate, NULL, NULL,
148150
model.layers[il].ffn_down, model.layers[il].ffn_down_b, NULL, NULL,
149-
model.layers[il].ffn_gate ? LLM_FFN_GELU : LLM_FFN_GEGLU, LLM_FFN_PAR, il);
151+
type_op, LLM_FFN_PAR, il);
150152
cb(cur, "ffn_out", il);
151153
} else {
152154
cur = build_ffn(cur,

0 commit comments

Comments
 (0)