Stable Diffusion 本地部署实战指南:从“显存不足”到“秒出大片”

“老师,我按教程装好了,但一生成图片就报错,显存直接爆掉,是不是我电脑太差了?”

这是上周训练营里一位学员小周的原话。他用的是一台搭载 RTX 3060 Laptop 6GB 显存的游戏本,按理说配置不算古董,但在默认设置下跑 SD 1.5 模型,512×512 分辨率都要等上两分钟,还经常出现黑图或 CUDA out of memory。我远程一看,问题不在硬件,而在部署策略——他用的还是最原始的 WebUI 自动安装包,虚拟内存没调,VAE 没加载,采样器选成了最慢的 DDIM。

今天这篇文章,我们就以小周的案例为起点,手把手拆解 Stable Diffusion 本地部署的完整流程,并给出两个能直接落地的实操案例:低显存优化方案ControlNet 精准控制工作流。全程基于 Stable Diffusion WebUI (AUTOMATIC1111) v1.9.3ComfyUI v0.2.3 双平台讲解,所有参数均经过实测。

一、部署前的“地基”:环境与依赖的五个关键点

很多教程只说“装 Python 3.10.6,装 Git”,但忽略了版本精确匹配。这里直接给结论:

1. Python 版本必须锁定 3.10.x(非 3.11/3.12)

SD WebUI 的 `torch` 依赖在 3.11+ 下有已知的兼容性问题,尤其是 Windows 下 `xformers` 编译失败概率极高。建议使用 `pyenv-win` 或直接安装 Python 3.10.11,安装时勾选“Add Python to PATH”。

2. 虚拟环境隔离(强烈建议)

不要在全局环境装依赖,否则你其他项目的 `numpy` 版本会被强行覆盖。在项目根目录执行:

python -m venv sd_env
sd_env\Scripts\activate  # Windows
source sd_env/bin/activate  # Linux/Mac

3. 显卡驱动与 CUDA 版本匹配

这一步是“显存爆掉”的隐形元凶。打开命令行输入 `nvidia-smi`,查看右上角 CUDA Version(注意这是驱动支持的最高版本,不是已安装版本)。如果你的是 12.x,那么 PyTorch 必须选择 cu121 或 cu124 版本,否则会走 CPU 推理,速度慢 20 倍以上。

安装 PyTorch 时,不要用官网默认命令,而是:

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

4. 显存不足的“急救三件套”

小周的 6GB 显存,其实足够跑 SD 1.5 和 SDXL(配合优化)。关键在 WebUI 的启动参数。在 `webui-user.bat` 中修改 `COMMANDLINE_ARGS`:

