在 Python 中运行 FLUX.1-dev GGUF Q8
使用GGUF量化加速FLUX.1-dev
FLUX.1-dev 是一款功能强大的文本到图像模型,能够生成令人惊叹的结果,但其24GB以上的内存需求使得在许多系统上运行变得具有挑战性。 FLUX.1-dev的GGUF量化版本 提供了一种解决方案,将内存使用量减少约50%,同时保持出色的图像质量。
此图像使用Q8量化格式的GGUF FLUX.1-dev模型生成,展示了即使在内存占用减少的情况下,图像质量仍然得以保持。
什么是GGUF量化?
GGUF(GPT生成的统一格式)是一种最初为语言模型开发的量化格式,但现在也支持如FLUX这样的扩散模型。量化通过以较低精度格式(8位、6位或4位)而不是完整的16位或32位精度存储权重来减小模型大小。
对于FLUX.1-dev,变压器组件(模型中最大的部分)可以进行量化,使用Q8_0量化可将内存占用从约24GB减少到12GB,使用更激进的量化级别甚至可以进一步降低。
GGUF量化的优势
使用GGUF量化FLUX模型的主要优势包括:
- 减少内存使用:将VRAM需求减少一半,使FLUX.1-dev在更多硬件上可用
- 保持质量:Q8_0量化在视觉上几乎没有差异,保持了图像质量
- 加载速度更快:由于文件大小较小,量化模型加载速度更快
- 降低功耗:减少内存使用意味着在推理过程中功耗更低
在我们的测试中,量化模型使用的VRAM约为12-15GB,而完整模型需要24GB以上,而生成时间保持相似。
安装和设置
要使用GGUF量化FLUX.1-dev,除了标准的diffusers依赖项外,还需要gguf包。如果您已经在使用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速查表。以下是一个完整的可运行示例:
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_model_path} 加载GGUF量化变压器")
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- 管道结构- 组件配置(变压器、text_encoder、text_encoder_2、vae、scheduler)
- 分词器文件
- text_encoder和vae权重(这些未被量化)
变压器权重来自GGUF文件,但所有其他组件都需要原始模型文件。
CPU卸载兼容性
重要:enable_sequential_cpu_offload()与GGUF量化模型不兼容,会导致KeyError: None错误。我正在使用enable_model_cpu_offload()来处理量化变压器。
量化级别
FLUX.1-dev的可用量化级别包括:
- Q8_0:最佳质量,约14-15GB内存(推荐)
- Q6_K:良好平衡,约12GB内存
- Q4_K:最大压缩,约8GB内存(我认为这会影响质量)
对于大多数使用情况,Q8_0在内存节省和图像质量之间提供了最佳平衡。
性能比较
在我们的测试中,使用相同的提示和设置:
| 模型 | VRAM使用 | 生成时间 | 质量 |
|---|---|---|---|
| 完整FLUX.1-dev | 24GB | 我没有这么大的GPU | 优秀(我认为) |
| 完整FLUX.1-dev | ~3GB(使用sequential_cpu_offload()) | ~329秒 | 优秀 |
| GGUF Q8_0 | ~14-15GB | ~98秒 !!! | 优秀 |
| GGUF Q6_K | ~10-12GB | ~116秒 | 非常好 |
由于量化模型现在需要更少的CPU卸载,其生成速度比完整模型快三倍以上,同时使用显著更少的内存,使其在VRAM有限的系统上变得实用。
我使用以下提示测试了两种模型:
一个未来主义的变压器推理ASIC芯片特写,带有复杂的电路,密集的矩阵乘法单元和低精度ALU发出蓝色光芒,周围是片上SRAM缓冲区和量化管道,以超详细的真实风格渲染,采用冷而临床的照明方案。
FLUX.1-dev Q8的示例输出是本文的封面图片 - 请参见上方。
非量化FLUX.1-dev的示例输出如下:

我没有看到质量上的明显差异。
结论
GGUF量化使FLUX.1-dev能够更广泛地在各种硬件上运行,同时保持模型以高质量图像生成而闻名的特性。通过将内存需求减少约50%,您可以在更经济实惠的硬件上运行最先进的文本到图像生成,而不会显著影响质量。
使用diffusers库实现起来非常直接,只需对标准FLUX管道设置进行小幅更改即可。对于大多数用户,Q8_0量化在内存效率和图像质量之间提供了最佳平衡。
如果您正在使用FLUX.1-Kontext-dev进行图像增强,未来可能会提供类似的量化技术。
相关文章
参考文献
- HuggingFace Diffusers GGUF 文档 - 使用GGUF与diffusers的官方文档
- Unsloth FLUX.1-dev-GGUF - FLUX.1-dev的预量化GGUF模型
- Black Forest Labs FLUX.1-dev - 原始FLUX.1-dev模型仓库
- GGUF格式规范 - GGUF格式的技术细节