Пакетная генерация на interruptible GPU: стратегия

Задача страницы. Показать, как массово генерировать изображения и видео на дешёвых interruptible‑инстансах без провалов по качеству и срокам: архитектура очередей и воркеров, разбиение задач на «чанки», кэш весов на NVMe, идемпотентность и детерминизм (seeds/манifest), метрики/алерты, расчёт времени/стоимости и выбор профилей GPU.

TL;DR

Архитектура: разделяем управление и вычисления

Контур:

  • Control‑plane (on‑demand): очередь/БД/метрики/дашборды/логика приоритизации.
  • Workers (interruptible): контейнеры ComfyUI/WebUI/TensorRT‑LLM и вспомогательные сервисы (препроцессоры, апскейл, реставрация лиц, транскод).

Роли и протоколы:

**Компонент** **Роль** **Требования**
**Очередь** Выдаёт задачи по lease (видимость/таймаут) TTL < длительность чанка, повторная публикация по тайм‑ауту
**Диспетчер** Приоритизация (short/long), квоты, дедлайны SLA‑классы, лимиты параметров
**Воркеры** Выполняют чанки, ведут heartbeat Прогрев весов, локальный NVMe‑кэш
**Репозиторий артефактов** Хранение результатов/логов/отчётов Идемпотентная запись по request\_id

См. также: стриминг прогресса — https://cloudcompute.ru/solutions/llm-inference/streaming/, CI/CD для контейнеров — https://cloudcompute.ru/solutions/containers-ci-cd/

Разбиение задач: «чанки» и манифест партии

Почему чанк ≤ 2 минут: при прерывании теряется в среднем ½ длительности текущего чанка. Короткие чанки уменьшают потерю, а накладные остаются терпимыми, если кэш на NVMe и модели прогреты.

Структура партии (manifest):

batch_id: cat-2025-09-collections
pipeline: comfyui-sdxl-style
defaults:
 width: 1024
 height: 1024
 steps: 26
 cfg: 6.0
 sampler: dpmpp_2m
 seed_strategy: fixed-per-item
items:
 - request_id: 0001
 prompt: "modern product photo, soft light"
 negative: "blurry, watermark"
 refs:
 style: "s3://assets/style/brandA.jpg"
 control_canny: "s3://assets/edges/0001.png"
 outputs:
 path: "s3://batches/cat-2025-09/0001/"
 name_pattern: "{request_id}_{seed}.png"
 - request_id: 0002
 ...

Идемпотентность:

  • param_hash = sha256(pipeline + prompt + negative + refs + steps + seed + model_versions)
  • Воркеры сначала проверяют наличие готового файла с тем же param_hash, затем считают.

Детерминизм: семена и версии - Seed‑политика: фиксируйте seed (или функцию seed_i = hash(batch_id, request_id, i)), чтобы ретраи приносили тот же результат.

  • Версионирование: храните в отчёте «манифест версии»: model_name@digest, lora@digest, controlnet@digest, vae@digest.
  • Хеш путей: складывайте param_hash в имя выходного файла/папки.

Кэш и прогрев: NVMe как ускоритель

