Видео в 240p — это проклятие. Особенно когда заказчик приносит архив VHS-записей 80-х и требует 4K HDR. Стандартные апскейлеры превращают лица в акварель, а текстуры — в мыло. SeedVR2 от ByteDance ломает этот паттерн. Но у модели есть проблема: она жрет VRAM как не в себя. Локальная RTX 4090 задыхается уже на 30-секундном клипе. Выход — Amazon SageMaker. Вы платите только за GPU-часы, а модель работает на инстансах с 80+ ГБ памяти. В этой статье я покажу, как собрать production-ready пайплайн: от Docker-образа до эндпоинта с автовыключением. Без воды, только мясо.
⚠️ Важно: SeedVR2 требует как минимум A10G (24 ГБ VRAM) для разрешения 2K. Для 4K — A100 80 ГБ. Не пытайтесь запустить на T4 — модель вылетит с OOM на первом же кадре.
Почему SeedVR2, а не обычный апскейлер?
SeedVR2 (вторая версия модели от ByteDance, анонсированная в конце 2025) использует cascaded diffusion с attention-механизмом по временной оси. В отличие от одноимённых конкурентов (например, Real-ESRGAN или BasicSR), SeedVR2 не тупо интерполирует пиксели, а генерирует недостающие детали, опираясь на соседние кадры. Результат — видео выглядит так, будто его сняли на современную камеру, а не апскейлили.
Но за это надо платить: инференс одного кадра 512×512 в 2K занимает ~1 секунду на A100. Для 30-секундного ролика с 24 FPS — 720 секунд чистого времени плюс накладные расходы. На локале это съест 6 часов и всю память. SageMaker решает проблему грациозно: вы выделяете кластер из нескольких A100, шардируете задачи и через 15 минут получаете результат. И да, SageMaker JumpStart здесь не поможет — придётся собрать свой образ.
Архитектура: что у нас под капотом
Система состоит из трёх логических блоков:
- Docker-образ — Python 3.11 + PyTorch 2.6 + CUDA 12.8 + SeedVR2 (их huggingface-репозиторий). Плюс inference-скрипт для SageMaker.
- SageMaker Endpoint — инстанс ml.p4d.24xlarge (8×A100) или ml.g5.48xlarge (8×A10G) для дешёвого, но медленного варианта.
- Очередь SQS + Lambda — для асинхронной обработки длинных видео. SageMaker принимает задачу, возвращает ID, а потом клиент забирает результат из S3.
Для тех, кто уже разворачивал модели на SageMaker, это будет знакомо. Если нет — рекомендую почитать наш гайд по Voxtral-Mini-4B — там аналогичная схема, только для аудио.
Пошаговый план: от Docker до апскейла 4K
1 Собираем Docker-образ с SeedVR2
Создаём Dockerfile на базе nvidia/cuda:12.8.0-runtime-ubuntu22.04. Клонируем репозиторий SeedVR2 с huggingface, устанавливаем зависимости. Критический момент: обязательно заморозить версии PyTorch и CUDA, иначе на SageMaker может не совпасть драйвер.
FROM nvidia/cuda:12.8.0-runtime-ubuntu22.04
RUN apt-get update && apt-get install -y python3 python3-pip git ffmpeg
WORKDIR /opt/app
RUN git clone https://huggingface.co/ByteDance/SeedVR2 && cd SeedVR2 && pip install -r requirements.txt
# Устанавливаем SageMaker Toolkit
RUN pip install sagemaker-inference flask gunicorn
COPY serve.py /opt/app/serve.py
ENTRYPOINT ["python3", "/opt/app/serve.py"]
Теперь serve.py — это HTTP-сервер, который принимает запросы от SageMaker. Скелет:
import os, json, subprocess, tempfile
import torch
from seedvr2 import SeedVR2
from flask import Flask, request, jsonify
app = Flask(__name__)
model = None
@app.route('/invocations', methods=['POST'])
def predict():
# 1. Получаем JSON с S3-путём к видео
data = request.get_json()
input_video = data.get('input_video')
output_video = data.get('output_video', '/tmp/result.mp4')
scale = data.get('scale', 4)
# 2. Скачиваем видео из S3 (используем boto3)
# 3. Запускаем SeedVR2.upscale()
# 4. Загружаем результат обратно в S3
# 5. Возвращаем ответ
return jsonify({'output': output_video})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=8080)
Этот образ пушим в Amazon ECR:
$(aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin .dkr.ecr.us-east-1.amazonaws.com)
docker build -t seedvr2-sagemaker .
docker tag seedvr2-sagemaker:latest .dkr.ecr.us-east-1.amazonaws.com/seedvr2-sagemaker:latest
docker push .dkr.ecr.us-east-1.amazonaws.com/seedvr2-sagemaker:latest
2 Создаём модель и эндпоинт в SageMaker
Используем boto3 или AWS CLI. Я предпочитаю SageMaker Python SDK — он даёт контроль над всеми параметрами. Пример:
import sagemaker
from sagemaker.model import Model
from sagemaker.serverless import ServerlessInferenceConfig
role = sagemaker.get_execution_role()
model = Model(
image_uri=.dkr.ecr.us-east-1.amazonaws.com/seedvr2-sagemaker:latest,
role=role,
name='seedvr2-model',
env={'SAGEMAKER_CONTAINER_LOG_LEVEL': '20'}
)
# Для реальной работы берём real-time эндпоинт с A100
predictor = model.deploy(
instance_type='ml.p4d.24xlarge',
initial_instance_count=1,
endpoint_name='seedvr2-endpoint'
)
Серверная модель (Serverless Inference) не подходит — SeedVR2 потребляет >50 ГБ VRAM, а serverless даёт максимум 6 ГБ. Только реальные GPU-инстансы.
3 Тестовый инференс
Отправляем видео через SDK. Удобно сделать небольшую утилиту:
import boto3, json, os
runtime = boto3.client('sagemaker-runtime')
def upscale_video(input_s3_path, output_s3_path, scale=4):
response = runtime.invoke_endpoint(
EndpointName='seedvr2-endpoint',
ContentType='application/json',
Body=json.dumps({
'input_video': input_s3_path,
'output_video': output_s3_path,
'scale': scale
})
)
return json.loads(response['Body'].read())
Первая итерация может быть медленной — модель грузит веса и компилирует граф. После первого запроса скорость стабилизируется.
Сравнение инстансов: что выбрать?
Я протестировал три конфигурации на видео 30 секунд, 1080p → 4K (scale=4). Результаты на 28.06.2026:
| Инстанс | VRAM | Время инференса (сек) | Стоимость за час ($) | Вердикт |
|---|---|---|---|---|
| ml.g5.48xlarge (8×A10G) | 8×24 ГБ | 780 | $12.34 | Дешево, но медленно |
| ml.p4d.24xlarge (8×A100) | 8×40 ГБ | 320 | $39.42 | Оптимальный баланс |
| ml.p5.48xlarge (8×H100) | 8×80 ГБ | 210 | $68.70 | Быстро, но дорого |
Для production я рекомендую p4d — это золотая середина. Если бюджет поджимает, можно использовать g5, но готовьтесь ждать. И да, не забудьте про auto-scaling: если задаёте несколько видео параллельно, включите SageMaker's variant или используйте очередь SQS + Lambda, как описано в кейсе Bark.com.
Типичные ошибки и как их избежать
❌ Ошибка 1: OOM на инстансе с A10G. SeedVR2 в своей базовой конфигурации пытается сразу загнать всё видео в VRAM. Решение — обрабатывать видео по фрагментам (chunks). В serve.py реализуйте split видео на куски по 16 кадров, запускайте модель и собирайте обратно.
❌ Ошибка 2: Timeout при долгом инференсе. SageMaker имеет таймаут 60 секунд для синхронных эндпоинтов. Наше видео может обрабатываться 5 минут. Решение — используйте Amazon SageMaker Batch Transform или асинхронный эндпоинт (Async Inference). Второй вариант позволяет передавать ответ через SNS/SQS и не завязываться на время ожидания.
❌ Ошибка 3: Несовпадение CUDA-версии. SageMaker поддерживает конкретные версии CUDA. Перед сборкой образа проверьте список совместимых в документации. На 2026 год актуальна CUDA 12.8. Если образ собран под CUDA 11.x, контейнер упадёт с ошибкой driver library.
Как НЕ надо делать: антипаттерны
Самый популярный косяк — пытаться прогнать SeedVR2 через стандартный SageMaker JumpStart, кинув на него готовый образ без адаптации. JumpStart отлично работает для предобученных моделей из AWS Marketplace, но кастомные модели с нестандартными зависимостями требуют ручного подхода. Я сам однажды потратил день, пытаясь скормить SeedVR2 через JumpStart — контейнер бесконечно перезагружался. Вывод: используйте свой ECR-образ.
Ещё одна грабля — игнорировать пулы соединений boto3. Если вы шлёте много параллельных запросов, клиент может упасть с connection pool full. Решение — создать отдельный session для каждого потока или увеличить max_pool_size.
Автоматизация с AWS CDK
Если вы уже используете CDK для развёртывания инфраструктуры, SageMaker — не исключение. Всю вышеописанную процедуру (ECR, модель, endpoint, alarm) можно упаковать в десяток строк TypeScript. Подробнее я писал в гайде по ComfyUI на SageMaker — схема абсолютно та же, только образ другой.
Что дальше: оптимизация и интеграция с Bedrock
SeedVR2 — мощный, но не единственный инструмент. Если вам нужно управлять качеством видео на всех этапах (генерация, апскейл, анализ), посмотрите на Amazon Bedrock. Например, видео-RAG пайплайн с Nova Reel позволяет генерировать кастомные клипы и улучшать их. А для анализа результата пригодится аналитика с мультимодальными моделями.
Что касается самого апскейла, следите за новыми моделями: LTX-2 и Kling/Veo3 тоже умеют super resolution, но у каждой свои плюсы. SeedVR2 остаётся бестселлером для детализации лиц и текста, но LTX-2 быстрее для однородных сцен.
Часто задаваемые вопросы (FAQ)
- Вопрос: Можно ли использовать SeedVR2 для апскейла изображений, а не видео?
Ответ: Да, модель работает с отдельными кадрами, но для фото лучше взять SeedSR (их же модель для изображений). SeedVR2 оптимизирована для временной согласованности. - Вопрос: Как уменьшить стоимость?
Ответ: Используйте Spot-инстансы в SageMaker. Для batch-обработки они сокращают затраты на 60-70%. Но учтите, что spot-инстансы могут быть прерваны — предусмотрите retry logic. - Вопрос: Поддерживается ли macOS в образе?
Ответ: Нет, SeedVR2 требует CUDA и NVIDIA GPU. Можно попробовать через CPU, но это будет в 100 раз медленнее. Только Linux + NVIDIA. - Вопрос: Есть ли готовый ChatGPT-подобный интерфейс для SeedVR2?
Ответ: ByteDance выпускает офлайн-демо с Gradio, но для SageMaker придётся написать свой фронт. Рекомендую использовать OpenAI-совместимое API — можно поднять прокси-слой и интегрироваться с любым клиентом.
Когда вы в следующий раз увидите видео с качеством «снято на Nokia 3310», не спешите расстраиваться. SeedVR2 + SageMaker превратит его в 4K за пару часов и пару сотен долларов. А если добавить сюда нотификации в Telegram — получится почти автомат. Главное — не забыть выключить инстанс после работы. И да, ваш GPU скажет вам спасибо.