Когда видео не помещается в память

<!-- lesson: video-memory -->

Урок «video-memory» в группе Видео списка уроков. Шагов: 9.

Чему вы научитесь

Переделаете граф малой модели Wan так, чтобы ему хватало меньше видеопамяти, и узнаете, чего стоит каждое изменение.

Что понадобится

  • Урок продолжает Видео на скромной видеокарте: Wan 2.2 5B. Карточка говорит об этом; это подсказка, а не замок.
  • Ноды: Load Diffusion Model, Load VAE, Wan22ImageToVideoLatent, KSampler, Create Video, VAE Decode (Tiled).
  • Приложение ничего не скачивает и не устанавливает. Тексты шагов ниже говорят, какие файлы, в какие папки и какой шаблон ComfyUI их называет.

Шаги

Слова каждого шага, как их показывает урок. Имена нод выделены.

  1. Почему видео не помещается (чтение)

    Практика на графе урока «Видео на скромной видеокарте». Во время запуска в видеопамяти три вещи: веса модели, латент всего ролика вместе с тем, что модель для него считает, и в самом конце разворачивание всех кадров сразу. Каждую можно уменьшить, и каждое изменение чего-то стоит: немного качества или времени.

    Когда не хватает, в окне ComfyUI обычно видно сообщение «out of memory» (OOM).

  2. Нужен граф малой модели

    На холсте должен быть граф урока «Видео на скромной видеокарте»: Load Diffusion Model, Load VAE, Wan22ImageToVideoLatent, KSampler и Create Video. Если его нет, сначала пройдите тот урок.

  3. Куда уходит память (чтение)

    • Модель: файл в fp16 занимает два байта на параметр, значит 5B это около 10 ГБ. В fp8 вдвое меньше.
    • Текстовый энкодер: работает один раз в начале, потом ComfyUI его убирает, но пока работает, он должен поместиться.
    • Ролик: память растёт с шириной × высотой × числом кадров. Вдвое меньше кадров примерно вдвое меньше памяти на эту часть.
    • Разворачивание: VAE превращает в пиксели все кадры разом, это пик в самом конце.
  4. Держите модель в fp8

    В ноде Load Diffusion Model поставьте weight_dtype fp8_e4m3fn.

    Модель хранится в памяти по одному байту на параметр вместо двух. Картинка немного меняется, на большинстве роликов разницу трудно заметить. Файлу, который уже в fp8 (это видно по имени), это ничего не даёт.

  5. Лёгкие файлы (чтение)

    Та же модель бывает в лёгких файлах:

    • fp8 или fp8_scaled: вдвое меньше fp16, этот формат берёт большинство официальных шаблонов;
    • GGUF (Q8, Q6, Q5, Q4): ещё меньше, чем меньше число, тем меньше файл и грубее результат. Их загружает пак ComfyUI-GGUF своим загрузчиком, а не Load Diffusion Model;
    • текстовый энкодер в fp8 вместо полного.

    Берите файлы только с официальной страницы модели или у известного автора. Старые форматы (.ckpt, .pt, .pth, .bin) при загрузке могут выполнить код; .safetensors и .gguf не могут.

  6. Разворачивайте по кусочкам

    Добавьте ноду VAE Decode (Tiled). Ко входу samples подключите выход сэмплера, к vae VAE, а её выход ко входу images ноды Create Video вместо старого декодера. Поставьте tile_size 512 и temporal_size 32.

    Кадры разворачиваются кусками: квадрат в 512 пикселей и 32 кадра за раз, и пик в конце намного ниже. Куски меньше требуют меньше памяти и работают дольше; швы между кусками при этих числах редки. Старый декодер можно удалить.

  7. Ролик поменьше

    В ноде Wan22ImageToVideoLatent поставьте width 960, height 544 и length 81.

    Это около трёх секунд при 24 кадрах в секунду и размер ниже 720p. Оба размера у этой ноды остаются кратными 32, а длина вида 4n + 1. Это изменение экономит больше всех, и в ролике его видно: меньше деталей, короче сцена.

  8. Если всё равно не помещается (чтение)

    • ComfyUI сам переносит части модели в оперативную память, когда видеопамяти мало. Это медленнее, но работает, если оперативной памяти хватает. Закройте другие программы, которые заняли видеокарту.
    • ComfyUI можно запустить с флагом --lowvram, тогда он выносит из видеопамяти ещё больше.
    • Перенос блоков (block swap): некоторые паки держат часть блоков модели в оперативной памяти и подгружают каждый, когда он нужен. В WanVideoWrapper для этого есть нода Block Swap, в SeedVR2 поле blocks_to_swap. Чем больше блоков, тем меньше видеопамяти и тем медленнее.
    • LoRA для ускорения (4-8 шагов) память не экономит, но экономит большую часть времени.
  9. Проверяйте по одному изменению (чтение)

    Сохраните граф через «Файл ▸ Сохранить workflow для ComfyUI…», откройте файл в ComfyUI и запустите там. Само приложение в ComfyUI ничего не запускает.

    Меняйте одно, запускайте, смотрите на ролик и на время. Потом следующее. Так видно, что сколько стоило, и вы оставите то, что нужно вашей карте.

Что проверяет урок

Шаг для чтения сделан, когда вы нажимаете Понятно, дальше. Шаг с делом отмечается сам, когда на холсте есть:

  • Шаг 2, Нужен граф малой модели:
    • нода Load Diffusion Model.
    • нода Load VAE.
    • нода Wan22ImageToVideoLatent.
    • нода KSampler.
    • нода Create Video.
    • LATENT ноды Wan22ImageToVideoLatent во вход latent_image ноды KSampler.
  • Шаг 4, Держите модель в fp8:
    • weight_dtype ноды Load Diffusion Model: fp8_e4m3fn.
  • Шаг 6, Разворачивайте по кусочкам:
    • нода VAE Decode (Tiled).
    • LATENT ноды KSampler во вход samples ноды VAE Decode (Tiled).
    • VAE ноды Load VAE во вход vae ноды VAE Decode (Tiled).
    • IMAGE ноды VAE Decode (Tiled) во вход images ноды Create Video.
    • tile_size ноды VAE Decode (Tiled): от 256 до 512; «Сделать за меня» ставит 512.
    • temporal_size ноды VAE Decode (Tiled): от 16 до 64; «Сделать за меня» ставит 32.
  • Шаг 7, Ролик поменьше:
    • width ноды Wan22ImageToVideoLatent: от 480 до 960; «Сделать за меня» ставит 960.
    • height ноды Wan22ImageToVideoLatent: от 320 до 544; «Сделать за меня» ставит 544.
    • length ноды Wan22ImageToVideoLatent: от 25 до 81; «Сделать за меня» ставит 81.

См. также

Страница перенесена из wiki репозитория приложения (docs/wiki/lessons/Video-Memory.ru.md, ревизия b8e3f71). То же руководство встроено в приложение: «Справка ▸ Руководство».

Чтобы обновить её, выполните npm run import, а затем npm run build в папке сайта.