Skip to content

Commit 140ae92

Browse files
committed
Merge commit '65349f26f2299e06477ec8e85e46243046801358' into concedo_experimental
# Conflicts: # ggml/src/ggml-opencl/CMakeLists.txt # ggml/src/ggml-opencl/ggml-opencl.cpp # tests/test-backend-ops.cpp
2 parents 9fb0611 + 65349f2 commit 140ae92

File tree

15 files changed

+1589
-120
lines changed

15 files changed

+1589
-120
lines changed

convert_hf_to_gguf.py

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8251,8 +8251,7 @@ def set_gguf_parameters(self):
82518251
self.gguf_writer.add_rope_scaling_orig_ctx_len(rope_scaling.get("original_max_position_embeddings", 4096))
82528252

82538253

8254-
@ModelBase.register("Lfm2ForCausalLM")
8255-
@ModelBase.register("LFM2ForCausalLM")
8254+
@ModelBase.register("Lfm2ForCausalLM", "LFM2ForCausalLM")
82568255
class LFM2Model(TextModel):
82578256
model_arch = gguf.MODEL_ARCH.LFM2
82588257

@@ -8287,13 +8286,55 @@ def set_gguf_parameters(self):
82878286
self._add_feed_forward_length()
82888287

82898288
def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
8289+
is_vision_tensor = "vision_tower" in name or "multi_modal_projector" in name
8290+
if is_vision_tensor:
8291+
# skip vision tensors
8292+
return []
8293+
8294+
name = name.replace("language_model.", "")
8295+
82908296
# conv op requires 2d tensor
82918297
if 'conv.conv' in name:
82928298
data_torch = data_torch.squeeze(1)
82938299

82948300
return [(self.map_tensor_name(name), data_torch)]
82958301

82968302

8303+
@ModelBase.register("Lfm2VlForConditionalGeneration")
8304+
class LFM2VLModel(MmprojModel):
8305+
def __init__(self, *args, **kwargs):
8306+
super().__init__(*args, **kwargs)
8307+
assert self.hparams_vision is not None
8308+
# TODO(tarek): for dynamic resolution image_size is not specified, setting here for compatibility
8309+
self.hparams_vision["image_size"] = 256
8310+
8311+
def set_gguf_parameters(self):
8312+
super().set_gguf_parameters()
8313+
self.gguf_writer.add_clip_projector_type(gguf.VisionProjectorType.LFM2)
8314+
self.gguf_writer.add_vision_attention_layernorm_eps(self.find_vparam(["layer_norm_eps"]))
8315+
self.gguf_writer.add_vision_projector_scale_factor(self.global_config.get("downsample_factor", 2))
8316+
self.gguf_writer.add_vision_use_gelu(True)
8317+
# python notation, e.g. for vision_feature_layer == -1, we pick last layer -> vision_feature_layers_to_drop = 0
8318+
vision_feature_layers_to_drop = -(self.global_config.get("vision_feature_layer", -1) + 1)
8319+
self.gguf_writer.add_vision_block_count(self.find_vparam(self.n_block_keys) - vision_feature_layers_to_drop)
8320+
8321+
def modify_tensors(self, data_torch: Tensor, name: str, bid: int | None) -> Iterable[tuple[str, Tensor]]:
8322+
del bid # unused
8323+
is_vision_tensor = "vision_tower" in name or "multi_modal_projector" in name
8324+
8325+
if is_vision_tensor:
8326+
# remove "model." prefix
8327+
name = name.replace("model.vision_tower.", "vision_tower.")
8328+
name = name.replace("model.multi_modal_projector.", "multi_modal_projector.")
8329+
8330+
if "patch_embedding.weight" in name:
8331+
data_torch = data_torch.view(data_torch.shape[0], 16, 16, 3).permute(0, 3, 1, 2)
8332+
8333+
return [(self.map_tensor_name(name), data_torch)]
8334+
8335+
return [] # skip other tensors
8336+
8337+
82978338
@ModelBase.register("SmallThinkerForCausalLM")
82988339
class SmallThinkerModel(TextModel):
82998340
model_arch = gguf.MODEL_ARCH.SMALLTHINKER

0 commit comments

Comments
 (0)