跳至主要内容

如何在 RTX 3090 上本地运行 FLUX.2

逐步讲解如何在本地运行 FLUX.2,用于高质量的图像生成与编辑。
· 9分钟 阅读

使用 AI 探索

在本教程中,我们将学习如何在本地运行 FLUX.2 图像生成模型。我们将设置 GPU 环境、下载量化版本的 FLUX.2、高效加载到 GPU 与内存中、运行推理,并尝试不同的配置选项。

在 RTX 3090 上运行这种体量的模型并不轻松,因此本教程重点介绍最简单、最实用的本地运行方式,避免不必要的复杂度。

如果您对模型管理与优化的高级技巧感兴趣(包括剪枝、量化与日志记录),推荐学习Scalable AI Models with PyTorch Lightning 课程。

什么是 FLUX.2?

FLUX.2 是一个为真实创作工作而构建的图像生成模型,而不仅仅是用于实验。它能生成高质量、逼真的图像,并在多张参考图之间保持角色、风格与产品的一致性。它在原始FLUX 模型基础上,能更准确地遵循提示、清晰渲染文本,并能很好地处理光照、布局与品牌元素。

FLUX.2 还支持高分辨率图像编辑,既提供即用型 API,也提供可在本地运行的开源模型,兼具实用、灵活与易于集成到真实生产流程的特点。

FLUX.2 主要有四个变体:

  • FLUX.2 [max]
  • FLUX.2 [pro]
  • FLUX.2 [flex]
  • FLUX.2 [dev]

每个变体都针对不同的控制粒度、性能与部署需求而设计。

在更广泛的排行榜对比中,三款 FLUX.2 变体均位列 Artificial Analysis 图像编辑模型榜单前十,其中 FLUX.2 [max] 与 FLUX.2 [pro] 的表现优于 GPT-5 和上一代 FLUX.1 Kontext 变体。

Text to Image Leaderboard | Artificial Analysis. Showing FLUX.2 model in top 5.

来源:Text to Image Leaderboard | Artificial Analysis

本地运行 FLUX.2:分步指南

在下面的步骤中,我将讲解在 RTX 3090 GPU 上本地运行 FLUX.2 所需的一切。

1. 系统要求与前置条件

在本地运行 FLUX.2 之前,请确保您的系统已为 GPU 推理正确配置。

硬件

  • NVIDIA GPU(推荐 RTX 3090)
  • 24 GB 显存(VRAM)
  • 64 GB 系统内存(推荐)

NVIDIA 驱动与 CUDA 工具包

  • 安装 NVIDIA 驱动:确保安装了支持最新 CUDA 版本的 NVIDIA GPU 驱动(推荐 CUDA 12.1+)。
  • 安装 CUDA 工具包:从官方NVIDIA CUDA Downloads页面下载并安装 CUDA 工具包,以提升与 GPU 扩展和自定义内核的兼容性。

在终端运行以下命令以验证安装:

nvidia-smi

如图所示,我们有一块 RTX 3090 GPU,CUDA 版本为 13。

verify the cuda installation

Python 与 Jupyter

  • Python 3.10+
  • Jupyter Notebook 或 JupyterLab(推荐用于轻松的交互式实验)
pip install jupyterlab notebook

注意:我们使用 Jupyter Notebook 作为编码环境,便于实验、逐步运行推理,并在笔记本中迭代生成与编辑图像。

2. 安装支持 CUDA 的 PyTorch

这一步安装带有 CUDA 支持的 PyTorch,使推理在 GPU 而非 CPU 上运行。下面的命令会安装预编译 CUDA 版本的 PyTorch、TorchVision 与 TorchAudio,无需从源码构建 CUDA。

!pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130

安装完成后,若可用且配置正确,PyTorch 将自动使用 GPU。

3. 安装 FLUX.2 与所需依赖

接下来安装在本地运行 FLUX.2 所需的核心库。这些软件包负责模型加载、推理、GPU 加速、量化与高效数据传输。

!pip install -q diffusers transformers accelerate bitsandbytes huggingface_hub protobuf sentencepiece hf_transfer

安装完成后,您的环境即可加载 FLUX.2,开始进行图像生成与编辑推理。

4. 验证 GPU 与量化支持

在加载 FLUX.2 之前,我们验证 PyTorch 是否能识别 GPU 以及是否支持 4 比特量化。此步骤对于确保模型在 RTX 3090 的内存限制内高效运行非常重要。

import torch
import bitsandbytes as bnb

print(f"PyTorch Version: {torch.__version__}")
print(f"CUDA Version: {torch.version.cuda}")
print(f"Is CUDA available? {torch.cuda.is_available()}")
print(f"GPU Name: {torch.cuda.get_device_name(0)}")

