ComfyUI-K采样器报错

在 ComfyUI 中使用 K 采样器时遇到错误
mat1 and mat2 shapes cannot be multiplied (77x2048 and 768x320)
是一个典型的 张量维度不匹配 问题,
根本原因是 文本嵌入(Prompt Embedding)的维度与 Stable Diffusion 模型的权重矩阵不兼容

以下是详细分析和解决方案:🧐🧐🧐

🧐错误原因分析

矩阵乘法规则
矩阵乘法要求第一个矩阵的列数(即 mat1.shape[1])等于第二个矩阵的行数(即 mat2.shape[0]):
- mat1.shape = (77, 2048) → 有 2048 列
- mat2.shape = (768, 320) → 有 768 行
由于 2048 ≠ 768,无法进行乘法运算

问题的核心
- mat1 是 文本提示(Prompt)的嵌入向量(例如来自 CLIP 文本编码器)。
- mat2 是 Stable Diffusion 模型中的某个权重矩阵(通常出现在 UNet 的交叉注意力层)。
- 模型期望文本嵌入的维度为 768,但你提供的嵌入维度却是 2048,导致维度冲突

😐为什么会出现维度不匹配?

模型与 CLIP 版本不兼容
- Stable Diffusion v1.x 使用 OpenAI CLIP ViT-L/14,输出文本嵌入维度为 768
- Stable Diffusion v2.x 使用 OpenCLIP ViT-H/14,输出文本嵌入维度为 1024 或 2048
- 如果你尝试将 v2 的文本嵌入(2048 维)输入到 v1 模型(需要 768 维)中,就会触发此错误

ComfyUI 工作流配置错误
- 在工作流中混用了不同版本的组件:
- 加载了 v1 的模型(例如 sd-v1-5.ckpt),但使用了 v2 的 CLIP 文本编码器(如 open_clip)。
- 或加载了 v2 的模型(如 768-v-ema.ckpt),但未使用兼容的文本编码器。

😀解决方案

✅ 方法 1:统一模型与文本编码器版本

模型 所需文本编码器 嵌入维度
Stable Diffusion v1/v1.5 CLIPTextEncode (OpenAI CLIP) 768
Stable Diffusion v2 CLIPTextEncode (OpenCLIP) 1024/2048

操作步骤
1. 在 ComfyUI 中检查模型:
如果模型是 v1(文件名如 *.ckpt 或 *.safetensors),确保使用 CLIP Text Encode (Prompt) 节点(基于 OpenAI CLIP)。
如果模型是 v2(文件名如 v2-1_768-ema.safetensors),使用 CLIP Text Encode (OpenCLIP) 节点(专门适配 OpenCLIP)。
2. 双击节点检查编码器类型:
v1 适配的文本编码器应显示 clip = CLIP_V1
v2 适配的文本编码器应显示 clip = CLIP_V2

✅ 方法 4:切换模型(终极方案)

如果以上方法无效:

  1. 换用 纯 v1 模型 + v1 节点 或 纯 v2 模型 + v2 节点
  2. 推荐下载官方的兼容模型:

最终还是终极方案切换模型最方便,但是常用模型种类繁多,后续要进一步学习模型的相关常识了。🙇‍♂️🙇‍♂️🙇‍♂️