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 |
|