Проблема памяти и решение SVDQuant
Загрузка современных текстовых моделей в точности BF16 требует 20–30 ГБ VRAM, что недоступно для большинства потребительских видеокарт. Стандартные бэкенды квантования (bitsandbytes, GGUF) используют только квантование весов (weight-only), что снижает память, но не ускоряет инференс. Nunchaku использует метод SVDQuant, применяя квантование до 4 бит как для весов, так и для активаций (W4A4). Это не только экономит память, но и ускоряет цикл денoising за счет специализированных CUDA-ядер.
Что такое Nunchaku Lite
Оригинальный Nunchaku требовал специфичных для архитектуры слиянных ядер (fused kernels), что усложняло поддержку новых моделей. Nunchaku Lite решает эту проблему, патчая стандартные модули nn.Linear в Diffusers во время выполнения. Пользователю достаточно вызвать from_pretrained() — локальная компиляция CUDA не требуется, ядра загружаются через пакет kernels с Hugging Face Hub.
Технические детали и поддержка железа
Интеграция использует два типа слоев для баланса между скоростью и точностью:
- svdq_w4a4: 4-битные веса и активации с коррекцией SVDQuant. Используется для attention и MLP (основная нагрузка). Поддерживает форматы NVFP4 (для Blackwell) и INT4 (для Turing/Ampere/Ada).
- awq_w4a16: 4-битные веса и 16-битные активации. Используется для слоев нормализации (например,
adanormв FLUX), где важна точность.
| Схема | Точность | Поддерживаемые GPU |
|---|---|---|
| svdq_w4a4 | NVFP4 | Blackwell (RTX 50 series, RTX PRO 6000, B200) |
| svdq_w4a4 | INT4 | Turing / Ampere / Ada (RTX 30/40 series, A100, L40S) |
| awq_w4a16 | INT4 (весы) / FP16 (активации) | Turing / Ampere / Ada (RTX 30/40 series, A100, L40S) |
Производительность и бенчмарки
На примере модели Ernie-Image-Turbo на GPU RTX 5090:
- Потребление VRAM: ~12 ГБ (против ~24 ГБ в BF16).
- Время генерации: ~1.7 секунды для изображения 1024x1024.
- Ускорение: ~30% по сравнению с неоптимизированным бэкендом.
При использовании torch.compile ускорение возрастает до 1.8x. Дополнительное квантование текстового кодировщика (например, T5 или Qwen3) через bitsandbytes NF4 снижает пиковое потребление VRAM еще на 22%.
Как начать
Для работы требуется установка последних версий библиотек:
pip install -U diffusers transformers accelerate kernels bitsandbytes
Загрузка модели происходит стандартно:
from diffusers import ErnieImagePipeline
pipe = ErnieImagePipeline.from_pretrained(
"lite-infer/ERNIE-Image-Turbo-nunchaku-lite-nvfp4_r32-bnb4-text-encoder",
torch_dtype=torch.bfloat16
).to("cuda")
Это решение делает передовые диффузионные модели доступными на более широком спектре оборудования, сохраняя совместимость с существующими инструментами Diffusers, такими как LoRA и schedulers.
Источник: Hugging Face blog ↗