# Check if 4-bit quantization is supported (Ampere 3090 supports this natively)
try:
    print(f"BitsAndBytes Version: {bnb.__version__}")
    print("4-bit quantization check: PASSED")
except ImportError:
    print("BitsAndBytes not installed correctly.")

输出将确认 PyTorch 已正确安装且支持 CUDA,您的 RTX 3090 已被检测到,并且 bitsandbytes 正常工作并启用了 4 比特量化,系统已准备好进行高效的 GPU 推理。

PyTorch Version: 2.8.0+cu128
CUDA Version: 12.8
Is CUDA available? True
GPU Name: NVIDIA GeForce RTX 3090
BitsAndBytes Version: 0.49.0
4-bit quantization check: PASSED

5. 使用 4 比特量化加载 FLUX.2

此步骤将以4 比特量化检查点加载FLUX.2 [dev],以降低 GPU 显存占用,同时保持较高图像质量。这对于在 RTX 3090 上运行像 FLUX.2 这样的大模型至关重要。

我们先导入必要库,并定义几个关键设置。

  • repo_id 指向4 比特 FLUX.2 dev 检查点。
  • device 选择您的 GPU(第一个 CUDA 设备)。
  • torch_dtype 设置推理时的计算精度。bfloat16 常用于在保证输出稳定的同时降低内存并提升速度。
import torch
from transformers import Mistral3ForConditionalGeneration
from diffusers import Flux2Pipeline, Flux2Transformer2DModel

repo_id = "diffusers/FLUX.2-dev-bnb-4bit"
device = "cuda:0"
torch_dtype = torch.bfloat16

接着,我们先将 FLUX.2 的图像变换器主干(负责生成图像潜变量的核心组件)加载到 CPU。这能避免初始加载时占满显存,并让管道更灵活地仅在需要时将模块移动到 GPU。

transformer = Flux2Transformer2DModel.from_pretrained(
  repo_id, subfolder="transformer", torch_dtype=torch_dtype, device_map="cpu"
)

然后同样将文本编码器加载到 CPU。文本编码器会将您的提示转为用于引导图像生成的嵌入。在设置阶段将其留在 CPU,有助于为生成过程中更重的部分保留 GPU 显存。

text_encoder = Mistral3ForConditionalGeneration.from_pretrained(
  repo_id, subfolder="text_encoder", dtype=torch_dtype, device_map="cpu"
)

最后,我们将注入已加载的变换器与文本编码器,组装完整的Diffusers 管道。

关键在于 enable_model_cpu_offload():它开启自动 CPU ↔ GPU 卸载,意味着管道只在实际需要时将模型部分移至 GPU,用完再移回 CPU。这是用消费级 GPU 运行大模型、无需手动管理设备放置的最简单方法之一。

pipe = Flux2Pipeline.from_pretrained(
  repo_id, transformer=transformer, text_encoder=text_encoder, torch_dtype=torch_dtype
)
pipe.enable_model_cpu_offload()

6. 运行首个文生图生成

现在可以用 FLUX.2 生成第一张图像了。为简单起见,我们从一个文本提示开始,描述一张极致真实的瓢虫微距照片。

prompt = (
    "Realistic macro photo of a ladybug perched on the edge of a dew-covered rose petal, "
    "early morning mist, soft natural light, shallow depth of field, crisp detail, creamy bokeh."
)

接下来,将提示传给管道并运行推理。

  • 我们使用 28 步推理,以平衡速度与画质。
  • 引导系数 4 可保持结果自然,而不过度强行贴合提示。
  • 固定随机种子可确保结果可复现。
image = pipe(
  prompt=prompt,
  generator=torch.Generator(device=device).manual_seed(42),
  num_inference_steps=28,
  guidance_scale=4,
).images[0]

要监控推理期间的显存使用,可打开终端运行:

nvidia-smi

您应能看到接近 21 GB 的显存占用与较高的 GPU 利用率,表示模型在高效使用资源,并在 RTX 3090 上以满负载运行。

Memory usage during image generation inference

推理完成后,您可在 Jupyter Notebook 中直接显示图像对象以查看结果:

image

结果高度细腻且逼真。模型紧密遵循提示,同时还加入了诸如光照与质感等未被明确指定的细节。

image4.png

最后,我们将生成的图像保存到本地:

output_path = "flux2_local_full.png"
image.save(output_path)
print(f"Image saved to {output_path}")

输出:

Image saved to flux2_local_full.png

7. 使用结构化 JSON 的高级提示

