Skip to content

Commit 2fe8f06

Browse files
RunningLeonmglambda
authored andcommitted
llama : add internlm3 support (ggml-org#11233)
* support internlm3 * fix lint
1 parent 834a972 commit 2fe8f06

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

convert_hf_to_gguf.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2882,6 +2882,66 @@ def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iter
28822882
return [(self.map_tensor_name(name), data_torch)]
28832883

28842884

2885+
@Model.register("InternLM3ForCausalLM")
2886+
class InternLM3Model(Model):
2887+
model_arch = gguf.MODEL_ARCH.LLAMA
2888+
2889+
def set_vocab(self):
2890+
tokens, scores, toktypes = self._create_vocab_sentencepiece()
2891+
2892+
self.gguf_writer.add_tokenizer_model("llama")
2893+
self.gguf_writer.add_tokenizer_pre("default")
2894+
self.gguf_writer.add_token_list(tokens)
2895+
self.gguf_writer.add_token_scores(scores)
2896+
self.gguf_writer.add_token_types(toktypes)
2897+
2898+
special_vocab = gguf.SpecialVocab(self.dir_model, n_vocab=len(tokens))
2899+
2900+
tokenizer_config_file = self.dir_model / 'tokenizer_config.json'
2901+
if tokenizer_config_file.is_file():
2902+
with open(tokenizer_config_file, "r", encoding="utf-8") as f:
2903+
tokenizer_config_json = json.load(f)
2904+
if "add_prefix_space" in tokenizer_config_json:
2905+
self.gguf_writer.add_add_space_prefix(tokenizer_config_json["add_prefix_space"])
2906+
2907+
if "added_tokens_decoder" in tokenizer_config_json:
2908+
for token_id, token_data in tokenizer_config_json["added_tokens_decoder"].items():
2909+
if token_data.get("special"):
2910+
token_id = int(token_id)
2911+
token = token_data["content"]
2912+
special_vocab._set_special_token(token, token_id)
2913+
# update eos token
2914+
if token == '<|im_end|>' and "eos" in special_vocab.special_token_ids:
2915+
special_vocab.special_token_ids["eos"] = token_id
2916+
2917+
special_vocab.add_to_gguf(self.gguf_writer)
2918+
2919+
def set_gguf_parameters(self):
2920+
super().set_gguf_parameters()
2921+
hparams = self.hparams
2922+
self.gguf_writer.add_vocab_size(hparams["vocab_size"])
2923+
2924+
if "head_dim" in hparams:
2925+
rope_dim = hparams["head_dim"]
2926+
else:
2927+
rope_dim = hparams["hidden_size"] // hparams["num_attention_heads"]
2928+
self.gguf_writer.add_rope_dimension_count(rope_dim)
2929+
2930+
if self.hparams.get("rope_scaling") is not None and "factor" in self.hparams["rope_scaling"]:
2931+
if self.hparams["rope_scaling"].get("type") == "linear" or self.hparams["rope_scaling"].get("rope_type") == "linear":
2932+
self.gguf_writer.add_rope_scaling_type(gguf.RopeScalingType.LINEAR)
2933+
self.gguf_writer.add_rope_scaling_factor(self.hparams["rope_scaling"]["factor"])
2934+
2935+
def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
2936+
n_head = self.hparams["num_attention_heads"]
2937+
n_kv_head = self.hparams.get("num_key_value_heads")
2938+
if name.endswith(("q_proj.weight", "q_proj.bias")):
2939+
data_torch = LlamaModel.permute(data_torch, n_head, n_head)
2940+
if name.endswith(("k_proj.weight", "k_proj.bias")):
2941+
data_torch = LlamaModel.permute(data_torch, n_head, n_kv_head)
2942+
return [(self.map_tensor_name(name), data_torch)]
2943+
2944+
28852945
@Model.register("BertModel", "BertForMaskedLM", "CamembertModel")
28862946
class BertModel(Model):
28872947
model_arch = gguf.MODEL_ARCH.BERT

0 commit comments

Comments
 (0)