ComfyUI на арендованном GPU: запуск и отказы
Чем аренда отличается от локального запуска: временный диск, отсутствие аутентификации и урезанные права Manager. Раскладка моделей и разбор отказов.
TL;DR — Кратко:
- В аргументах ComfyUI нет ни одного флага аутентификации. Запуск с --listen открывает интерфейс всем, кто знает адрес; штатный доступ снаружи — SSH-туннель.
- Модели раскладываются по разным каталогам: all-in-one идёт в models/checkpoints, а раздельные веса Flux — в diffusion_models, text_encoders и vae.
- ComfyUI-Manager сам режет установку нод, когда слушатель нелокальный. Лечится параметром network_mode, а не переустановкой.
Инструкции по ComfyUI написаны под домашнюю машину: поставили, открыли 127.0.0.1:8188, положили модели в папку. На арендованном сервере половина шагов ломается, причём не там, где ожидается.
Три вещи меняются сразу. Диск временный, и скачанные модели исчезают вместе с инстансом. Интерфейс нужно как-то открыть снаружи, а встроенной аутентификации в ComfyUI нет. И ComfyUI-Manager, увидев нелокальный адрес, начинает отказывать в установке нод — это не поломка, а его штатное поведение.
Ниже — установка по официальной инструкции, раскладка моделей по каталогам с проверкой по исходникам и разбор отказов, которые дают именно аренда, а не сам ComfyUI.
Что меняет аренда
| Отличие | Как проявляется | Что делать |
|---|---|---|
| Диск временный | После остановки инстанса моделей нет, качать заново | Скрипт предзагрузки, --base-directory на внешний диск |
| Нет аутентификации | --listen открывает UI любому, кто знает адрес и порт | SSH-туннель, интерфейс остаётся на 127.0.0.1 |
| Слушатель нелокальный | ComfyUI-Manager блокирует часть операций установки | network_mode = personal_cloud в config.ini |
| Время идёт по тарифу | Скачивание 34 ГБ весов оплачивается как работа карты | Предзагрузка в фоне, а не вручную через интерфейс |
Дальше по порядку.
Установка
Предполагаем арендованный сервер на Ubuntu с рабочими драйверами: nvidia-smi показывает таблицу. Установка идёт по официальной инструкции ComfyUI. Команды и формулировки ниже сверены с README и исходниками ветки master 13 сентября 2026 года, запуском не проверялись.
Версии, которые проект называет поддерживаемыми, стоит соблюдать: Python 3.13 в README отмечен как «very well supported», 3.14 работает, но часть кастомных нод на нём ломается.
git clone https://github.com/comfyanonymous/ComfyUI.git
cd ComfyUI
git log -1 --format='%H %cd' # коммит, на котором вы стоите, и его дата
python3 -m venv venv
source venv/bin/activate Клонируется ветка по умолчанию — текущее состояние master, а не фиксированный релиз. Запишите коммит из вывода git log -1. Встроенный менеджер нод, индекс cu130 и формулировки справки по аргументам зависят от версии: при расхождении сравнивать нужно состояния репозитория, а не даты статей.
PyTorch ставится отдельно и раньше остальных зависимостей, иначе pip подтянет сборку без CUDA:
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu130
pip install -r requirements.txt Отдельный шаг для менеджера нод. В текущей версии ComfyUI-Manager встроен в ядро и включается флагом --enable-manager, а не клонируется в custom_nodes. Сначала ставятся его зависимости:
pip install -r manager_requirements.txt Одних зависимостей мало: без --enable-manager при запуске менеджер в интерфейсе не появится.
Проверка перед запуском — то же, что и для любого контейнера с CUDA: карта должна быть видна изнутри окружения.
python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))" Если ответ False, дальше идти бессмысленно: генерация уйдёт на процессор. Разбор того, как пробрасывается CUDA при контейнерном запуске, есть в гайде по NVIDIA Container Toolkit и Docker.
Доступ снаружи: почему --listen не решение
Первое, что делают на арендованном сервере, — запускают с --listen, чтобы открыть интерфейс в браузере. Это работает и это плохая идея.
По умолчанию ComfyUI слушает 127.0.0.1 на порту 8188. Флаг --listen без аргумента переводит его на 0.0.0.0,::, то есть на все интерфейсы — это прописано в описании самого аргумента.
Проблема в том, что защищать открытый порт нечем. В списке аргументов ComfyUI нет ни одного флага аутентификации: есть --tls-keyfile и --tls-certfile для шифрования канала, есть --multi-user для раздельного хранения пользовательских данных, но пароля или токена нет. Кто открыл адрес — тот работает с вашей картой и вашими файлами.
Рабочий вариант — оставить ComfyUI на локальном адресе и пробросить порт через SSH со своей машины:
ssh -N -L 8188:127.0.0.1:8188 user@your-instance-ip После этого интерфейс открывается на http://127.0.0.1:8188 уже локально, а на сервере порт наружу не смотрит. Запуск при этом самый обычный:
python main.py --disable-auto-launch --enable-manager --disable-auto-launch отключает попытку открыть браузер на сервере, где браузера нет. --enable-manager включает встроенный ComfyUI-Manager. Если менеджер не нужен, флаг можно убрать: его ограничения на нелокальном адресе разобраны ниже.
Куда класть модели
Следующий отказ — модель скачана, а нода её не видит. Первое, что стоит проверить, — каталог: ComfyUI ищет разные типы весов в разных местах, и имена каталогов заданы в folder_paths.py.
| Что кладём | Каталог | Нода-загрузчик |
|---|---|---|
| All-in-one чекпоинт SD 1.5, SDXL, fp8 | models/checkpoints | Load Checkpoint |
| Раздельный трансформер Flux | models/diffusion_models (устаревшее models/unet) | Load Diffusion Model |
| Текстовые энкодеры T5 и CLIP | models/text_encoders (устаревшее models/clip) | DualCLIPLoader |
| VAE отдельным файлом | models/vae | Load VAE |
| LoRA | models/loras | Load LoRA |
| ControlNet | models/controlnet | Load ControlNet Model |
Ключевая развилка проходит по Flux. Сборка «всё в одном файле» кладётся в checkpoints и грузится обычным Load Checkpoint. Раздельные веса — это уже три разных каталога, и Load Checkpoint их не увидит принципиально:
| Файл | Куда | Размер |
|---|---|---|
flux1-dev-fp8.safetensors | checkpoints | 17.25 ГБ |
flux1-dev.safetensors | diffusion_models | 23.80 ГБ |
t5xxl_fp16.safetensors | text_encoders | 9.79 ГБ |
clip_l.safetensors | text_encoders | 0.25 ГБ |
ae.safetensors | vae | 0.34 ГБ |
Размеры сверены с репозиториями Comfy-Org/flux1-dev, Comfy-Org/stable-diffusion-3.5-fp8 и black-forest-labs/FLUX.1-dev 19 августа 2026 года. Сколько из этого поместится в вашу карту, разобрано в справочнике по VRAM для Stable Diffusion, SDXL и Flux.
Как не качать это заново каждый запуск
Если к инстансу подключается отдельный диск, переживающий пересоздание, переносите на него весь рабочий каталог целиком:
python main.py --base-directory /mnt/data/comfy Флаг переводит models, custom_nodes, input, output, temp и user в указанную папку. Альтернатива, когда переносить нужно только модели, — файл extra_model_paths.yaml: скопируйте extra_model_paths.yaml.example, укажите base_path на внешний каталог и подключите через --extra-model-paths-config.
Если постоянного диска нет, остаётся скрипт предзагрузки. Он забирает файлы из тех же репозиториев Hugging Face, что перечислены в таблице выше, и раскладывает их по каталогам ComfyUI.
Одно условие до запуска: black-forest-labs/FLUX.1-dev отдаёт файлы только после входа в аккаунт Hugging Face и принятия лицензии на странице модели — проверено по странице репозитория 14 сентября 2026 года. Оттуда берутся трансформер и VAE, поэтому токен в HF_TOKEN нужен всегда, а не по случаю. Репозитории Comfy-Org гейта не имеют, лишним заголовок для них не будет.
#!/usr/bin/env bash
# preload.sh — качает веса Flux в раздельном виде
set -euo pipefail
cd "${COMFY_DIR:-$HOME/ComfyUI}"
# Токен обязателен: файлы black-forest-labs/FLUX.1-dev закрыты лицензией,
# принять её и завести токен нужно заранее — https://huggingface.co/settings/tokens
AUTH=(--header "Authorization: Bearer ${HF_TOKEN:?export HF_TOKEN=hf_... перед запуском}")
get() { # репозиторий, путь внутри репозитория, каталог назначения
mkdir -p "$3"
curl -fL -C - "${AUTH[@]}" -o "$3/$(basename "$2")"
"https://huggingface.co/$1/resolve/main/$2"
}
get black-forest-labs/FLUX.1-dev flux1-dev.safetensors models/diffusion_models
get Comfy-Org/stable-diffusion-3.5-fp8 text_encoders/t5xxl_fp16.safetensors models/text_encoders
get Comfy-Org/stable-diffusion-3.5-fp8 text_encoders/clip_l.safetensors models/text_encoders
get black-forest-labs/FLUX.1-dev ae.safetensors models/vae
# Вариант «всё в одном файле» вместо четырёх строк выше:
# get Comfy-Org/flux1-dev flux1-dev-fp8.safetensors models/checkpoints Точка запуска — сразу после старта инстанса, до python main.py: nohup ./preload.sh > preload.log 2>&1 &. Тогда веса качаются параллельно с pip install, а не после того, как интерфейс уже поднялся. Ключ -C - докачивает оборванный файл вместо повторного скачивания с нуля.
Считать такой скрипт стоит не в гигабайтах, а в деньгах.
Сколько стоит скачать модели
Расчёт с явными допущениями, поменяйте их под свои условия. Берём канал 500 Мбит/с, то есть 62.5 МБ/с, и карту RTX A6000 по 82.79 ₽/час — минимальное предложение каталога на 19 августа 2026 года, то есть 1.38 ₽ за минуту.
| Набор | Объём | Время | Стоимость простоя |
|---|---|---|---|
| SDXL base | 6.94 ГБ | 1.9 мин | 2.6 ₽ |
| Flux fp8, один файл | 17.25 ГБ | 4.6 мин | 6.3 ₽ |
| Flux раздельно, полный комплект | 34.18 ГБ | 9.1 мин | 12.6 ₽ |
Суммы небольшие, и вывод из таблицы не про них. Он про то, что девять минут карта оплачивается и ничего не считает, и повторяется это при каждом запуске инстанса. Поэтому скачивание стоит запускать скриптом сразу после старта, параллельно с установкой зависимостей, а не руками через интерфейс после того, как ComfyUI поднялся.
Общий расчёт того, при какой загрузке аренда выгоднее покупки карты, есть в разборе TCO.
Типичные отказы
ComfyUI-Manager отказывается ставить ноды
Симптом: локально всё ставилось, на арендованном сервере кнопки установки не срабатывают. Это не поломка.
Manager различает локальный и нелокальный слушатель и на нелокальном урезает права. В его документации есть отдельный режим для таких случаев — в config.ini задаётся network_mode:
network_mode = personal_cloud Файл лежит в каталоге пользователя. По документации ветки manager-v4 начиная с версии 4.0.3b4 это <USER_DIRECTORY>/__manager/config.ini, а USER_DIRECTORY без дополнительных флагов — это ComfyUI/user. То есть при установке из этой статьи файл лежит в user/__manager/config.ini .
Путь сдвигают флаги --user-directory и --base-directory, а в версиях менеджера до 4.0.3b4 он другой. Свой точный путь менеджер печатает в логе при старте. Если раскладка не совпала, ищите файл от корня рабочего каталога: запустите ComfyUI с --enable-manager и остановите его.
find . -name config.ini # из корня ComfyUI
find /mnt/data/comfy -name config.ini # если запускаете с --base-directory
find . -name config.ini -exec grep -lE 'security_level|network_mode' {} + # файл менеджера Флаг --base-directory переносит на внешний том и каталог user, поэтому при таком запуске файл ищется там же. Поиск может выдать несколько результатов: свой config.ini бывает и у отдельных нод, всё внутри custom_nodes отбрасывайте. Нужный опознаётся по содержимому: в нём лежат настройки менеджера — security_level и соседние ключи, их и отбирает последняя команда. Если строки network_mode в оставшемся файле нет, допишите её к остальным настройкам менеджера. Правьте файл при остановленном сервере, потом запускайте ComfyUI заново и убедитесь, что значение сохранилось.
Значение personal_cloud описано как режим для облачных окружений, где строгие ограничения не нужны. Отдельно от уровня безопасности идут два флага: allow_git_url_install для установки нод по произвольному git-адресу и allow_pip_install для установки пакетов. Оба по умолчанию False, и уровень безопасности на них больше не влияет.
Включайте это осознанно и только вместе с SSH-туннелем. Открытый наружу интерфейс с разрешённой установкой произвольных пакетов — это удалённое выполнение кода на вашем сервере.
Torch not compiled with CUDA enabled
Означает, что установилась сборка PyTorch без CUDA. Лечится переустановкой в порядке из README: сначала снять текущую версию, потом поставить нужную.
pip uninstall torch
pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu130 Так бывает, когда pip install -r requirements.txt отработал раньше и подтянул torch по умолчанию.
Нода не видит скачанный файл
Проверьте каталог по таблице выше. Если он верный, файл мог докачаться не полностью: .safetensors при обрыве остаётся на диске и падает уже при загрузке, с ошибкой разбора заголовка. Сверьте размер с карточкой модели.
OOM при генерации
Про --lowvram стоит знать одну деталь: в описании аргумента сказано, что при включённом динамическом управлении памятью он не делает ничего, а иначе переносит текстовые энкодеры на процессор. То есть привычный совет «добавьте --lowvram» может не дать эффекта вовсе.
Что работает предсказуемо:
- Снизить разрешение до штатного — 1024×1024 для SDXL и Flux.
- Поставить батч в единицу.
--reserve-vram 1— явно зарезервировать гигабайт под систему, если на карте есть что-то ещё.--novram, когда--lowvramне помог; следующая ступень —--cpu, но она превращает генерацию в фоновую задачу на часы.- Взять квантованную сборку вместо bf16. Разбор форматов, офлоад энкодеров на процессор и чек-лист при OOM — в справочнике по VRAM.
Список выше — флаги и настройки ComfyUI, а не причины самой ошибки. Если OOM повторяется на тех же настройках, идти нужно от причины: что занимает память помимо весов и чем сбивается пик. По причинам эта ошибка разобрана отдельно — в разборе CUDA out of memory: как отличить реальную нехватку памяти от фрагментации и какие параметры снижают пик.
Процесс умирает при закрытии SSH
Запускайте под tmux или как systemd-юнит. При обрыве соединения обычный python main.py уходит вместе с сессией, а незавершённая очередь генерации теряется.
Готовое окружение или ручная установка
Ручной путь имеет смысл, когда нужен свой набор нод, конкретная версия torch или нестандартная раскладка моделей. Установка с нуля занимает время, и на арендованной карте оно оплачивается.
Второй вариант — запустить ComfyUI как готовое приложение, с уже собранным окружением. Видеокарту здесь выбирает тариф мощности: он задаёт класс карты по объёму памяти, а какая карта выдаётся под тариф и сколько она стоит в час, консоль показывает при запуске. К серверу подключается постоянный диск на 50 ГБ: модели, результаты генерации и входные файлы остаются на нём между сессиями. Ноды, воркфлоу и настройки сохраняются при завершении сессии и восстанавливаются на следующем сервере. Бесплатный диск хранится 3 дня после последней сессии, платный — без срока.
Выбор между вариантами простой по критерию: если нужна своя версия torch или нестандартная раскладка моделей, ставьте руками и держите модели на отдельном диске. Если окружение стандартное, готовый запуск экономит минуты установки, а ноды из Manager и скачанные модели остаются между сессиями.
Что в итоге
ComfyUI на аренде ломается в трёх местах, и ни одно из них не относится к самому ComfyUI.
Аутентификации у него нет — это видно по списку аргументов, и --listen наружу без туннеля означает открытую карту. Модели лежат в разных каталогах в зависимости от того, раздельные веса или all-in-one, и Load Checkpoint не увидит файл из diffusion_models. Manager на нелокальном адресе урезает права по умолчанию, и это чинится строчкой в config.ini, а не переустановкой.
При ручной установке диск инстанса временный, поэтому первое, что стоит настроить, — предзагрузка моделей скриптом или --base-directory на постоянный том. Девять минут скачивания при каждом старте — единственная статья расходов, которую здесь реально можно убрать.
Проверить связку целиком дешевле всего на почасовой аренде. Порог VRAM зависит от разрешения, батча, набора нод и режима выгрузки весов, поэтому одного числа под SDXL и Flux здесь не назвать.
Ориентир даёт объём весов, а не замер, и верен он для одного набора условий: 1024×1024, батч 1, стандартные ноды, веса в исходном формате и целиком на карте. SDXL base занимает 6.94 ГБ. Раздельный Flux в bf16 — это 23.80 ГБ трансформера и 9.79 ГБ энкодера T5, и вместе в 24 ГБ они не укладываются без выгрузки на процессор. Квантованная сборка или энкодеры на процессоре сдвигают порог вниз, большее разрешение и батч — вверх; активации в эту прикидку не входят.
На 48 ГБ те же 34.18 ГБ весов оставляют около 13.8 ГБ под активации, латенты и фрагментацию. Это запас под расчёт выше, а не проверенный минимум: пик зависит от разрешения, батча и набора нод, и здесь он не замерялся. Как считать пик и чем его снижать, разобрано в справочнике по VRAM.
Нужна карта под ComfyUI?
По расчёту объёма весов A30 на 24 ГБ закрывает SDXL и Flux в fp8, под раздельный Flux в bf16 берут RTX A6000 на 48 ГБ — при батче 1 и без выгрузки на процессор. Драйверы и CUDA настроены, оплата поминутная.
Запустить ComfyUI