使用 Flux.1 扩散模型与 Python — #3 — 使用 Flux LoRAs
7 个月前
在前两篇关于 Flux 的系列文章中,我介绍了如何在有限的 VRAM 下使用 Flux:
使用 Flux.1 扩散模型与 Python — #1 加载并运行 FLUX1,使用 14GB VRAM
以及如何将 Civitai safetensors 检查点转换为 Diffusers 格式:
使用 Flux.1 扩散模型与 Python — #2 — Diffusers 加载 Civitai Safetensors 模型
在这篇博客中,我将讨论如何在 Python 中使用各种 Flux LoRA 与 Diffusers 包。
1. 加载 Flux LoRA 并不像你想的那么简单
在撰写这篇博客时(2024年9月12日),至少有三种类型的 Flux LoRA。我们可以使用以下 Python 代码检测 LoRA 类型:
from safetensors.torch import load_file
lora_path = "/path/to/flux_realism_lora.safetensors"
original_dict = load_file(lora_path)
print(original_dict.keys())
- Diffusers 格式,键以
transformer
开头。 - xlabs 格式,键以
diffusion_model.double_blocks
或double_blocks
开头。 - kohya 格式,键以
lora_unet
开头。
最初,Diffusers 仅支持以 transformer
开头的 LoRA。直到最近,在这篇 [LoRA] 支持 kohya 和 xlabs loras for flux 中,Diffusers 开始支持 kohya 和 xlabs Flux LoRA。
2. 升级 Diffusers
要使用这三种 LoRA,你需要将 diffusers 升级到最新版本。
pip install -U diffusers
要使用无限提示,安装 sd_embed
(可选):
pip install git+https://github.com/xhinker/sd_embed.git@main
为了确认你的安装,确保代码文件 src/diffusers/loaders/lora_conversion_utils.py
中包含两个新函数 _convert_kohya_flux_lora_to_diffusers
和 _convert_xlabs_flux_lora_to_diffusers
。
这些函数将用于帮助将 LoRA 格式自动转换为 Diffusers 格式(以 transformers
开头)。
3. 加载 Flux LoRA
以这个 FLUX — GOLD ART FACE — MDNGUYEN 为例。
加载 Flux 管道:
from diffusers import DiffusionPipeline, FluxTransformer2DModel
from torchao.quantization import quantize_, int8_weight_only
import torch
from sd_embed.embedding_funcs import get_weighted_text_embeddings_flux1
model_path = "/path/to/black-forest-labs/FLUX.1-dev_main"
transformer_model_path = model_path
transformer = FluxTransformer2DModel.from_pretrained(
transformer_model_path,
subfolder="transformer",
torch_dtype=torch.bfloat16
)
quantize_(transformer, int8_weight_only())
pipe = DiffusionPipeline.from_pretrained(
model_path,
transformer=transformer,
torch_dtype=torch.bfloat16
)
pipe.enable_model_cpu_offload(gpu_id=0)
加载 LoRA:
lora_path = "/path/to/flux_Golden_art_face.safetensors"
pipe.load_lora_weights(lora_path)
生成长加权嵌入:
prompt = '''
HanoiGirl, Golden art face, A close-up of a woman's face, with a captivating and intense gaze,
framed by dark, flowing hair. Her large, expressive brown eyes are the focal point,
reflecting light and depth. Golden flakes and delicate branches intertwine across her face,
adding a surreal and artistic touch to the image.
The contrast of the dark background with the bright gold elements creates a dramatic,
ethereal effect, highlighting the woman's striking features and giving the portrait a dreamlike quality
'''
prompt_embeds, pooled_prompt_embeds = get_weighted_text_embeddings_flux1(
pipe=pipe,
prompt=prompt
)
生成结果:
seed = 10
for i in range(seed, seed + 1):
print(i)
image = pipe(
prompt_embeds=prompt_embeds,
pooled_prompt_embeds=pooled_prompt_embeds,
# prompt=prompt # 你也可以直接在这里提供提示
width=1680,
height=1024,
num_inference_steps=30,
generator=torch.Generator().manual_seed(i),
guidance_scale=3.5,
joint_attention_kwargs={"scale": 1.0}
).images[0]
display(image)
结果:
没有这个 LoRA,你将得到这个:
使用 Flux.1 Dev 基础模型生成的图像,没有 LoRA。
Flux LoRA 可以显著改变或提高图像生成质量。
总结
这篇博客讨论了如何使用 Hugging Face Diffusers 包加载 LoRA。使用 Diffusers,我们可以加载所有三种类型的 Flux LoRA,而无需编写一行额外的代码进行转换,这使得 LoRA 的使用和部署变得非常简单。
在下一篇博客 #4 中,我将探讨如何将 Flux 用作图像到图像的管道。如果你有任何问题或建议,请告诉我,感谢你的阅读,祝你探索愉快。
参考文献
- 转换 Flux LoRA, https://github.com/kohya-ss/sd-scripts/blob/a61cf73a5cb5209c3f4d1a3688dd276a4dfd1ecb/networks/convert_flux_lora.py
- 支持 kohya 和 xlabs loras for flux, https://github.com/huggingface/diffusers/pull/9295
- FLUX — GOLD ART FACE — MDNGUYEN, https://civitai.com/models/714260/flux-gold-art-face-mdnguyen
推荐阅读:
FluxAI 中文
© 2025. All Rights Reserved