-
Notifications
You must be signed in to change notification settings - Fork 14
Description
环境: Ubuntu 22.04,Python 3.11, CUDA 12.4,Pytorch 2.60,RTX 4090 24G。
这是一个很不错的项目,从 QwenVL-Flux 起就一直关注和跟进,Qwen VL 在 图像理解和提示词方面能力非常强,结合 Flux 模型的出图能力,这个项目的提升空间非常大。
Nexus-Gen V2 一出来就立刻跟进,模型拉下来后,先把 generation 和 editing 进行了转换,转换成 fp16 精度。
app.py 中:第39、39行,修改成:
generation_decoder_path = "models/Nexus-GenV2/generation_decoder-full-fp16.safetensors"
editing_decoder_path = "models/Nexus-GenV2/edit_decoder-full-fp16.safetensors"
根据 diffsynth 项目的代码,改了 editing_decoder.py 和 generation_decoder.py 模型加载和内存管理部分代码,
如下(以generation_decoder.py为例):
L22改成:def init(self, decoder_path, flux_path, device='cuda', torch_dtype=torch.bfloat16, enable_cpu_offload=True): 以允许 cpu_offload.
L57行:return pipe, adapter 之前,增加一行:pipe.enable_vram_management()
代码执行后,好像 vram_management 不起作用,由于 fp16 的两个 DiT 模型权重都接近或大于 24G,导致 OOM。
我看 diffsynth 项目的低显存调用代码,是可以采用 offload_dtype=torch.float8_e4m3fn 量化的,但由于代码版本差异,函数描述有些差别,加上本人代码能力有限,请教大佬,能否改进一下低显存的调用方式,方便时请给与指导,谢谢!
在 DiffSynth-Studio/blob/main/examples/flux/model_inference_low_vram/FLUX.1-dev.py 代码如下:
pipe = FluxImagePipeline.from_pretrained(
torch_dtype=torch.bfloat16,
device="cuda",
model_configs=[
ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="flux1-dev.safetensors", offload_device="cpu", offload_dtype=torch.float8_e4m3fn),
ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder/model.safetensors", offload_device="cpu", offload_dtype=torch.float8_e4m3fn),
ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="text_encoder_2/", offload_device="cpu", offload_dtype=torch.float8_e4m3fn),
ModelConfig(model_id="black-forest-labs/FLUX.1-dev", origin_file_pattern="ae.safetensors", offload_device="cpu", offload_dtype=torch.float8_e4m3fn),
],
)
pipe.enable_vram_management()
不知道该如何用到本项目中。