ValueError: Incompatible keys detected:

用户在运行 FluxLoraLoaderMixin.lora_state_dict() 时触发此问题,该函数用于将 kohya/sd-scripts 格式的 FLUX LoRA 转换为 Diffusers 兼容格式。问题在 `diffusers==0.38.0` 和当前 `main` 分支上均可复现

ValueError: Incompatible keys detected:

ValueError: Incompatible keys detected:

快速结论:该报错发生在使用 Hugging Face Diffusers 加载包含 `final_layer` 权重的 kohya / sd-scripts FLUX LoRA 时。优先排查 LoRA 模型是否包含 `final_layer` 模块及其 `.alpha` 权重,以及 `diffusers` 版本是否为 <=0.38.0 或当前 `main` 分支。

问题场景

用户在运行 FluxLoraLoaderMixin.lora_state_dict() 时触发此问题,该函数用于将 kohya/sd-scripts 格式的 FLUX LoRA 转换为 Diffusers 兼容格式。问题在 `diffusers==0.38.0` 和当前 `main` 分支上均可复现。

报错原文

ValueError: Incompatible keys detected:
  lora_unet_final_layer_linear.alpha, lora_unet_final_layer_adaLN_modulation_1.alpha

(也可能包含其他 `lora_te_*` 开头的键,如 ComfyUI 导出的 LoRA)

原因分析

问题根因在 _convert_sd_scripts_to_ai_toolkit 函数中,可能存在三种具体错误:

  • Case A:KeyError — 当 LoRA 包含 `final_layer.linear` 但不包含 `final_layer.adaLN_modulation.1` 时,`assign_remaining_weights` 无条件地从 source dict 中 pop `adaLN_modulation_1` 键,导致 KeyError。
  • Case B:Incompatible keys(本问题)— 当 `final_layer` 权重包含 `.alpha` 键时,`assign_remaining_weights` 只处理 `lora_down`/`lora_up`,忽略 `.alpha` 键,剩余键触发 `remaining_keys` guard 抛出该 ValueError。
  • Case C:swap_scale_shift 错误应用 — `assign_remaining_weights` 将 swap 变换错误地应用于 `lora_A`(down 张量),但正确的运算是只应用于 `lora_B`(up 张量),导致 `norm_out` LoRA 权重静默损坏。

环境排查

  • diffusers 版本:0.38.0 或 GitHub main 分支(commit 7bf00006)
  • LoRA 来源:kohya/sd-scripts 导出的 FLUX LoRA,特别是包含 `final_layer` 模块的
  • 影响工具:ComfyUI / SwarmUI 导出的 FLUX LoRA 也会触发此问题
  • 复现脚本中使用的版本:transformers 5.9.0, peft 0.19.1, torch 2.11+cu128, Python 3.11

解决步骤

  1. 更新 Diffusers:该问题已在 PR #14001 中修复。请更新 diffusers 到修复版本(>=0.39.0 或 main 分支的最新 commit)。
  2. 临时手动处理(不推荐):如果无法更新,可尝试在调用 `lora_state_dict` 前手动删除 `final_layer` 相关的键:
    state_dict = {k: v for k, v in state_dict.items() if "final_layer" not in k}

    但注意这会丢失 `final_layer` 的 LoRA 调整。

  3. 验证:修复后,ComfyUI 导出的 LoRA 应能正确转换(issue 作者验证了手动删除 `final_layer` 后其余部分转换无问题)。

验证方法

运行原始复现脚本确认不再抛出异常。对于 ComfyUI 导出的 LoRA,调用 FluxLoraLoaderMixin.lora_state_dict(your_state_dict) 应成功返回转换后的 state dict。

参考来源

huggingface/diffusers #13998

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 9096

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注