在租用的 GPU 上运行 ComfyUI:经得起重启的部署方案

一个 systemd 单元、放在持久化数据卷上的模型、挡在界面前面的密码,以及 RTX 4090 与 5090 在 SDXL 和 FLUX 上的对比数据。

CGCheapServ GPU 团队作者 7 分钟阅读
画架上摆着一幅发光的图像,旁边是一块 GPU
本页目录5
  1. 目录规划:模型放数据卷,应用交给 systemd 单元
  2. systemd 单元
  3. 不暴露端口的访问方式
  4. 两张显卡的实际表现
  5. 日常运维

ComfyUI 是我们的图像生成客户用得最多的工作流工具,而我们在工单里见到的部署方式,问题往往如出一辙:SSH 会话一关闭,进程就跟着退出;每次重装系统,模型都得重新下载;任何人只要发现了这个端口,就能访问 Web 界面。本文给出的方案可以一次解决这三个问题,另外还附上了我们在 RTX 4090 和 RTX 5090 套餐上实测的 SDXL 与 FLUX 数据。

目录规划:模型放数据卷,应用交给 systemd 单元

把获取成本高的东西全部放在持久化数据卷上,把重建成本低的东西放在应用目录里。在我们的 GPU 套餐中,数据卷挂载在 /data;重装系统时,系统盘会被清空,而 /data 不会。

/opt/comfy/                # the app, a git checkout, disposable
/data/models/checkpoints/  # SDXL, FLUX and friends: 6 to 24 GB each
/data/models/loras/
/data/models/vae/
/data/output/              # generated images

可以从 ComfyUI 模板安装,也可以在 Ubuntu 24.04 的 CUDA 基础镜像上手动安装:

apt install -y git python3-venv
git clone https://github.com/comfyanonymous/ComfyUI /opt/comfy
python3 -m venv /opt/comfy/venv && /opt/comfy/venv/bin/pip install -U pip
/opt/comfy/venv/bin/pip install torch torchvision --index-url https://download.pytorch.org/whl/cu124
/opt/comfy/venv/bin/pip install -r /opt/comfy/requirements.txt
git clone https://github.com/ltdrdata/ComfyUI-Manager /opt/comfy/custom_nodes/ComfyUI-Manager

用 extra_model_paths.yaml 让 ComfyUI 指向数据卷,这样应用目录里就完全不会有模型文件:

cat > /opt/comfy/extra_model_paths.yaml <<'EOF'
data:
  base_path: /data/models/
  checkpoints: checkpoints/
  loras: loras/
  vae: vae/
  clip: clip/
  unet: unet/
EOF

systemd 单元

useradd -r -m -d /opt/comfy -s /usr/sbin/nologin comfy && chown -R comfy /opt/comfy /data
cat > /etc/systemd/system/comfy.service <<'EOF'
[Unit]
Description=ComfyUI
After=network-online.target
[Service]
User=comfy
WorkingDirectory=/opt/comfy
ExecStart=/opt/comfy/venv/bin/python main.py --listen 127.0.0.1 --port 8188 --output-directory /data/output
Restart=always
RestartSec=3
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload && systemctl enable --now comfy

这个单元里有两处是刻意为之的:它只监听 localhost,并且以非特权用户身份运行。自定义节点可以执行任意 Python 代码;一个被攻破的节点如果跑在 root 进程里,整台服务器就彻底失守了。

不暴露端口的访问方式

两扇门,任选其一。私有的那扇是 Tailscale(下单表单里的附加服务):装好之后,无需开放任何端口,就能从您的任意设备访问 http://server-name:8188;同时把 --listen 改成 Tailscale 的地址。公开的那扇是带密码的 Caddy,它还能顺带提供 HTTPS:

apt install -y caddy
HASH=$(caddy hash-password --plaintext 'a-long-password')
cat > /etc/caddy/Caddyfile <<EOF
comfy.example.com {
  basicauth { me $HASH }
  reverse_proxy 127.0.0.1:8188
}
EOF
systemctl reload caddy

千万不要把 8188 端口直接对外发布。ComfyUI 没有任何认证机制,它的 API 可以读写文件,而扫描器几个小时之内就能找到暴露在公网上的实例。

两张显卡的实际表现

在我们的套餐上实测,使用默认工作流、20 步、Euler 采样器、批次大小为 1,并且均在预热之后测量:

模型分辨率RTX 4090 (24 GB)RTX 5090 (32 GB)
SDXL 1.01024 × 10243.9 s2.3 s
SDXL + Refiner 精修模型1024 × 10245.6 s3.3 s
FLUX.1 dev,FP81024 × 102414 s8 s
FLUX.1 schnell,4 步1024 × 10241.9 s1.1 s
SDXL,批次大小 81024 × 102425 s15 s

5090 整体上大约快 1.7 倍,而 32 GB 显存让 FLUX dev 在同时加载 LoRA 和 ControlNet 时也能从容运行;4090 虽然也能跑,却要频繁地换入换出模型。仅就每美元的 SDXL 吞吐量而言,4090 套餐仍然是更划算的选择。

日常运维

  • 更新:cd /opt/comfy && git pull && venv/bin/pip install -r requirements.txt && systemctl restart comfy。更新前先在控制面板里做一份快照;更新后出问题的,往往是自定义节点,而不是 ComfyUI 本身。
  • 重装系统:重新选择模板,重新挂载数据卷,恢复 extra_model_paths.yaml 和 systemd 单元;模型始终原地不动。
  • 磁盘:批次大小超过 1 时,/data/output 增长很快。用定时器每周执行一次 find /data/output -mtime +30 -delete,就能让磁盘占用不至于失控,前提是您已经把想留的图片拷走了。
  • 留意显存:生成过程中运行 nvidia-smi。一个只剩 1 GB 余量的工作流,哪天多加一个节点就会失败;netdata 附加服务可以把显存占用随时间绘制成曲线。

按这套方式部署,GPU 服务器扛得住重启、重装,也扛得住您自己的各种折腾,月复一月,您真正需要动的只有工作流本身。

CG
CheapServ GPU 团队

GPU 服务器集群的基准测试、镜像和模板。

一分钟内部署您的第一台服务器。

以 BTC、ETH、XMR 或 USDT 充值,$25 起。余额永不过期,未使用的部分可退款。

立即注册