CUDA out of memory в ComfyUI: что делать
CUDA OOM — главная боль ComfyUI на 8-12 GB GPU. Разбираем 12 рабочих способов: от --lowvram флага и tiled VAE до выбора правильной модели и checkpoint offloading.
Обновлено: 2026-05-19
TL;DR
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate X.YY GiB — самая частая ошибка в ComfyUI на 8–12 GB GPU. В 90% случаев лечится сменой пары флагов и tile-режимом VAE; остальные 10% требуют квантизованных моделей, понижения разрешения или другого GPU. Ниже — 12 проверенных способов, отсортированных от «бесплатно за минуту» к «глобально».
Как читать ошибку
Сообщение PyTorch:
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 2.50 GiB.
GPU 0 has a total capacity of 12.00 GiB of which 1.20 GiB is free.
Including non-PyTorch memory, this process has 10.80 GiB memory in use.
Of the allocated memory 9.80 GiB is allocated by PyTorch,
and 0.70 GiB is reserved by PyTorch but unallocated.
Расшифровка:
- Tried to allocate 2.50 GiB — сколько хотел выделить блок (ноду VAE/UNet/LoRA — смотрите по логам).
- 1.20 GiB is free — реально свободно. Меньше, чем нужно → OOM.
- 0.70 GiB is reserved by PyTorch but unallocated — закэшировано, но не используется.
empty_cache() его отдаст.
- non-PyTorch memory — другие процессы (X server, Chrome, вторая модель в RAM).
Главный диагноз: fragmentation или физически не помещается. Решения отличаются.
1. Перезапустить ComfyUI (30 секунд)
Первое, что нужно сделать. ComfyUI может удерживать VRAM от прошлой задачи, особенно после ошибки. Если перезапуск помог — fragmentation, см. п. 4 для постоянного решения.
2. Закрыть конкурентов на GPU (1 минута)
nvidia-smi покажет всех. Типичные виновники:
- Браузер с аппаратным ускорением (особенно Chrome с открытыми вкладками с canvas/webgl).
- Discord, OBS, Stable Diffusion WebUI (A1111) в соседнем окне.
- Игры в фоне (даже свёрнутая Genshin держит 1–2 GB VRAM).
На сервере без GUI этой проблемы обычно нет, но проверьте: nvidia-smi pmon показывает все процессы.
3. Уменьшить разрешение (мгновенно)
Латентное пространство растёт квадратично. 1024×1024 → 768×768 даёт −44% памяти на этом этапе.
| Разрешение |
VRAM на latent (SDXL) |
| 512×512 |
~0.5 GB |
| 768×768 |
~1.2 GB |
| 1024×1024 |
~2.1 GB |
| 1536×1536 |
~4.7 GB |
Для SDXL базовое разрешение 1024×1024 — рекомендация Stability AI, а не requirement. На 8 GB лучше 768×768 + апскейл потом отдельной нодой.
4. PYTORCH_CUDA_ALLOC_CONF (5 минут)
Если у вас «free=5 GB, Tried to allocate 2 GB → OOM» — это fragmentation. Решается переменной окружения до запуска ComfyUI:
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
python main.py
Windows (PowerShell):
$env:PYTORCH_CUDA_ALLOC_CONF="expandable_segments:True"
python main.py
expandable_segments позволяет аллокатору расти и сжиматься динамически, уменьшая фрагментацию. Замечена существенная разница на SDXL + ControlNet + LoRA-стеках.
Альтернативно — max_split_size_mb:512, ограничивает максимальный размер блока, тоже помогает на фрагментации.
5. Флаги запуска ComfyUI
ComfyUI принимает CLI-флаги, влияющие на потребление VRAM:
| Флаг |
Что делает |
Замедление |
--lowvram |
Offload части UNet в RAM по мере использования |
1.5–2× |
--novram |
Большая часть модели — в RAM, GPU как ускоритель. Последний resort |
3–5× |
--cpu-vae |
VAE encode/decode на CPU. Освобождает 1–3 GB на финальной декодировке |
+5–20 c |
--fp8_e4m3fn |
fp8 веса для UNet. Поддерживается на RTX 4xxx, H100 |
минимально |
--bf16-vae |
bfloat16 VAE. Меньше памяти, чем fp32 |
минимально |
--reserve-vram 1.0 |
Оставить 1 GB VRAM свободной для других процессов |
- |
Типичная пара для 8 GB GPU: --lowvram --cpu-vae. Этого хватает, чтобы запустить SDXL.
6. Tiled VAE (custom node)
VAE-декодирование латента в полное изображение — обычно главный пик памяти. Tiled VAE декодирует кусками (tiles) и склеивает. Память падает с O(W·H) до O(tile²).
Установка через ComfyUI-Manager: ComfyUI-TiledDiffusion или was-node-suite-comfyui. В workflow вместо VAE Decode ставите VAE Decode (Tiled).
Минус — иногда на границах тайлов видны швы. На SDXL практически незаметно при tile_size=512, overlap=32.
7. Уменьшить batch_size
Если у вас batch_size > 1 в EmptyLatentImage — это множитель памяти UNet. На 8 GB GPU с SDXL — только batch=1.
8. fp8 модели (для RTX 4xxx, H100)
ComfyUI поддерживает fp8-веса для UNet начиная с лета 2024. fp8 в два раза меньше fp16. На совместимом GPU включается флагом --fp8_e4m3fn.
Для Flux fp8 — must-have на 16-24 GB картах. Качество почти идентично fp16.
9. GGUF-квантизация (Q4, Q5, Q8)
Для Flux dev на 8-12 GB GPU единственный реалистичный способ — GGUF-квантизация:
- Q4_K_S — самый компактный. Flux dev в 4-битах ≈ 6 GB.
- Q5_K_M — баланс. ≈ 8 GB. Качество ближе к fp16.
- Q8_0 — почти как fp16, но в два раза меньше. ≈ 12 GB.
Установка: ComfyUI-GGUF custom node + загрузка GGUF-файла из HuggingFace.
Качество: Q8 неотличим. Q5 имеет лёгкие отличия. Q4 заметно хуже на сложных промптах, но всё равно лучше, чем не запустить вообще.
10. Уменьшить число ControlNet/IP-Adapter
Каждый ControlNet ест 1.5–3 GB. Стек из трёх ControlNet + SDXL на 12 GB — гарантированный OOM.
Если нужна композиция через ControlNet — попробуйте Multi-ControlNet с весами < 1.0 для второстепенных вместо отдельных нод. Или последовательное применение (txt2img → img2img с ControlNet).
11. Очистить кэш моделей в RAM
Если ComfyUI держит несколько моделей в RAM и подменяет на GPU — RAM может заканчиваться. Симптом: процесс ComfyUI занимает 30+ GB RAM. Решение — нода Unload Model в workflow или --disable-smart-memory.
12. Поменять GPU
Если ничего не помогает — модель просто не помещается. Реальные минимумы (после оптимизаций):
| Модель |
Минимум VRAM (с тюнингом) |
| SD 1.5 |
4 GB |
| SDXL |
6 GB (lowvram + cpu-vae) |
| Flux dev (Q4) |
8 GB |
| Flux dev (fp8) |
16 GB |
| Flux dev (fp16) |
24 GB |
| SDXL + 2 ControlNet |
12 GB |
| Flux dev (fp16) + ControlNet |
32 GB (A6000 / managed) |
Если ваш сценарий требует RTX 4090/A100, а у вас RTX 3060 — оптимизации не помогут, как ни крути. Варианты: managed-API (gpupool, ComfyICU) или временная аренда GPU на час-два.
Бонус: nvidia-smi флаги для диагностики
# Постоянный мониторинг
watch -n 1 nvidia-smi
# Только процессы и память
nvidia-smi --query-compute-apps=pid,name,used_memory --format=csv
# Полная статистика GPU
nvidia-smi dmon -s u
Если used_memory показывает 11 GB у python.exe ComfyUI, а вы делаете batch=1 на SDXL — что-то не выгружается. Перезапустите процесс.
Что почитать дальше
Частые вопросы
Помогает ли --lowvram при OOM?
Часто да. Флаг переключает model offloading: модель грузится на GPU кусками, неиспользуемые части — в RAM. Скорость падает в 1.5-3 раза, но генерация перестаёт падать.
Что такое tiled VAE и когда включать?
Tiled VAE декодирует latent в изображение кусками (tile), а не целиком. Спасает на финальном этапе SDXL/Flux при VRAM < 12 GB. Включается через TiledVAE custom node.
Что делать, если OOM на загрузке модели?
Чекпойнт не помещается в VRAM. Варианты: использовать fp16-версию (вдвое меньше), запустить с --bf16, перейти на меньшую модель (SD 1.5 вместо SDXL), сменить GPU.
Почему OOM при batch_size=1?
Скорее всего, VRAM забит другими процессами (видео, игры) или активной моделью в RAM. Проверьте nvidia-smi, перезапустите ComfyUI, попробуйте уменьшить resolution.