Запуск FLUX.1-dev GGUF Q8 в Python

Ускорение FLUX.1-dev с квантованием GGUF

Содержимое страницы

FLUX.1-dev — это мощная модель генерации изображений по тексту, которая производит потрясающие результаты, но её требование к памяти в 24 ГБ и более делает её сложной для запуска на многих системах. Квантование FLUX.1-dev в формате GGUF предлагает решение, уменьшая использование памяти примерно на 50% при сохранении отличного качества изображений.

пример вывода Q8 квантованного FLUX.1-dev - asic Это изображение было сгенерировано с использованием квантованной модели 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 приведён ниже:

пример изображения, созданного неквантованным FLUX.1-dev - asic

Я не вижу большой разницы в качестве.

Заключение

Квантование GGUF делает FLUX.1-dev доступным для более широкого диапазона оборудования, сохраняя высокое качество генерации изображений, за которое известна модель. Уменьшая требования к памяти примерно на 50%, вы можете запускать передовые технологии генерации изображений по тексту на более доступном оборудовании без значительных потерь качества.

Реализация проста с библиотекой diffusers, требуя лишь незначительных изменений в стандартной настройке конвейера FLUX. Для большинства пользователей квантование Q8_0 обеспечивает оптимальный баланс между эффективностью использования памяти и качеством изображений.

Если вы работаете с FLUX.1-Kontext-dev для увеличения изображений, аналогичные техники квантования могут стать доступными в будущем.

Связанные статьи

Ссылки