Локальный NVMe на воркере:

  • Каталоги: /models, /weights, /pipelines, /cache/refs, /cache/tiles.
  • Первичная синхронизация при старте воркера; прогрев (глухой прогон) модели в «тихом» режиме.
  • Кэш препроцессоров: карты Canny/Pose/Depth; для видео — разложенные кадры (см. https://cloudcompute.ru/solutions/image-video-gen/video/).

Подробнее: https://cloudcompute.ru/solutions/storage-data/

Очереди, лизы и ретраи

Алгоритм:

  1. Воркер берет сообщение с lease_ttl = 90 с.
  2. Каждые 15–30 с шлёт heartbeat (продление lease).
  3. При успехе — ack и загрузка результатов/логов/метрик.
  4. При прерывании — lease истекает, задача снова видна другим воркерам.

Важные поля задачи:

request_id, param_hash, priority, deadline, max_retries, cost_cap, chunk_type

  • max_retries: 3–5 (зависит от частоты прерываний).
  • cost_cap: «секёшь» слишком дорогую задачу, чтобы не выбиться из бюджета.

Приоритизация:

  • Очереди short (превью) и long (массовые партии).
  • «Справедливость» по клиентам/проектам: квоты и лимиты воркеров. Профили пайплайнов: изображения и видео

Изображения (SDXL/SD3, стиль/контроль):

Видео (генерация/стилизация/интерполяция):

Прерывания: что именно сохранять

  • Метаданные: stdout/stderr шага, seed, param_hash, время, VRAM пик, версии весов.
  • Промежуточные артефакты: карты препроцессоров, VAE‑латенты (если стек позволяет), PNG‑кадры видео.
  • Чекпоинт «чего‑сделано»: done.list (перечень успешных выходов), чтобы ретрай взял только недоделанное.
  • В генерации изображений не всегда есть смысл «продолжать шаги диффузии» после прерывания — проще пересчитать картинку детерминированно, поэтому короткий чанк критичен.

Безопасность и политика

  • Лимиты параметров: max_resolution, max_steps, max_batch, max_duration (для видео), max_concurrent_jobs.
  • Белые списки моделей/LoRA/контрольных модулей; маскирование PII в логах.
  • Санация путей ввода/вывода и контроль контента.

Подробнее: https://cloudcompute.ru/solutions/security/ и https://cloudcompute.ru/solutions/llm-inference/guardrails/

Метрики, логи и алерты

Сбор и визуализация — https://cloudcompute.ru/solutions/monitoring-logging/ и https://cloudcompute.ru/solutions/llm-inference/observability/

Технические:

  • imgs_per_min / frames_per_min, p50/p95 t_step_ms, queue_wait_ms.
  • VRAM пик, GPU util, частота OOM/ретраев, прерывания/час.
  • Кэш‑хиты NVMe, время загрузки весов.

Качество:

Алерты:

Рост p95 t_step_ms, падение кэш‑хитов, всплеск OOM/ретраев, превышение cost_cap.

Экономика: простые формулы

Пусть P_on — цена on‑demand, P_int — цена interruptible, λ — частота прерываний (в час), τ — длительность чанка (в часах).

Потеря работы из‑за прерываний (в доле времени):

overhead_preempt ≈ λ × τ × 0.5

(в среднем теряем ~½ текущего чанка при каждом прерывании)

Эффективная цена часа вычислений:

P_eff ≈ P_int / (1 - overhead_preempt)

Условие выгоды interruptible:

P_eff < P_on ⇒ P_int < P_on × (1 - overhead_preempt)Отсюда видно: чем короче чанк, тем меньше overhead, тем чаще interruptible побеждает. Гайд по планированию — https://cloudcompute.ru/solutions/cost-planner/

Рекомендованные профили GPU

**Профиль** **Для чего** **Примеры задач** **Ориентиры**
**Compact** (24 ГБ) Превью/каталоги, upscaling 2× SDXL @768–1024², A1111, Real‑ESRGAN, Face‑Restore Высокий TPS на дешёвых воркерах
**Balanced** (48 ГБ) Стабильный прод для SDXL/SD3 ControlNet+IP‑Adapter, апскейл 4×, видео 576–720p Хороший запас по VRAM
**HQ** (80 ГБ) Тяжёлые SD3/видео‑пайплайны 1024²+, мульти‑ветки контроля, 1080p видео Дорогой, держать часть on‑demand

Выбор под стек — в разделах: SDXL — https://cloudcompute.ru/solutions/image-video-gen/sdxl/ • SD3 — https://cloudcompute.ru/solutions/image-video-gen/sd3/ • Control — https://cloudcompute.ru/solutions/image-video-gen/controlnet/ • Апскейл — https://cloudcompute.ru/solutions/image-video-gen/upscaling/

Пример: минимальный воркер и протокол с очередью

Соглашение:

  • POST /v1/batch/enqueue — ставит запросы;
  • GET /v1/queue/pull?lease=90 — выдаёт задачу;
  • POST /v1/queue/heartbeat — продление «лиза»;
  • POST /v1/queue/ack — подтверждает выполнение.

Скелет воркера (псевдокод):

def run_worker():
 while True:
 job = queue.pull(lease=90)
 if not job: sleep(2); continue
 try:
 warmup_if_needed(job.model_bundle)
 with heartbeat(interval=20):
 for chunk in plan(job): # разбиваем на чанки
 if already_done(chunk.param_hash): continue
 out = execute_chunk(chunk) # comfyui/a1111 API
 upload(out)
 record_done(chunk)
 queue.ack(job.id)
 except Preempted:
 # lease истечёт или ловим сигнал; ничего не делаем — очередь вернёт задание
 pass
 except Exception as e:
 mark_error(job, str(e))

Примеры API для ComfyUI/A1111 — в разделах: ComfyUI — https://cloudcompute.ru/solutions/image-video-gen/comfyui/ • WebUI — https://cloudcompute.ru/solutions/image-video-gen/automatic1111/

Контроль качества перед выгрузкой

  • Gate‑проверки перед ack: размер/битность, отсутствие «швов/ореолов», «восковых» лиц.
  • Автодоправка: при дефекте — повторный расчёт с мягко изменёнными параметрами (например, +4 шага, слабее denoise, другая карта порогов Canny).
  • Отчёты по партии: превью‑коллажи, статистика дефектов/времени/цены.

Как запускать в cloudcompute.ru

Шаблоны: https://cloudcompute.ru/solutions/templates/

Экономика/SLA — https://cloudcompute.ru/solutions/cost-planner/ • эксплуатация — https://cloudcompute.ru/solutions/performance-tuning/ • прерываемые паттерны — https://cloudcompute.ru/solutions/interruptible-patterns/

Чек‑лист перед продом

  • Разделены control‑plane (on‑demand) и workers (interruptible).
  • Размер чанка ≤ 120 с; настроены lease_ttl, heartbeat и ретраи.
  • Идемпотентность: request_id + param_hash + фиксированные seed/версии.
  • NVMe‑кэш и прогрев моделей; кэш карт препроцессоров и кадров.
  • Приоритизация short/long, квоты, лимиты параметров (max_resolution/steps/batch/duration).
  • Метрики/алерты/трейсинг включены; отчёты по времени/цене/дефектам.
  • Рассчитан P_eff и подтверждён выигрыш interruptible по вашему λ и τ.

Навигация по разделу «Генерация изображений и видео»

https://cloudcompute.ru/solutions/image-video-gen/https://cloudcompute.ru/solutions/image-video-gen/comfyui/https://cloudcompute.ru/solutions/image-video-gen/automatic1111/https://cloudcompute.ru/solutions/image-video-gen/sdxl/https://cloudcompute.ru/solutions/image-video-gen/sd3/https://cloudcompute.ru/solutions/image-video-gen/controlnet/https://cloudcompute.ru/solutions/image-video-gen/upscaling/https://cloudcompute.ru/solutions/image-video-gen/face-restoration/Вы здесь: https://cloudcompute.ru/solutions/image-video-gen/batch-render/ • видео: https://cloudcompute.ru/solutions/image-video-gen/video/ • инфраструктура: https://cloudcompute.ru/solutions/performance-tuning/https://cloudcompute.ru/solutions/cost-planner/https://cloudcompute.ru/solutions/storage-data/https://cloudcompute.ru/solutions/monitoring-logging/https://cloudcompute.ru/solutions/llm-inference/observability/https://cloudcompute.ru/solutions/llm-inference/streaming/https://cloudcompute.ru/solutions/interruptible-patterns/https://cloudcompute.ru/solutions/rendering/video-transcode/https://cloudcompute.ru/solutions/containers-ci-cd/

Готовы запустить?

Запустить GPU-сервер