set COMMANDLINE_ARGS=--xformers --medvram --no-half-vae --opt-split-attention
  • `–xformers`:显存占用降低 30%,速度提升 20%
  • `–medvram`:中等显存优化,6GB 卡推荐;8GB 以上可以不加
  • `–no-half-vae`:防止 VAE 解码时出现黑图(小周的黑图就是这么来的)
  • 5. 模型放置路径与命名规范

    主模型放 `models/Stable-diffusion/`,建议文件名用英文+版本号,例如 `sd_xl_base_1.0.safetensors`。VAE 放 `models/VAE/`,但如果你用的是 SDXL 模型,它自带 VAE,不需要单独加载。

    二、实操案例 1:6GB 显存跑 SDXL——低显存优化全流程

    小周的问题是“显存不足”,而 SDXL 模型(Base 版本)官方要求至少 8GB 显存,但通过以下流程,6GB 也能稳定出图。

    步骤 1:下载 SDXL Base 1.0 与 Refiner

  • SDXL Base:从 Hugging Face 下载 `sd_xl_base_1.0.safetensors`(约 6.9GB)
  • SDXL Refiner:从同页面下载 `sd_xl_refiner_1.0.safetensors`(约 6.9GB)
  • 步骤 2:WebUI 设置 Refiner 联动

    在 WebUI 的 `Settings` → `Refiner` 选项卡中:

  • 启用 `Refiner`,选择 Refiner 模型路径
  • 设置 `Switch at` 为 `0.6`(即前 60% 步数用 Base,后 40% 用 Refiner 精修)
  • 采样器选择 `DPM++ 2M Karras`,步数 `30`,CFG `5`
  • 步骤 3:分辨率与裁剪策略

    SDXL 原生支持 1024×1024,但 6GB 显存直接跑会爆。关键技巧:分段生成。先以 768×768 生成,再通过 `Hires. fix` 放大到 1024×1024:

  • 勾选 `Hires. fix`,放大倍数 `1.5`,采样器 `DPM++ 2M SDE Karras`,步数 `15`
  • 去噪强度 `0.4`(不要超过 0.5,否则画面会失真)
  • 步骤 4:实测参数与结果

    在小周的机器上(i7-12700H + RTX 3060 Laptop 6GB),上述设置下:

  • 单张 768×768 生成时间:约 45 秒
  • 放大到 1024×1024:约 35 秒
  • 显存峰值:5.2GB(未爆)
  • 对比他之前的默认设置(512×512,DDIM,无优化),时间反而快了 30%,且画质明显提升。核心逻辑是:用步数换分辨率,用分段换显存

    低显存优化参数界面

    三、实操案例 2:ControlNet 精准控制——让 AI 听你的构图

    很多学员反馈“AI 生成的图,构图完全不受控”,比如想要“人物在画面右侧,背景是城市夜景”,结果 AI 总是把人物放中间。解决方案就是 ControlNet,它通过额外输入(线稿、深度图、姿态骨架)来约束生成过程。

    步骤 1:安装 ControlNet 扩展

    在 WebUI 的 `Extensions` → `Install from URL` 中填入:

    https://github.com/Mikubill/sd-webui-controlnet.git
    

    安装后重启 WebUI,在 `Settings` → `ControlNet` 中确认 `Config` 路径指向 `models/ControlNet/` 下的 `yaml` 文件。

    步骤 2:下载关键模型(以 Canny 和 OpenPose 为例)

  • Canny(边缘检测):`control_v11p_sd15_canny.pth`(适用于 SD 1.5)或 `control_v11p_sdxl_canny.pth`(适用于 SDXL)
  • OpenPose(姿态骨架):`control_v11p_sd15_openpose.pth`
  • 放置到 `models/ControlNet/` 目录。

    步骤 3:实操——用 OpenPose 控制人物姿势

    1. 在 WebUI 的 `ControlNet` 选项卡中,上传一张带有人物姿态的参考图(建议用 OpenPose Editor 在线生成骨架图)
    2. 勾选 `Enable`,选择 `OpenPose` 模型
    3. 关键参数:
    – `Control Weight`(控制权重):`0.8`(过高会完全复制原图姿势,过低则无效)
    – `Starting Control Step`:`0.0`
    – `Ending Control Step`:`0.8`(后 20% 步数让模型自由发挥细节)
    – `Preprocessor`:`openpose`(自动提取骨架)

    4. 配合正向提示词:`masterpiece, best quality, a woman in cyberpunk outfit, neon city background, dynamic pose`
    5. 生成结果:人物姿势严格匹配骨架,但服装、背景、光影完全由 AI 发挥。

    ControlNet 姿态控制示例

    步骤 4:进阶——Canny 边缘控制建筑生成

    如果你要生成“同一栋建筑的不同风格”,用 Canny:
    1. 上传建筑的线稿或边缘图
    2. 选择 `Canny` 模型,`Control Weight` 设为 `0.9`
    3. 提示词写:`a futuristic skyscraper, glass facade, sunset lighting, ultra-detailed`
    4. 结果:建筑轮廓完全一致,但材质、光效、环境全部改变。

    Canny 边缘控制建筑

    四、总结与进阶建议

    STABLE DIFFUSION 本地部署的核心不是“装好”,而是“调好”。回顾今天的内容:

    1. 环境:Python 3.10.6 + PyTorch cu121 + `–xformers –medvram` 是低显存标配
    2. 模型:SDXL 用 Refiner 联动 + 分段生成,6GB 显存也能跑
    3. 控制:ControlNet 的 OpenPose 和 Canny 是构图精准度的两大杀器

    进阶建议

  • 如果你追求极致效率,建议转向 ComfyUI(v0.2.3+),它的节点式工作流在复杂任务上比 WebUI 快 20%-30%,且显存管理更智能。
  • 学习 LoRA 微调,用 10-20 张自己的图片训练专属风格,这是商业变现的敲门砖。
  • 加入社区,推荐关注 Stable Diffusion Art 和 r/StableDiffusion,每周都有新模型和技术突破。
  • 最后送大家一句话:“AI 绘画不是魔法,而是工程。” 当你把每个参数都理解透,你的作品自然就有辨识度。

    常见问题 FAQ

    Q1:我安装 WebUI 时卡在 `Installing torch` 很久不动,怎么办?
    A:大概率是网络问题。国内用户建议使用清华镜像:`pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple`,同时设置 `–index-url` 为 cu121 版本。如果还卡,直接下载离线 wheel 包安装。

    Q2:生成图片全黑,但过程没有报错,是什么原因?
    A:最常见是 VAE 未正确加载或 `–no-half-vae` 未启用。去 WebUI 的 `Settings` → `VAE` 中显式选择 `vae-ft-mse-840000`(SD 1.5)或 `sdxl_vae`(SDXL)。另外检查是否开启了 `–medvram` 与 `–no-half-vae` 冲突,建议同时开启。

    Q3:ControlNet 上传图片后,生成结果完全没变化?
    A:三个排查点:① 确认 `Enable` 已勾选;② `Control Weight` 是否太低(至少 0.6);③ 模型与主模型版本不匹配(SD 1.5 的 ControlNet 不能用于 SDXL)。建议先在 `Preprocessor` 中预览处理后的图,确认边缘/骨架提取成功。

    Q4:6GB 显存跑 SDXL 总是卡死,��参数已经按你说设置了?
    A:检查是否同时开启了 `–medvram` 和 `–opt-split-attention`,两者冲突会导致内存溢出。另外,关闭浏览器其他标签页,SD WebUI ���预览图也会占用显存。如果依然卡死,将分辨率降到 640×640,再用 Hires. fix 放大。

    Q5:ComfyUI 和 WebUI 应该选哪个?
    A:如果你是新手,先学 WebUI,界面直观,社区教程多;如果你需要批量处理、复杂工作流或低显存极限优化,ComfyUI 更合适。建议两个都装,根据任务切换——我自己的习惯是:快速出图用 WebUI,精细控制用 ComfyUI。

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。