Объем данных в ComfyUI: RAM vs VRAM передача между узлами
Узнайте объемы данных передаваемых между узлами ComfyUI, где хранятся тензоры в RAM/VRAM и как мониторить процесс передачи данных в workflow с Flux.1.
Какой объем данных передается между узлами ComfyUI и где они хранятся (RAM/VRAM/…)?
Рассмотрим пример простого workflow для работы с Flux.1 на видеокарте с 6 GB VRAM:
- узел загрузки текстовых энкодеров (t5-v1_1-xxl-encoder-Q3_K_L.gguf и clip_l.safetensors)
- пара обработчиков запроса ClipText Encode (2,3)
- загрузчик VAE (7) ae.safetensors и декодировщик VAE (8)
- загрузчик модели (4) flux1-schnell-Q2_K.gguf
- генератор пустого пространства (5)
- Ksampler (6)
- узлы сохранения (9) и превью (10)
Эти узлы соединены связями, и ComfyUI выделяет активный узел зелёной рамкой.
Какой объем данных передается между узлами ComfyUI при смене активного узла?
Например:
- Какой объем данных Ksampler передает в декодировщик VAE после завершения работы?
- Какой объем данных CLIP text encode передает в KSampler?
Где хранятся эти данные в процессе передачи – в оперативной памяти, видеопамяти, или в обоих местах? Как можно проверить и понять этот процесс, где найти соответствующие логи?
ComfyUI передает данные между узлами в виде тензоров (тензоров), объем которых зависит от типа данных и разрешения изображения. При работе с Flux.1 на 6 GB VRAM объем передаваемых данных может достигать нескольких гигабайт, причем система автоматически управляет размещением данных между RAM и VRAM.
Содержание
- Объем данных между узлами
- Хранение данных в RAM и VRAM
- Мониторинг и логирование
- Оптимизация памяти
- Практические инструменты
- Заключение
Объем данных между узлами
Примеры объемов передачи данных
Ksampler → VAE декодер:
- При работе с изображениями 512 × 512: latent space составляет примерно 64 × 64 × 4 = 16 384 значений на канал
- Для стандартных 4 каналов (RGB + альфа): ~65 536 значений в латентном пространстве
- Сжатый объем: ~1–2 МБ в сжатом виде, но при декодировании может достигать 50–100 МБ в полном разрешении
CLIP text encode → KSampler:
- Текстовые эмбеддинги обычно составляют ~768–1024 размерности
- Для модели CLIP‑L: 768 векторов по 512 бит каждый
- Объем: ~0.5–1 МБ на запрос
Важно: По данным ComfyUI‑FreeMemory, узлы могут передавать данные разных типов: image, latent, model или CLIP data, каждый со своими характеристиками объема и сжатия.
Динамика передачи при смене активного узла
При переключении между узлами ComfyUI выполняет следующие операции:
- Подготовка данных: Активный узел упаковывает выходные данные в формат, пригодный для передачи
- Сериализация: Данные преобразуются в тензорный формат
- Передача: Данные перемещаются из выходного буфера одного узла во входной буфер другого
- Десериализация: Полученные данные распаковываются и подготавливаются к обработке
Хранение данных в RAM и VRAM
Политика распределения памяти
Согласно исследованиям ComfyUI, система следует стратегии:
Comfy follows a policy of moving data that is not being actively used by the GPU to RAM to maximize VRAM space
Это означает, что:
- Активные данные: Хранятся в VRAM для быстрого доступа GPU
- Пассивные данные: Перемещаются в RAM для освобождения VRAM
- Кэшированные результаты: Могут храниться в RAM с автоматическим управлением
Типы данных и их размещение
| Тип данных | Типичное место хранения | Размер | Время жизни |
|---|---|---|---|
| Модели нейросетей | VRAM (активные) / RAM (пассивные) | 2–8 ГБ | До выгрузки |
| Латентные представления | VRAM (актуальные) / RAM (исторические) | 50–200 МБ | До следующего шага |
| Текстовые эмбеддинги | VRAM | 0.5–1 МБ | Сессия |
| Временные изображения | VRAM / RAM | 10–500 МБ | До кэширования |
Примечание: Как указано в документации, узлы могут оптимизировать использование памяти для конкретных типов данных.
Мониторинг и логирование
Встроенные средства ComfyUI
Серверные логи:
- ComfyUI предоставляет детальные логи о выполнении каждого узла
- Включают информацию о времени выполнения и использовании памяти
- Расположение:
comfyui.logв рабочей директории
Настройки сервера:
Из Server Config:
# Кэширование для ускорения повторяющихся операций
cache_size: 1024 # МБ
# Автоматическая очистка наименее используемых данных
cache_clear_unused: true
Внешние инструменты мониторинга
Crystools Resource Monitor:
- Предоставляет реальное отображение CPU, GPU, RAM статистики
- Доступен как расширение для ComfyUI
- Показывает распределение памяти между VRAM и RAM в реальном времени
VRAM_Debug узел:
The VRAM_Debug node is designed to help you monitor and manage the Video RAM (VRAM) usage of your system
- Документация VRAM_Debug
- Предоставляет детальные отчеты об использовании VRAM до и после операций
Оптимизация памяти
Специфичные узлы управления памятью
Soft Full Clean RAM and VRAM [LP]:
- Выгружает неиспользуемые модели из памяти
- Работает в фоне без прерывания workflow
- Документация
PurgeVRAMNode:
The primary goal of this node is to manage VRAM efficiently, thus no data output is given
- Принудительная очистка кэша и моделей
- Используется для тестирования и разработки
- Документация PurgeVRAMNode
Оптимизация для низковиртуальной памяти
Рекомендации с Reddit:
# Использование --normalvram вместо lowvram/highvram
python main.py --normalvram
# Отключение кэширования для SSD/NVME
python main.py --cache-none
Важно: Как отмечено в обсуждениях,
--normalvramобеспечивает лучшее управление памятью по сравнению сlowvram/highvram, которые могут принудительно удерживать модели в памяти даже при OOM (Out of Memory).
Практические инструменты
Комплексные решения
ComfyUI-FreeMemory:
The nodes report on initial and final memory usage for both GPU VRAM and system RAM, providing visibility into the cleaning process
- GitHub репозиторий
- Специализированные узлы для очистки VRAM и RAM
- Поддержка различных типов данных
TeaCache:
- Умное кэширование для ускорения повторяющихся операций
- Сокращает время перезагрузки моделей
- Демонстрация использования
Интеграция в workflow
Для мониторинга передачи данных между узлами можно использовать следующую схему:
# Пример интеграции Memory Monitor
1. [Клиент] → HTTP запрос с workflow
2. [Сервер] → Валидация и подготовка к выполнению
3. [Выполнение] → Последовательная обработка узлов
4. [Мониторинг] → Отслеживание использования памяти
5. [Кэширование] → Сохранение результатов для повторного использования
Заключение
- Объемы данных: При работе с Flux.1 на 6 GB VRAM передача между KSampler и VAE декодером составляет ~1–2 МБ сжатых данных, что расширяется до 50–100 МБ после декодирования.
- Хранение данных: ComfyUI автоматически распределяет данные между VRAM (для активных операций) и RAM (для пассивных данных), оптимизируя использование доступной памяти.
- Мониторинг: Для отслеживания процесса передачи данных используйте встроенные логи ComfyUI и инструменты мониторинга вроде Crystools или VRAM_Debug узла.
- Оптимизация: Для работы с ограниченными ресурсами рекомендуется использовать
--normalvramфлаг и специализированные узлы управления памятью, такие как Soft Full Clean RAM and VRAM [LP].
Для глубокого понимания процесса передачи данных экспериментируйте с различными конфигурациями workflow и используйте инструменты мониторинга в реальном времени.
Источники
- ComfyUI-FreeMemory - Memory Management Nodes
- VRAM Debug Node Documentation
- Server Config - ComfyUI Caching Settings
- Soft Full Clean RAM and VRAM Node Documentation
- Free Memory (Model) Node Documentation
- ComfyUI Memory Management Discussion
- Server and Execution Engine - DeepWiki
- LLMVRAMManager Node Documentation
- Memory Tricks in Comfyui for Low VRAM GPUs
- How to Add Resource Monitor in ComfyUI