Views
No views yet
1diff --git a/convert_hf_to_gguf.py b/convert_hf_to_gguf.py
2index eb43520f9..50c4c167a 100755
3--- a/convert_hf_to_gguf.py
4+++ b/convert_hf_to_gguf.py
5@@ -972,11 +972,32 @@ class TextModel(ModelBase):
6 from transformers import AutoTokenizer
7 tokenizer = AutoTokenizer.from_pretrained(self.dir_model)
8 vocab_size = self.hparams.get("vocab_size", len(tokenizer.vocab))
9- assert max(tokenizer.vocab.values()) < vocab_size
10+ if tokenizer.vocab:
11+ max_vocab_id = max(tokenizer.vocab.values())
12+ if max_vocab_id >= vocab_size:
13+ added_vocab = tokenizer.get_added_vocab()
14+ added_oob = [tok for tok, tok_id in added_vocab.items() if tok_id >= vocab_size]
15+ if added_oob and "vocab_size" in self.hparams:
16+ logger.warning(
17+ "Tokenizer has added tokens with ids >= model vocab_size; "
18+ "these will be ignored. vocab_size=%d, max_token_id=%d, example_added_oob=%s",
19+ vocab_size,
20+ max_vocab_id,
21+ added_oob[:3],
22+ )
23+ else:
24+ if "vocab_size" in self.hparams:
25+ logger.warning(
26+ "Tokenizer vocab max id (%d) >= hparams vocab_size (%d); "
27+ "expanding vocab to fit tokenizer base vocab.",
28+ max_vocab_id,
29+ vocab_size,
30+ )
31+ vocab_size = max_vocab_id + 1
32
33 tokpre = self.get_vocab_base_pre(tokenizer)
34
35- reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in tokenizer.vocab.items()}
36+ reverse_vocab = {id_: encoded_tok for encoded_tok, id_ in tokenizer.vocab.items() if id_ < vocab_size}
37 added_vocab = tokenizer.get_added_vocab()
38
39 added_tokens_decoder = tokenizer.added_tokens_decoder
40@@ -10063,6 +10084,16 @@ class GptOssModel(TextModel):
41 return []
42
43 def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
44+ if name.startswith("language_model.model."):
45+ name = "model." + name.removeprefix("language_model.model.")
46+ elif name.startswith("language_model."):
47+ name = name.removeprefix("language_model.")
48+
49+ if name.startswith("multi_modal_projector.") or name.startswith("vision_tower.") \
50+ or name.startswith("multimodal_projector.") or name.startswith("vision_model.") \
51+ or name.startswith("mlp1."):
52+ return
53+
54 if "sinks" in name:
55 name += ".weight"
56