算力集群的搭建 🚧 筹备中
13-云算力接入 · 2026-10-12 · 7.0 KB
🚧 筹备中:本专题尚在筹备(内容仍在校对与补充 ⇒ 请以应用实际界面与平台控制台为准 ⚠)
「算力集群」=把 N 台能跑 ComfyUI 的机器放进一个池:提交任务时,应用自动挑当前最空闲的那台跑。
本文讲清它凭什么值得搭(低门槛 · 高收益),以及怎么搭起来(要几台 · 每台准备什么 · 怎么登记 · 怎么验证);⛔ 不写镜像内部与运维部署细节。
本专题手工维护(2026-10-12 建);⚠ 平台界面与地址形态以控制台为准(本页快照 2026-10-12)。
⚠ 平台预期(先决条件):本文步骤基于「优云智算(CompShare)」平台写(实例形态 / 地址形态 / 云盘路径都是它的)⇒ 换用其它平台时:思路一样,但位置与名称不同 ⇒ 照着找对应项 ✓
⚠ 另一格:要拉进来的若是你自己局域网里的另一台机器(不是云实例)⇒ 见《ComfyUI 本地部署 · 局域网算力集群》(机制相同;前提与说辞不同:免 token · inputDirectory 必填 · 走本地库 ✓)
一、★ 先说结论:这是低门槛、高收益的设计
| 一句话 | 展开 |
|---|---|
| 门槛低到底 | 每台机器只需跑着 ComfyUI + 在应用里登记一条节点 ⇒ ⛔ 不装"集群服务/Agent"、⛔ 不开独立控制台、⛔ 不改镜像 ✓ |
| 收益看得见 | 多台一进池 ⇒ 批量总时长被摊薄、长任务不再堵线、单点故障只少一台不停线 ✓ |
| 加机器的手续 | 复制一行 JSON、改地址、保存 —— 就这些 ✓ |
⇒ 它补的正是"一台机器串行排队"这个最要命的瓶颈:你的活不再被算力排队卡住 ✓
(为什么"高收益"、前提是什么 ⇒ 见 §二;怎么挑机 ⇒ §七;⚠ 但有些事它做不到,见 §九)
二、★★ 为什么值得搭:低门槛 · 高收益(逐条给机理)
2.1 "低门槛":三条,都是"一行 JSON 的事"
| 门槛 | 实际 |
|---|---|
| 要不要装东西 | ⛔ 不用 —— 没有"集群服务/Agent",每台就是一台普通 ComfyUI ✓ |
| 要不要先买好几台才能开始 | ⛔ 不用 —— 集群默认那一条就是本机;本机 + 一台云就已经是集群 ✓ |
| 加第三台要干什么 | 复制一行 JSON、改地址 ⇒ 保存即可 ✓ |
2.2 "高收益":六条机理(每条都问一句"为什么成立")
| # | 收益 | 机理(为什么成立) |
|---|---|---|
| 1 | 批量吞吐直接叠加(最明显) | 每台默认并发 1 ⇒ 多一台就多一个"跑位" ⇒ 一批 N 个任务的总时长按可用跑位数摊薄(⚠ 是"任务级并行",单个任务不会变快 —— 见 §九)✓ |
| 2 | 长任务不再堵住整条线 | 长视频 / 高清放大 / 多参考 在单台上就是"串行排队"(排在后面的只显示"排队中"✗ 干等);多台一开 ⇒ 排队的活被分流 ✓ |
| 3 | 本机与云端各干各自擅长的 | 同类多台可并存:本机吃轻活(快、零成本、反馈快)、云卡吃重活(32 GB 显存跑大模型)⇒ 一台机器再也不用"什么都扛" ✓ |
| 4 | 交互不再被批任务挤掉 ⭐ | 单台并发 1 时,你一发批量,交互试跑就被挤到队尾;集群下有别的机器接手 ⇒ 边跑批量、边试参数 ✓ |
| 5 | 抗单点:坏的只少一台,不是全停 | 某台关机 / 换域名 ⇒ 只把它排除出调度,其余照跑;只有全部不可达才"会话内回退单台" ✓ |
| 6 | 峰值可弹性 | 要交片那几天多开两台(用完关机)、平时留一台 ⇒ 峰值不再被算力卡住,而钱只花在峰值上 ✓ |
⇒ 一句话:它买的不是"更便宜的单价",而是"更短的总时长 + 更少的干等 + 更稳的产线" ✓
(⚠ 多台同时跑=多台同时计费 ⇒ 省的是时间,不是账单,见 §九)
2.3 ★ 收益看得见
① 「算力集群」页的健康条:如果看到**多台同时 `运行 1`** ⇒ 并行正在生效 ✓
(只有一台在 `运行 1`、其余 `运行 0` ⇒ 说明你的活还没形成批量,或并发上限设成了 1 但只提交了一个任务)
② 批量任务的总时长:同样 10 个任务,1 台跑 vs 3 台跑 ⇒ 实测一次就有体感 ✓
⚠ 本页不给"提速百分之几":每台并发、任务大小、各台权重齐不齐都不同 ⇒ 任何笼统数字都不诚实 ✗(自己按上面两条测 ✓)
三、先分清:单台 还是 集群(二者互斥)
| 形态 | 行为 | 什么时候用 |
|---|---|---|
| 单台 | 指定一台实例跑,任务都发到它 | 只有一台;或想固定用某台 ✓ |
| 集群 | 自动挑当前最空闲的节点跑 | 有多台(本机 + 云实例)时吞吐更好 ✓ |
⚠ 三条要记住:
- 互斥:在「算力」面板里选单台会顺手关掉集群(避免集群把单台选择抢走)✓
- 集群优先:集群开着时,ComfyUI 任务走集群;关掉集群 ⇒ 回到单台地址 ✓
- 会话内回退:连续 3 次全不可达 ⇒ 本次会话回退单台,且不动你的集群配置;
节点恢复可达后自动重新启用 ✓(提示原话见 §八)
⚠ 术语:集群里每一台叫一个「节点」(不是"实例"——"实例"在《用镜像创建实例》那篇里指平台上的机器)✓
四、每台机器要满足的四条硬要求
| # | 要求 | 怎么做 | 不满足会怎样 |
|---|---|---|---|
| 1 | 跑着 ComfyUI | 用镜像建的实例(镜像内自动起)✓ | 探测不到 ⇒ 被静默排除(不报错,只是永远不选它)⚠ |
| 2 | 地址含 token / 路径前缀、不带尾斜杠 | 从平台整段复制完整地址(形如 http://8188-<实例ID>-s1.pod.compshare.cn)✓ | 缺 token ⇒ 全路径 404 且被静默排除;尾斜杠 ⇒ 403 / 405 ⚠ |
| 3 | inputDirectory 填绝对路径,且与实例上逐字一致 | 如 /root/ComfyUI/input ✓ | 远端节点必填;填错 ⇒ 报 Invalid file path ✗ |
| 4 | 权重 / 模型各台可以有差异,但模板按"任务实际落到的那台"解析 | 想让 §二 那条"吞吐叠加"真吃满 ⇒ 同镜像 + 同云盘最省心 ✓ | 用错库 ⇒ 任务必挂,而且报错只会说"模型找不到"(最难查的一类 ✗) |
⚠ 两条平台侧的提醒(沿用本专题前面几篇):
- 平台给的地址里端口已经带上了(8188)⇒ 别再自己拼
:8188✓ - 权重放挂载的云盘(如
/cloud/models/...),并让实例与云盘同区;⚠ 云盘内容不会进镜像,实例里的改动也只落系统盘 ⇒ 想让"多台一致"最省心的做法是同一镜像 + 同一云盘 ✓
五、在应用里登记节点(逐步)
① 打开:设置 →「算力集群」(或顶栏「算力」→ 算力集群)
② 开:点「优先启动(设为首选算力)」⇒ 徽章变「集群调度已开启 · 优先选空闲节点」✓
③ 写:在下面的 JSON 数组里逐台写节点
(说明块原话:上面编辑的是 cluster.json 的 targets 数组,每个对象一台服务器 ✓)
④ 存:点「保存集群配置」⇒ 提示「已写入 cluster.json」✓
字段逐个说(照界面说明):
| 字段 | 必填? | 含义 / 默认 |
|---|---|---|
id | 可选 | 稳定标识,缺省自动生成 ⚠ 别与引擎保留值同名(见 §八)✓ |
name | 必填 | 只用于显示,随便起 ✓ |
baseUrl | 必填 | 该台的 ComfyUI 根地址(含 token / 路径前缀、不带尾斜杠)✓ |
inputDirectory | 远端必填 | 该台的 ComfyUI input 绝对路径;本机节点(回环地址)可留空 ⇒ 应用回落到"ComfyUI 根目录"推断 ✓ |
maxConcurrentJobs | 可选 | 目标并发(软上限),默认 1 ✓ —— ⚠ 这是"这台同时接几个任务",调大等于给这台机器加跑位(受显存限制) |
enabled | 可选 | 默认 true;false ⇒ 即使空闲也不选它 ✓ |
可直接改用的样例(⚠ 地址一律用占位,别把真实地址写进文档):
[
{ "id": "local", "name": "本地 ComfyUI", "baseUrl": "http://127.0.0.1:8188", "inputDirectory": "", "maxConcurrentJobs": 1, "enabled": true },
{ "id": "cloud-a", "name": "云算力 A", "baseUrl": "http://8188-<实例ID>-s1.pod.compshare.cn", "inputDirectory": "/root/ComfyUI/input", "maxConcurrentJobs": 1, "enabled": true },
{ "id": "cloud-b", "name": "云算力 B", "baseUrl": "http://8188-<实例ID>-s1.pod.compshare.cn", "inputDirectory": "/root/ComfyUI/input", "maxConcurrentJobs": 1, "enabled": true }
]
⚠ 默认就有一条:本地节点(http://127.0.0.1:8188,本机可留空 inputDirectory)⇒ 想"本机 + 两台云"一起进池,就是在它旁边再贴两项 ✓(这就是"低门槛":你已经有一台的配额了 ✓)
登记方式的边界(别期待它没有的功能):
- ⛔ 没有自动发现、⛔ 没有导入 / 导出 ⇒ 就是手填这个数组(可复制粘贴数组项来加多台)✓
报错怎么读(照抄界面原话):
| 提示 | 意思 |
|---|---|
JSON 解析失败:… | 数组写坏了(少逗号 / 多逗号最常见)✓ |
顶层必须是 JSON 数组 [ ... ] | 最外层不是 [ ] ✓ |
第 N 项缺少 name 字段 / 缺少 baseUrl 字段 / 缺少 inputDirectory(远端节点必填) | 逐项补 ✓ |
保存到 cluster.json 失败:… / 读取 cluster.json 失败:… | 落盘读写问题 ⇒ 重试;反复失败按 §九 报障 ✓ |
六、怎么验证搭好了(三层,⚠ 没有"一键检测")
⚠ 先说清:单台那一侧有「测试连接」按钮;集群这一侧没有——它靠自动轮询 ✓
- 顶栏「算力」的三色灯(悬停看明细):健康度显示 不可达 / 部分节点异常 / 健康 ✓
- 「算力集群」页的健康条(本页每 4 秒自动探一次):
- 汇总:
N/M 节点可达✓ - 逐节点:
运行X/排队Y 在途Z/W(W=该台并发上限);不可达的显示不可达✓ - ⭐ 顺便看收益:多台同时出现
运行 1⇒ 并行已生效(见 §二·2.3)✓ - 附加告警:
⚠同机N条(同一台机器被配了多条)✓
- 跑一个轻模板端到端确认:按《快速开始(云端算力)》的"跑通标准"走一遍 ⇒ 有产物才算真通 ✓
七、它会怎么挑机器(先知道,少困惑)
| 规则 | 说明 |
|---|---|
| 负载怎么算 | 该节点的 运行 + 排队 + 本应用在途任务数 ⇒ 取最低的 ✓ |
| 并发优先 | 先挑未超并发上限(maxConcurrentJobs)的;都满了 ⇒ 取负载最低那台(=排进它的队)✓ |
| 不可达的排最后 | 不可达节点永远不被选中 ✓ |
| 无 GPU 的排除 | 报 无可用 GPU(CPU 模式)⇒ 已排除出调度 ⇒ 该节点不参与 ✓ |
| ⭐ 多台在池 ⇒ 提交时"有得挑" | 这正是 §二·收益 1/2 的来源:有空的机器就被选走,而不是全挤在一台上排队 ✓ |
| ⚠ 只在"提交那一刻"选机 | 任务落定后只认那台:不会中途换机器,也不会"失败自动换台重试" ⇒ 想换目标就重新运行 ✓ |
八、搭完之后最常遇到的三件事(含排错)
| 现象 | 原因 → 处置 |
|---|---|
健康条掉一个 不可达 | 那台关机了,或开机后换了域名(云实例常见)⇒ 回设置里更新 baseUrl ✓(见《故障速查(云端)》) |
| 任务一直"排队中" | 那台的并发上限满了(默认 1)⇒ 等它跑完;想更快就调大 maxConcurrentJobs 或再加一台 ✓(⚠ 排队不等于卡死) |
提示 集群节点连续不可达,本次已回退到单台 ComfyUI(你的集群配置未被改动,节点恢复后会自动启用) | 全部节点都探不通 ⇒ 先查网络与地址;配置没被改,节点恢复会自动启用 ✓ |
健康条出现 ⚠同机N条 | 同一台机器在集群里配了多条(或与单台的地址重复)⇒ 建议只保留一处(两处配置不会互相同步,改一处另一处不跟)✓ |
| 提示 节点 id 与引擎保留值同名…请改掉 | 会造成任务归属串台 ⇒ 换一个 id ✓ |
九、一句话总结(+ ⚠ 它做不到什么)
收益:多台进池 ⇒ 批量总时长摊薄 · 长任务不堵线 · 交互不被挤 · 坏的只少一台 · 峰值可弹性 ✓
门槛:每台只跑 ComfyUI + 复制一行 JSON ⇒ 本机那一台就已经算进池了 ✓
⇒ 买的是"更短的总时长 + 更稳的产线",不是"更便宜的单价" ✓
⚠ 四条边界(吹归吹,这些它真做不到):
| 别指望 | 实际 |
|---|---|
| 让单个任务更快 | 这是任务级并行,不做模型拆分 ⇒ 一镜 10 分钟还是 10 分钟 ✓ |
| 自动换台重试 | 提交后只认那台;要换目标得重新运行 ✓ |
| 无限并行 | 受每台并发上限与各台权重是否齐约束;某台缺模型 ⇒ 轮到它就挂("模型找不到")✓ |
| 更省钱 | 多台并行=多台同时计费 ⇒ 省的是时间,账单看机器小时 ✓ |
⚠ 报障时给这三样:健康条截图(哪台不可达)· 该节点的 baseUrl 与 inputDirectory(可打码)· 具体报错原文 ✓
来源:E:/workbuddyProj/unlimitCanvas/ai_manual/cloud_gpu/05-算力集群的搭建.md