在2025年,某机构与Black Forest Labs合作优化了FLUX.1和FLUX.2文生图模型,在Blackwell GeForce RTX 50系列和数据中心GPU上实现了FP4和FP8量化,显著降低了消费级和企业级部署的内存需求和延迟。
FLUX.2 [dev] 集成了先进的推理优化技术,包括采用微块缩放的NVFP4量化、时间步嵌入感知缓存 (TeaCache)、CUDA Graphs、torch.compile 以及通过TensorRT-LLM visual_gen 实现的序列并行多GPU支持。与H200 GPU相比,该优化实现了高达10.2倍的加速,并在B200、GB200、B300和GB300架构上实现了近乎线性的扩展。该优化流程保持了高输出保真度,NVFP4量化和TeaCache分别提供了约2倍的加速效果,同时保持了视觉质量,而文本编码器的FP8量化为大规模多GPU部署带来了更多优势。所有优化均在 NVIDIA/TensorRT-LLM/visual_gen 代码库中开源。
作为潜在扩散模型的自然延伸,FLUX.1 Kontext [dev] 证明了上下文学习不仅适用于大语言模型,对视觉生成模型同样可行。为了使这种体验更广泛可用,某机构与BFL合作,利用低精度量化实现了近乎实时的编辑体验。
FLUX.2 是一个巨大的飞跃,为公众提供了多图像参考功能,其质量可媲美最佳的企业级模型。然而,由于FLUX.2 [dev] 需要大量计算资源,BFL、Comfy和某机构合作实现了一项重大突破:将FLUX.2 [dev] 的内存需求降低了40%以上,并通过ComfyUI实现了本地部署。这项使用FP8精度的优化使得FLUX.2 [dev] 成为图像生成领域最受欢迎的模型之一。
随着FLUX.2 [dev] 成为开源权重模型的黄金标准,某机构团队与BFL合作,现在分享了性能的下一飞跃:在功能最强大的数据中心NVIDIA Blackwell GPU(包括某机构DGX B200和某机构DGX B300)上,为FLUX.2 [dev] 实现4位加速。
本文介绍了团队用于在这些某机构数据中心架构上加速FLUX.2 [dev] 的各种推理优化技术,包括代码片段和入门步骤。这些优化的综合效果显著降低了延迟,实现了在数据中心GPU上的高效部署。
BF16与NVFP4在FLUX.2 [dev] 上的视觉对比
在深入了解细节之前,先来查看FLUX.2 [dev] 在默认BF16精度下与使用NVFP4(图1和图2)时在输出质量上惊人的相似性。
图1的提示词为:“一只猫在一张舒适的沙发上安详地打盹。沙发位于一棵从月球表面生长的高树顶上。地球悬挂在远方,是黑暗太空中一颗充满活力的蓝绿色宝石。一艘光滑的宇宙飞船盘旋在附近,为场景投下柔和的光线,整个数字艺术作品呈现出梦幻般的质感。”
图1. 使用BF16精度(左)和NVFP4量化(右)的FLUX.2 [dev] 生成的图像
图2的提示词为:“一幅油画,描绘了一对穿着晚礼服的夫妇在倾盆大雨中回家,没有带伞。”在这个案例中,差异更难发现。最明显的是BF16图像中男士的微笑以及NVFP4图像背景中的多把雨伞。除此之外,两幅图像的前景和背景中的大部分细节都得到了保留。
图2. 使用BF16精度(左)和NVFP4量化(右)的FLUX.2 [dev] 生成的图像
优化 FLUX.2 [dev]
FLUX.2 [dev] 模型由三个关键组件构成:文本嵌入模型(具体为Mistral Small 3)、扩散变换器模型和一个自编码器。某机构团队将以下优化技术应用于开源的diffusers实现,使用了TensorRT-LLM/feat/visual_gen分支中的原型运行时:
- NVFP4量化
- 时间步嵌入感知缓存 (TeaCache)
- CUDA Graphs
- Torch compile
- 多GPU支持
NVFP4量化
NVFP4通过引入两级微块缩放策略,推进了微缩放数据格式的概念。这种方法旨在最小化精度损失,并具有两种不同的机制:每张量缩放和每块缩放。
每张量缩放是一个以FP32精度存储的值,它调整整个张量分布,可以静态或动态计算。相比之下,每块缩放通过将张量划分为16个元素块来实时动态计算。
为了最大灵活性,用户可以选择将特定层保留为更高精度并应用动态量化,如下面使用FLUX.2 [dev] 的示例所示:
exclude_pattern = r"^(?!.*(embedder|norm_out|proj_out|to_add_out|to_added_qkv|stream)).*"
NVFP4计算的应用使用以下语句:
from visual_gen.layers import apply_visual_gen_linear
apply_visual_gen_linear(
model,
load_parameters=True,
quantize_weights=True,
exclude_pattern=exclude_pattern,
)
TeaCache
TeaCache技术用于加速推理过程。TeaCache通过使用扩散过程中生成的先前潜变量有条件地跳过扩散步骤。为了量化这种效果,进行了测试:在包含20个提示词和50步推理过程的场景中,TeaCache平均跳过了16步,这导致推理延迟降低了约30%。
为了确定TeaCache超参数的最佳配置,采用了网格搜索方法。该配置在计算速度和生成质量之间取得了最佳平衡。
dit_configs = {
...
"teacache": {
"enable_teacache": True,
"use_ret_steps": True,
"teacache_thresh": 0.05,
"ret_steps": 10,
"cutoff_steps": 50,
},
...
}
缓存机制的缩放因子通过经验确定,并使用三次多项式进行近似。这个多项式是通过一个校准数据集拟合的,该数据集包含文生图和多参考图生成示例。
图3展示了这种经验方法,绘制了原始校准数据点以及拟合出的三次多项式曲线(红色所示),该曲线模拟了调制输入差值与模型输出差值之间的关系。
图3. 调制输入差值与模型预测输出差值之间的相关性
CUDA Graphs
TensorRT-LLM visual_gen 提供了一个现成的包装器来支持CUDA Graphs捕获。只需导入包装器并替换前向函数:
from visual_gen.utils.cudagraph import cudagraph_wrapper
model.forward = cudagraph_wrapper(model.forward)
Torch compile
在所有团队的实验中,除了基线运行外,torch.compile 都被启用,因为FLUX.2 [dev] 默认未启用它。
model = torch.compile(model)
多GPU支持
使用TensorRT-LLM visual_gen 启用多GPU涉及四个步骤:
- 修改模型的
forward函数,插入处理GPU间通信的代码 - 将模型中的注意力实现替换为
ditAttnProcessor - 在配置中选择并行算法并设置并行度
- 使用
torchrun启动
以下代码片段提供了一个示例。在 model.forward 的开头插入拆分代码,将输入数据分布到多个GPU上:
from visual_gen.utils import (
dit_sp_gather,
dit_sp_split,
)
# ...
hidden_states = dit_sp_split(hidden_states, dim=1)
encoder_hidden_states = dit_sp_split(encoder_hidden_states, dim=1)
img_ids = dit_sp_split(img_ids, dim=1)
txt_ids = dit_sp_split(txt_ids, dim=1)
随后,在返回之前在 model.forward 的末尾插入收集代码:
output = dit_sp_gather(output, dim=1)
然后用提供的注意力处理器替换原始的注意力实现,以确保跨多个GPU的正确通信:
from visual_gen.layers import ditAttnProcessor
# ...
def attention(...):
# ...
x = ditAttnProcessor().visual_gen_attn(q, k, v, tensor_layout="HND")
# ...
在配置中设置正确的并行大小。例如,要在四个GPU上使用Ulysses并行:
dit_config = {
...
"parallel": {
"dit_ulysses_size": 4,
}
...
}
最后,调用 setup_configs API 来激活配置:
visual_gen.setup_configs(**dit_configs)
当使用多个GPU时,脚本必须使用 torchrun 启动。TensorRT-LLM visual_gen 将使用来自 torchrun 的排名信息,并正确处理所有通信和任务拆分。
性能分析
所有的推理优化都已包含在一个端到端的FLUX.2 [dev] 示例中——低精度内核、缓存技术和多GPU推理。
如图4所示,即使在默认BF16精度下,某机构DGX B200架构相比某机构H200也实现了1.7倍的代际提升。此外,应用分层推理优化——包括CUDA Graphs、torch.compile、NVFP4精度和TeaCache——将单B200的性能从该基线逐步提升至显著的6.3倍加速。最终,在两B200配置上的多GPU推理相比当前行业标准的H200,实现了10.2倍的性能提升。
图4. 在NVIDIA B200 GPU上FLUX.2 [dev] 的推理延迟比较
基线是未进行任何优化且未启用 torch.compile 的原始 FLUX.2 [dev]。优化系列包括启用 torch.compile、CUDA Graphs、NVFP4 和 TeaCache。基准测试中使用的扩散步数为50步。
在单GPU上,团队发现NVFP4和TeaCache在加速和输出质量之间提供了良好的权衡,各自提供了约2倍的加速。torch.compile 是一种近乎无损的加速技术,大多数开发者都很熟悉,但其收益有限。CUDA Graphs主要对多GPU推理有益,通过在某机构B200上使用多个GPU实现了增量扩展。最后,整个流程证明了文本编码器的FP8量化的鲁棒性,为大规模部署提供了额外的好处。
在多GPU上,TensorRT-LLM visual_gen 序列并行在增加更多GPU时实现了近乎线性的扩展。在NVIDIA Blackwell B200和GB200以及NVIDIA Blackwell Ultra B300和GB300 GPU上也观察到了同样的效果。针对NVIDIA Blackwell Ultra GPU的额外优化正在进行中。
图5. 在Blackwell GPU上的FLUX.2 [dev] 多GPU推理扩展
在NVIDIA Blackwell GPU上开始使用FLUX.2
FLUX.2 是图像生成领域的重大进步,成功地将高质量输出与用户友好的部署选项相结合。某机构团队与BFL合作,在功能最强大的某机构数据中心GPU上实现了FLUX.2 [dev] 的显著加速。
将新技术应用于FLUX.2 [dev] 模型,包括NVFP4量化和TeaCaching,带来了推理速度的强大代际飞跃。这些优化的综合效果显著降低了延迟,实现了在某机构数据中心GPU上的高效部署。
要开始使用这些最先进的优化构建自己的推理流程,请查看 NVIDIA/TensorRT-LLM/visual_gen GitHub 代码库中的端到端FLUX.2示例和附带代码。FINISHED