← На главную

Опубликовано

Qwen-Image-2.1 Turbo: в 2.5 раза быстрее на одной карте

Автор: Гусев Николай [портфолио]

Обновлено

Темы: qwen, comfyui, benchmark

9 октября Alibaba выложила Turbo-версию Qwen-Image-2.1. К вечеру того же дня она прошла полный прогон на моей карте: RTX 4060 с восемью гигабайтами, ComfyUI, 1024×1024. Замер простой: три сцены, два зерна, одинаковые промпты, одна и та же обвязка. Отличаются только чекпойнт и число шагов.

Результат: базовая модель отрисовывает кадр за 121 секунду, Turbo за 48. Ускорение в 2.52 раза, при этом качество на тексте и руках не просело.

Что такое Turbo

Turbo это тот же трансформер, дообученный работать за 8 шагов вместо 25. Расписание сэмплирования зашито прямо в чекпойнт, CFG равен единице, негативный промпт не читается. Через Diffusers модель грузится классом QwenImage21Pipeline, но мне был нужен путь через ComfyUI, а там свой формат.

Повезло: в тот же день на Hugging Face появилась пересборка Turbo в int8-convrot, том самом формате, в котором у меня уже жила базовая версия. Файлы совпадают до байта по размеру: 7.26 гигабайта у обоих. Замена свелась к подстановке имени файла в ноду UNETLoader.

Замер

Условия: RTX 4060 8GB, ComfyUI 0.37, 1024×1024, euler с простым планировщиком, cfg 1.0, шесть кадров на каждую модель. Скорость брал из собственных таймстампов ComfyUI, а не по настенным часам, чтобы загрузка модели не портила цифру.

base int8,   25 шагов:  121.3 сек  (116.3-133.5)
turbo int8,   8 шагов:   48.1 сек  (45.8-58.7)
turbo Q4 GGUF,8 шагов:   45.6 сек  (41.6-46.9)

Свободная видеопамять после прогрева: 2.49 ГБ у базы, 2.26 у Turbo, 0.45 у Q4. Да, у четырехбитной версии памяти свободно меньше, чем у восьмибитной, хоть файл и весит вдвое меньше. Об этом ниже.

Ускорение в 2.52 раза. Примерно треть от этого дает сам Turbo-чекпойнт, остальное съедает разница шагов: восемь проходов диффузии против двадцати пяти.

Качество

Три сцены проверял попарно на одинаковых зернах: постер с крупным текстом GOLDEN HOUR, портрет крупным планом, руки с кружкой.

Текст читается чисто в обоих вариантах, буквы без артефактов. Анатомия рук и хват кружки корректны и там, и там. По общему уровню детализации разницы на глаз нет. Для постеров и обложек Turbo подходит без оговорок.

Кадр base, 25 шагов

Кадр turbo, 8 шагов

Грабли, ради которых статья и писалась

Первая версия бенча падала так: второй кадр сессии доходит до декодера, и ComfyUI умирает целиком, без traceback в логе, просто access violation. Я собирал эту граблю три дня, вот что выяснилось.

Первое. GGUF-версия держит модель в памяти хоста двумя способами сразу: отображение файла на диск плюс распакованные копии весов. Процесс разрастается до 11.7 гигабайта при восьми гигабайтах видеопамяти. На декодере следующего кадра система не может выделить еще 13 мегабайт, и процесс падает.

Второе. Лекарство в одну строку: после каждого кадра просить ComfyUI выгрузить веса. Эндпойнт /free с флагами free_models и unload_models, но без free_vram. Последний флаг на Windows с драйвером WDDM течет: каждый цикл выгрузки оставляет в памяти хоста немного мусора, и через восемь рендеров процесс съедает всю оперативку. Выгружать после каждого кадра, а не после пакета: одна невыгруженная сессия весит больше, чем вся видеопамять карты.

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

Четвертое. Q6_K из GGUF-линейки не заработал у меня конкретно вот как: модель весит 5.6 гигабайта в распакованном виде, в восемь гигабайт карты она не помещается целиком, ComfyUI включает режим стриминга весов с диска, и при первой же выгрузке куска модели под декодер нода comfyui-gguf падает с access violation внутри операции перемещения тензора между устройствами. Воспроизвелось дважды на чистой памяти, включая прогревочный кадр: он отрабатывает, падает уже декодер. Это баг ноды в пути частичной выгрузки, а не проблема кванта или модели. На карте с 16 гигабайтами VRAM и больше Q6_K, скорее всего, заведется без единой правки: модель влезет целиком, стриминг не включится, падать будет нечему. Проверить не могу, у меня восьмерка. Q4_K_M весит меньше и влезает целиком, поэтому работает.

Руки, base

Руки, turbo

А как же квант поменьше

Q4_K_M весит 4.19 гигабайта против 7.26 у int8. Казалось бы, меньше бит, быстрее счет. По факту выигрыш 5 процентов, в пределах шума, а свободной памяти остается меньше: распаковка квантованных тензоров ест память в процессе. Качество текста при этом заметно хуже: надпись GOLDEN HOUR на Q4 читается через раз.

Итог по квантам: int8-convrot Turbo остается рабочим вариантом. Q4 экономит место на диске и больше ничего. Q6 не работает.

Постер на Q4, текст хуже

Лицензия

Turbo-чекпойнты идут под Qwen Research License, некоммерческое использование. Для постеров канала проходит, для коммерческих задач надо читать условия.

Что брать под задачу

Карта на 8 гигабайт, русскоязычные постеры и обложки: Turbo int8-convrot, 8 шагов, выгрузка весов после каждого кадра. Двадцать пять шагов базовой модели на этой карте больше не нужны: двукратная разница в цене кадра не покупает ничего, кроме уверенности, что ты использовал модель как в tutorials.

Код и материалы

Весь пайп выложен в открытом репо канала, каталог 2026-10-09-qwen21-turbo-bench. Внутри:

  • code/bench-generic.py - скрипт A/B-бенчмарка: гоняет ваши чекпойнты на одинаковых промптах и зернах, меряет время по таймстампам ComfyUI, складывает JSON. Все места для замены помечены: имена моделей, классы лоадеров, канон персонажа, сцены, зерна. Выгрузка весов и обход кэша уже зашиты.
  • code/submit-generic.py - минимальный клиент разовой генерации: подставили свою модель и промпт, запустили, получили картинку и выгрузку памяти в конце. С этого файла проще всего начать сбор своего пайпа.
  • article.md - эта статья, картинки кадров отдельно.

Зеркало для РФ: gitflic.ru/manve-sulimo2/channel-materials, тот же каталог.

Под свою модель меняются три вещи: классы нод загрузки и энкодера (UNETLoader против UnetLoaderGGUF, TextEncodeQwenImage21 против CLIPTextEncode), имена файлов весов и текст канона. Под свое железо - размер батча и число шагов Turbo-чекпойнта, если ваша карта тянет больше восьми гигабайт и вы хотите полную версию модели.