Views
No views yet

1import torch
2from diffusers import SanaSprintPipeline
3import peft
4from peft.tuners.lora.layer import Linear as LoraLinear
5import types
6
7prompt = "A smiling slice of pizza doing yoga on a mountain top."
8adapter_name = "hypernoise_adapter"
9device = torch.device("cuda")
10
11pipe = SanaSprintPipeline.from_pretrained(
12 "Efficient-Large-Model/Sana_Sprint_0.6B_1024px_diffusers",
13 torch_dtype=torch.bfloat16,
14).to(device, torch.bfloat16)
15pipe.transformer = peft.PeftModel.from_pretrained(
16 pipe.transformer,
17 "lucaeyring/HyperNoise_Sana_Sprint_0.6B",
18 adapter_name=adapter_name,
19 dtype=torch.bfloat16,
20).to(device, torch.bfloat16)
21
22def scaled_base_lora_forward(self, x, *args, **kwargs):
23 if self.disable_adapters: return self.base_layer(x, *args, **kwargs)
24 return self.lora_B[adapter_name](self.lora_A[adapter_name](x)) * self.scaling[adapter_name]
25
26for name, module in pipe.transformer.base_model.model.named_modules():
27 if name == "proj_out" and isinstance(module, LoraLinear):
28 module.forward = types.MethodType(scaled_base_lora_forward, module); break
29
30with torch.inference_mode():
31 prompt_embeds, prompt_attention_mask = pipe.encode_prompt([prompt], device=device)
32 init_latents = torch.randn([1, 32, 32, 32], device=device, dtype=torch.bfloat16)
33 pipe.transformer.enable_adapter_layers()
34 modulated_latents = pipe.transformer(
35 hidden_states=init_latents,
36 encoder_hidden_states=prompt_embeds,
37 encoder_attention_mask=prompt_attention_mask,
38 guidance=torch.tensor([4.5], device=device, dtype=torch.bfloat16) * 0.1,
39 timestep=torch.tensor([1.0], device=device, dtype=torch.bfloat16),
40 ).sample + init_latents
41
42 pipe.transformer.disable_adapter_layers()
43 hypernoise_image = pipe(
44 latents=modulated_latents,
45 prompt_embeds=prompt_embeds,
46 prompt_attention_mask=prompt_attention_mask,
47 num_inference_steps=4,
48 ).images[0]
49hypernoise_image.save("hypernoise-sana.png")