自托管 Stable Diffusion 需要什么硬件?
了解 CPU VPS 运行 SD 1.5 与 SDXL 的真实速度差异,SDXL 6.94 GB 模型的显存要求、ComfyUI 安装命令,以及硬盘预算。
自托管 AI 图像生成器实际需要什么
自托管 AI 图像生成器由一个 Web 应用和一个模型文件组成。应用是 ComfyUI,可在任何 Linux 主机上运行。模型决定所需的硬件。SDXL 级检查点是一个 6.94 GB 的文件,需要放在 GPU 内存中。仅这一点就决定了整体预算,因此在租用任何资源前,请先查看下面的硬件配置梯度。
概括来说:仅使用 CPU 的 VPS 可以安装并提供该软件,也可以使用较旧的 Stable Diffusion 1.5 模型,以 512x512 分辨率生成图像,每张需要一到两分钟。同一台主机使用 SDXL 以 1024x1024 分辨率生成图像时,每张需要十到二十分钟。这不是配置损坏,而是计算能力的结果。本指南将对此进行说明。
模型大小决定机器配置
图像生成会运行去噪循环。30 步的渲染会对图像完整运行模型 30 次,每一步都会读取所有权重。采用半精度的 SDXL 约有 6.9 GB 权重,因此在图像生成完成前,30 步渲染大约要在内存中传输 200 GB 数据。
具有 24 GB 显存(VRAM,即焊接在图形芯片旁的内存)的 GPU 每秒可读取数百 GB 数据,并且可以一次性容纳全部 6.9 GB 权重。CPU VPS 每秒只能读取数十 GB 的系统内存,而且没有用于卷积运算的矩阵硬件,因此同一个循环会慢 1 到 2 个数量级。这与决定文本模型性能的内存带宽原理相同,建议同时阅读VPS 何时值得购买 GPU。
图像生成与文本生成有一个重要区别。聊天模型会流式生成 token,因此即使机器较慢,您仍可在阅读时看到文字,使用体验尚可。图像只有在最后一步完成后才会显示。速度慢就意味着一直盯着进度条。
硬件梯度:实际数值
以下区块列出了截至 2026 年 7 月,使用 SDXL 生成一张 1024x1024 图像时的典型数据,采样步数为 30,采样器为 Euler。请将这些数据视为数量级参考。采样器、步数和分辨率都会影响结果。
The data behind this chart
[
{
"label": "8 vCPU VPS, no GPU",
"seconds_per_image": 780
},
{
"label": "8GB VRAM GPU",
"seconds_per_image": 32
},
{
"label": "12GB VRAM GPU",
"seconds_per_image": 18
},
{
"label": "24GB VRAM GPU",
"seconds_per_image": 9
}
]CPU 一栏为 780 秒,约 13 分钟。24 GB 显卡需要 9 秒。这就是升级硬件所缩短的时间差。
请按以下方式理解这条梯度。显存低于 8 GB 时,SDXL 仍可运行,因为 ComfyUI 会自动将部分层卸载到系统 RAM,并且最低可驱动仅有 1 GB 显存的显卡。每个步骤都需要进行卸载,因此会增加耗时。6 GB 显卡生成一张图的时间更接近 1 分钟,而不是 30 秒。显存达到 8 GB 后,基础模型可以完整装入,生成过程也更顺畅。显存达到 12 GB 后,可以在不进行卸载的情况下,同时加载一个或两个 ControlNet 以及 checkpoint。显存达到 24 GB 后,可以在一个工作流中运行 SDXL、refiner 和放大处理,还可以开始训练 LoRA 适配器;训练所需的显存远多于生成图像所需的显存。
CPU VPS 能做什么,不能做什么
它能做的事情比很多人预期的更多,但比宣传内容暗示的更少。必须明确这条界线。
CPU VPS 可以安装 ComfyUI、提供 Web 界面、保存模型库、运行队列,并且在完全没有 GPU 的情况下生成图像。使用 Stable Diffusion 1.5、512x512 分辨率和 20 steps 时,配备 8 个现代 vCPU 和 16 GB RAM 的实例,每张图预计需要约 60 到 150 秒。对于运行一整晚的批处理任务,或通过队列提供低流量图像接口,这样的性能确实足够。
CPU VPS 无法支持交互式工作。提示词迭代意味着一小时生成 20 张图;如果每张需要 13 分钟,一小时只能生成 4 张。它也无法用于训练。CPU 上的 LoRA 微调通常需要数天,而不是数小时,因此应视为不可用。
仅使用 CPU 时,内存规则不同于 GPU。模型权重会加载到系统 RAM,因此需要为模型大小和运行空间预留内存:SDXL 约需 16 GB RAM,SD 1.5 约需 8 GB RAM。4 GB 的实例可以启动 ComfyUI,但随后会在第一次生成图像的过程中被 out-of-memory killer 终止。此时进程会消失,Killed 会显示在 dmesg 中,并且不会留下 Python traceback。
在 GPU 服务器上安装 ComfyUI
以下是上游提供的命令。从全新安装的 Ubuntu 24.04 开始,并确保 NVIDIA 驱动已经安装。先确认驱动,因为不做这一步,后续所有故障看起来都一样。
nvidia-smi该命令必须输出包含显卡和 CUDA 版本的表格。出现 command not found 或 NVIDIA-SMI has failed because it couldn't communicate with the NVIDIA driver,表示驱动缺失,或者升级后内核模块未加载。先修复此问题再继续,否则 ComfyUI 会静默回退到 CPU,之后很容易误以为是软件本身的问题。
sudo apt update
sudo apt install -y git python3-venv python3-pip wget
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
python3 -m venv venv
. venv/bin/activate
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu130
pip install -r requirements.txt虚拟环境不是可选建议。PyTorch 会安装大量依赖。在还运行其他程序的服务器上全局安装 PyTorch,可能导致其他程序无法运行。继续操作前,先确认 PyTorch 可以识别显卡。
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"True 和显卡名称同时出现,表示整个软件栈正常工作。出现 False,表示已安装的 wheel 与驱动不匹配,通常是因为之前缓存了仅支持 CPU 的 torch wheel。使用上面的 index URL 重新安装。
获取模型并规划磁盘空间
ComfyUI 不包含模型权重。检查点放在 models/checkpoints 中,VAE 文件放在 models/vae 中,LoRA 适配器放在 models/loras 中。
cd ~/ComfyUI/models/checkpoints
wget https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/resolve/main/sd_xl_base_1.0.safetensors始终优先使用 .safetensors,不要使用 .ckpt。.ckpt 文件是经过 pickle 序列化的 Python 对象,加载它会执行构建者写入的代码。safetensors 格式只保存张量,因此恶意文件无法执行任何代码。
存储空间是人们最容易忽略的成本。一个 SDXL 基础检查点占用 6.94 GB。精修模型还要占用 6 GB。单个 ControlNet 模型占用 1.4 到 2.5 GB,放大模型占用 60 到 350 MB,LoRA 占用 20 到 400 MB。使用这类工具的人通常会在一周内再下载第二个、第三个基础模型。为可用的安装预留 100 GB 磁盘空间,同时监控输出目录:1024x1024 PNG 文件每个占用 1 到 2 MB,无人值守的批处理会悄悄填满小容量磁盘。将 models/ 和 output/ 放在可扩容的卷上,并使用类似加密的对象存储增量备份的方式备份工作流 JSON 文件。模型权重可以重新下载。调试完成的工作流无法重新获取。
运行并安全访问
cd ~/ComfyUI
. venv/bin/activate
python main.py --listen 127.0.0.1 --port 8188ComfyUI 使用 8188 端口提供服务。在仅使用 CPU 的主机上,添加 --cpu,强制使用 CPU 路径,避免因找不到 CUDA 设备而启动失败。
绑定到 127.0.0.1,不要绑定到 0.0.0.0。ComfyUI 没有登录界面,也没有用户账户。任何能够访问该端口的人都可以提交任务、读取您生成的所有图像,以及安装自定义节点。这相当于在服务器上执行任意代码。请改为从笔记本电脑通过 SSH 隧道访问。
ssh -N -L 8188:127.0.0.1:8188 you@your-server然后在本地打开 http://127.0.0.1:8188。如果需要真正的多用户访问,请在其前面配置带身份验证的反向代理,并让应用继续绑定到 localhost。同样的原则适用于任何未进行身份验证的自托管服务。这也是在 VPS 上 使用 Docker Compose 部署时的标准做法。
让它在 systemd 下持续运行
SSH 会话关闭后就退出的渲染队列不算服务。编写 /etc/systemd/system/comfyui.service。
[Unit]
Description=ComfyUI
After=network-online.target
[Service]
User=comfy
WorkingDirectory=/home/comfy/ComfyUI
ExecStart=/home/comfy/ComfyUI/venv/bin/python main.py --listen 127.0.0.1 --port 8188
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.targetsudo systemctl daemon-reload
sudo systemctl enable --now comfyui
systemctl status comfyuiactive (running),并看到日志行 To see the GUI go to: http://127.0.0.1:8188,表示服务已启动。注意,ExecStart 直接指定了虚拟环境中的解释器,因为 systemd 不会加载您的 shell 配置文件,也不会发生 activate。
按预算给出的务实建议
如果您想尝试图像生成,而且成本比速度更重要,可以选择配备 16 GB RAM 的 CPU VPS,运行 SD 1.5 并使用 512x512 分辨率,同时接受每张图像需要等待一两分钟。这是诚实的入门方案,成本只是配备 GPU 的方案的一小部分。在您做出决定前,也可以用它托管模型库和工作流。
如果您每天都要反复调整提示词,可以按小时从 GPU 云租用至少配备 12 GB VRAM 的 GPU,并在停止使用后将其关闭。图像生成通常是突发性工作;闲置的 GPU 却按月计费,是人们在这方面超支的最常见原因。将模型 checkpoint 保存在廉价的块存储上,并挂载使用。
如果您要为其他人提供服务,或者要训练 LoRA adapter,就需要 24 GB VRAM,以及一台长期运行的机器。到了这个阶段,同一台机器通常也可以运行本地语言模型,从而发挥更大价值。使用 Ollama 自托管 LLM 中介绍的就是这种配置。
无论您选择哪个级别,都应先测量自己的机器,再相信任何已发布的数据。对同一个提示词排队运行 5 次,然后读取 ComfyUI 在控制台中输出的每次迭代耗时。这个数值才是您实际所处的级别。
FAQ
我可以在没有 GPU 的情况下运行 Stable Diffusion 吗?
可以。ComfyUI 使用 python main.py --cpu 运行,即使没有显卡也能生成真实图像。在 8 个现代 vCPU 上,使用 Stable Diffusion 1.5 生成 512x512 图像大约需要 60 到 150 秒,使用 SDXL 生成 1024x1024 图像需要 10 到 20 分钟。这适合执行过夜批处理和低流量端点。不适合反复调整提示词,完全无法用于训练。
运行 SDXL 需要多少 VRAM?
8 GB VRAM 可以在 1024x1024 分辨率下流畅运行 SDXL。低于此容量时,ComfyUI 会自动将层卸载到系统 RAM,最低约 1 GB VRAM 仍可运行,但每个被卸载的步骤都会增加耗时。12 GB VRAM 可以在加载 checkpoint 的同时容纳一个 ControlNet,24 GB VRAM 可以在一个工作流中同时容纳基础模型、refiner 和放大处理,也是训练 LoRA 适配器的实际最低容量。
模型需要多少磁盘空间?
仅 SDXL 基础 checkpoint 就占用 6.94 GB,refiner 还会增加约 6 GB。每个 ControlNet 模型占用 1.4 到 2.5 GB,LoRA 适配器占用 20 到 400 MB,放大模型最多占用 350 MB。为包含几个基础模型的可用安装预留 100 GB,并单独监控输出目录,因为 1024x1024 的 PNG 文件每个通常占用 1 到 2 MB。
将 ComfyUI 暴露到公网安全吗?
不安全。ComfyUI 完全没有身份验证功能,其自定义节点系统会从界面安装并运行 Python 代码,因此开放端口等同于在服务器上提供远程代码执行能力。将其绑定到 127.0.0.1,通过 SSH 隧道和 ssh -N -L 8188:127.0.0.1:8188 you@your-server 访问;如果需要让多人访问,则在前面部署带身份验证的反向代理。
为什么渲染进程被终止,却没有错误消息?
如果进程在 dmesg 中显示 Killed 后消失,且没有 Python traceback,这是 Linux 的内存不足终止机制,不是 ComfyUI 故障。在仅使用 CPU 的服务器上,模型权重位于系统 RAM 中,因此 SDXL 需要约 16 GB,SD 1.5 需要约 8 GB,此外还需要工作空间。增加 RAM、增加 swap,或改用更小的模型和更低的分辨率。