你看到这个标题别急着划走——Diffusion-0/12不是我随手写的编号而是我最近给自己定下的一项硬核任务用12篇系列文章把 diffusion model 从原理到部署、从模型选型到实际抓取案例彻底讲透。今天是第0篇也就是地基篇先把 stable diffusion 这条主线拎出来顺便把 mac 上最常见的启动崩溃、模型下载选择、diffusion policy 抓取这些被问烂了的问题一次性说清楚。这个系列适合谁两种人一种是刚接触 diffusion model、被 haystack 一样的信息流淹得喘不过气的新手另一种是已经在用 stable diffusion 出图、但遇到mac 启动报 ImportError: dlopen这类错误只能靠玄学解决的老手。我会尽量不端着尽量把每一步为什么这么做讲明白而不是丢给你一串命令行就完事。1. Diffusion-0/12 到底是什么先把这个命名看懂1.1 为什么是 0/12不是 1/120/12 的意思是第0篇、共12篇。你可能会觉得奇怪写系列不应该从第1篇开始吗我故意的。因为在 diffusion 这个方向里真正难的东西不是怎么用现成的 stable diffusion 模型跑一张图而是扩散模型背后的思维范式——从高斯噪声里一步步恢复图像这个思路和传统生成模型完全不一样。直接讲第1篇就讲部署、讲出图读者很容易学成只会敲命令的搬运工。所以我把索引从0开始第0篇负责建立全局坐标系diffusion model 是什么、stable diffusion 在中间占什么位置、mac 上哪些坑最常踩、diffusion policy 抓取到底是怎么和扩散模型扯上关系的。后面的 1~11 篇再分别深入原理推导、训练技巧、工程化部署、抓取数据实战等方向。这个命名本身也提醒我写技术内容不能跳跃式地自嗨得有一个可复现的路径。1.2 这12篇我会怎么排先把规划摆出来如果你只是想知道哪一篇能救我的 mac 启动问题直接跳到第3部分。但如果你愿意花点时间我建议还是把排序原因看一遍它会帮你建立一套判断力以后遇到任何 AI 工具你都知道该从哪些维度去拆解它。第0篇本篇Diffusion 全景图与常见问题地图第1篇从 DDPM 开始理解去噪扩散的概率模型第2篇DDIM、SDE 与 ODE扩散模型的加速与连续化第3篇Latent Diffusion 与 Stable Diffusion 的架构拆解第4篇CLIP Text Encoder 与提示词是怎么控制生成的第5篇在 mac 上从零部署 stable diffusion 的正确姿势第6篇模型选型与精调实践SD 1.5、SDXL、SD3 与社区模型第7篇LoRA、ControlNet 与生成可控性的进阶第8篇diffusion policy 与机器抓取扩散模型在机器人领域的应用第9篇图像编辑与修复Inpainting、Outpainting 的原理与实操第10篇性能优化量化、推理加速与内存管理第11篇完整项目串讲从零到一做一个生成式工作流你可能会问为什么要花那么多篇讲原理和训练不是有 stable diffusion 模型可以直接用吗我的回答是模型是别人训练的但理解模型那一层噪声和一串文本之间发生了什么决定了你是能跑出图还是能解决跑不出来的问题。第0篇就是这一整套理解的入口。2. Diffusion 家族盘根错节为什么一搜全是 stable diffusion2.1 diffusion model 的源头与核心直觉Diffusion model中文叫扩散模型最朴素的直觉是把加噪和去噪反过来用。想象一张照片一步步被高斯噪声侵蚀肉眼渐渐看不清内容最后只剩满屏雪花。如果我们学会了每少一步噪声图像就更清晰一点的规律那我们从一屏纯噪声出发就可以一步步逆推出照片。训练过程就是喂给它大量某个噪声程度下对应的图像数据让它学会预测噪声然后用去噪器一点一点把画面捞回来。这个思路最早的代表工作是2020年的 DDPMDenoising Diffusion Probabilistic Models。它的训练目标非常简洁随机给一张图加噪声让网络预测加进去的噪声然后不断去噪。因为每步只走一个小碎步整个生成过程可能要好几百甚至上千步所以早期扩散模型又慢又费算力。但也正因为这种一点一点逼近的机制它生成图像的多样性和细节才特别稳不容易像 GAN 那样陷入总生成同一张脸的模式坍缩。你搜diffusion model会看到一大堆论文但算法脉络基本就三条主线基于贝叶斯推断的 DDPM 系列、基于随机微分方程SDE的连续化路线、以及后来为了加速生成的蒸馏与一致性路线。Stable Diffusion 属于把扩散过程搬到潜在空间去进行的变体属于 Latent Diffusion所以才叫潜在扩散模型。理解这层关系你再看网上各种名词就不会晕了。2.2 stable diffusion 为什么成了搜索焦点搜索热词里 stable diffusion 模型 出现频率最高完全正常。因为 SD 是第一个把高质量的文本到图像生成能力压缩到一张消费级显卡甚至 mac 的 MPS 都能跑上的开源模型。它在社区里生态太全了一键安装包、几千个微调模型、LoRA 插件、ControlNet 插件都围绕它转。但它又特别容易让人产生误解以为 stable diffusion 就是 diffusion model 的全部。其实从家族谱系看它只是Latent Diffusion CLIP 文本引导 大规模数据训练的一个具体落地产品。模型权重是开源的所以大家可以在本地随便玩这也导致stable diffusion的搜索量长期压过更原始的 diffusion model。这里我把主要模型家族的差异整理成一张表方便你快速建立分类感模型/方法核心特点生成质量速度开销适用场景DDPM原始扩散模型每步都从像素空间采样高但步骤多慢理解原理、学术基线DDIM可加速采样确定性过程高较快加速生成、可复现SDE/ODE连续扩散视角用微分方程统一框架高中等理论扩展、可控生成Latent Diffusion / SD在潜在空间去噪省显存高较快普通用户、社区生态Consistency / 蒸馏类一步或多步生成较高极快实时场景、边缘设备别小看这种分类感。你以后看到某个新模型第一反应不是这个和 stable diffusion 哪个更好而是它属于哪一支路线要加速还是要可控性判断力完全不一样。2.3 为什么热词里总有抓取两个字你可能好奇diffusion policy 抓取怎么会和 stable diffusion 排在一起。这是两条完全不同的应用线stable diffusion 是扩散模型用在图像生成diffusion policy 是扩散模型用在机器人动作生成。搜到一起的原因也很简单大家都在搜diffusion搜索引擎把长尾需求合并展示了。我后面第8篇会展开讲 diffusion policy 的原理这里先给一个直觉机器人抓一个杯子传统方法直接输出一个确定的轨迹而 diffusion policy 则是把抓取动作序列当成图像来生成模型去噪的过程就是在细化和完善动作轨迹。听起来奇奇怪怪但实际效果很不错尤其适合需要多峰行为比如杯子的位置不确定、有多种合理抓法的任务。如果你对机器人方向感兴趣第8篇值得期待第0篇先点到为止。3. mac 版 stable diffusion 启动失败的完整排查链路3.1 经典报错长什么样ImportError: dlopen先说一个几乎每天都有人在群里问的场景在 mac 上装好 stable diffusion 的 WebUI终端启动屏幕刷了一堆依赖之后突然冒出来一行红字ImportError: dlopen ... Library not loaded ...后面可能还跟着类似 rpath/libtorch_cpu.dylib 或者某个 .so 文件加载失败的信息。很多人的第一反应是重装、重启、Reset 环境一顿操作猛如虎结果还是同一个错。我从自己踩坑和被群友反复问到的经验来看这类 dlopen 错误十有八九不是 stable diffusion 本身写错了而是你的 Python 环境里装了一个 PyTorch 版本但它和当前系统/架构不匹配。mac 上尤其容易出问题的地方在于它既可能是 Intel 芯片也可能是 Apple Silicon同样的 PyTorch 安装包对应的底层库编译方式不同。你如果从某个博客复制来一段安装命令而对方用的是另一套架构那 dlopen 加载失败几乎必然发生。还有常见情况是在同一个环境里混装过 CPU 版和 MPS 版的 PyTorch动态库路径冲突加载时就翻车。3.2 我建议的修复顺序从环境入手别碰模型先把结论说在前面优先重建一个干净的环境而不是盲目 pip install 更多包。我通常按下面这个顺序排查每一步都能快速验证确认芯片架构。终端执行uname -mApple Silicon 会输出arm64Intel 会输出x86_64。这一步很多人会忽略但它是后续所有选择的前提。确认 Python 版本。stable diffusion WebUI 对 Python 3.10/3.11 支持最稳太新或太旧都容易在编译环节翻车。建议用python3.10 -V直接验证。单独建虚拟环境。不要用系统 Python不要用已经有各种包的 conda 根环境新建一个干净的 venv 或 conda 环境。安装与芯片匹配的 PyTorch。官方 nightly 或稳定版都会根据平台自动选择但最好明确指定。Apple Silicon 上可以用 MPS 后端Intel mac 则用 CPU 版。检查动态库路径。如果报错信息里指向某个 .dylib可以用otool -L查看那个库的依赖路径确认是否有路径不存在或者符号链接失效。如果做到第4步环境还是报同样的错我才会考虑删掉~/.cache里可能损坏的 torch 缓存再重新安装。这个顺序本质是从最底层依赖逐步向上排查很多新手一出错就盯着 WebUI 目录删文件、改配置费时费力。3.3 一个最容易忽略但最关键的环境变量这里分享一个我在 mac 上部署的经验很少被普通教程提到Apple Silicon 上 PyTorch 的 MPS 后端对部分算子支持还不完整某些模型加载时会因为在 MPS 上执行某个不支持的 op 而崩溃。这时候你第一个想到的不应该是换电脑而是设置环境变量PYTORCH_ENABLE_MPS_FALLBACK1让不支持的 op 自动回退到 CPU。在 WebUI 的启动脚本里把这个变量加进去很多加载到一半突然报错和生成图片到 50% 直接黑屏退出的问题能当场解决。mac 上跑 stable diffusion 之所以让人觉得不稳定一半以上和 MPS 的算子覆盖度有关而不是模型坏了。你在用 mac 部署之前先把这个环境变量理解透后面能少踩一多半坑。还有一个小细节mac 内存不足的时候系统会疯狂用 swap现象是生成图片时风扇狂转、进度条卡在 99%。这时你不一定缺的是显存mac 没有独立显存概念缺的是统一内存。建议关闭其他大内存软件并在 WebUI 里把内存优化相关开关打开。明明配置不低却总失败多半是这个原因。4. diffusion policy 抓取概念、操作与常见坑4.1 为什么机器人抓取能用到扩散模型这个方向在热词里排得很靠前说明很多人搜了 stable diffusion 之后被关联词带到了 diffusion policy。别觉得奇怪我在接触这个领域之前也以为扩散模型只在图像圈火。后来看了 diffusion policy 的相关工作才意识到扩散模型天然适合做动作序列生成因为它能表达多峰分布。解释一下多峰假设桌上有两个杯子机器人可以抓左边那个也可以抓右边那个两种抓法都是合理的。传统回归模型通常会输出一个平均轨迹结果抓到两个杯子中间的空地。扩散模型不一样它生成的轨迹是从噪声中采样的天生能落在多个合理区域中的一个不会强行求平均。这个特性在机器人操作里太重要了所以我一直觉得 diffusion policy 是扩散模型被低估的应用方向。4.2 diffusion policy 抓取的基本流程虽然这个系列的第8篇会专门讲细节我还是在第0篇给你搭个框架方便你理解它和 stable diffusion 的关系第一步数据收集。记录机器人手爪的状态、相机的图像信息以及专家示范的抓取动作序列。第二步条件编码。把图像观测和机器人状态编码成条件向量相当于 diffusion model 里的文本提示词。第三步动作去噪。随机生成一段速度/位置轨迹作为初始噪声然后以条件向量为引导逐步去噪直到轨迹清晰可执行。第四步闭环执行。机器人执行生成的动作并把新观测作为条件重新生成下一步动作。你看这套流程和 stable diffusion 的输入文本 → 加噪/去噪 → 出图在结构上高度相似都是条件生成。区别在于一个生成的是像素网格一个生成的是动作序列一个条件是有 CLIP 文本向量一个是图像与状态向量。理解了这层类比你去读 diffusion policy 的源码会觉得顺畅很多。实际操作中还有几个想提醒你的点。动作维度高、采样步数多会显著拖慢控制频率所以 diffusion policy 部署时通常要控制去噪步数例如8步、16步并配合 DDIM 或 DPM-Solver 加速采样。还有训练时的动作数据最好做平滑处理否则去噪输出会出现抖动。这些都属于论文不写、但真上手一定会碰到的坑。4.3 抓取演示从仿真到真机的最短路径如果你想快速体验我推荐先做仿真再上真机。网上有很多基于 Diffusion Policy 的开源实现配合 MuJoCo 或 Isaac Gym 跑一遍机械臂抓取仿真。仿真环境的好处是可以批量验证模型的多峰抓取能力比如随机改变物体位置看模型生成的轨迹是否总能落在真实物体上而不会去抓平均值。上真机的时候第一优先检查的是控制频率。扩散模型采样如果太慢机器人只能等动作生成完才动整个系统会显得反应迟钝。常见做法是把动作生成放到独立线程用最新生成的动作片段覆盖旧指令如果采样速度跟不上再降采样步数或换轻量骨干网络。抓取时还要注意相机标定条件输入里的图像必须是当前时刻的真实观察延迟太大模型生成的动作会针对过去的场景成功率直接崩。我还碰到过一个很隐蔽的坑训练时用的图像分辨率和真机部署时不一致导致条件向量分布偏移模型生成的轨迹精度明显下降。这个问题排查了很久最后才发现是图像缩放方式不同。建议你在代码里显式写死图像预处理参数而不是依赖外部库的默认值。5. 模型选型与本地部署参数、显存、速度的取舍5.1 主流通用模型横向对比回到 stable diffusion 模型本体。现在网上搜stable diffusion 模型出来的东西五花八门SD 1.5、SD 2.1、SDXL、SD3、Flux、各种社区微调模型。很多人一进 Civitai 就迷失了不知道下哪个。我给一个务实的选型建议表格这也是我在不同设备上实测后的结论模型基础分辨率参数量级显存建议出图速度典型消费级适合谁SD 1.5512x512约0.98BU-Net6GB 可跑较快生态最大插件兼容最好SD 2.1768x768约0.98B6GB 可跑较快不推荐新手生态弱SDXL1024x1024约3.5B8GB 起步16GB 舒适明显变慢画质控、需要高分辨率SD3 / 3.51024x10248B 级别12GB 以上慢文本理解更强但部署门槛高Flux1024x102412B 级别16GB 以上较稳较慢追求细节和真实感如果你只是想在 mac 上先跑通流程我强烈建议从 SD 1.5 开始。它模型小、生态大、插件全你要装的任何功能几乎都有人写过教程和踩坑记录。等你对生成流程、采样器、提示词都有感觉了再上 SDXL 或 Flux 不迟。很多人一上来就看哪个模型画质最顶直接下最大的 12B 模型结果 mac 上要么启动崩溃、要么一张图等十分钟。这不是模型不行是你和你的设备暂时不匹配。选型的核心逻辑是先保证能跑通、能迭代再考虑画质上限。我把你们搜到的 stable diffusion 模型标签全部看了一遍能用比最强重要得多。5.2 参数层面真正值得调的三个点选好模型后你打开 WebUI 会看到一堆参数CFG、采样器、步数、分辨率、种子、face restoration……先别被吓到新手真正值得花时间理解的就三个采样步数Steps从噪声到图像的跳数。步数太少图像糊、细节崩步数太多浪费时间。SD 1.5 配 DDIM 一般 20~30 步就够这已经是社区共识不需要跑到 100 步。CFG 引导强度CFG Scale控制生成结果和提示词的贴合度。数值太高会导致颜色过饱和、构图僵死太低则不管提示词。经验上 7 左右是甜点区。采样器SamplerDPM 2M Karras 和 DDIM 是我用得最多的两个。前者收敛快、细节好后者稳定、复现性好。它们对最终图像风格有影响但不会完全变一张图。剩下那些参数等你真正遇到某个具体问题比如人脸崩、风格不统一再研究。先花一个下午把这三个参数在不同值下的效果跑一遍你对 stable diffusion 的掌控感会立刻上一个台阶。从原理上说这些参数的背后其实是去噪过程的步长、噪声调度、引导强度在起作用理解到这一层你就不会把它当魔法了。5.3 本地部署 vs 在线服务我的建议最后聊一下部署形态。mac 上部署 stable diffusion 的启动问题劝退了很多人于是他们会想那我直接用在线网站不就行了可以但我还是建议本地环境至少要跑通一遍。本地部署的价值不在于省那几块钱而在于调试的自由度你可以换模型、改采样器、看中间过程图、跑批量测试这些在在线服务里都受限。更重要的是部署过程本身就是一次绝佳的依赖环境教育——你经历一次 ImportError: dlopen 的折磨就会明白架构匹配、环境隔离、依赖管理这些工程基本功到底有多重要。如果实在跑不通我给你一个降级方案先下载一个整合包部分社区提供针对 mac 的预编译版本把环境坑绕过去先体验生成效果等有精力了再回头从干净环境手动部署。但不要因为一次失败就完全放弃理解原理否则后面每次模型更新、每次新插件安装你都可能再次被环境问题堵住。6. 我在实际项目中积累的几条经验6.1 日志比报错本身更有用先分清环境错误和模型错误讲一个排查技巧任何启动失败第一件事不是搜完整报错的第一行而是把日志拉到最后20行。你看到的 ImportError: dlopen 后面往往跟着一串dependency chain里面记录了到底是哪个库被依赖、哪个路径不存在。这个信息往往直接指出了修复方向比网上复制的万能解决方案可靠得多。同时要学会区分错误类别如果错误发生在 import torch 刚执行时99% 是环境问题如果错误发生在加载某个 .safetensors 权重时那可能是模型下了一半、文件损坏或者权重格式和代码不匹配。这两种错误的处理方式完全相反前者要动环境后者只需重新下载权重。不动脑子去重装环境往往白费时间。6.2 手里有张基线配置表比什么都强我每换一台设备跑 stable diffusion都会建一张小笔记记录设备芯片、Python 版本、PyTorch 版本、WebUI 版本、推荐采样器和步数。以后再遇到问题我不用从头排查先拿当前配置和基线表对比。十个报错里有七个是因为某个依赖被升级了导致和 WebUI 的快照不兼容。这个习惯也适用于 diffusion policy 项目。训练参数学习率、去噪步数、条件编码方式、图像分辨率全部记下来。深度学习项目最怕的不是跑不出效果而是上次明明有效这次重训怎么就不行了——多半是你没记账。给自己一张可复现配置表是避免这种无效返工最直接的办法。6.3 从能出图到能控制生成中间差的是中间过程可视化最后分享一个我很推崇的进阶思路不要只关心中间过程走完就完事。Stable Diffusion WebUI 里提供了查看中间去噪过程的功能每一步的半成品图像会告诉你模型是怎么从一团噪声逐渐浮现结构的。这比看任何原理图都直观。我自己就是从观察中间过程里第一次真正理解了 CFG 参数为什么过高会让画面烤焦——因为在去噪早期过高引导会提前锁定结构后面的步骤已经无法修正。同理diffusion policy 训练时也可以把每步去噪的轨迹变化可视化出来你会看到机器人动作从狂乱抖动逐渐收敛成平滑的抓取路径。这种看得见的反馈比 metrics 数字更能巩固你对扩散模型的理解。这套 0/12 系列表面上是在讲技术其实我希望你最终得到的是拆解任何陌生 AI 系统的方法。再遇到一个新的 diffusion 变体你不会慌着找教程而是先问它属于哪条路线条件是什么生成目标是什么采样怎么加速代价是什么——五个问题过一遍方向立刻就清楚了。第0篇先写到这后面几篇我会按计划把每条分支掰开揉碎讲我们下一篇见。