尧图精选

Stable Diffusion ckpt 与 LoRA 区别、调用与权重控制

🕒 发布时间:2026/10/1 3:45:24 📁 来源:尧图网络
1. 先把 ckpt 和 lora 这两类模型的定位分清楚刚开始折腾 Stable Diffusion webUI 的时候我干过一件挺蠢的事从模型社区下载了一个 100 多 MB 的文件兴冲冲地丢进大模型目录然后重启结果模型列表里怎么都找不到它。折腾了半个多小时才发现那是个 lora 模型压根就不该放大模型目录。这事儿说起来很小但它背后暴露的问题很典型——很多人一开始根本分不清 ckpt 和 lora 到底是两种什么样的东西只是笼统地把它们都叫“模型”。这个认识上的模糊会带来一连串的实际困扰不知道该往哪个目录放、不知道能不能单独用、不知道生图时怎么调用、不知道权重该怎么调。所以我打算把这件事从头捋一遍把 stable diffusion 里 ckpt 大模型和 lora 微调模型的区别、各自的安装位置、调用方式、搭配逻辑以及背后那些真正影响出图效果的参数细节全部讲透顺带把 lora 训练里的数据集准备、触发词设置、显存估算也一起说清楚。不管你是刚装好 webui 想看个新鲜还是已经出过几百张图想进一步玩 lora 微调这篇内容都能直接拿来当操作参考。1.1 一个新手最常踩的坑把 lora 当大模型用先把最容易混淆的地方掰开。ckpt 是 checkpoint 的缩写你可以把它理解成“一整套完整的绘图能力包”。它包含了整个神经网络的全部权重体积动辄 2GB 到 7GB决定的是这个模型的整体画风、构图习惯、对提示词的理解方式、对人体的默认比例、对光影的默认处理。换句话说ckpt 决定了“这个模型是谁”。而 lora 是 Low-Rank Adaptation低秩适应微调技术的产物它本身不是一套完整的模型而是一组“补丁”。lora 文件通常只有几十 MB 到两百多 MB它里面存的是对基础模型某些层的增量修正。它没法单独使用必须依附在一个 ckpt 大模型上才能生效。它决定的是“在这个模型的基础上额外加点什么”。我之前见过不少新手把 lora 放错目录后一脸茫然也见过有人下载了一个 ckpt 却当成 lora在提示词里写lora:xxx:1结果一直报“找不到该 lora”。这两类文件的体积、存放路径、调用语法、生效方式全都不一样把它们混为一谈后面每一步都会卡壳。所以只要记住一句话ckpt 是底座lora 是挂件后面所有操作都是围绕这句话展开的。1.2 一句话讲清两者的关系如果用做菜打比方ckpt 就是你厨房里那口锅和那套基础食材——它决定了你能做出什么菜系是川菜还是粤菜。lora 则是调味包同一口锅、同一批食材你加不同的调味包出来的味道立刻就不一样。你可以只用一个基础模型不加任何 lora照样能出图但你不可能不加基础模型只挂 lora 就出图因为 lora 没有“锅”。这个关系推导出几个非常实用的结论。第一lora 的效果高度依赖底模。同一个 lora 挂在写实底模上和在二次元底模上出来的东西可能天差地别。第二lora 是可以叠加的就像一道菜可以加好几种调料但叠多了会串味权重需要仔细调。第三lora 因为体积小、加载快、切换成本低非常适合做“细粒度风格控制”而 ckpt 则适合做“整体基调切换”。理解了这层分工你后面在 webui 里的每一步操作都会变得有目的性而不是胡乱试。2. ckpt 与 lora 的底层差异到底在哪光知道“一个是大模型、一个是补丁”还不够真正影响你使用手感的是它们底层的技术差异。这部分我尽量说得直白些因为理解了原理你才能明白为什么 lora 权重调高了会崩、为什么有的 lora 在特定底模上完全不起作用、为什么小 lora 也能有大效果。2.1 ckpt一整套完整的风格底座ckpt 文件里存的是完整网络的所有权重包括 U-Net、文本编码器CLIP等核心组件。它的训练是从海量图文对上从头或从已有模型继续训练出来的消耗的算力和数据量都非常大。正因为它“什么都管”所以它决定了模型对提示词的语义理解、对画风的默认倾向、对构图的默认审美。一个 ckpt 的体积通常在 2GB 到 7GB 之间具体取决于它是完整精度还是半精度。常见的.safetensors格式 2GB 左右的模型大多是半精度fp16版本这也是目前主流。加载一个 ckpt 时它会占用相当可观的显存因为它要把整套权重都读进显存里。我实测过一个 2GB 的 fp16 模型在加载后加上推理时的中间激活值6GB 显存的卡能勉强跑 512x5128GB 才比较舒服12GB 以上就能比较自在地上高分辨率。关于 ckpt 选型我个人踩过的坑是网上一堆人推荐某个模型“效果爆炸”结果我下下来发现它只擅长某一种风格换到别的题材就拉胯。所以选底模不要只看别人的效果图要看它的训练侧重——是偏写实人像、偏二次元、偏插画还是偏产品摄影。这个决定了你后面挂什么 lora 能出好效果。2.2 lora挂在底座上的可插拔“调味包”lora 的核心思路是既然大模型微调要更新全部参数代价太大那我就不动原来的权重只在旁边加一小撮低秩矩阵用它们来“修正”原模型某些层的输出。训练的时候只更新这一小撮参数所以数据量需求小、训练快、产物小。使用时这些低秩矩阵会和原模型的对应权重做叠加等效于“给原模型打了个补丁”。这里有个概念叫 rank秩它决定了这撮低秩矩阵的“表达能力”。rank 越大能表达的修正越复杂文件也越大rank 越小越省但可能学不下太复杂的东西。常见的 lora 训练里rank 设 8、16、32、64 都有128 就算比较大了。很多人只关注“我这个 lora 是不是好”其实 rank 和 alpha 这两个参数在训练时就已经决定了它的上限。lora 的加载方式和 ckpt 完全不同。它不占独立的一份大显存而是在你调用时把增量叠加到基础模型上。所以同时挂三四个 lora 也不会像加载三个 ckpt 那样恐怖但叠加多了仍然会增加推理负担也会有风格冲突。这是 lora 一个很讨喜的特性——便宜、可插拔、可组合。2.3 低秩适应为什么能做到又小又有效低秩适应LoRA的数学直觉其实不复杂。假设原来某一层的权重矩阵是很大的一个 W维度是 d×k。微调本来要在这个大矩阵上改很多数但研究发现微调过程中真正起作用的改动往往集中在一个“低秩”的子空间里。于是就用两个小矩阵 Ad×r和 Br×k相乘去近似这个改动量r 远小于 d 和 k。这样需要训练的参数量就从 d×k 降到了 (dk)×r可能只有原来的百分之几甚至千分之几。这个特性直接解释了 lora 的几个使用现象。第一它为什么小——参数量本来就被压得很低。第二它为什么训练快——需要更新的参数少。第三它为什么有时学不会复杂概念——因为表达能力被秩限制了。我见过有人抱怨自己的 lora 训练出来“人物表情老是那几种”很可能是 rank 给得太低模型没有空间去学更多变化。再对比一下ckpt 微调业界叫 full fine-tuning 或 dreambooth 里那种更新的是全部参数效果上限高但对数据、算力、显存要求都高出一个量级。lora 就是在这种情况下被广泛采用的折中方案。日常做角色、画风、服装这种相对聚焦的目标lora 完全够用真要做大改动才会考虑更重的训练方式。2.4 关键参数对比表为了让你一眼看清两者的区别我整理了一张对照表这也是我平时跟朋友解释时最常用的方式对比维度ckpt 大模型lora 微调模型文件体积2GB ~ 7GB几十 MB ~ 200MB存放目录models/Stable-diffusion/models/Lora/是否可单独使用可以不可以必须挂底模调用方式顶部模型下拉框切换提示词里写lora:名称:权重主要作用决定整体画风与理解能力决定局部风格、角色、服装等叠加能力同一时刻只能用一个可同时叠加多个训练成本高需要大量数据与算力低几十张图就可能出效果显存占用高常驻显存低调用时叠加这张表建议直接截图存档。有了它你在选择该下载哪种文件、该放哪个目录、该怎么用时基本不会再迷路。3. webUI 里 ckpt 模型的安装与管理搞清楚概念之后进入动手环节。这一节讲 ckpt 从下载到能在 webui 里正常切换使用的完整流程以及那些说明文档里基本不会写、但实际操作必然会遇到的问题。3.1 目录结构和文件命名规范webui 的目录结构是约定俗成的理解它比死记路径更重要。核心目录大致是这样的sd-webui/ ├── models/ │ ├── Stable-diffusion/ # 存放 ckpt 大模型 │ ├── Lora/ # 存放 lora 模型 │ ├── VAE/ # 存放 VAE 模型 │ ├── Embeddings/ # 存放 textual inversion 嵌入 │ └── ESRGAN/ # 存放放大模型 └── extensions/ # 插件目录大模型放进Stable-diffusion/lora 放进Lora/这是铁律放错了 webui 就扫不到。我建议养成一个好习惯文件名尽量只用英文、数字、下划线和短横线不要用中文和空格。原因是某些操作系统、某些插件、以及命令行脚本对中文路径和空格的处理并不可靠出问题时排查起来非常痛苦。文件名里带上模型版本和类型比如xxx_v2_fp16.safetensors以后模型多了你自己也看得明白。还有一个细节是.ckpt和.safetensors两种格式。.ckpt是老的 pytorch 序列化格式理论上可以夹带可执行代码存在安全隐患.safetensors是后来专门为模型权重设计的格式只存张量加载更安全也更快。只要有的选一律选.safetensors。我早期偷懒用过几个.ckpt倒没出事但现在完全没必要冒这个风险。3.2 模型切换、VAE 与 CLIP 设置模型放进目录后在 webui 顶部左侧的下拉框里刷新一下有的版本会自动扫描就能看到新模型。切换模型时如果显存不够webui 会触发一次模型卸载和重新加载这时候界面会卡几秒到几十秒属于正常现象。第一次加载某个模型明显比之后慢是因为操作系统做了文件缓存。关于 VAE这是很多人忽略但影响很大的东西。VAE 负责把潜空间的表示解码成最终图像如果基础模型自带的 VAE 表现不好会出现发灰、发暗、颜色寡淡的情况。这时可以单独挂一个 VAE 模型来改善。webui 的 VAE 下拉框里选“Automatic”让它自动匹配通常就够了如果出图整体发灰可以手动指定一个通用的 VAE。我踩过的坑是有的模型内置了 VAE又额外挂了一个外部 VAE两个打架颜色直接崩掉。所以如果你手动挂了 VAE出图颜色不对第一反应应该是把它切回 Automatic 试试。至于 CLIP 跳过层CLIP Skip不同版本的 webui 支持情况不一样。修改它会影响文本编码器对提示词的理解深度一般不熟悉的话保持默认即可不要随意去动动了以后同一个提示词的出图会有明显变化反而让你以为模型坏了。3.3 ckpt 与 safetensors 该怎么选前面提到了格式上优先 safetensors。但还有几个实际考量点值得说。第一是模型精度有的模型提供 fp16 和 fp32 两个版本fp32 体积翻倍、显存占用更高但理论上细节更全实际上大部分情况下 fp16 的差异肉眼难以分辨显存却省一半所以我通常选 fp16。第二是模型的“训练底子”。有些模型是从 Stable Diffusion 基础版继续训练的有些是从别的模型蒸馏或合并来的。合并模型merge现在很流行就是把多个模型的权重按比例融合特点是往往“什么都会一点”但某些风格不够极致。如果你的目标是某个特定画风纯血统的专用模型可能比大杂烩更好。第三是注意模型版本与 lora 的兼容性。这算是我最想强调的一点很多 lora 是绑死在特定基础模型架构上训练的比如在 SD 1.5 上训的 lora拿到 SDXL 架构的底模上基本无效甚至报错。所以下载 lora 时一定要看它标注的基础模型版本和你手上的 ckpt 对应起来。这个坑我踩过不止一次下载了一堆漂亮 lora结果发现底模不匹配全部白费。4. lora 的加载、触发词与权重控制lora 这部分是 webui 使用里最容易出效果、也最容易出问题的环节。我把自己从“不知道触发词在哪”到“能稳定叠出想要的效果”的过程整理出来尽量覆盖所有实际会遇到的细节。4.1 安装位置与 webUI 识别机制lora 文件放进models/Lora/目录下支持子文件夹分类。我强烈建议按用途建子目录比如character/、style/、clothing/、concept/这样模型多了也不会乱。webui 支持嵌套目录扫描所以子文件夹不会影响识别。放好之后在 webui 界面右侧通常会有一个 lora 面板具体位置取决于你的版本和安装的扩展点开能看到已识别的 lora 列表点击某个 lora 会把它以正确语法插入到当前提示词里。如果你的 webui 版本较老没有这个面板也可以手动在正向提示词里写语法效果一样。这里有个容易被忽略的点lora 的识别是在 webui 启动或手动刷新时进行的。如果你在 webui 运行期间新放进去一个 lora可能不会立刻出现需要点一下刷新按钮或者重启。我遇到过好几次“明明放对了目录却看不到”最后发现只是没刷新。所以排查“lora 不显示”时第一件事就是刷新/重启。4.2 触发词的正确用法中英文问题触发词trigger word是 lora 训练时设定的一个特殊标记用来激活这个 lora 学到的东西。它是一个训练者自己定的字符串可能是一个角色名、一个特定的词也可能是一串无意义的字母。使用 lora 时如果效果出不来第一个要检查的就是触发词。触发词能不能用中文这个问题问的人特别多。答案是取决于训练时用的是什么理论上什么字符都能当触发词但实际推荐用英文。原因是文本编码器CLIP本身是在英文语料上训练的对英文词元的理解更稳。如果你的触发词是中文编码器会先做分词可能被切成几个子词激活效果不稳定。而且很多训练脚本、标注工具对中文支持不如英文完善。所以即便你的 lora 是拿中文标注的数据训练的我也建议触发词单独用一个英文串。触发词的位置一般放在正向提示词的开头或者靠前的位置让它有足够的权重。多个 lora 的触发词应该分开写清楚不要混在一起让模型去猜。我见过有人把两个 lora 的触发词随便堆在提示词最后结果两个都没生效就是因为位置和权重的问题。4.3 权重语法与分层调节webui 里调用 lora 的标准语法是lora:模型文件名:权重比如lora:my_style_v1:0.8表示把my_style_v1这个 lora 以 0.8 的权重加载。权重的取值范围一般建议在 0.3 到 1.2 之间超过 1 常常会出现画面崩坏、色彩过饱和、线条扭曲等问题低于 0.3 则几乎看不出效果。实际用的时候权重怎么定有个经验法则先给 1.0 看最强效果确认它能带来哪些改变再往下调找到最自然的点。因为有些 lora 在 1.0 时会“过度表达”盖住底模本身的质感这时候降到 0.6 到 0.8 往往刚刚好。我个人的习惯是风格类 lora 用 0.5 到 0.8角色类 lora 用 0.7 到 0.9具体还是要试。另外有些进阶玩法支持分段权重和分层控制比如给 lora 的文本编码器部分和 U-Net 部分设置不同权重或者按画面区域生效。这些在基础 webui 里不一定开箱可用往往需要额外扩展。对大多数人来说先用好单一权重就足够了不必一上来就追求复杂控制。注意权重不要凭感觉乱调。每次只改一个 lora 的权重其他条件保持不变这样才能判断出到底是哪个参数带来的变化。同时改好几个最后你根本不知道是哪个起了作用。4.4 多 lora 叠加的权重分配叠加多个 lora 是 lora 体系最有意思的地方也是最考验经验的地方。假设你要“某个角色的脸 某种画风 某件衣服”很自然会想到挂三个 lora。但直接三个都上 1.0往往会翻车——风格互相打架人物变形衣服和画风冲突。我的做法是分主次。确定一个“主导 lora”给它较高权重0.7~0.9其余作为辅助给较低权重0.3~0.5。主导的通常是决定这张图核心的那一个比如角色 lora 是主角画风是配角服装是点缀。辅助 lora 权重给太高容易把主角的特征冲淡。还有一个技巧是控制数量。我实测下来同时生效的 lora 最好不超过三个四个以上即使权重都调低也容易出现难以预期的画面问题——颜色脏、边缘糊、结构错乱。真有复杂需求宁可分两步走先生成主体再拿结果做二次处理也别硬堆在一张图上。叠加时还要注意提示词的写法。每个 lora 的触发词都要写上并且在提示词里给它们排序越靠前的通常权重越高。如果你希望某个元素突出就把它的触发词和描述往前提。这个“位置即权重”的直觉配合显式权重数字是控制叠加效果的两把钥匙。5. 实际出图ckpt 选型与 lora 搭配的实操流程前面讲的都是零件这一节把它们组装起来走一遍从选底模到出图的完整流程顺带把关键参数怎么定说清楚。5.1 选底模的三个判断维度选 ckpt 我一般看三点。第一是题材匹配我要做写实人像就找偏写实人像训练的底模要做二次元就找二次元底模。强行用二次元底模做写实或者反过来都会事倍功半。第二是版本匹配确认它和你要用的 lora 属于同一基础架构比如都是 SD 1.5或都是 SDXL。第三是出图效率有的底模参数多、分辨率高出图慢且吃显存如果你设备一般选一个轻量一点、在自己机器上跑得顺的模型更实际。不要迷信“最强模型”。我在显存不大的机器上试过一些特别重的模型理论上画质高但每张图等好几分钟调整起来极其痛苦最后反而回头用轻量模型因为效率才是可持续的。选底模的核心标准是“适合我的题材和我的设备”而不是“别人说好”。5.2 一套完整的出图参数配置我给自己定了一套比较稳的起步参数分享出来供参考具体数值可以根据模型微调参数建议值说明采样器DPM 2M Karras通用性和出图质量都比较均衡采样步数25 ~ 30再多收益递减20 以下容易糊CFG Scale6 ~ 8太高会过饱和太低会不听话分辨率512x512 或 512x768匹配底模训练分辨率更稳面部修复按需开启人脸小时有用正常尺寸可不加随机种子固定后微调排查问题时固定种子非常关键这套参数不是标准答案但它是一个很稳的起点。以它为基础每次只动一个参数观察变化这是调参最快的路径。很多人调参效率低就是因为一次改三个变量出了好结果也复现不出来。5.3 搭配案例记录举个我自己反复用过的搭配。做法式插画风的人物头像时我会选一个偏艺术插画的底模然后挂一个风格 lora权重 0.7加一个光影 lora权重 0.4。提示词大致是lora:illustration_style:0.7 lora:soft_lighting:0.4 (a beautiful portrait:1.2), French illustration style, soft warm lighting, detailed eyes, clean background Negative prompt: lowres, blurry, extra fingers, deformed出图后如果发现风格太浓、人物不够清晰就把插画 lora 降到 0.5如果光影太平就把光影 lora 提到 0.5。整个过程就是“固定种子、单变量微调”通常两三张就能找到满意的那一组。这套流程的好处是可复现——我把种子、参数、提示词存下来下次同样的需求可以直接复用省下大量试错时间。6. 自己训 lora数据、参数与显存估算玩到一定程度用别人的 lora 总有不满足的地方这时候就会想自己训一个。这部分坑比较多我把关键点拆开说。6.1 数据集准备与打标细节训练一个角色 lora数据量不需要很大20 到 50 张高质量图片通常就能有不错的效果。但质量远比数量重要模糊的、角度重复的、背景杂乱的图片会拖后腿。我一般会挑出清晰、多角度、多表情、多光照的图片去掉构图高度雷同的。打标tagging是决定 lora 上限的关键一步。核心原则是你想让 lora 学会的东西不标注你想让它忽略的东西要标注。比如训一个角色角色本身的特征是你要它学的就不标背景、衣服、姿势这些你想让它可变的部分就要标出来。这样模型才会把“没标注的部分”归到这个触发词上把“标注的部分”当成可变属性。现在很多训练工具能自动打标自动打完一定要人工过一遍。自动标注经常把角色的固有特征也标进去导致模型学不到该特征。这个细节直接决定 lora 好不好用。6.2 训练参数怎么定几个核心参数rank网络秩、alpha、学习率、训练轮数。rank 常见的取值是 8 到 128日常角色训练 16 或 32 就够alpha 一般设成 rank 的一半或相等学习率常用的量级是 1e-4 附近具体看训练器。轮数方面容易过拟合宁少勿多先训少一点看效果再决定加不加。过拟合是个人训练最常见的失败模式表现是无论你怎么写提示词出图永远是那几张训练图的角度和姿势缺乏变化。这时候要减轮数、减 rank、或者加数据多样性。反过来如果 lora 完全不生效可能是学习率太低或轮数太少。判断方法就是拿不同提示词多测几张看模型到底是“学死了”还是“没学会”。6.3 显存需求估算与省显存手段显存是个人训练最大的门槛。粗略估算一下训练 lora 的显存占用主要来自模型权重、梯度、优化器状态和中间激活。同样一个 9B 量级的大模型全量微调可能需要上百 GB 显存而用 lora 微调时因为大部分权重冻结、只训练低秩矩阵优化器状态大幅缩减显存需求能降到十几到二十几 GB 甚至更低具体取决于 batch size、序列长度和是否启用梯度检查点等技术。如果你显存紧张有几个办法减小 batch size最直接、启用梯度检查点用计算时间换显存、用更低的精度、缩短输入长度。这几个手段各有代价一般从减小 batch size 开始试。训练过程中如果显存突然被占满、速度骤降往往是某一步的中间结果没有及时释放检查一下是不是 batch 或长度设大了。7. 常见问题排查速查这一节是我把日常遇到的各种问题汇总成的速查表出问题时按图索骥能省不少时间。7.1 加载与报错类现象可能原因处理方式模型列表里看不到放错目录 / 未刷新确认放进对应目录并刷新重启lora 不生效目录错 / 触发词漏 / 底模不匹配逐项检查提示找不到 lora提示词语法写错核对lora:名称:权重加载报错文件损坏或格式问题重新下载优先 safetensors切换模型卡住显存不足触发重载降低分辨率关闭其他占用7.2 出图效果类出图颜色发灰发暗先检查是否重复挂了 VAE人物崩坏、多手多指多半是 CFG 太高或步数太低画面脏乱通常是叠加 lora 太多或权重过高风格出不来先确认触发词和底模是否匹配。这几个方向能覆盖大部分“效果不对”的问题。7.3 性能与显存类出图越来越慢常见原因是显存吃紧导致频繁在显存和内存之间搬运数据引发显存与内存交换。解决办法包括降低分辨率、减少同时加载的模型、关闭不必要的扩展、以及适当减少内存驻留的模型数量。这个“高峰显存占用”的概念很重要显存不是不够用才卡而是接近上限时就开始拖慢速度。8. 几个我反复验证过的实用心得最后这部分不讲理论只讲我实际用下来觉得最值钱的几条经验都是踩坑换来的。8.1 模型管理习惯给模型文件起规范的名字按类型分目录保留一份下载来源的记录。模型一多这些习惯能救你的命。我现在的命名格式是“类型_名称_版本_精度”看名字就知道是什么、能不能用。另外定期清理不用的模型也能省硬盘尤其模型动辄 GB 级。8.2 提示词与 lora 的配合技巧lora 触发词靠前放、显式给权重、一次只调一个变量——这三条搭配使用调参效率会高很多。还有一个细节是负向提示词也要配合如果 lora 容易带出某种不想要的元素就在负向提示词里把它压制掉往往比调 lora 权重更直接。8.3 后续扩展方向玩熟 ckpt 和 lora 之后可以往这些方向走学习更精细的权重分层控制、尝试文本嵌入Embeddings来补充风格、研究模型合并来定制自己的底模。每一步都是在现有基础上叠加不用推倒重来。我自己就是从“只会切模型”一路走到“能训 lora、能调权重、能组搭配”每次只加一个技能点慢慢就顺了。
上一篇/下一篇内容由系统自动关联 返回资讯列表 →