在私有环境部署 Stable Diffusion 3.5,最先卡住的往往不是显存或采样器,而是权重放哪、配置文件指向哪、断网还能不能跑。建议先把本地目录与权重文件理顺,再启动一次服务,这样后续任何加载报错都能落到具体文件上排查。这里的判断边界是:本文只覆盖文件组织、加载路径与离线验证,不涉及模型微调、推理性能调优或分布式部署。
部署 SD3.5 私有实例时,先按“主模型、文本编码器、VAE 分目录并统一命名”的方式整理权重,再在配置文件里写绝对路径并核对读写权限,断开外网跑通一次出图,最后换一个工作目录再启动一次,确认没有把路径写死。判断是否理顺的标准是:日志不出现找不到权重的报错,换目录启动结果一致,断网启动仍能出图。风险边界在于:不同框架对目录约定的支持程度不同,需要结合自己的启动脚本与系统环境确认。
把主模型、文本编码器、VAE 分目录存放并统一命名
SD3.5 通常涉及三类权重:主模型(transformer / checkpoint)、文本编码器(text encoder,常见为 CLIP 类)以及 VAE。把它们混在一个大目录里,后面配置里写路径时极易指错,因此建议先按类型拆开。
models/
├── sd35/
│ ├── main/
│ │ └── sd35_main.safetensors
│ ├── text_encoder/
│ │ ├── text_encoder_1/
│ │ └── text_encoder_2/
│ └── vae/
│ └── sd35_vae.safetensors
└── loras/
└── (可选)
这是一类通用约定,不是唯一正确做法,但胜在每个加载路径都能一眼查到。命名建议统一小写加下划线,例如 sd35_main.safetensors。文件名大小写在 Linux 与 Windows 上表现不同:Linux 文件系统区分大小写,配置里写 Sd35_Main.safetensors 可能报文件不存在,而 Windows 往往能侥幸命中。如果你在 Windows 上整理权重、再拷到 Linux 运行,务必检查配置与真实文件名的大小写是否完全一致。
在配置文件里把路径写成绝对路径并核对读写权限
路径写错和权限不足是两类最容易被忽略的低级错误。建议在配置里统一写绝对路径,避免启动目录变化导致相对路径失效。不同框架字段名不同,但骨架类似:
# 通用骨架,字段名需替换为你所用框架的真实键名
model:
main: /data/models/sd35/main/sd35_main.safetensors
text_encoder_1: /data/models/sd35/text_encoder/text_encoder_1
text_encoder_2: /data/models/sd35/text_encoder/text_encoder_2
vae:
path: /data/models/sd35/vae/sd35_vae.safetensors
output:
dir: /data/sd35/outputs
写完配置后,用 ls -l 或 stat 确认文件真实存在,并检查运行服务的用户是否对该路径有读权限;输出目录需要写权限。权限不足通常表现为 Permission denied、cannot open file 或直接抛出读取异常,而路径写错常表现为 File not found、No such file or directory。两类报错的措辞有时接近,建议先复制报错里的完整路径,再用命令逐段验证。
断开外网跑通一次出图
这一步是为了验证私有部署确实不依赖外部网络。操作顺序建议:先确认所有模型文件已放在本地,断开外网,启动服务,再执行一次最小出图。启动命令按你的框架替换:
# 示例骨架,参数名需按实际框架替换
python launch.py `--listen` 0.0.0.0 `--port` 7860 \
`--ckpt` /data/models/sd35/main/sd35_main.safetensors
启动后重点看日志里与网络相关的行:是否有访问外部地址、下载权重、检查更新的行为。如果日志里出现尝试连接远端并超时,通常说明某个组件仍配置为在线拉取,需要改成指向本地文件或跳过校验。断网状态下能完成一次出图,才说明核心链路走的是本地权重。
换一个工作目录再启动一次
很多加载问题只在换目录后暴露。把启动脚本换到另一个目录执行,如果仍能正常启动,说明配置用的是绝对路径或路径解析正确。相对路径与绝对路径混用时表现不同:相对路径依赖当前工作目录,换目录后会指向错误位置,报错往往是找不到文件,但路径看起来“像是存在的”。建议用 pwd 确认当前目录,再对照配置里的每一条路径;凡是相对路径,都考虑改成绝对路径后再测一次。
把可用目录结构与启动命令整理成一份清单
最后把验证通过的目录结构和启动命令记下来,方便自己复现或交接。目录树与命令可以写成一份简单的文件,例如 deploy_notes.md 或 README:
目录结构:
/data/models/sd35/
├── main/sd35_main.safetensors
├── text_encoder/text_encoder_1/
├── text_encoder/text_encoder_2/
└── vae/sd35_vae.safetensors
启动命令:
python launch.py `--listen` 0.0.0.0 `--port` 7860 \
`--ckpt` /data/models/sd35/main/sd35_main.safetensors
关键参数:
`--listen` 0.0.0.0 允许内网访问
`--port` 7860 服务端口
`--ckpt` 主模型绝对路径
这份清单不用长,但建议包含:权重绝对路径、启动命令、端口、依赖的配置文件位置,以及断网验证过一次的记录。交接时别人只要按清单核对路径与权限,就能判断是环境问题还是配置问题。