Другое

Объем данных в 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.


Содержание


Объем данных между узлами

Примеры объемов передачи данных

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 выполняет следующие операции:

  1. Подготовка данных: Активный узел упаковывает выходные данные в формат, пригодный для передачи
  2. Сериализация: Данные преобразуются в тензорный формат
  3. Передача: Данные перемещаются из выходного буфера одного узла во входной буфер другого
  4. Десериализация: Полученные данные распаковываются и подготавливаются к обработке

Хранение данных в 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:

python
# Кэширование для ускорения повторяющихся операций
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


Оптимизация памяти

Специфичные узлы управления памятью

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:

bash
# Использование --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

Для мониторинга передачи данных между узлами можно использовать следующую схему:

python
# Пример интеграции Memory Monitor
1. [Клиент] → HTTP запрос с workflow
2. [Сервер] → Валидация и подготовка к выполнению
3. [Выполнение] → Последовательная обработка узлов
4. [Мониторинг] → Отслеживание использования памяти
5. [Кэширование] → Сохранение результатов для повторного использования

Заключение

  1. Объемы данных: При работе с Flux.1 на 6 GB VRAM передача между KSampler и VAE декодером составляет ~1–2 МБ сжатых данных, что расширяется до 50–100 МБ после декодирования.
  2. Хранение данных: ComfyUI автоматически распределяет данные между VRAM (для активных операций) и RAM (для пассивных данных), оптимизируя использование доступной памяти.
  3. Мониторинг: Для отслеживания процесса передачи данных используйте встроенные логи ComfyUI и инструменты мониторинга вроде Crystools или VRAM_Debug узла.
  4. Оптимизация: Для работы с ограниченными ресурсами рекомендуется использовать --normalvram флаг и специализированные узлы управления памятью, такие как Soft Full Clean RAM and VRAM [LP].

Для глубокого понимания процесса передачи данных экспериментируйте с различными конфигурациями workflow и используйте инструменты мониторинга в реальном времени.


Источники

  1. ComfyUI-FreeMemory - Memory Management Nodes
  2. VRAM Debug Node Documentation
  3. Server Config - ComfyUI Caching Settings
  4. Soft Full Clean RAM and VRAM Node Documentation
  5. Free Memory (Model) Node Documentation
  6. ComfyUI Memory Management Discussion
  7. Server and Execution Engine - DeepWiki
  8. LLMVRAMManager Node Documentation
  9. Memory Tricks in Comfyui for Low VRAM GPUs
  10. How to Add Resource Monitor in ComfyUI
Авторы
Проверено модерацией
Модерация