自托管 AI 图像生成器需要什么硬件?
了解 Stable Diffusion 自托管的真实配置:CPU VPS 可运行 SD 1.5,但 512×512 每张需 1至2 分钟;SDXL 模型约 6.94 GB,ComfyUI 安装命令与磁盘预算也一并说明。
自托管 AI 图像生成器的实际需求
自托管 AI 图像生成器由一个 Web 应用和一个模型文件组成。应用是 ComfyUI,可在任何 Linux 主机上运行。模型决定硬件需求。SDXL 级别的 checkpoint 是一个 6.94 GB 的文件,并且需要放在 GPU 内存中。这一事实决定了整体预算,因此请先阅读下面的硬件配置梯度,再租用服务器。
简要结论:仅使用 CPU 的 VPS 可以安装并提供该软件服务,也可以使用较旧的 Stable Diffusion 1.5 模型,以 512x512 分辨率生成图像,每张需要一到两分钟。同一台主机使用 SDXL 以 1024x1024 分辨率生成图像时,每张需要十到二十分钟。这不是配置故障,而是计算性能所决定的结果。本指南将对此进行说明。
为什么模型大小决定机器配置
图像生成会运行去噪循环。30-step 渲染会对图像完整运行模型 30 次,每次都会读取所有权重。因此,半精度 SDXL 的权重约为 6.9 GB。完成 30-step 渲染前,内存中大约会传输 200 GB 数据。
配备 24 GB 显存(VRAM,即焊接在图形芯片旁的内存)的 GPU 每秒可读取数百 GB 数据,并且可以一次容纳全部 6.9 GB 权重。CPU VPS 每秒从系统 RAM 读取数十 GB 数据,而且没有用于卷积运算的矩阵硬件。因此,同一个循环的运行速度会慢 1 到 2 个数量级。这与文本模型所受的内存带宽限制相同,建议同时阅读VPS 配备 GPU 何时才真正值得投入成本。
图像生成与文本生成有一个重要区别。聊天模型会以流式方式输出 token,因此即使机器较慢,使用体验仍然尚可,因为您可以在阅读时看到文字逐步出现。图像只有在最后一步完成后才会显示。运行缓慢意味着只能盯着进度条等待。
硬件梯度及实际数值
下面的区块列出了截至 2026 年 7 月,生成一张 1024x1024、30 steps、使用 Euler sampler 的 SDXL 图像时的典型数据。可将这些数值视为数量级参考。采样器、步数和分辨率都会影响结果。
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 显存的显卡。卸载会在每个 step 增加耗时,因此 6 GB 显卡每张图的耗时更接近 1 分钟,而不是 30 秒。达到 8 GB 时,基础模型可以装入显存,渲染过程较为顺畅。达到 12 GB 时,您可以在 checkpoint 旁同时加载一个或两个 ControlNet,而无需卸载。达到 24 GB 时,您可以在一个工作流中运行 SDXL、refiner 和 upscaling,还可以开始训练 LoRA 适配器;训练所需的内存远多于生成图像。
CPU VPS 能做什么,不能做什么
它能做的事情比很多人预期的更多,但少于营销宣传所暗示的范围。请明确这条界限。
CPU VPS 可以安装 ComfyUI、提供 Web 界面、存放模型库、运行队列,并且完全不需要 GPU 就能生成图像。使用 Stable Diffusion 1.5、512x512 分辨率和 20 步采样时,配备 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 终止。此时进程会消失,并在 dmesg 中显示 Killed,且不会留下 Python traceback。
在 GPU 机器上安装 ComfyUI
以下是上游提供的命令。从已安装 NVIDIA 驱动的全新 Ubuntu 24.04 开始。先确认驱动,因为不执行此检查时,后续所有故障看起来都一样。
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 磁盘空间,并监控 outputs 目录:1024x1024 PNG 文件每个占用 1 到 2 MB, unattended 批处理会悄悄填满小容量磁盘。将 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,以 512x512 运行 SD 1.5,并接受每张图像需要一两分钟。这是实际可行的入门方案,成本只是配备 GPU 的方案的一小部分。在您做出决定前,也可以用它托管模型库和工作流。
如果您每天都要反复调整提示词,可以按小时从 GPU 云租用至少配备 12 GB VRAM 的 GPU,并在停止使用后将其关机。图像生成属于突发性工作。GPU 空闲却按月计费,是人们在这方面超支的最常见原因。将检查点保存在廉价的块存储上,并挂载这些存储。
如果您要为其他人提供服务,或训练 LoRA 适配器,则需要 24 GB VRAM 和一台长期保留的机器。到了这个阶段,同一台机器通常还可以运行本地语言模型,从而发挥更大作用。使用 Ollama 自托管 LLM 中介绍的就是这种配置。
无论选择哪一档,在相信任何已发布的数据前,都应先测量自己的机器。对同一个提示词排队运行五次,然后读取 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 可以让 SDXL 在 1024x1024 下稳定运行。低于此容量时,ComfyUI 会自动将层转移到系统 RAM,最低约 1 GB VRAM 仍可运行,但每个被转移的步骤都会增加耗时。12 GB 可以在加载 checkpoint 的同时容纳一个 ControlNet,24 GB 可以在一个工作流中同时容纳基础模型、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 访问。如果需要让多人访问,则在其前面部署带身份验证的反向代理。
为什么我的渲染进程被终止了,却没有错误消息?
如果进程消失,并且 Killed 出现在 dmesg 中,同时没有 Python traceback,这是 Linux 的内存不足终止程序,而不是 ComfyUI 的错误。在仅使用 CPU 的服务器上,模型权重存放在系统 RAM 中,因此 SDXL 需要约 16 GB,SD 1.5 需要约 8 GB,此外还需要工作空间。增加 RAM、增加 swap,或改用更小的模型和更低的分辨率。