Buckets:
| # Nunchaku Lite | |
| Nunchaku Lite — это backend квантования для загрузки предварительно квантованных контрольных точек в Diffusers. Создайте совместимые контрольные точки с помощью [diffuse-compressor](https://github.com/rootonchair/diffuse-compressor). Он квантует и экспортирует трансформер, а затем упаковывает его в пайплайн Diffusers. | |
| Nunchaku Lite основан на исходном движке инференса [Nunchaku](https://github.com/nunchaku-ai/nunchaku), библиотеке квантования [DeepCompressor](https://github.com/nunchaku-ai/deepcompressor) и статье [SVDQuant](https://arxiv.org/abs/2411.05007). | |
| ## Установка ядер CUDA | |
| Пакет kernels предоставляет оптимизированные CUDA-ядра, которые загружаются автоматически. Установите его в первую очередь. | |
| ```bash | |
| pip install -U kernels | |
| ``` | |
| Nunchaku Lite загружает свои ядра из репозитория [`rootonchair/nunchaku-lite-kernels`](https://huggingface.co/kernels/rootonchair/nunchaku-lite-kernels), издатель которого не является доверенным издателем ядер на Hub. При загрузке выполняется код с Hub, поэтому Diffusers требует явного подтверждения, установив `DIFFUSERS_TRUST_REMOTE_KERNELS=true`. Подробности — в разделе [Trusting remote kernels](../optimization/attention_backends#trusting-remote-kernels). | |
| ## Загрузка квантованного конвейера | |
| Загрузите предварительно квантованный пайплайн с помощью [from_pretrained()](/docs/diffusers/main/ru/api/pipelines/overview#diffusers.DiffusionPipeline.from_pretrained), который читает конфигурацию квантования из `config.json`. | |
| ```python | |
| import torch | |
| from diffusers import DiffusionPipeline | |
| model_id = "rootonchair/ERNIE-Image-Turbo-nunchaku-lite-nvfp4" | |
| pipe = DiffusionPipeline.from_pretrained( | |
| model_id, dtype=torch.bfloat16, | |
| ).to("cuda") # or "mps", "xpu", "cpu" | |
| prompt = "A modern red armchair in a quiet studio, soft window light, realistic product photography" | |
| image = pipe( | |
| prompt=prompt, | |
| height=1024, | |
| width=1024, | |
| num_inference_steps=8, | |
| guidance_scale=1.0, | |
| ).images[0] | |
| image.save("ernie-image-turbo-nunchaku-lite.png") | |
| ``` | |
| > [!NOTE] | |
| > Экспортированный state dict должен точно соответствовать архитектуре целевой модели Diffusers. Например, чекпоинт, квантованный с использованием объединённых QKV-проекций, не загрузится в конфигурацию модели, ожидающую отдельные модули проекций Q, K и V. | |
| ## Поддерживаемые типы квантования | |
| Nunchaku Lite поддерживает следующие форматы квантованных линейных слоёв. | |
| > [!TIP] | |
| > Используйте `nvfp4` на GPU Blackwell. Запуск контрольных точек `int4` на Blackwell может быть медленнее, чем `nvfp4`. | |
| Ядра CUDA в настоящее время поддерживают следующие архитектуры GPU NVIDIA: | |
| - `sm_75` (Turing, например RTX 2080) | |
| - `sm_80` (Ampere, например A100) | |
| - `sm_86` (Ampere, например RTX 3090 и RTX A6000) | |
| - `sm_89` (Ada, например RTX 4090) | |
| - `sm_120` (Blackwell, например, RTX 5090) | |
| > [!NOTE] | |
| > Видеокарты Hopper, такие как `sm_90` H100 и H200, в настоящее время не поддерживаются. | |
| Чекпоинты `nvfp4` требуют GPU NVIDIA Blackwell или новее. На GPU Blackwell используйте PyTorch >= 2.7 с CUDA >= 12.8. Чекпоинты `int4` требуют GPU NVIDIA Turing или новее. | |
| | Метод | Точность | Размер группы | Примечания | | |
| |---|---:|---:|---| | |
| | `svdq_w4a4` | `nvfp4` | 16 | Использует ядра NVFP4 runtime с коррекцией низкого ранга SVDQ. | | |
| | `svdq_w4a4` | `int4` | 64 | Использует ядра INT4 W4A4 с поправкой низкого ранга SVDQ. | | |
| | `awq_w4a16` | `int4` | 64 | Использует ядра AWQ-стиля только для весов в формате INT4. | | |
| ## NunchakuLiteQuantizationConfig | |
| Файл `config.json` должен содержать [NunchakuLiteQuantizationConfig](/docs/diffusers/main/ru/api/quantization#diffusers.NunchakuLiteQuantizationConfig). Он определяет тип вычислений `compute_dtype` во время выполнения и целевые модули для каждого метода квантования Nunchaku Lite. | |
| - `compute_dtype`: тип данных для буферов с плавающей точкой в квантованных модулях во время выполнения, как правило, `torch.bfloat16`. | |
| - `svdq_w4a4`: целевая конфигурация SVDQ W4A4 с параметрами `precision`, `group_size`, `rank` и `targets`. | |
| - `awq_w4a16`: целевая конфигурация AWQ W4A16 с параметрами `precision`, `group_size` и `targets`. | |
| Каждая запись в `targets` должна указывать на линейный слой. Diffusers заменяет каждую цель `svdq_w4a4` слоем SVDQ W4A4 и каждую цель `awq_w4a16` слоем AWQ W4A16. Пример ниже показывает ожидаемую форму с сокращёнными списками целей. | |
| Перечислите каждый модуль, который вы хотите квантовать, под `svdq_w4a4` или `awq_w4a16`. Модуль может использовать только один метод, поэтому не указывайте один и тот же целевой объект под обоими. | |
| ```json | |
| { | |
| "_class_name": "ErnieImageTransformer2DModel", | |
| "quantization_config": { | |
| "quant_method": "nunchaku_lite", | |
| "compute_dtype": "bfloat16", | |
| "svdq_w4a4": { | |
| "precision": "nvfp4", | |
| "group_size": 16, | |
| "rank": 32, | |
| "targets": ["layers.0.self_attention.to_q"] | |
| }, | |
| "awq_w4a16": { | |
| "precision": "int4", | |
| "group_size": 64, | |
| "targets": ["final_linear"] | |
| } | |
| } | |
| } | |
| ``` | |
| ## Слиянные ядра | |
| Исходный движок [Nunchaku](https://github.com/nunchaku-ai/nunchaku) получает значительную часть своей скорости благодаря специфичным для модели слиянным путям выполнения. Он объединяет проекции Q, K и V с RMSNorm и RoPE, а для MLP использует слиянное ядро GELU. Nunchaku Lite, в свою очередь, использует стандартную модель Diffusers с универсальными квантованными линейными слоями, поэтому не включает эти слияния. | |
| Приведённые ниже замеры показывают влияние этих слияний на задержку на каждом шаге в исходном движке Nunchaku, измеренное с использованием Flux Schnell на RTX 5090. | |
| | Оптимизация | Задержка при выключенном | Задержка при включенном | Ускорение | | |
| | --- | --- | --- | --- | | |
| | Фьюжн QKV+norm+RoPE (комбинированный) | 1.057 s | 0.834 s | **1.27×** | | |
| | — группировка Q/K/V в один matmul, по отдельности | 1.059 s | 1.034 s | 1.025× | | |
| | — Фьюжн эпилога RMSNorm+RoPE поверх группировки | 1.034 s | 0.836 s | 1.236× | | |
| | Слияние GELU-MLP | 0.766 s | 0.722 s | **1.06×** | | |
| Без этих слияний GPU запускает операции проекции, нормализации, ротационного эмбеддинга и MLP как отдельные ядра, что добавляет накладные расходы на запуск. `torch.compile` может снизить часть этих накладных расходов, хотя не обязательно воспроизводит слиянные ядра исходного движка. Проведите бенчмаркинг скомпилированного конвейера для вашей модели и рабочей нагрузки. | |
| ## torch.compile | |
| Ядра Nunchaku Lite и квантованные линейные слои совместимы с [`torch.compile`](../optimization/fp16#torchcompile). Скомпилируйте квантованный трансформер после загрузки пайплайна для более быстрого вывода. | |
| ```python | |
| pipe.transformer = torch.compile(pipe.transformer, mode="default", fullgraph=True) | |
| ``` | |
| Скомпилированный конвейер Nunchaku Lite NVFP4 работает в 1,8 раза быстрее исходного конвейера BF16 (2,271 с → 1,675 с на RTX PRO 6000). | |
| ## Ресурсы | |
| - [diffuse-compressor](https://github.com/rootonchair/diffuse-compressor) | |
| - [Требования к установке Nunchaku](https://nunchaku.tech/docs/nunchaku/installation/installation.html) | |
Xet Storage Details
- Size:
- 9.88 kB
- Xet hash:
- 7ae057f927a158d75e59609a8d5dbc48a75fbc1efebf068c1a4a19acf121a22f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.