FLUX.2 支持超越纯文本的高级提示方式,可对最终图像进行更细致的控制。利用结构化 JSON 提示,您可以用精确的十六进制色码明确规定场景布局、主体、光照、相机设置、氛围与配色。

在本节中,我们使用结构化 JSON 提示来详细描述场景。我们不再用一句话,而是以清晰有序的格式定义环境、主体、风格、颜色、光照、相机属性与负面约束。

这有助于 FLUX.2 更好地理解复杂指令,并产出更可控且高质量的结果。

advanced_prompt = """
{
  "scene": "New Year's Eve night on a rooftop overlooking a glowing city skyline",
  "subjects": [
    {
      "description": "Group of close friends including men and women in winter clothing, natural facial proportions, diverse appearances",
      "position": "center and slightly spread across the frame",
      "action": "standing together in a loose circle, some smiling softly, others quietly reflective, sharing the moment before midnight"
    }
  ],
  "style": "Cinematic semi-realistic illustration with grounded realism, subtle painterly softness",
  "color_palette": ["#0B132B", "#1C2541", "#EAEAEA", "#F4D35E"],
  "lighting": "Soft moonlight as ambient key light, warm glow from sparklers and nearby string lights illuminating faces, gentle contrast",
  "mood": "Warm, intimate, reflective, hopeful",
  "background": "Out-of-focus city skyline with distant fireworks softly lighting the sky, minimal visual noise",
  "composition": "Wide medium shot, balanced framing, friends forming a natural arc, negative space above for sky and fireworks",
  "camera": {
    "angle": "eye-level",
    "lens": "50mm cinematic look",
    "depth_of_field": "sharp focus on group, gentle background blur"
  },
  "details": [
    "subtle breath vapor in cold air",
    "soft fabric textures on coats and scarves",
    "sparklers emitting warm golden particles",
    "natural body language and expressions",
    "no exaggerated poses or faces"
  ],
  "negative_prompt": [
    "cartoon style",
    "emote proportions",
    "chibi",
    "oversized heads",
    "text",
    "watermark",
    "logo",
    "overcrowded scene",
    "harsh neon lighting",
    "over-saturation",
    "extra limbs",
    "distorted faces"
  ]
}
"""

随后我们以更多步数运行推理,以捕捉更多细节,同时保持适中的引导系数以获得自然观感。

image_2 = pipe(
  prompt=advanced_prompt,
  generator=torch.Generator(device=device).manual_seed(42),
  num_inference_steps=50,
  guidance_scale=4,
).images[0]

在 Jupyter Notebook 中显示生成图像:

image_2

生成结果紧密遵循结构化提示,准确呈现场景、氛围、光照与构图。

image7.png

8. 使用 FLUX.2 进行图像编辑(图生图)

FLUX.2 也支持图像编辑:以参考图像为基础,模型根据文本提示进行更改。这在您希望保留人物身份、五官与肤色,但改变主体周围的场景、氛围或环境时尤其有用。

在此示例中,我们使用来自 Pexels.com 的一张印度女性照片作为参考图像:

image3.png

照片由 cottonbro studio 提供:https://www.pexels.com/photo/a-woman-with-a-nose-piercing-9317190/

我们谨慎设计提示,指示模型保持女性的面部特征与自然肤色,同时改变环境、光照与情绪表达。目标是在不改变其身份的前提下进行编辑。

from diffusers.utils import load_image

prompt = (
    "Using the provided reference image, generate a realistic photograph of a woman with a similar face, "
    "standing at night and looking up at the sky with stars with a subtle, sad expression. "
    "Natural skin tones, soft moonlight, gentle shadows, shallow depth of field, "
    "with blurred city lights in the background."
)

接着我们加载参考图像并传入管道。FLUX.2 支持多张参考图像,本例仅使用单张图进行引导编辑。

indian_woman = load_image("https://images.pexels.com/photos/9317190/pexels-photo-9317190.jpeg")
image_3 = pipe(
    prompt=prompt,
    image=[indian_woman], 
    generator=torch.Generator(device=device).manual_seed(42),
    num_inference_steps=28,
    guidance_scale=4,
).images[0]

在 Jupyter Notebook 中查看编辑结果:

image_3

输出结果非常逼真。模型在自然置入新场景与不同光照、氛围和背景的同时,保留了女性的面部结构与肤色。

成品更像是在不同地点与时刻由专业摄影师拍摄的照片,而非 AI 的简单编辑。

image8.png

FLUX.2 内存优化提示

根据我的经验,切换到 4 比特量化模型并采用基于代码的 Transformers 与 Diffusers 配置后,本地运行 FLUX.2 才真正变得稳定可靠。

