Проект THE ANGEL AI — запускаем тяжёлые генеративные пайплайны ComfyUI (Flux2 GGUF, LTX 2.3 Video, TTS) прямо в бесплатном Kaggle-блокноте на двух Tesla T4, без локального GPU и без оплаты облака.
Kaggle бесплатно даёт 2× Tesla T4 (по 16 ГБ) на 30 часов в неделю — этого хватает, чтобы крутить Flux2, видео-пайплайны и TTS. Но «голый» Kaggle — это боль:
- ❌ окружение слетает после каждого рестарта сессии
- ❌ бинарники теряют бит исполнения (
+x) — файлы есть, но не работают - ❌ при обновлении ядра Kaggle старый Python несовместим с новой libc
- ❌ мульти-GPU (2× T4) конфликтует без правильной настройки
- ❌ через 40 минут бездействия Kaggle усыпляет сессию
Этот репозиторий превращает запуск в одну строку и чинит всё автоматически.
Kaggle_Workspace_FreeGPU/
├─ README.md # этот файл
├─ instal/ # ☕ ядро: скрипты установки и запуска
│ ├─ instal_comfyui.py # ШАГ 1: uv + venv + torch cu130 + ComfyUI
│ ├─ instal_castom_node.py # ШАГ 2: кастомные ноды + модели
│ ├─ start.py # ШАГ 3: запуск + туннель + панель + keep-alive
│ └─ kaggle_env.py # движок: пути, uv, ремонт venv, диагностика
├─ Notebook/ # 📓 готовые блокноты для импорта в Kaggle
│ ├─ confyui-main.ipynb
│ └─ gemma_kaggle_server.ipynb
├─ workflows/ # 🎨 ComfyUI-воркфлоу (импорт drag-n-drop)
│ ├─ Flux2dev32b_GGUF.json
│ ├─ Flux2dev32b_GGUF v2 API.json
│ └─ LTX_Director-V2-Beta.json
├─ docs-site/ # 🌐 сайт документации (GitHub Pages)
└─ _kaggle_tests/ # 🧪 тесты для проверки на Kaggle
Открой блокнот Kaggle, включи GPU T4 ×2 и интернет, выполни по порядку:
# 0. Получить скрипты (первый раз — clone, потом — pull)
!git clone https://github.com/THE-ANGEL-AI/Kaggle_Workspace_FreeGPU.git || \
git -C Kaggle_Workspace_FreeGPU pull
# 1. ComfyUI + Manager
!python Kaggle_Workspace_FreeGPU/instal/instal_comfyui.py
# 2. Кастомные ноды + модели
!python Kaggle_Workspace_FreeGPU/instal/instal_castom_node.py
# 3. Запуск + Cloudflare-туннель + панель управления
%run Kaggle_Workspace_FreeGPU/instal/start.py💡 Можно одной строкой.
start.pyсам проверит окружение, доставит недостающее и запустит всё. Для холодного старта достаточно%run .../instal/start.py.
После шага 3 под ячейкой появятся кнопки:
| Кнопка | Что делает |
|---|---|
| 🔗 Открыть ComfyUI | Публичная ссылка Cloudflare (новая на каждый запуск) |
| 🛑 Остановить | Гасит ComfyUI и туннель без перезапуска ядра |
| 🔄 Перезапустить | Поднимает ComfyUI заново (новый URL) |
| Шаг | Файл | Что ставит / делает | Запуск |
|---|---|---|---|
| 1 | instal_comfyui.py |
uv + venv (Python 3.12) + torch cu130 + ComfyUI + Manager + общие пакеты | !python instal/instal_comfyui.py |
| 2 | instal_castom_node.py |
8 кастомных нод из списка + симлинки моделей из /kaggle/input + авто-инжекция SageAttention-T4 в workflow |
!python instal/instal_castom_node.py |
| 3 | start.py |
проверка/ремонт окружения → сборка SageAttention-SM75 + symlink ноды → ComfyUI → Cloudflare-туннель → панель кнопок → keep-alive | %run instal/start.py |
| — | kaggle_env.py |
ядро системы: пути, uv, создание/ремонт/диагностика venv, install_python() |
импортируется всеми |
Проблема. Kaggle при рестарте сессии:
- 🧨 Сбрасывает бит
+x— файлы на месте, но не исполняются - 🧨 Обновляет ядро ОС — старый CPython (скомпилирован под другую libc) падает при запуске. Файл есть, а запустить нельзя.
Как это чинится (3 уровня, по возрастанию стоимости):
venv сломан?
├─ 🔧 Уровень 1 — восстановить +x (секунда)
│ Если venv/bin/python и базовый CPython просто потеряли бит исполнения —
│ chmod 755 чинит всё за миллисекунды. Torch не трогаем.
│
├─ 🔧 Уровень 2 — переустановить базовый CPython (10-30 сек)
│ Если +x не помог — значит, обновилось ядро Kaggle. Старый CPython
│ несовместим с новой libc → удаляем его и ставим свежий через uv.
│ Пакеты в venv пока живы (но симлинк битый, venv всё равно не работает).
│
└─ 🔧 Уровень 3 — пересоздать venv + torch (из кэша — быстро)
Старый venv удаляется, создаётся новый на свежем CPython.
Torch и пакеты переставляются из uv-кэша — не качаются заново.
После этого start.py автоматически переустанавливает зависимости нод.
🔬 Технически: как это работает
def install_python():
"""Единая точка входа: uv + venv (создан/починен/пересоздан)
Returns: True если всё уже работало, False если был ремонт
"""
ensure_uv()
return ensure_venv()
def venv_python_ok():
"""Проверка реальным запуском, а не os.path.exists"""
subprocess.run([VENV_PYTHON, "-c", "pass"],
check=True, capture_output=True, timeout=30)
def repair_venv_perms():
"""Уровень 1: быстро чинит +x на всём исполняемом"""
candidates = [venv/bin/python, реальный CPython, uv, python3*]
for c in candidates: os.chmod(c, 0o755)
def repair_base_python_via_uv():
"""Уровень 2: CPython несовместим с ядром — переустановка"""
shutil.rmtree(UV_PYTHON_DIR)
run(["uv", "python", "install", "3.12"])
def ensure_venv():
"""Уровень 3: uv venv --clear (пакеты из кэша), возвращает флаг"""
if venv_python_ok(): return True # всё ок
if repair_venv_perms(): return False # +x починил
repair_base_python_via_uv()
run(["uv", "venv", ... "--clear"])
return False # был пересоздан — torch мог пропастьЕсли venv не работает — скрипт точно скажет причину в логе:
| Симптом | Диагноз | Что сделает скрипт |
|---|---|---|
No such file or directory |
Битый симлинк — venv/bin/python ведёт в никуда |
Пересоздаст venv |
Permission denied |
Слетел бит +x |
chmod 755 (секунда) |
version GLIBC_2.38 not found |
Обновилось ядро Kaggle, старый CPython несовместим | uv python install (свежий CPython) |
FATAL: kernel too old |
Ядро ОС новее, чем тот, под которое собран CPython | То же — переустановка CPython |
Проблема. Kaggle через ~40 минут бездействия показывает "Are you still there?" и может остановить сессию, особенно если вкладка свёрнута.
Как мы это решили:
2 независимых слоя keep-alive, работающих параллельно:
┌─────────────────────────────────────────────────────┐
│ 🖥️ Слой 1: Heartbeat-виджет (каждые 30 сек) │
│ Обновляет HTML-строку в панели управления. │
│ Создаёт трафик ядро → браузер — Kaggle видит │
│ активность и не трогает сессию. │
│ Живёт, пока открыта вкладка. │
├─────────────────────────────────────────────────────┤
│ 📢 Слой 2: Stdout-пульс (каждые 5 минут) │
│ Пишет 💓 [14:32:01] ComfyUI активен... прямо │
│ в stdout ячейки через print(flush=True). │
│ Гарантированно отправляет данные на сервер Kaggle │
│ даже если вкладка свёрнута — не зависит от │
│ браузера. Предотвращает "Are you still there?". │
└─────────────────────────────────────────────────────┘
🔬 Технически: два потока в start.py
def launch(self):
Thread(target=self._heartbeat_loop, daemon=True).start() # виджет, 30с
Thread(target=self._stdout_keep_alive, daemon=True).start() # stdout, 5 мин
Thread(target=self._startup, daemon=True).start()
self._keep_alive() # основной цикл ячейки (держит kernel активным)
def _stdout_keep_alive(self):
print("🔒 [ЗАЩИТА] Система защиты Kaggle активирована!", flush=True)
while not self.stopped:
time.sleep(300)
now = datetime.now().strftime("%H:%M:%S")
print(f"💓 [{now}] ComfyUI активен, ожидание запроса...", flush=True)| Оптимизация | Зачем |
|---|---|
| uv вместо pip | Параллельная установка пакетов, torch в разы быстрее |
| torch cu130 | CUDA 13.0 — драйвер Kaggle 580.x его держит; на cu128 был warning и медленный путь |
| SageAttention-SM75 🆕 | Собственный CUDA-кернел под T4 (Turing): INT8 QK + FP16 PV + FP32 accum. До 2.5× attention на длинных контекстах. Работает как ComfyUI custom node (SageAttention-T4 Apply) — через add_object_patch(), без глобальных monkey-patch и без флагов запуска |
| Без xformers | Несовместим с T4 (sm_75). Раньше fallback на --use-pytorch-cross-attention, теперь на --use-split-cross-attention |
| ComfyUI-MultiGPU | DisTorch2 вместо старого хака ComfyBootlegOffload (они конфликтовали) |
| Без tensorflow / старых пинов | Тянут свои версии CUDA, ломают современные ноды |
| smart-memory включён | Модель кэшируется в VRAM между генерациями |
| uv-кэш в /kaggle/working | Wheels (torch и др.) переживают рестарт — переустановка из кэша, не из сети |
Собственный CUDA-кернел под архитектуру Turing (sm_75) — INT8 тензорные ядра для QK⊤ + FP16 для PV + FP32 аккумуляция. Работает на T4, RTX 2080, Quadro RTX.
Кернел живёт в форке THE-ANGEL-AI/SageAttention-SM75-path. start.py при старте:
- Клонирует/обновляет форк
- Собирает CUDA-расширение через
pip install -e . - Создаёт symlink в
custom_nodes/SageAttention-T4— ComfyUI видит ноду - Авто-инжектит ноду
SageAttention-T4 Applyв сохранённые workflow
Всё это происходит автоматически при каждом запуске. Если сборка не удалась — fallback на --use-split-cross-attention.
| Длина контекста | Ускорение attention | End-to-end (видео) |
|---|---|---|
| 2K | ~1.3× | +10-15% |
| 8K | ~1.8× | +30-40% |
| 16K | ~2.5× | +60-75% |
После установки в меню нод появляется категория 🧠 SageAttention-T4 с двумя нодами:
| Нода | Назначение |
|---|---|
| SageAttention-T4 Apply | Вставь между загрузчиком модели и сэмплером. Параметры: smooth_k (on/off), enable (on/off) |
| SageAttention-T4 Remove | Убирает патч, возвращает оригинальное внимание |
Нода использует model.add_object_patch() — патч действует только на эту модель, не ломая другие части workflow. Workflow-файлы в ComfyUI/user/default/workflows/ автоматически получают ноду при запуске.
В графе используй ноды ComfyUI-MultiGPU (DisTorch2):
UnetLoaderGGUFAdvancedDisTorch2MultiGPU— для Flux2-GGUF*CLIPLoaderGGUFDisTorch2MultiGPU— для текст-энкодера
Они распределяют слои между cuda:0, cuda:1 и CPU. Для двух T4 удобно начать
с режима Virtual VRAM или ratio (0.6 / 0.4 между картами).
Симлинки из /kaggle/input → папки ComfyUI. Настраиваются в instal_castom_node.py (список SYMLINKS).
| Файл | Назначение |
|---|---|
flux2-dev-Q4_0.gguf |
Основная модель (диффузия) |
mistral_3_small_flux2_fp8.safetensors |
Текст-энкодер (CLIP) |
flux2-vae.safetensors |
VAE |
| Файл | Назначение |
|---|---|
ltx-2.3-22b-distilled-1.1-Q6_K.gguf |
Основная модель |
gemma-3-12b-it-heretic-fp4-comfy.safetensors |
Текст-энкодер |
ltx-2.3_text_projection_bf16.safetensors |
Текст-проекция |
LTX23_video_vae_bf16.safetensors |
Видео-VAE |
LTX23_audio_vae_bf16.safetensors |
Аудио-VAE |
taeltx2_3.safetensors |
VAE |
ltx-2.3-spatial-upscaler-x2-1.1.safetensors |
Апскейлер |
LTX-2.3-22b-AV-LoRA-talking-head-v1.safetensors |
LoRA (говорящая голова) |
LTX-2.3-OmniNFT-RL-Lora_bf16.safetensors |
LoRA |
ltx-2.3-22b-ic-lora-ingredients-0.9.safetensors |
LoRA |
Ставятся автоматически на шаге 2. Список — словарь CUSTOM_NODES в instal_castom_node.py.
| Нода | Назначение |
|---|---|
| ComfyUI-Crystools | Мониторинг GPU, температуры, VRAM |
| ComfyUI-GGUF | Загрузка GGUF-моделей (Flux2, LTX) |
| ComfyUI-Logic | Логические операторы в графе |
| comfy-image-saver | Сохранение изображений с метаданными |
| ComfyUI-MultiGPU | Multi-GPU (DisTorch2) для 2× T4 |
| ComfyUI-KJNodes | Утилиты: маски, латенты, пайплайны |
| ComfyUI_FL-CosyVoice3 | TTS — синтез и клонирование речи |
| WhatDreamsCost-ComfyUI | LTX 2.3 Director (таймлайн-оркестратор видео) |
| SageAttention-T4 🆕 | Кастомная нода — INT8-внимание через add_object_patch(). Ставится start.py из THE-ANGEL-AI/SageAttention-SM75-path |
| ComfyUI-Manager | Менеджер нод (ставится на шаге 1) |
| Что хочешь сделать | Куда идти |
|---|---|
| ➕ Добавить ноду | CUSTOM_NODES в instal_castom_node.py |
| ➕ Добавить модель | SYMLINKS в instal_castom_node.py |
| 📦 Общий pip-пакет | install_common_extras() в instal_comfyui.py |
| 🧠 SageAttention (сборка/нода) | _install_sage_attention() в start.py — меняй URL форка или флаги компиляции |
| 🚀 Флаги запуска ComfyUI | _start_comfy() в start.py |
| 🔄 Частоту пульса keep-alive | _stdout_keep_alive() в start.py (сейчас 300 сек) |
🔄 Авто-обновление.
start.pyпри старте делаетgit pull --ff-only— правки скриптов прилетают на Kaggle сами.
React-сайт проекта (Vite + React 19 + TypeScript + Framer Motion) живёт
в ветке site
этого репозитория. Ветка main содержит только скрипты — без тяжёлого кода сайта.
Задеплоено через GitHub Actions.
Проект развивается силами THE ANGEL AI и остаётся бесплатным. Если он сэкономил вам деньги на облаке или GPU — поддержите развитие:
Вопросы, гайды, анонсы и помощь по запуску — в нашей группе:
THE ANGEL AI · сделано с ❤️ для тех, у кого нет своего GPU