简介这份资源面向希望在苹果Mac电脑上本地部署Stable Diffusion的AI绘图爱好者与开发人员尤其适合具备一定命令行基础、想深入研究AI绘图的技术用户。内容围绕Mac环境下的完整部署流程展开涵盖环境准备、依赖安装、模型下载与运行排错等关键环节帮助读者解决跨平台部署中常见的兼容性与配置难题。资源包共3个文件以inscode工程配置、html页面与gitignore忽略规则为主压缩包约5KB体量轻巧便于快速获取与查阅。目前已有107人学习下载属于小众但实用的部署参考资料。读者可借助其中的配置结构与页面文件理解Mac端Stable Diffusion项目的组织方式并配合教程完成从环境搭建到界面运行的全过程为后续模型调试与AI绘图实践打下基础。1. Mac 上跑 Stable Diffusion为什么有人 20 分钟出图有人卡在第一步在 Mac 上部署 Stable Diffusion最反直觉的一点是决定你能不能跑起来的往往不是显卡型号而是 Python 版本和依赖编译顺序。我见过太多人兴冲冲 clone 完仓库pip install一跑torch 装上了、xformers 报错、clip 编译失败最后卡在OSError: dlopen上怀疑人生。这份代码包解决的正是这件事——它把 Mac 平台Apple Silicon 与 Intel 两条线的依赖版本、编译参数、模型加载路径都固定下来让你不用在版本地狱里反复试错。适合谁手里有一台 M 系列芯片的 Mac、想本地跑图不依赖云端算力、又不想花两天配环境的开发者和设计从业者。如果你只是想点几下出图那在线工具更省事但如果你要批量生成、要接自己的脚本、要控制 seed 和采样器参数本地部署是绕不开的。2. 环境准备从 Python 版本到依赖编译的完整链路2.1 为什么 Mac 上必须锁 Python 3.10Stable Diffusion 的官方实现和大多数衍生仓库对 Python 版本相当敏感。3.11 在部分依赖上会出现distutils被移除导致的编译失败3.9 又缺少一些类型标注特性。我一般会直接锁 3.10.x这是目前兼容性最稳的区间。先确认你的芯片架构这决定了后面装哪个版本的 torch# 查看芯片型号和系统版本 uname -m sw_vers # Apple Silicon 输出 arm64Intel 输出 x86_64逻辑说明uname -m返回arm64说明是 M 系列芯片走 MPS 加速返回x86_64则是 Intel 机型只能走 CPU 推理速度差距在 5 到 10 倍。sw_vers确认系统版本低于 macOS 12.3 的 M 系列机型不支持 MPS 后端这一点很多人忽略。接下来装 Python。不建议用系统自带的用 Homebrew 或 pyenv 都行# 用 Homebrew 安装 Python 3.10 brew install python3.10 # 确认路径 which python3.10 python3.10 --version参数说明python3.10是 Homebrew 的 formula 名装完后可执行文件通常是python3.10不会覆盖系统默认的python3。这样做的目的是让虚拟环境明确绑定到 3.10避免和系统 Python 混用。2.2 虚拟环境与 torch 安装MPS 加速的关键参数虚拟环境这一步别省。Mac 上全局 pip 装包很容易和系统组件冲突尤其是 numpy 和 protobuf。# 创建并激活虚拟环境 python3.10 -m venv sd-env source sd-env/bin/activate # 升级 pip 和 setuptools pip install --upgrade pip setuptools wheel逻辑说明venv创建的是隔离环境source激活后所有 pip 安装都落在sd-env目录内。setuptools和wheel必须先升级否则后面编译某些包时会因为旧版 setuptools 不支持pyproject.toml而报错。装 torch 是整条链路里最容易翻车的一步。Apple Silicon 要用带 MPS 支持的版本# Apple Silicon 安装 torchMPS 支持 pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu # 验证 MPS 是否可用 python -c import torch; print(torch.backends.mps.is_available())参数说明--index-url指向 PyTorch 官方 CPU 轮子源Mac 上没有 CUDA所以不需要 CUDA 版本。torch.backends.mps.is_available()返回True才说明 MPS 后端可用。如果返回False先检查系统版本是否低于 12.3再检查是否装成了 x86 版本的 torch。注意如果你在 M 系列 Mac 上通过 Rosetta 运行终端uname -m会返回x86_64导致装错 torch 版本。用arch命令确认当前终端架构必要时用原生终端重新操作。2.3 依赖清单与模型文件放置代码包里的requirements.txt通常包含 diffusers、transformers、accelerate、safetensors 等。安装时建议逐行确认版本# 安装项目依赖 pip install -r requirements.txt # 如果遇到编译错误单独装预编译版本 pip install --only-binary :all: opencv-python逻辑说明--only-binary :all:强制 pip 只使用预编译轮子避免在 Mac 上现场编译 OpenCV 这种耗时且容易失败的包。如果某个包没有对应平台的轮子pip 会直接报错而不是卡在编译阶段方便你快速定位。模型文件放置是另一个高频问题。常见做法是把.safetensors或.ckpt放到models/Stable-diffusion/目录下VAE 放到models/VAE/LoRA 放到models/Lora/。目录结构不对WebUI 启动后模型下拉框就是空的。文件类型推荐目录格式优先级主模型models/Stable-diffusionsafetensors ckptVAEmodels/VAEsafetensorsLoRAmodels/Lorasafetensors嵌入embeddingspt优先用 safetensors 格式加载更快而且不会执行模型文件里的任意代码安全性更好。3. 启动与出图参数怎么设、显存怎么省3.1 启动命令与 MPS 回退策略依赖装完后启动方式取决于你用的是哪套前端。如果是 WebUI 类项目通常有launch.py或webui.sh# 启动 WebUI指定 MPS 后端 python launch.py --precision full --no-half --skip-torch-cuda-test # 如果 MPS 报错回退到 CPU python launch.py --precision full --no-half --skip-torch-cuda-test --use-cpu all参数说明--skip-torch-cuda-test跳过 CUDA 检测Mac 上必须加否则启动时会因为找不到 CUDA 而中断。--no-half和--precision full是因为 MPS 对 fp16 的支持在部分系统版本上不稳定强制 fp32 虽然慢一点但不容易出黑图。--use-cpu all是最后的回退方案速度会慢很多但至少能跑通。我一般会先不加--use-cpu看 MPS 能不能正常工作。如果出图是纯黑或者报MPS backend out of memory再考虑回退。3.2 采样器与步数的实际选择出图质量跟采样器关系很大。Mac 上因为算力有限步数不宜拉太高。常见做法是采样器选 DPM 2M Karras 或 Euler a前者适合写实后者适合二次元步数设 20 到 30超过 30 收益递减明显CFG scale 设 7 到 9太低画面松散太高颜色过饱和分辨率从 512x512 起步M 系列 16G 内存可以尝试 768x768# 用 diffusers 直接调用的最小示例 from diffusers import StableDiffusionPipeline import torch pipe StableDiffusionPipeline.from_pretrained( models/Stable-diffusion/your_model, # 替换为实际模型路径 torch_dtypetorch.float32, # MPS 下用 fp32 更稳 ) pipe pipe.to(mps) # 指定 MPS 设备 image pipe( prompta cat sitting on a desk, soft light, num_inference_steps25, # 步数 guidance_scale7.5, # CFG scale ).images[0] image.save(output.png)逻辑说明torch_dtypetorch.float32是为了避开 MPS 上 fp16 的兼容问题。pipe.to(mps)把模型加载到 MPS 设备。num_inference_steps控制去噪步数guidance_scale对应 WebUI 里的 CFG scale。这段代码可以直接跑前提是模型路径正确。3.3 显存与内存优化注意力切片和模型卸载Mac 是统一内存架构显存和内存共享。16G 机型跑 512x512 基本够用但跑 768 以上就容易触发内存压力。两个关键优化# 开启注意力切片降低峰值内存 pipe.enable_attention_slicing() # 开启模型 CPU 卸载进一步省内存但会变慢 pipe.enable_model_cpu_offload()参数说明enable_attention_slicing()把注意力计算拆成小块峰值内存能降 30% 左右代价是速度略慢。enable_model_cpu_offload()把不用的模型层放到 CPU 内存需要时再加载回 MPS适合内存紧张的机型但推理速度会明显下降。注意enable_model_cpu_offload()和pipe.to(mps)不要同时用前者会接管设备调度同时用可能导致设备冲突报错。4. 避坑排查Mac 部署最常见的五类翻车4.1 现象pip install 卡在 Building wheel for opencv-python原因Mac 上没有预编译的 opencv 轮子pip 尝试从源码编译而源码编译依赖 CMake 和完整 Xcode 命令行工具缺一个就卡住。解决先装 Xcode 命令行工具xcode-select --install然后强制用预编译轮子pip install --only-binary :all: opencv-python。如果还是没有对应轮子换opencv-python-headless它依赖更少。4.2 现象启动时报 MPS backend out of memory原因MPS 后端的内存分配策略和 CUDA 不同不会自动释放缓存连续出图后内存占用会累积。解决在每次推理后手动释放torch.mps.empty_cache()或者降低分辨率、开启注意力切片。16G 机型建议单次出图不超过 768x768。4.3 现象出图全黑或全灰原因MPS 上 fp16 精度问题或者 VAE 用了不兼容的版本。解决启动参数加--no-half --precision full强制 fp32。如果还是黑图换一个 VAE 试试部分模型自带的 VAE 在 MPS 上就是有问题。4.4 现象模型下拉框为空原因模型文件放错目录或者文件扩展名不被识别。解决确认模型放在models/Stable-diffusion/下扩展名是.safetensors或.ckpt。WebUI 需要刷新模型列表点一下刷新按钮或者重启。4.5 现象终端里 uname -m 返回 x86_64 但明明是 M 系列芯片原因终端通过 Rosetta 运行整个环境被转译成 x86。解决找到终端应用右键显示简介取消勾选「使用 Rosetta 打开」重启终端后再确认uname -m返回arm64。这一步不做后面装的 torch 全是 x86 版本MPS 根本用不了。5. 进阶技巧用脚本批量出图与 seed 复现单张出图跑通后真正提效的是批量脚本。我一般会写一个读 CSV 的循环每行一个 prompt 和 seed跑完自动存图并记录参数。这样做的价值在于seed 固定后你可以精确复现某张图微调 prompt 看变量影响。import csv import torch from diffusers import StableDiffusionPipeline pipe StableDiffusionPipeline.from_pretrained( models/Stable-diffusion/your_model, torch_dtypetorch.float32, ) pipe pipe.to(mps) pipe.enable_attention_slicing() with open(prompts.csv, newline, encodingutf-8) as f: reader csv.DictReader(f) for i, row in enumerate(reader): generator torch.Generator(mps).manual_seed(int(row[seed])) image pipe( promptrow[prompt], num_inference_stepsint(row.get(steps, 25)), guidance_scalefloat(row.get(cfg, 7.5)), generatorgenerator, ).images[0] image.save(foutput/{i:04d}_{row[seed]}.png) torch.mps.empty_cache() # 每张图后释放缓存逻辑说明torch.Generator(mps).manual_seed()把随机种子固定同样的 seed 加同样的 prompt 和参数出图结果一致。torch.mps.empty_cache()放在循环末尾防止内存累积导致后面几张图报 OOM。CSV 里可以只写 prompt 和 seedsteps 和 cfg 用dict.get给默认值这样格式更灵活。验证方法跑两次同样的 CSV对比输出文件的哈希值。如果两次哈希一致说明 seed 复现链路是通的如果不一致检查是不是漏了 generator 参数或者用了非确定性采样器。从那以后我每次部署新环境都会先用一张 512x512、20 步的图做冒烟测试确认 MPS 可用、内存不爆、seed 可复现再开始批量跑。这个习惯帮我省了很多「跑了一半崩掉」的后悔药。希望帮到你。本文还有配套的精品资源点击获取
阅读完成 · 觉得有帮助?