在此之前,当我尝试将过多内容直接加载到 CUDA 上时,即便是 24 GB 的 RTX 3090 也频繁出现内存不足错误。

Stable Diffusion WebUI 与 ComfyUI 等图形界面工具也更容易触及内存上限,因为它们往往会在内存中保留额外的中间缓冲、预览与工作流状态,除非您仔细调整其低显存选项。

显存优化建议(对我确实有效的):

  • 使用 4 比特检查点(bitsandbytes)而非全精度权重。
  • 先在 CPU 上加载组件(device_map="cpu"),避免一开始就将所有内容推到 CUDA。
  • 启用 CPU–GPU 卸载(pipe.enable_model_cpu_offload()),让只有活跃模块驻留在 GPU。
  • 控制推理步数在合理范围(例如28–35 步用于快速运行;仅在需要时再提高)。
  • 保持适中引导系数(大约3–5),以避免不必要的计算与不稳定。
  • 使用 nvidia-smi 实时监控显存,并关闭其他占用 GPU 的应用。
  • 若仍遇到 OOM,重启笔记本内核以在重试前彻底清空 GPU 内存。

如果按上述步骤仍然遇到内存不足问题,请参考此DataLab 笔记本,获取更多故障排查与内存优化示例。

结语

我对开源图像生成模型的进步由衷感到震撼。

像 FLUX.2 这样的模型在视觉质量与提示理解方面,已能与闭源系统正面竞争。通过合理的环境配置、适度的实验与一些内存优化,即便在消费级 GPU 上,也能本地免费生成高质量、逼真的图像。

最突出的优势在于可控性。高级提示、结构化 JSON、多参考编辑与图生图流程,让您轻松突破简单生成的范畴。

您可以创作电影感场景、为叙事持续演化图像、进行专业级图像编辑,并快速迭代,而无需依赖封闭平台。

对创作者、研究者与开发者而言,这带来了更大的创作自由,也让高端图像生成前所未有地触手可及。

FLUX.2 常见问答

我可以在 FLUX.2 中使用现有的 FLUX.1 LoRA 吗?

不能。由于 FLUX.2 使用了 基于 Mistral 的文本编码器与重新设计的 rectified flow transformer,体系结构从根本上不同。您无法将基于 FLUX.1(或 SDXL)训练的 LoRA 加载到 FLUX.2 中;您需要专门针对 FLUX.2 架构查找或训练新的 LoRA。

我能在少于 24 GB 显存的 GPU 上运行 FLUX.2 吗?

有难度但可行,需要权衡。4 比特量化版本([dev])通常需要约 18–20 GB 显存才能顺畅运行。对于 12 GB 或 16 GB 显卡,您必须使用极限卸载(生成速度会明显变慢),或改用更小的 FLUX.2 [flex] 变体,它针对消费级硬件进行了优化。

FLUX.2 [dev] 与 [pro] 的主要区别是什么?

主要差异在于许可与权重可用性。FLUX.2 [dev]为开放权重,但仅限非商业用途。FLUX.2 [pro]通过 API 提供,可用于商业生产。从技术上看,它们共享相同的核心能力,但 [pro] 往往以更高精度(FP16)提供以实现最高保真度,而本地用户通常以 4 比特或 8 比特运行 [dev] 以适配内存。

为什么加载提示比 FLUX.1 更慢?

FLUX.2 用Mistral 3 骨干替代了 T5XXL 文本编码器。虽然这显著提升了提示理解能力(包括本指南中使用的结构化 JSON 提示),但该模型较大、加载与处理计算量也比以往的文本编码器更高。

“4 比特量化”是否本质上会降低图像质量?

令人惊讶的是,影响很小。虽然 4 比特量化会降低模型内部计算的精度以节省内存,但像 NF4(Normal Float 4)这样的现代方法能保留绝大部分“知识”。对大多数用户而言,32GB+ FP16 全精度模型与 4 比特版本在视觉输出上的差异几乎不可察觉,但内存节省巨大(通常约 50%)。

Abid Ali Awan

作者

Abid Ali Awan

作为一名持证的数据科学家,我热衷于利用前沿技术打造创新的机器学习应用。凭借在语音识别、数据分析与报告、MLOps、对话式人工智能以及自然语言处理方面的扎实背景,我不断打磨构建智能系统的能力,力求带来切实影响。除技术专长外,我也擅长沟通,能够将复杂概念提炼为清晰、简明的表述。因此,我成为数据科学领域备受关注的博主,与不断壮大的数据专业人士社区分享洞见与实践经验。目前,我专注于内容创作与编辑,借助大语言模型打造有力且吸引人的内容,帮助企业与个人更好地发挥数据价值。

主题