Запуск FLUX.1-dev GGUF Q8 в Python
Ускорение FLUX.1-dev с квантованием GGUF
FLUX.1-dev — это мощная модель генерации изображений по тексту, которая производит потрясающие результаты, но её требование к памяти в 24 ГБ и более делает её сложной для запуска на многих системах. Квантование FLUX.1-dev в формате GGUF предлагает решение, уменьшая использование памяти примерно на 50% при сохранении отличного качества изображений.
Это изображение было сгенерировано с использованием квантованной модели FLUX.1-dev в формате GGUF с уровнем квантования Q8, демонстрируя сохранение качества даже при уменьшенном использовании памяти.
Что такое квантование GGUF?
GGUF (GPT-Generated Unified Format) — это формат квантования, изначально разработанный для языковых моделей, но теперь поддерживаемый для моделей диффузии, таких как FLUX. Квантование уменьшает размер модели за счёт хранения весов в форматах с меньшей точностью (8 бит, 6 бит или 4 бит) вместо полной 16-битной или 32-битной точности.
Для FLUX.1-dev трансформерный компонент (самая большая часть модели) может быть квантован, уменьшая использование памяти с примерно 24 ГБ до 12 ГБ с квантованием Q8_0 или даже меньше с более агрессивными уровнями квантования.
Преимущества квантования GGUF
Основные преимущества использования квантованных моделей FLUX в формате GGUF включают:
- Уменьшенное использование памяти: Уменьшение требований к видеопамяти вдвое, что делает FLUX.1-dev доступным на большем количестве оборудования
- Сохранённое качество: Квантование Q8_0 сохраняет качество изображений с минимальными видимыми различиями
- Быстрая загрузка: Квантованные модели загружаются быстрее благодаря меньшему размеру файлов
- Меньшее энергопотребление: Уменьшенное использование памяти приводит к меньшему энергопотреблению во время инференса
В наших тестах квантованная модель использовала примерно 12-15 ГБ видеопамяти по сравнению с 24 ГБ и более для полной модели, в то время как время генерации оставалось схожим.
Установка и настройка
Для использования квантованного FLUX.1-dev в формате GGUF вам понадобится пакет gguf в дополнение к стандартным зависимостям diffusers. Если вы уже используете FLUX для генерации изображений по тексту, вы знакомы с базовой настройкой.
Если вы используете uv в качестве менеджера пакетов Python, вы можете установить необходимые пакеты с помощью:
uv pip install -U diffusers torch transformers gguf
Или с использованием стандартного pip:
pip install -U diffusers torch transformers gguf
Реализация
Основное отличие при использовании квантованных моделей в формате GGUF заключается в том, что трансформер загружается отдельно с использованием FluxTransformer2DModel.from_single_file() с GGUFQuantizationConfig, а затем передаётся в конвейер. Если вам нужна быстрая справка по синтаксису Python, посмотрите Python Cheatsheet. Вот полный рабочий пример:
import os
import torch
from diffusers import FluxPipeline, FluxTransformer2DModel, GGUFQuantizationConfig
# Пути
gguf_model_path = "/path/to/flux1-dev-Q8_0.gguf"
base_model_path = "/path/to/FLUX.1-dev-config" # Только файлы конфигурации
# Загрузка квантованного трансформера GGUF
print(f"Загрузка квантованного трансформера GGUF из: {gguf_model_path}")
transformer = FluxTransformer2DModel.from_single_file(
gguf_model_path,
quantization_config=GGUFQuantizationConfig(compute_dtype=torch.bfloat16),
config=base_model_path,
subfolder="transformer",
torch_dtype=torch.bfloat16,
)
# Создание конвейера с квантованным трансформером
print(f"Создание конвейера с базовой моделью: {base_model_path}")
pipe = FluxPipeline.from_pretrained(
base_model_path,
transformer=transformer,
torch_dtype=torch.bfloat16,
)
# Включение выгрузки модели на CPU (требуется для GGUF)
pipe.enable_model_cpu_offload()
# Примечание: enable_sequential_cpu_offload() НЕ совместим с GGUF
# Генерация изображения
prompt = "Футуристический городской пейзаж на закате с неоновыми огнями"
image = pipe(
prompt,
height=496,
width=680,
guidance_scale=3.5,
num_inference_steps=60,
max_sequence_length=512,
generator=torch.Generator("cpu").manual_seed(42)
).images[0]
image.save("output.jpg")
Важные соображения
Файлы конфигурации модели
При использовании квантования GGUF вам всё ещё нужны файлы конфигурации модели из оригинальной FLUX.1-dev. В них входят:
model_index.json- Структура конвейера- Конфигурации компонентов (трансформер, текстовый энкодер, текстовый энкодер 2, VAE, планировщик)
- Файлы токенизатора
- Веса текстовых энкодеров и VAE (они не квантуются)
Веса трансформера берутся из файла GGUF, но все остальные компоненты требуют оригинальных файлов модели.
Совместимость с выгрузкой на CPU
Важно: enable_sequential_cpu_offload() не совместим с квантованными моделями GGUF и вызовет ошибку KeyError: None. Вместо этого я использую enable_model_cpu_offload() при работе с квантованными трансформерами.
Уровни квантования
Доступные уровни квантования для FLUX.1-dev включают:
- Q8_0: Лучшее качество, ~14-15 ГБ памяти (рекомендуется)
- Q6_K: Хороший баланс, ~12 ГБ памяти
- Q4_K: Максимальное сжатие, ~8 ГБ памяти (предполагаю, что это негативно влияет на качество)
Для большинства случаев использования Q8_0 обеспечивает лучший баланс между экономией памяти и качеством изображений.
Сравнение производительности
В наших тестах с идентичными запросами и настройками:
| Модель | Использование VRAM | Время генерации | Качество |
|---|---|---|---|
| Полная FLUX.1-dev | 24ГБ? | У меня нет GPU такого размера | Отличное (как я думаю) |
| Полная FLUX.1-dev | ~3ГБ с sequential_cpu_offload() | ~329с | Отличное |
| GGUF Q8_0 | ~14-15ГБ | ~98с !!! | Отличное |
| GGUF Q6_K | ~10-12ГБ | ~116с | Очень хорошее |
Квантованная модель, поскольку теперь требует меньше выгрузки на CPU, имеет более чем в три раза более быструю скорость генерации при значительно меньшем использовании памяти, что делает её практичной для систем с ограниченной видеопамятью.
Я тестировал обе модели с запросом
Футуристический крупный план ASIC-чипа трансформерного инференса с интригующей схемой, синим светом, излучаемым от плотных матричных блоков умножения и ALU с низкой точностью, окружённым буферами на-чиповой SRAM и квантовыми конвейерами, отрендерено в гипердетализированном фотореалистичном стиле с холодным, клиническим освещением.
Пример вывода FLUX.1-dev Q8 — это заглавное изображение этой статьи — см. выше.
Пример вывода неквантованного FLUX.1-dev приведён ниже:

