2323from diffusers import (
2424 AutoencoderKL ,
2525 DDIMScheduler ,
26+ DEISMultistepScheduler ,
27+ DPMSolverMultistepScheduler ,
28+ EulerDiscreteScheduler ,
2629 StableDiffusionSAGPipeline ,
2730 UNet2DConditionModel ,
2831)
@@ -45,14 +48,15 @@ class StableDiffusionSAGPipelineFastTests(PipelineLatentTesterMixin, PipelineTes
4548 def get_dummy_components (self ):
4649 torch .manual_seed (0 )
4750 unet = UNet2DConditionModel (
48- block_out_channels = (32 , 64 ),
51+ block_out_channels = (4 , 8 ),
4952 layers_per_block = 2 ,
50- sample_size = 32 ,
53+ sample_size = 8 ,
54+ norm_num_groups = 1 ,
5155 in_channels = 4 ,
5256 out_channels = 4 ,
5357 down_block_types = ("DownBlock2D" , "CrossAttnDownBlock2D" ),
5458 up_block_types = ("CrossAttnUpBlock2D" , "UpBlock2D" ),
55- cross_attention_dim = 32 ,
59+ cross_attention_dim = 8 ,
5660 )
5761 scheduler = DDIMScheduler (
5862 beta_start = 0.00085 ,
@@ -63,7 +67,8 @@ def get_dummy_components(self):
6367 )
6468 torch .manual_seed (0 )
6569 vae = AutoencoderKL (
66- block_out_channels = [32 , 64 ],
70+ block_out_channels = [4 , 8 ],
71+ norm_num_groups = 1 ,
6772 in_channels = 3 ,
6873 out_channels = 3 ,
6974 down_block_types = ["DownEncoderBlock2D" , "DownEncoderBlock2D" ],
@@ -74,11 +79,11 @@ def get_dummy_components(self):
7479 text_encoder_config = CLIPTextConfig (
7580 bos_token_id = 0 ,
7681 eos_token_id = 2 ,
77- hidden_size = 32 ,
82+ hidden_size = 8 ,
83+ num_hidden_layers = 2 ,
7884 intermediate_size = 37 ,
7985 layer_norm_eps = 1e-05 ,
8086 num_attention_heads = 4 ,
81- num_hidden_layers = 5 ,
8287 pad_token_id = 1 ,
8388 vocab_size = 1000 ,
8489 )
@@ -108,13 +113,35 @@ def get_dummy_inputs(self, device, seed=0):
108113 "num_inference_steps" : 2 ,
109114 "guidance_scale" : 1.0 ,
110115 "sag_scale" : 1.0 ,
111- "output_type" : "numpy " ,
116+ "output_type" : "np " ,
112117 }
113118 return inputs
114119
115120 def test_inference_batch_single_identical (self ):
116121 super ().test_inference_batch_single_identical (expected_max_diff = 3e-3 )
117122
123+ @unittest .skip ("Not necessary to test here." )
124+ def test_xformers_attention_forwardGenerator_pass (self ):
125+ pass
126+
127+ def test_pipeline_different_schedulers (self ):
128+ pipeline = self .pipeline_class (** self .get_dummy_components ())
129+ inputs = self .get_dummy_inputs ("cpu" )
130+
131+ expected_image_size = (16 , 16 , 3 )
132+ for scheduler_cls in [DDIMScheduler , DEISMultistepScheduler , DPMSolverMultistepScheduler ]:
133+ pipeline .scheduler = scheduler_cls .from_config (pipeline .scheduler .config )
134+ image = pipeline (** inputs ).images [0 ]
135+
136+ shape = image .shape
137+ assert shape == expected_image_size
138+
139+ pipeline .scheduler = EulerDiscreteScheduler .from_config (pipeline .scheduler .config )
140+
141+ with self .assertRaises (ValueError ):
142+ # Karras schedulers are not supported
143+ image = pipeline (** inputs ).images [0 ]
144+
118145
119146@nightly
120147@require_torch_gpu
0 commit comments