AI и DIY,  Статьи

Устранение ошибки RuntimeError: comfy-aimdo device is not initialize в comfyui

Для решения проблем с нехваткой памяти при работе с нейросетями и платформой PyTorch часто используется модуль AIMDO (AI Model Dynamic Offloader), который автоматически выгружает часть модели искусственного интеллекта в системную память при переполнении VRAM. Благодаря этому даже на компьютерах с относительно слабыми видеокартами с малым объемом памяти можно запускать крупные модели AI.

В окружении comfyui распределитель памяти AIMDO можно командой:

  python -m pip install --upgrade comfy-aimdo

К сожалению, при запуске AI-моделей в comfyui с одновременным использованием AIMDO и ноды MultiGPU (например, для загрузки CLIPTextEncoder в память другой видеокарты) может появляться ошибка RuntimeError: comfy-aimdo device is not initialize:

Она появляется из-за того, что модуль динамической памяти AIMDO при загрузке окружения comfyui инициализирует только одну видеокарту (например, cuda:0), а остальные GPU остаются незарегистрированными.

Для устранения этой ошибки на github-репозитории Comfy-Org рекомендуется использовать один из следующих способов:

  • отключить AIMDO, запуская comfyui с ключом disable-dynamic-vram, или highvram, или gpu-only, например:
  python main.py --disable-dynamic-vram
  python main.py --highvram
  python main.py --gpu-only

При этом отключается опция DynamicVRAM, но зато ModelPatcher работает с узлом MultiGPU.

  • запускать все вычисления исключительно на видеокарте cuda:0, иначе говоря исключить из workflow узел multi-GPU;
  • ждать исправления бага разработчиками;
  • пропатчить файл main.py таким образом, чтобы при запуске comfyui определялись все GPUs. Для этого в нем нужно отредактировать раздел, включающий код init_device(…) to init_devices([x, y]), где x, y — номер инициализируемых видеокарт, например, так:
# AIMDO MultiGPU

try:

comfy_aimdo.control.init_devices(visible_ids)

print("✅ comfy-aimdo: init_devices() called successfully for all GPUs")

except AttributeError:

print("init_devices() not available, using fallback...")

for gpu_id in visible_ids:

try:

comfy_aimdo.control.init_device(gpu_id)

print(f"[GPU {gpu_id}] aimdo initialized")

except Exception as e:

print(f"[GPU {gpu_id}] failed: {e}")

except Exception as e:

print(f"init_devices error: {e}")

comfy_aimdo.control.init()

# === Logging ===

try:

if args.verbose == 'DEBUG':

comfy_aimdo.control.set_log_debug()

elif args.verbose in ('CRITICAL', 'ERROR'):

comfy_aimdo.control.set_log_error()

else:

comfy_aimdo.control.set_log_info()

print("✅ aimdo logging level set")

except Exception as e:

print(f"Warning: Could not set aimdo log level: {e} (non-critical)")

При запуске comfyui с таким патчем нужно использовать переменную окружения, настраивающую аллокатор памяти CUDA в PyTorch:

  export PYTORCH_CUDA_ALLOC_CONF="backend:cudaMallocAsync,expandable_segments:True"

Благодаря использованию этих параметров увеличивается скорость работы и уменьшается фрагментация VRAM.

Благодаря модификации кода в файле main.py окружения comfyui происходит инициализация всех видеокарт Nvidia:

MultiGPU Core Patching работает:

Правда, в некоторых случаях, вместо картинки генерируется цветовой шум, например, такой:

В скрипт запуска comfyui можно включить и другие параметры для оптимизации работы с видеокартами и их разгона. Для удобства лучше создать отдельный скрипт запуска, например такой (для linux):


python3 -m venv venv && source venv/bin/activate &&


export GPU_MAX_HEAP_SIZE=100

export GPU_MAX_USE_SYNC_OBJECTS=1

export GPU_SINGLE_ALLOC_PERCENT=100

export GPU_MAX_ALLOC_PERCENT=100

export GPU_MAX_SINGLE_ALLOC_PERCENT=100

export GPU_ENABLE_LARGE_ALLOCATION=100

export PYTORCH_CUDA_ALLOC_CONF="backend:cudaMallocAsync,expandable_segments:True,garbage_collection_threshold:0.9"

export CUDA_LAUNCH_BLOCKING=0

export TORCH_USE_CUDA_DSA=0

export CUDA_VISIBLE_DEVICES=0,1,2

export CUDA_MODULE_LOADING=LAZY

sudo nvidia-smi -pm 1

sudo nvidia-smi -i 0 -pl 130

sudo nvidia-smi -i 1 -pl 190

sudo nvidia-smi -i 2 -pl 130

sudo nvidia-settings -a '[gpu:0]/GPUFanControlState=1';

sudo nvidia-settings -a '[gpu:1]/GPUFanControlState=1';

sudo nvidia-settings -a '[gpu:2]/GPUFanControlState=1';

sudo nvidia-settings -a '[fan:0]/GPUTargetFanSpeed=20';

sudo nvidia-settings -a '[fan:1]/GPUTargetFanSpeed=20';
sudo nvidia-settings -a '[fan:2]/GPUTargetFanSpeed=20';

sudo nvidia-settings -a '[gpu:0]/GPUPowerMizerMode=1';

sudo nvidia-settings -a '[gpu:1]/GPUPowerMizerMode=1';

sudo nvidia-settings -a '[gpu:2]/GPUPowerMizerMode=1';

python main.py --enable-manager

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *