Spaces:
Running
on
T4
Running
on
T4
chore: sync with upstream
Browse files
app.py
CHANGED
@@ -60,7 +60,7 @@ samplers_k_diffusion = [
|
|
60 |
# ]
|
61 |
|
62 |
start_time = time.time()
|
63 |
-
timeout =
|
64 |
|
65 |
scheduler = DDIMScheduler.from_pretrained(
|
66 |
base_model,
|
@@ -151,6 +151,9 @@ def setup_model(name, lora_state=None, lora_scale=1.0):
|
|
151 |
local_lora.to(local_unet.device, dtype=local_unet.dtype)
|
152 |
|
153 |
pipe.setup_unet(local_unet)
|
|
|
|
|
|
|
154 |
pipe.setup_text_encoder(clip_skip, local_te)
|
155 |
return pipe
|
156 |
|
@@ -177,7 +180,7 @@ def make_token_names(embs):
|
|
177 |
all_tokens.append(tokens)
|
178 |
return all_tokens
|
179 |
|
180 |
-
def setup_tokenizer(embs):
|
181 |
reg_match = [re.compile(fr"(?:^|(?<=\s|,)){k}(?=,|\s|$)") for k in embs.keys()]
|
182 |
clip_keywords = [' '.join(s) for s in make_token_names(embs)]
|
183 |
|
@@ -186,18 +189,13 @@ def setup_tokenizer(embs):
|
|
186 |
prompt = m.sub(v, prompt)
|
187 |
return prompt
|
188 |
|
|
|
|
|
|
|
|
|
|
|
|
|
189 |
|
190 |
-
def restore_all():
|
191 |
-
global te_base_weight, tokenizer
|
192 |
-
tokenizer.prepare_for_tokenization = original_prepare_for_tokenization
|
193 |
-
|
194 |
-
embeddings = text_encoder.get_input_embeddings()
|
195 |
-
text_encoder.get_input_embeddings().weight.data = embeddings.weight.data[:te_base_weight_length]
|
196 |
-
tokenizer = CLIPTokenizer.from_pretrained(
|
197 |
-
base_model,
|
198 |
-
subfolder="tokenizer",
|
199 |
-
torch_dtype=torch.float16,
|
200 |
-
)
|
201 |
|
202 |
def convert_size(size_bytes):
|
203 |
if size_bytes == 0:
|
@@ -230,20 +228,19 @@ def inference(
|
|
230 |
lora_state=None,
|
231 |
lora_scale=None,
|
232 |
):
|
233 |
-
global pipe, unet, tokenizer, text_encoder
|
234 |
if seed is None or seed == 0:
|
235 |
seed = random.randint(0, 2147483647)
|
236 |
|
237 |
start_time = time.time()
|
238 |
-
|
239 |
generator = torch.Generator("cuda").manual_seed(int(seed))
|
240 |
|
241 |
-
setup_model(model, lora_state, lora_scale)
|
242 |
sampler_name, sampler_opt = None, None
|
243 |
for label, funcname, options in samplers_k_diffusion:
|
244 |
if label == sampler:
|
245 |
sampler_name, sampler_opt = funcname, options
|
246 |
|
|
|
247 |
if embs is not None and len(embs) > 0:
|
248 |
ti_embs = {}
|
249 |
for name, file in embs.items():
|
@@ -255,13 +252,14 @@ def inference(
|
|
255 |
ti_embs[name] = loaded_learned_embeds
|
256 |
|
257 |
if len(ti_embs) > 0:
|
258 |
-
tokens = setup_tokenizer(ti_embs)
|
259 |
added_tokens = tokenizer.add_tokens(tokens)
|
260 |
delta_weight = torch.cat([val for val in ti_embs.values()], dim=0)
|
261 |
|
262 |
assert added_tokens == delta_weight.shape[0]
|
263 |
text_encoder.resize_token_embeddings(len(tokenizer))
|
264 |
-
text_encoder.get_input_embeddings().weight.data
|
|
|
265 |
|
266 |
config = {
|
267 |
"negative_prompt": neg_prompt,
|
@@ -296,13 +294,6 @@ def inference(
|
|
296 |
else:
|
297 |
result = pipe.txt2img(prompt, width=width, height=height, **config)
|
298 |
|
299 |
-
# restore
|
300 |
-
if embs is not None and len(embs) > 0:
|
301 |
-
restore_all()
|
302 |
-
|
303 |
-
if model in [key[0] for key in alt_models]:
|
304 |
-
local_unet.to("cpu")
|
305 |
-
|
306 |
end_time = time.time()
|
307 |
vram_free, vram_total = torch.cuda.mem_get_info()
|
308 |
print(f"done: model={model}, res={width}x{height}, step={steps}, time={round(end_time-start_time, 2)}s, vram_alloc={convert_size(vram_total-vram_free)}/{convert_size(vram_total)}")
|
|
|
60 |
# ]
|
61 |
|
62 |
start_time = time.time()
|
63 |
+
timeout = 90
|
64 |
|
65 |
scheduler = DDIMScheduler.from_pretrained(
|
66 |
base_model,
|
|
|
151 |
local_lora.to(local_unet.device, dtype=local_unet.dtype)
|
152 |
|
153 |
pipe.setup_unet(local_unet)
|
154 |
+
pipe.tokenizer.prepare_for_tokenization = original_prepare_for_tokenization
|
155 |
+
pipe.tokenizer.added_tokens_encoder = {}
|
156 |
+
pipe.tokenizer.added_tokens_decoder = {}
|
157 |
pipe.setup_text_encoder(clip_skip, local_te)
|
158 |
return pipe
|
159 |
|
|
|
180 |
all_tokens.append(tokens)
|
181 |
return all_tokens
|
182 |
|
183 |
+
def setup_tokenizer(tokenizer, embs):
|
184 |
reg_match = [re.compile(fr"(?:^|(?<=\s|,)){k}(?=,|\s|$)") for k in embs.keys()]
|
185 |
clip_keywords = [' '.join(s) for s in make_token_names(embs)]
|
186 |
|
|
|
189 |
prompt = m.sub(v, prompt)
|
190 |
return prompt
|
191 |
|
192 |
+
def prepare_for_tokenization(self, text: str, is_split_into_words: bool = False, **kwargs):
|
193 |
+
text = parse_prompt(text)
|
194 |
+
r = original_prepare_for_tokenization(text, is_split_into_words, **kwargs)
|
195 |
+
return r
|
196 |
+
tokenizer.prepare_for_tokenization = prepare_for_tokenization.__get__(tokenizer, CLIPTokenizer)
|
197 |
+
return [t for sublist in make_token_names(embs) for t in sublist]
|
198 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
199 |
|
200 |
def convert_size(size_bytes):
|
201 |
if size_bytes == 0:
|
|
|
228 |
lora_state=None,
|
229 |
lora_scale=None,
|
230 |
):
|
|
|
231 |
if seed is None or seed == 0:
|
232 |
seed = random.randint(0, 2147483647)
|
233 |
|
234 |
start_time = time.time()
|
235 |
+
pipe = setup_model(model, lora_state, lora_scale)
|
236 |
generator = torch.Generator("cuda").manual_seed(int(seed))
|
237 |
|
|
|
238 |
sampler_name, sampler_opt = None, None
|
239 |
for label, funcname, options in samplers_k_diffusion:
|
240 |
if label == sampler:
|
241 |
sampler_name, sampler_opt = funcname, options
|
242 |
|
243 |
+
tokenizer, text_encoder = pipe.tokenizer, pipe.text_encoder
|
244 |
if embs is not None and len(embs) > 0:
|
245 |
ti_embs = {}
|
246 |
for name, file in embs.items():
|
|
|
252 |
ti_embs[name] = loaded_learned_embeds
|
253 |
|
254 |
if len(ti_embs) > 0:
|
255 |
+
tokens = setup_tokenizer(tokenizer, ti_embs)
|
256 |
added_tokens = tokenizer.add_tokens(tokens)
|
257 |
delta_weight = torch.cat([val for val in ti_embs.values()], dim=0)
|
258 |
|
259 |
assert added_tokens == delta_weight.shape[0]
|
260 |
text_encoder.resize_token_embeddings(len(tokenizer))
|
261 |
+
token_embeds = text_encoder.get_input_embeddings().weight.data
|
262 |
+
token_embeds[-delta_weight.shape[0]:] = delta_weight
|
263 |
|
264 |
config = {
|
265 |
"negative_prompt": neg_prompt,
|
|
|
294 |
else:
|
295 |
result = pipe.txt2img(prompt, width=width, height=height, **config)
|
296 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
297 |
end_time = time.time()
|
298 |
vram_free, vram_total = torch.cuda.mem_get_info()
|
299 |
print(f"done: model={model}, res={width}x{height}, step={steps}, time={round(end_time-start_time, 2)}s, vram_alloc={convert_size(vram_total-vram_free)}/{convert_size(vram_total)}")
|