Я не вижу большой разницы в качестве.
Заключение
Квантование GGUF делает FLUX.1-dev доступным для более широкого диапазона оборудования, сохраняя высокое качество генерации изображений, за которое известна модель. Уменьшая требования к памяти примерно на 50%, вы можете запускать передовые технологии генерации изображений по тексту на более доступном оборудовании без значительных потерь качества.
Реализация проста с библиотекой diffusers, требуя лишь незначительных изменений в стандартной настройке конвейера FLUX. Для большинства пользователей квантование Q8_0 обеспечивает оптимальный баланс между эффективностью использования памяти и качеством изображений.
Если вы работаете с FLUX.1-Kontext-dev для увеличения изображений, аналогичные техники квантования могут стать доступными в будущем.
Связанные статьи
- Flux text to image - руководство по использованию FLUX.1-dev для генерации изображений по тексту
- FLUX.1-Kontext-dev: AI-модель для увеличения изображений
- uv - Новый менеджер пакетов, проектов и сред Python
- Python Cheatsheet
Ссылки
- Документация HuggingFace Diffusers GGUF - Официальная документация по использованию GGUF с diffusers
- Unsloth FLUX.1-dev-GGUF - Предварительно квантованные модели GGUF для FLUX.1-dev
- Black Forest Labs FLUX.1-dev - Оригинальный репозиторий модели FLUX.1-dev
- Спецификация формата GGUF - Технические детали формата GGUF