Skip to content

Commit 859796e

Browse files
committed
support interns1
1 parent 7cf5c4c commit 859796e

File tree

1 file changed

+77
-5
lines changed

1 file changed

+77
-5
lines changed

convert_hf_to_gguf.py

Lines changed: 77 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -420,9 +420,6 @@ def get_model_part_names(dir_model: Path, prefix: str, suffix: str) -> list[str]
420420
for filename in os.listdir(dir_model):
421421
if filename.startswith(prefix) and filename.endswith(suffix):
422422
part_names.append(filename)
423-
# TODO remove later
424-
elif filename.endswith(suffix):
425-
part_names.append(filename)
426423

427424
part_names.sort()
428425

@@ -3006,7 +3003,12 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
30063003
@ModelBase.register("InternVisionModel")
30073004
class InternVisionModel(MmprojModel):
30083005
def set_gguf_parameters(self):
3006+
if isinstance(self.hparams_vision['image_size'], list):
3007+
self.hparams_vision['image_size'] = self.hparams_vision['image_size'][0]
3008+
if isinstance(self.hparams_vision['patch_size'], list):
3009+
self.hparams_vision['patch_size'] = self.hparams_vision['patch_size'][0]
30093010
super().set_gguf_parameters()
3011+
30103012
hparams = self.hparams
30113013
self.gguf_writer.add_clip_projector_type(gguf.VisionProjectorType.INTERNVL)
30123014
self.gguf_writer.add_vision_attention_layernorm_eps(hparams["layer_norm_eps"])
@@ -3030,8 +3032,43 @@ def tensor_force_quant(self, name, new_name, bid, n_dims):
30303032
return gguf.GGMLQuantizationType.F32
30313033
return False
30323034

3035+
def _mapping_name_interns1(self, name):
3036+
names_map = {
3037+
"model.multi_modal_projector.layer_norm.bias": "mlp1.0.bias",
3038+
"model.multi_modal_projector.layer_norm.weight": "mlp1.0.weight",
3039+
"model.multi_modal_projector.linear_1.bias": "mlp1.1.bias",
3040+
"model.multi_modal_projector.linear_1.weight": "mlp1.1.weight",
3041+
"model.multi_modal_projector.linear_2.bias": "mlp1.3.bias",
3042+
"model.multi_modal_projector.linear_2.weight": "mlp1.3.weight",
3043+
"model.vision_tower.embeddings.cls_token": "vision_model.embeddings.class_embedding",
3044+
"model.vision_tower.embeddings.patch_embeddings.projection.bias": "vision_model.embeddings.patch_embedding.bias",
3045+
"model.vision_tower.embeddings.patch_embeddings.projection.weight": "vision_model.embeddings.patch_embedding.weight",
3046+
"model.vision_tower.embeddings.position_embeddings": "vision_model.embeddings.position_embedding",
3047+
}
3048+
if name in names_map:
3049+
name = names_map[name]
3050+
elif name.startswith("model.language_model."):
3051+
name = "language_model.model." + name[len("model.language_model.") :]
3052+
elif name.startswith("model.vision_tower."):
3053+
name = "vision_model." + name[len("model.vision_tower.") :]
3054+
3055+
if name.startswith("vision_model.encoder.layer"):
3056+
name = name.replace(r".layer.", r".layers.")
3057+
name = name.replace(r".attention.", r".attn.")
3058+
name = name.replace(r".attn.q_proj", r".self_attn.q_proj")
3059+
name = name.replace(r".attn.k_proj", r".self_attn.k_proj")
3060+
name = name.replace(r".attn.v_proj", r".self_attn.v_proj")
3061+
name = name.replace(r".projection_layer.", r".proj.")
3062+
name = name.replace(r".lambda_1", r".ls1")
3063+
name = name.replace(r".lambda_2", r".ls2")
3064+
name = name.replace(r".layernorm_before.", r".norm1.")
3065+
name = name.replace(r".layernorm_after.", r".norm2.")
3066+
return name
3067+
30333068
def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
30343069
del bid # unused
3070+
name = self._mapping_name_interns1(name)
3071+
# support interns1
30353072
if name.startswith("vision_model") or name.startswith("mlp"):
30363073
# process visual tensors
30373074
# correct name
@@ -3123,8 +3160,8 @@ def set_gguf_parameters(self):
31233160

31243161
def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
31253162
# process the experts separately
3126-
name = name.replace("language_model.", "") # InternVL
3127-
if name.startswith("mlp") or name.startswith("vision_model"):
3163+
name = name.replace(r"language_model.", r"") # InternVL
3164+
if name.startswith("mlp") or name.startswith("vision_model") or name.startswith("model.vision_tower") or name.startswith("model.multi_modal_projector"):
31283165
# skip visual tensors
31293166
return []
31303167
if name.find("experts") != -1:
@@ -3180,6 +3217,41 @@ class Qwen3Model(Qwen2Model):
31803217
class Qwen3MoeModel(Qwen2MoeModel):
31813218
model_arch = gguf.MODEL_ARCH.QWEN3MOE
31823219

3220+
def set_vocab(self):
3221+
# deal with interns1
3222+
if 'interns1' in f'{self.dir_model}'.lower():
3223+
self._set_vocab_interns1()
3224+
return
3225+
3226+
try:
3227+
self._set_vocab_sentencepiece()
3228+
except FileNotFoundError:
3229+
self._set_vocab_gpt2()
3230+
3231+
def _set_vocab_interns1(self):
3232+
tokens, toktypes, tokpre = self.get_vocab_base()
3233+
self.gguf_writer.add_tokenizer_model("gpt2")
3234+
self.gguf_writer.add_tokenizer_pre(tokpre)
3235+
self.gguf_writer.add_token_list(tokens)
3236+
self.gguf_writer.add_token_types(toktypes)
3237+
3238+
special_vocab = gguf.SpecialVocab(self.dir_model, load_merges=True)
3239+
special_tokens_map_file = self.dir_model / 'special_tokens_map.json'
3240+
additional_special_tokens = []
3241+
if special_tokens_map_file.is_file():
3242+
with open(special_tokens_map_file, encoding = 'utf-8') as f:
3243+
additional_special_tokens = json.load(f).get('additional_special_tokens', [])
3244+
tokenizer_cfg_file = self.dir_model / 'special_tokens_map.json'
3245+
if tokenizer_cfg_file.is_file():
3246+
with open(tokenizer_cfg_file, encoding = 'utf-8') as f:
3247+
added_tokens_decoder = json.load(f).get('added_tokens_decoder', {})
3248+
token2ids_map = {data['content'] : int(token) for token, data in added_tokens_decoder.items() if data['special']}
3249+
for token in additional_special_tokens:
3250+
if token in token2ids_map:
3251+
special_vocab._set_special_token(token, token2ids_map[token])
3252+
special_vocab._set_special_token('eos', 151645)
3253+
special_vocab._set_special_token("bos", 151643)
3254+
special_vocab.add_to_gguf(self.gguf_writer)
31833255

31843256
@ModelBase.register("GPT2LMHeadModel")
31853257
class GPT2Model(TextModel):

0 commit comments

Comments
 (0)