mirror of
https://github.com/leejet/stable-diffusion.cpp.git
synced 2026-09-25 12:40:41 +00:00
fix: map Qwen Image 2.1 LoRAs to fused MLP weights (#2057)
This commit is contained in:
parent
5e7b29131e
commit
510bccf330
@ -163,6 +163,27 @@ struct LoraModel : public GGMLRunner {
|
|||||||
|
|
||||||
lora_tensors = std::move(new_lora_tensors);
|
lora_tensors = std::move(new_lora_tensors);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
std::unordered_map<std::string, ggml_tensor*> new_lora_tensors;
|
||||||
|
for (const auto& [old_name, tensor] : lora_tensors) {
|
||||||
|
std::string new_name = old_name;
|
||||||
|
if (starts_with(old_name, "lora.model.diffusion_model.transformer_blocks.")) {
|
||||||
|
// Qwen Image 2.1 stores the gate before the projection in fused MLP weights.
|
||||||
|
for (const auto& suffix : {std::string(".img_mlp.gate_layer.weight."), std::string(".img_mlp.proj.weight.")}) {
|
||||||
|
size_t pos = old_name.find(suffix);
|
||||||
|
if (pos == std::string::npos) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
std::string fused_name = old_name.substr(5, pos - 5) + ".img_mlp.gate_up.weight";
|
||||||
|
if (model_tensor_names.find(fused_name) != model_tensor_names.end()) {
|
||||||
|
new_name = "lora." + fused_name + (suffix == ".img_mlp.proj.weight." ? ".1." : ".") + old_name.substr(pos + suffix.size());
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
new_lora_tensors[new_name] = tensor;
|
||||||
|
}
|
||||||
|
lora_tensors = std::move(new_lora_tensors);
|
||||||
}
|
}
|
||||||
|
|
||||||
ggml_tensor* get_lora_weight_diff(const std::string& model_tensor_name, ggml_context* ctx, ggml_backend_t backend) {
|
ggml_tensor* get_lora_weight_diff(const std::string& model_tensor_name, ggml_context* ctx, ggml_backend_t backend) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user