Hugging Face встроила Nunchaku в Diffusers: диффузия быстрее на 30%, видеопамяти нужно до 50% меньше

Hugging Face выпустила интеграцию метода квантования SVDQuant, техники, лежащей в основе стороннего инференс-движка Nunchaku, прямо в библиотеку Diffusers. Раньше, чтобы использовать чекпоинты Nunchaku, требовался отдельный инференс-движок и локальная сборка CUDA-кода; теперь такие чекпоинты грузятся штатным способом Diffusers через from_pretrained(), а нужные CUDA-ядра автоматически подгружаются с Hugging Face Hub через пакет kernels, компилировать ничего не нужно.
Суть метода: большинство 4-битных бэкендов квантуют только веса, хранят их в низкой точности, но на этапе вычислений разворачивают обратно в высокую точность; это экономит память, но почти не ускоряет инференс, а иногда даже немного его замедляет. SVDQuant устроен иначе: он считает основные слои трансформера в 4-битных весах и 4-битных активациях (формат W4A4), перенося выбросы активаций в веса и выделяя самую сложную часть каждой весовой матрицы в отдельную 16-битную ветвь низкого ранга, остаток квантуется до 4 бит. Это одновременно экономит память и ускоряет цикл шумоподавления.
Новая интеграция называется Nunchaku Lite. Оригинальный движок Nunchaku получает основную часть скорости за счёт слитых (fused) вычислительных ядер, заточенных под архитектуру конкретной модели (например, объединённые QKV-проекции), под каждое новое семейство моделей такие ядра приходится делать отдельно. Nunchaku Lite работает иначе: он подменяет обычные слои nn.Linear в стандартной модели Diffusers двумя типами рантайм-слоёв, svdq_w4a4 (4-битные веса и активации с поправкой SVDQuant, для слоёв внимания и MLP-проекций, где тратится основная часть вычислений; доступен в вариантах INT4 и NVFP4) и awq_w4a16 (4-битные веса при 16-битных активациях, для чувствительных к точности слоёв нормализации и модуляции, например, adaLN в FLUX или модуляции в Qwen-Image). Расплата за отказ от архитектурно-специфичных ядер, Nunchaku Lite не дотягивает по скорости до оригинального движка, но всё равно даёт около 30% ускорения при том же уровне экономии видеопамяти.
На бенчмарках на NVIDIA RTX PRO 6000 (Blackwell) при разрешении 1024×1024 Nunchaku Lite снижает пиковую видеопамять до 50% и ускоряет генерацию примерно на 30%; дополнительный torch.compile доводит общее ускорение полного пайплайна до 1,8 раза (без компиляции, 1,35 раза), сокращая время до 1,68 секунды на кадр. В отдельном примере с чекпоинтом ERNIE-Image-Turbo (вариант NVFP4) на RTX 5090 генерация изображения 1024×1024 за 8 шагов занимает около 1,7 секунды и требует около 12 ГБ видеопамяти, против примерно 24 ГБ у BF16-версии той же модели. Дополнительное квантование текстового энкодера (T5 или Qwen3) через bitsandbytes NF4 в тестах Hugging Face снижает пиковую память ещё примерно на 22%. Стандартные механизмы Diffusers для выгрузки на CPU (enable_model_cpu_offload, enable_sequential_cpu_offload) продолжают работать как обычно.
NVFP4-чекпоинты требуют GPU архитектуры NVIDIA Blackwell (линейка RTX 50, RTX PRO 6000, B200); для более старых видеокарт нужны варианты INT4. Поколения Volta и Hopper 4-битными ядрами пока не поддерживаются вовсе, при попытке загрузки на несовместимом GPU квантизатор проверяет вычислительные возможности CUDA-устройства и выдаёт понятную ошибку вместо некорректного результата.
Вместе с интеграцией в Diffusers Hugging Face выпустила инструментарий diffuse-compressor, сквозной конвейер SVDQuant для собственных моделей: калибровка, квантование, упаковка в обычный Diffusers-репозиторий и публикация на Hub. В блоге разобран пример на модели FLUX.2 Klein 4B: сначала сканер модели определяет, какие линейные слои станут целями SVDQ W4A4, а какие, целями AWQ W4A16 (для FLUX.2 Klein 4B получилось 100 целей SVDQ, 3 цели AWQ и 6 плотных внешних линейных слоёв без квантования); затем запускается сама квантизация, результат упаковывается в Diffusers-пайплайн (опционально с переводом текстового энкодера в NF4) и проверяется перед публикацией через push_to_hub(). В блоге отдельно оговорено ограничение: такой общий путь работает только там, где архитектуру можно квантовать без структурных переделок слоёв. Для дополнительного ускорения оригинальный движок Nunchaku перестраивает группы слоёв в слитые модули, например, объединяет отдельные Q-, K- и V-проекции FLUX.1-dev в один модуль to_qkv; такие перестройки общий путь diffuse-compressor автоматически не выводит.
Ключевые факты
- Hugging Face встроила метод квантования SVDQuant (техника движка Nunchaku) прямо в Diffusers: чекпоинты грузятся штатным from_pretrained(), CUDA-ядра автоматически подгружаются с Hub через пакет kernels, локальная сборка не нужна.
- Новый путь интеграции, Nunchaku Lite: слои внимания и MLP переводятся в 4-битные веса и активации (svdq_w4a4, форматы INT4/NVFP4), а чувствительные к точности слои нормализации и модуляции, в 4-битные веса при 16-битных активациях (awq_w4a16).
- На бенчмарках (RTX PRO 6000, 1024×1024) Nunchaku Lite снижает пиковую видеопамять до 50% и ускоряет генерацию примерно на 30%; с torch.compile общее ускорение пайплайна достигает 1,8 раза (1,68 секунды на кадр).
- Пример на RTX 5090: чекпоинт ERNIE-Image-Turbo (NVFP4) генерирует изображение 1024×1024 за 8 шагов примерно за 1,7 секунды и около 12 ГБ видеопамяти против около 24 ГБ у BF16-версии.
- Вместе с интеграцией вышел инструмент diffuse-compressor для квантования и публикации своих моделей (на примере FLUX.2 Klein 4B, 100 целей SVDQ, 3 цели AWQ, 6 плотных слоёв); NVFP4 работает только на GPU архитектуры Blackwell, для более старых нужен INT4, а Volta и Hopper не поддерживаются вовсе.
Почему это важно
До этой интеграции 4-битный инференс диффузионных моделей через SVDQuant требовал отдельного движка Nunchaku и ручной сборки CUDA, лишний барьер для тех, кто уже работает в экосистеме Diffusers. Теперь ускорение примерно на 30% и экономия видеопамяти до 50% доступны штатным способом библиотеки, без смены инструментария и локальной компиляции. Это снижает порог входа в 4-битный инференс и делает диффузионные модели дешевле в развёртывании, как на потребительских GPU, так и в продакшене.
Кому это важно
В первую очередь, разработчикам, которые строят продукты на диффузионных моделях (генерация изображений) и упираются в стоимость GPU или задержку ответа: экономия видеопамяти до 50% позволяет запускать более крупные модели на тех же картах или переходить на более дешёвое железо. Также это важно авторам моделей, которые хотят квантовать и опубликовать собственные чекпоинты через diffuse-compressor, и всем, кто уже использует Diffusers и хочет получить ускорение без смены стека.
Как это применить
Установить актуальные diffusers, transformers, accelerate, kernels и bitsandbytes, затем загрузить готовый Nunchaku Lite-чекпоинт обычным from_pretrained(), как в примере с ErnieImagePipeline и чекпоинтом lite-infer/ERNIE-Image-Turbo-nunchaku-lite-nvfp4_r32-bnb4-text-encoder. Для дополнительного ускорения, обернуть трансформер в torch.compile (или compile_repeated_blocks() для более быстрой компиляции), а для экономии памяти, доквантовать текстовый энкодер через bitsandbytes NF4 или включить offloading-хелперы Diffusers. Чтобы квантовать свою модель: прогнать diffuse-compressor в режиме --inspect-config и посмотреть, какие слои станут целями SVDQ/AWQ, запустить квантование, упаковать результат в Diffusers-пайплайн и опубликовать через push_to_hub().
Можно ли доверять
Это первичный источник, официальный блог Hugging Face, разработчика самой библиотеки Diffusers, с кодом, конкретным форматом конфигурации квантования и цифрами бенчмарков на названном оборудовании (RTX PRO 6000, RTX 5090). В блоге честно обозначены ограничения: Nunchaku Lite медленнее оригинального движка Nunchaku из-за отсутствия архитектурно-специфичных ядер, NVFP4 работает не на всех GPU, а общий путь квантования не годится для архитектур, требующих структурных переделок слоёв. Такая откровенность про компромиссы, признак технической документации, а не маркетинга.
Риски и подводные камни
NVFP4-ускорение доступно только на GPU архитектуры Blackwell (RTX 50, RTX PRO 6000, B200), на более старых картах нужен вариант INT4, а поколения Volta и Hopper 4-битные ядра не поддерживают вовсе. Nunchaku Lite жертвует частью скорости ради универсальности: он проигрывает оригинальному движку Nunchaku там, где тому доступны архитектурно-специфичные слитые ядра. Собственное квантование через diffuse-compressor работает только для моделей, которые не требуют структурных переделок слоёв, например, оно не выявляет автоматически случаи вроде объединения отдельных Q-, K- и V-проекций FLUX.1-dev в один модуль; такие архитектуры нуждаются в отдельной ручной интеграции, как в оригинальном движке Nunchaku.