Оптимизация видео VAE MiniMax H3 в ComfyUI 0.36.0
ComfyUI 0.36.0 ускоряет видео VAE MiniMax H3 с помощью ядер comfy-kitchen, а официальный репозиторий Comfy-Org теперь содержит компактный int8 convrot VAE.
Что изменилось в пути VAE
Все изменения находятся в comfy/ldm/minimax/vae.py и comfy/ops.py. Ядра взяты из comfy-kitchen #167, объединённого 13 сентября.
- Объединённые проходы энкодера.
group_norm_silu_pad3dвыполняет покадровый GroupNorm, SiLU и reflect/causal padding за один проход и выдаёт NDHWC, чтобы cuDNN работал без преобразований раскладки. В PR этот шаг описан как lossless и всегда включённый. - Накопление в fp16.
ck.fp16_conv3dиck.fp16_linearиспользуют ядра CUTLASS с накоплением в fp16, где bias и residual свёрнуты в эпилог. Они включаются при--fastс накоплением в fp16, а слишком маленькие для загрузки GPU запуски передаются обратно в cuBLAS. - Декодер int8. Декодеры с квантованием int8 проходят через
ck.int8_attentionи int8 GEMM, в эпилоге которого находится residual, при этомrms_norm/swigluсвёрнуты в квантователь активаций, а между плитками 128x256 и 128x128 действует защита wave-quantization. - Пакетное декодирование плиток.
tiled_decodeтеперь декодирует до четырёх плиток одновременно, ограничиваясь объёмом свободной памяти, поэтому плиточные запуски больше не идут кадр за кадром. - Совместимость с динамической VRAM. Веса и параметры нормализации поступают через
cast_bias_weight, поэтому всё перечисленное продолжает работать при динамической загрузке VRAM в ComfyUI.
Если comfy-kitchen или конкретное ядро отсутствует, код откатывается к предыдущей eager-последовательности, так что старые установки не затрагиваются.
Измеренный эффект
В PR с ядрами приводятся сквозные вызовы comfy.sd.VAE при 1344x768 на 362 кадрах, измеренные на 5090:
| Путь | ДО | ПОСЛЕ |
|---|---|---|
| Кодирование (fp16) | 46.6 с | 32.0 с |
Кодирование (--fast, накопление fp16) | 47.2 с | 21.2 с |
| Декодирование (fp16) | 34.6 с | 31.1 с |
Декодирование (--fast) | 27.7 с | 23.2 с |
| Декодирование (int8) | 18.7 с | 12.9 с |
Качество измерялось относительно точного пути: 68 дБ для кодирования с накоплением fp16 и 67.7 дБ для декодирования int8, тогда как собственный предел реконструкции VAE составляет около 38 дБ. Последующий коммит в ядро (PR #16332) ещё немного снижает потребление памяти MiniMax VAE.
int8 convrot VAE переезжает в официальный репозиторий
Использовать нужно файл vae/minimax_h3_video_vae_int8_convrot.safetensors в Comfy-Org/MiniMax-H3, загруженный 15 сентября, размером 2.81 ГБ. На вопрос в ветке Reddit о том, чем он отличается от ранее распространявшегося для H3 экспериментального int8 VAE (3.17 ГБ), Kijai ответил, что энкодер теперь хранится в fp16, а не в fp32: он и так по умолчанию работал в fp16, поэтому оба декодируют одинаково, и оставить стоит меньший файл.
Запуск MiniMax H3 reference-to-video с тремя референсными изображениями при максимальном разрешении, которое позволяет карта автора; опубликовано вместе с отчётом в Reddit об обновлённом VAE (u/Chiduck99).
Что видят пользователи на младших картах
Об этом стало известно из отчёта в Reddit от пользователя с RTX 3060 12 ГБ, у которого предыдущий потолок с H3 составлял 0.8 МП при 10 секундах. С обновлённым VAE на той же карте он сообщает о 1 МП при 10 секундах и 0.7 МП при 15 секундах без заметной потери качества. Ответ Kijai в той же ветке связывает загрузку с работой над ядрами: оптимизированные пользовательские ядра в comfy-kitchen ускоряют и int8 VAE, и оригинальный fp16 VAE одинаково, и они всегда включены, пока ComfyUI и comfy-kitchen обновлены.
Доступность
Обе части входят в ComfyUI 0.36.0 (15 сентября). Путь VAE приходит через PR #16187, а comfy-kitchen 0.2.34 закреплён в requirements.txt этого тега (0.2.35 в текущем master), так что обновлённой установке ничего дополнительно не нужно. Видео VAE, аудио VAE и декодер автоматически подхватываются существующими рабочими процессами MiniMax H3.
Комментарии
Войдите через GitHub, чтобы участвовать в обсуждении.