ComfyUI на GPU: графовые пайплайны и кэш
Задача страницы. Показать, как развернуть и эксплуатировать ComfyUI на облачных GPU: графовые пайплайны для SD/SDXL/SD3, профили VRAM/скорости, кэш весов и промежуточных артефактов, очереди заданий и наблюдаемость.
TL;DR
- Используйте графы ComfyUI для сборки сценариев: prompt → sampler → VAE → постобработка → сохранение.
- Производительность упирается в VRAM и I/O. Включайте fp16/bf16, память‑эффективное внимание, кэшируйте чекпоинты/LoRA/ControlNet и VAE.
- Для интерактива — один узел с прогретыми весами; для массового рендера — пул инстансов + очереди.
- Смежные страницы: /solutions/image-video-gen/, /solutions/image-video-gen/sdxl/, /solutions/image-video-gen/sd3/, /solutions/image-video-gen/controlnet/, /solutions/image-video-gen/upscaling/, /solutions/image-video-gen/batch-render/, а также эксплуатация и стоимость — /solutions/performance-tuning/, /solutions/cost-planner/, /solutions/monitoring-logging/.
Когда выбирать ComfyUI
- Нужен «визуальный конструктор» пайплайнов: ветвления, условные ветки, повторное использование кэшей.
- Комбинаторика вариантов: LoRA/ControlNet/ресэмплеры/шаги/разрешения.
- Интеграция с продом: REST‑вызовы графов, очереди, батчи, контроль параметров.
Если требуется «быстрый старт UI» и меньше гибкости — смотрите /solutions/image-video-gen/automatic1111/. Для сложных сборочных пайплайнов и рендер‑ферм — ComfyUI предпочтителен.
Профили GPU и VRAM
Ориентиры VRAM (fp16, память‑эффективное внимание включено):
| **Сценарий** | **SD 1.5** | **SDXL (base/refiner)** | **SD3‑семейство** | **Примечание** |
| 512×512, 20–30 шагов | 8–12 ГБ | 12–16 ГБ | 16–24 ГБ | быстрый предпросмотр |
| 768×768, HQ | 12–16 ГБ | **16–24 ГБ** | 24–32 ГБ | refiner по желанию |
| 1024×1024 | 16 ГБ | **16–24 ГБ** | 24–48 ГБ | возможны тайлинги |
| ControlNet/IP‑Adapter +1 ветка | +1–3 ГБ | +2–4 ГБ | +3–6 ГБ | по типу карты |
| Видео‑диффузии (512–576p) | 16–24 ГБ | 24–40 ГБ | 24–40 ГБ | лучше отдельный пул |
Хранилище: кэш весов/LoRA/ControlNet/VAEs обычно 50–200 ГБ на NVMe. Подробнее про диски — /solutions/storage-data/.
Базовый граф ComfyUI (минимум) Идея. Загрузить чекпоинт → закодировать позитив/негатив промпты → сэмплинг → декод VAE → сохранить.
Мини‑workflow (фрагмент JSON ComfyUI, можно отправлять в API /prompt):
{
"prompt": {
"3": {"class_type":"CheckpointLoaderSimple","inputs":{"ckpt_name":"sdxl_base.safetensors"}},
"4": {"class_type":"CLIPTextEncode","inputs":{"text":"high quality photo of a product on white background","clip":["3","CLIP"]}},
"7": {"class_type":"CLIPTextEncode","inputs":{"text":"low quality, blurry, artifacts","clip":["3","CLIP"]}},
"5": {"class_type":"EmptyLatentImage","inputs":{"width":1024,"height":1024,"batch_size":1}},
"6": {"class_type":"KSampler","inputs":{
"model":["3","MODEL"],"seed":123456,"steps":30,"cfg":7,
"sampler_name":"euler","scheduler":"normal","denoise":1.0,
"positive":["4","CONDITIONING"],"negative":["7","CONDITIONING"],
"latent_image":["5","LATENT"]}},
"8": {"class_type":"VAEDecode","inputs":{"samples":["6","LATENT"],"vae":["3","VAE"]}},
"9": {"class_type":"SaveImage","inputs":{"images":["8","IMAGE"]}}
}
}
Расширения для SDXL: разнести base и refiner на два прохода графа (см. /solutions/image-video-gen/sdxl/). Для ControlNet — добавить ветку кондиционирования (см. /solutions/image-video-gen/controlnet/).
Кэш: где экономить секунды и гигабайты
Что кэшировать
- Чекпоинты/LoRA/ControlNet/VAEs на локальном NVMe (горячий кэш), заранее прогреть.
- CLIP‑энкодинги повторяющихся промптов (для батчей).
- Latent‑пространство (после EmptyLatentImage/VAEEncode) — для вариаций seed/CFG.
- Постобработку (апскейл/денойз) — если однотипные параметры.
Как кэшировать в графе
- Вынесите «тяжёлые» узлы (Checkpoint/CLIP/VAE) в отдельные ветки, на которые ссылаются несколько KSampler.
- Стабилизируйте идемпотентность: повторный запуск с тем же seed/steps/cfg/ckpt отдаёт одинаковый результат → проще дедуплицировать.
- Храните артефакты с хеш‑ключом параметров графа.
Производительность и стоимость
Обозначим: S — шаги, R — разрешение (пикселей), B — батч, t_step — среднее время шага, O — накладные.
Латентность:
T ≈ O + S × t_step(R, B)
Выработка и цена:
Imgs_per_hour ≈ 3600 / T
Cost_per_1000 ≈ (GPU_hour_price × Num_GPU) / (Imgs_per_hour / 1000)
Ускоряем
- Уменьшаем S (фаст‑самплеры), включаем fp16/bf16 и память‑эффективное внимание.
- Подбираем B к «колену» утилизации VRAM/SM.
- На 1024² и выше — тайлинги + оптимизированный VAE.
Подробно: /solutions/performance-tuning/, экономика — /solutions/cost-planner/, /solutions/llm-inference/costs/. Компоненты графа: готовые паттерны
SDXL base → (опц.) refiner Base: текстовые кондиции → KSampler (низкий denoise) → VAE Decode.
Refiner: повторный KSampler на изображении с малым S_ref для деталей кожи/текстур. Страница: /solutions/image-video-gen/sdxl/.
ControlNet/IP‑Adapter Ветка кондиционирования: эдж/поза/скетч/референс. Контролируйте баланс weight и порядок. Страница: /solutions/image-video-gen/controlnet/.
Апскейл/реставрация Пост‑ветка: Upscale → Denoise → Sharpen после базового 768–1024²
Страницы: /solutions/image-video-gen/upscaling/, /solutions/image-video-gen/face-restoration/.
Видео‑диффузии Стабилизируйте кадры: ключевые → интерполяция → денойз → апскейл → транскод.
Страница: /solutions/image-video-gen/video/.
API и батчи: как запускать из кода
Отправка workflow в очередь ComfyUI:
curl -X POST http://localhost:8188/prompt
-H "Content-Type: application/json"
-d @workflow.json
История/статусы задачи (упрощённо):
curl "http://localhost:8188/history/<prompt_id>"
Прод‑обёртка (пример FastAPI + очередь + SSE‑прогресс):
from fastapi import FastAPI, Request
from fastapi.responses import StreamingResponse
import httpx, json, asyncio, uuid
COMFY = "http://localhost:8188"
app = FastAPI()
@app.post("/v1/comfyui/render_stream")
async def render(req: Request):
cfg = await req.json() # {workflow: {...}}
prompt_id = str(uuid.uuid4())
payload = {"prompt": cfg["workflow"], "client_id": prompt_id}
async with httpx.AsyncClient(timeout=60) as s:
await s.post(f"{COMFY}/prompt", json=payload)
async def stream():
yield "event: startndata: {}nn"
# опрос статуса; для прод — WS/подписки
for _ in range(600):
await asyncio.sleep(0.2)
# …получить прогресс/этап/обновления…
# yield f"data: {json.dumps({'progress': p})}nn"
yield 'data: {"result_id":"img_001"}nn'
yield "event: donendata: [DONE]nn"
return StreamingResponse(stream(), media_type="text/event-stream",
headers={"Cache-Control":"no-cache","X-Accel-Buffering":"no"})
Для массовых заданий используйте «ферму» ComfyUI‑инстансов и планировщик (см. /solutions/image-video-gen/batch-render/).
Масштабирование: от одного узла к ферме
- Горизонталь: несколько реплик ComfyUI за балансировщиком; общий кэш весов на NVMe, артефакты — в объектном хранилище.
- Пулы: интерактив (on‑demand) и пакетный (interruptible) — разные очереди и лимиты (см. /solutions/interruptible-patterns/).
- MIG/мульти‑GPU: разделяйте GPU для коротких и тяжёлых задач; учтите VRAM профили.
- Тайлинги/шардирование кадров для 2–4k и видео‑сценариев.
Наблюдаемость, алерты и логи
Метрики (минимум):
- queue_wait, t_step_ms, steps, batch, resolution, images_per_min.
- GPU: util/HBM, OOM/ретраи, KV‑кэш не используется, но следите за памятью и I/O.
- Диск: кэш‑хиты, время загрузки чекпоинтов/LoRA/ControlNet/VAEs.
Алерты:
- Рост p95 t_step_ms, queue_wait, снижение кэш‑хитов, OOM>0, ошибки I/O. Интеграция: /solutions/monitoring-logging/, /solutions/llm-inference/observability/.
Безопасность и политика
- Разрешённые модели/LoRA/ControlNet — allow‑list.
- Ограничьте параметры API (макс. R, S, CFG, batch).
- Санация промптов/логов, маскирование PII.
Подробнее: /solutions/security/, /solutions/llm-inference/guardrails/.
Быстрый старт на cloudcompute.ru
- Используйте шаблон “ComfyUI‑GPU” из /solutions/templates/: – пресеты SD/SDXL/SD3, кэш весов на NVMe, fp16/bf16; – ограничители параметров, SSE‑прогресс; – базовые метрики/алерты и ротация логов.
- Для пакетного рендера — “Batch‑Render” (очереди, ретраи, отчёты): /solutions/image-video-gen/batch-render/.
- Оценка стоимости и профилей инстансов: /solutions/cost-planner/.
Чек‑лист перед продом
- Проверены VRAM‑профили для целевых R/S/B и подключенных ControlNet/LoRA.
- Включены fp16/bf16, память‑эффективное внимание, тёплый кэш весов на NVMe.
- Параметры API ограничены: max R, max S, CFG, batch.
- Настроены пулы интерактив/пакет; очередь задач и ретраи.
- Метрики/алерты/трейсинг подключены; логи без PII.
- Рассчитана Cost_per_1000 и план масштабирования.
Навигация по разделу «Генерация изображений и видео»
/solutions/image-video-gen/ • /solutions/image-video-gen/automatic1111/ • /solutions/image-video-gen/sdxl/ • /solutions/image-video-gen/sd3/ • /solutions/image-video-gen/controlnet/ • /solutions/image-video-gen/video/ • /solutions/image-video-gen/upscaling/ • /solutions/image-video-gen/face-restoration/ • /solutions/image-video-gen/text-to-3d/ • /solutions/image-video-gen/style-transfer/ • /solutions/image-video-gen/batch-render/ • инфраструктура: /solutions/performance-tuning/, /solutions/storage-data/, /solutions/monitoring-logging/
Готовы запустить?
Запустить GPU-сервер