🚀 Ускорение Flux-модели в ComfyUI: nunchaku + svdq-int4-flux
Что за Flux и зачем его ускорять?
Flux — это тип модели для генерации изображений, работающей в ComfyUI — визуальном интерфейсе для нейросетей. Модель Flux отличается высокой качественной детализацией и реалистичной анатомией, но требует много ресурсов, особенно VRAM. Инструкция актуальна для владельцев карт с 12ГБ VRAM и менее.
Что мы будем использовать
- nunchaku — система управления ускорением нейросетей, использующая современные методы оптимизации. Дабы не вдаваться в подробности установки, воспользуемся готовой сборкой в которой есть всё необходимое от автора OreX
🔗 Ссылка на Boosty с инструкцией и файлами - сборка бесплатная (будем использовать triton сборку), помимо сборки нам понадобится скачать от туда же модели
📺 Обзор от OreX на YouTube - svdq-int4-flux — специальная сжатая версия модели Flux, использующая формат INT4, который уменьшает размер модели в несколько раз без заметной потери качества. В папку ComfyUI\models\diffusion_models\ создаём папку svdq-int4-flux.1-dev и кладём туда файлы . Если будем работать с fill моделями то аналогичным образом создаём папку svdq-int4-flux.1-fill-dev и качаем соответствующие файлы
Запуск сборки с помощью RUN-FAST.exe (роли не играет, но на всякий случай уточняю)
* Если будут проблемы с Frontend отображением, из корня сборки подаём две командочки:
python_embeded\python.exe -m pip uninstall comfyui-frontend-package -y
python_embeded\python.exe -m pip install comfyui-frontend-package
📈 Результаты
На RTX 3060 с 12GB и разрешении 1216*832px вторая генерация после "прогрева":
- nunchaku + svdq-int4-flux = 26 сек
- Lora FLUX.1-Turbo-Alpha + gguf модель на 8 шагах = 1мин 53сек
- Lora FLUX.1-Turbo-Alpha +wavespeed с компиляцией FP8 модели Triton на 8 шагах = 44сек
- Lora FLUX.1-Turbo-Alpha FP8 модели на 8 шагах = 1мин 20сек
- обычная генерация FP8 модели на 20 шагах = 3 мин 14 сек
Проведём эксперимент на подсказке:
in one photo 4 women, on the left girl with glasses and red t-shirt, in the center are two girls with the same hairstyles in the form of pigtails, but with different hair length, dressed one of these girls in a bikini, and the other in tuxedo, on the right on the girl is a yellow cap and a blue fur coat, on the left of the girl's inscription on the t-shirt "cccp", in the background mcdonald's, all the girls extended their hands in front of them.
🔧 Как это работает?
- Загрузите схему в ComfyUI
- В интерфейсе перепроверьте/перевыберите model_path = svdq-int4-flux.1-dev.
- Запускайте генерацию как обычно!
Плюшки схемы
В дополнение к ускоренной генерации входят группы которые можно вкл/выкл:
- Постобработка - детализация посредством внесения шума
- Корректировка - цветокоррекция и эффекты
Как ещё сэкономить VRAM
Обычно для FLUX моделей используется двойной загрузчик clip моделей:
- clip_name1 - Глубокое понимание текста с интерпретацией (например, понимает метафоры, сложные выражения) ,
- clip_name2 - Стабильная визуальная связь с текстом, согласованность.
Без этого Flux не будет правильно интерпретировать запросы и картинки будут либо слишком буквальные, либо терять смысл.
Каждая модель весит довольно прилично, что занимает память и время на обработку. Соответственно в случае простеньких композиций или ограниченном ресурсе по "железу" можно воспользоваться альтернативой. Сразу скажу - это будет в ущерб следования подсказке, но на слабом оборудовании у нас появляется возможность хоть как-то работать. Например стандартная модель t5xxl_fp8_e4m3fn.safetensors = 4,5 ГБ, квантованная версия t5-v1_1-xxl-encoder-Q3_K_S.gguf = 1,9 ГБ, а дистиллированная модель DistillT5 = 0,5ГБ.
Для запуска модели DistillT5 необходимо установить соответствующую ноду через менеджер или запустить командную строку, перейти в каталог ComfyUI/custom_nodes и клонировать репозиторий командой: git clone https://github.com/LifuWang-66/DistillT5ComfyUI.git
Затем нужно перейти в каталог ComfyUI/models/clip и скопировать модель. Для удобства использования я обычно создаю более понятные подпапки, например папку ComfyUI/models/clip/svdq-flux.1-t5, а сам файл переименовываю в данном случае в T5EncoderWithProjection.safetensors - таким образом становится немного более понятно назначение файлов и их источник.
Теперь вместо стандартного двойного загрузчика CLIP нужно использовать ноду "DualCLIPLoader for T5Base"
В примере ниже показана нода и пример с разными clip_name1. Подсказка: на одной фотографии 4 женщины, слева девушка в очках и красной футболке, в центре две девушки с одинаковыми прическами в виде косичек, но с разной длиной волос, одеты одна из этих девушек в бикини, а другая в смокинг, справа на девушке желтая шапочка и синяя шубка, слева у девушки надпись на футболке "cccp", на заднем плане макдональдс, все девушки вытянули руки перед собой.
Вывод с Clip - очевиден, использование актуально на простеньких композициях и слабом железе. На RTX3060 с 12GB VRAM на обычном clip = t5xxl_fp8_e4m3fn генерация отжирала 66% VRAM, а на clip = T5EncoderWithProjection 32%. Время генерации одинаковое.