Spaces:
Running
on
Zero
Running
on
Zero
Upload app.py
Browse files
app.py
CHANGED
|
@@ -62,17 +62,12 @@ class FluxEditor:
|
|
| 62 |
# init all components
|
| 63 |
self.t5 = load_t5(self.device, max_length=256 if self.name == "flux-schnell" else 512)
|
| 64 |
self.clip = load_clip(self.device)
|
| 65 |
-
self.model = load_flow_model(self.name, device=
|
| 66 |
-
self.ae = load_ae(self.name, device=
|
| 67 |
self.t5.eval()
|
| 68 |
self.clip.eval()
|
| 69 |
self.ae.eval()
|
| 70 |
self.model.eval()
|
| 71 |
-
|
| 72 |
-
if self.offload:
|
| 73 |
-
self.model.cpu()
|
| 74 |
-
torch.cuda.empty_cache()
|
| 75 |
-
self.ae.encoder.to(self.device)
|
| 76 |
|
| 77 |
@torch.inference_mode()
|
| 78 |
@spaces.GPU(duration=30)
|
|
@@ -111,11 +106,6 @@ class FluxEditor:
|
|
| 111 |
t0 = time.perf_counter()
|
| 112 |
|
| 113 |
opts.seed = None
|
| 114 |
-
if self.offload:
|
| 115 |
-
self.ae = self.ae.cpu()
|
| 116 |
-
torch.cuda.empty_cache()
|
| 117 |
-
self.t5, self.clip = self.t5.to(self.device), self.clip.to(self.device)
|
| 118 |
-
|
| 119 |
#############inverse#######################
|
| 120 |
info = {}
|
| 121 |
info['feature'] = {}
|
|
@@ -129,12 +119,6 @@ class FluxEditor:
|
|
| 129 |
inp_target = prepare(self.t5, self.clip, init_image, prompt=opts.target_prompt)
|
| 130 |
timesteps = get_schedule(opts.num_steps, inp["img"].shape[1], shift=(self.name != "flux-schnell"))
|
| 131 |
|
| 132 |
-
# offload TEs to CPU, load model to gpu
|
| 133 |
-
if self.offload:
|
| 134 |
-
self.t5, self.clip = self.t5.cpu(), self.clip.cpu()
|
| 135 |
-
torch.cuda.empty_cache()
|
| 136 |
-
self.model = self.model.to(self.device)
|
| 137 |
-
|
| 138 |
# inversion initial noise
|
| 139 |
with torch.no_grad():
|
| 140 |
z, info = denoise(self.model, **inp, timesteps=timesteps, guidance=1, inverse=True, info=info)
|
|
@@ -146,12 +130,6 @@ class FluxEditor:
|
|
| 146 |
# denoise initial noise
|
| 147 |
x, _ = denoise(self.model, **inp_target, timesteps=timesteps, guidance=guidance, inverse=False, info=info)
|
| 148 |
|
| 149 |
-
# offload model, load autoencoder to gpu
|
| 150 |
-
if self.offload:
|
| 151 |
-
self.model.cpu()
|
| 152 |
-
torch.cuda.empty_cache()
|
| 153 |
-
self.ae.decoder.to(x.device)
|
| 154 |
-
|
| 155 |
# decode latents to pixel space
|
| 156 |
x = unpack(x.float(), opts.width, opts.height)
|
| 157 |
|
|
|
|
| 62 |
# init all components
|
| 63 |
self.t5 = load_t5(self.device, max_length=256 if self.name == "flux-schnell" else 512)
|
| 64 |
self.clip = load_clip(self.device)
|
| 65 |
+
self.model = load_flow_model(self.name, device='cuda')
|
| 66 |
+
self.ae = load_ae(self.name, device='cuda' if self.offload else self.device)
|
| 67 |
self.t5.eval()
|
| 68 |
self.clip.eval()
|
| 69 |
self.ae.eval()
|
| 70 |
self.model.eval()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
@torch.inference_mode()
|
| 73 |
@spaces.GPU(duration=30)
|
|
|
|
| 106 |
t0 = time.perf_counter()
|
| 107 |
|
| 108 |
opts.seed = None
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 109 |
#############inverse#######################
|
| 110 |
info = {}
|
| 111 |
info['feature'] = {}
|
|
|
|
| 119 |
inp_target = prepare(self.t5, self.clip, init_image, prompt=opts.target_prompt)
|
| 120 |
timesteps = get_schedule(opts.num_steps, inp["img"].shape[1], shift=(self.name != "flux-schnell"))
|
| 121 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 122 |
# inversion initial noise
|
| 123 |
with torch.no_grad():
|
| 124 |
z, info = denoise(self.model, **inp, timesteps=timesteps, guidance=1, inverse=True, info=info)
|
|
|
|
| 130 |
# denoise initial noise
|
| 131 |
x, _ = denoise(self.model, **inp_target, timesteps=timesteps, guidance=guidance, inverse=False, info=info)
|
| 132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
# decode latents to pixel space
|
| 134 |
x = unpack(x.float(), opts.width, opts.height)
|
| 135 |
|