Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
OpenDAS
diffusers
Commits
29021090
Unverified
Commit
29021090
authored
Nov 25, 2022
by
Patrick von Platen
Committed by
GitHub
Nov 25, 2022
Browse files
Fix all stable diffusion (#1415)
* up * uP
parent
f26cde3d
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
56 additions
and
17 deletions
+56
-17
examples/community/clip_guided_stable_diffusion.py
examples/community/clip_guided_stable_diffusion.py
+5
-1
src/diffusers/pipelines/alt_diffusion/pipeline_alt_diffusion.py
...ffusers/pipelines/alt_diffusion/pipeline_alt_diffusion.py
+6
-1
src/diffusers/pipelines/alt_diffusion/pipeline_alt_diffusion_img2img.py
...pipelines/alt_diffusion/pipeline_alt_diffusion_img2img.py
+6
-1
src/diffusers/pipelines/stable_diffusion/pipeline_cycle_diffusion.py
...rs/pipelines/stable_diffusion/pipeline_cycle_diffusion.py
+6
-1
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py
...s/pipelines/stable_diffusion/pipeline_stable_diffusion.py
+6
-1
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py
...nes/stable_diffusion/pipeline_stable_diffusion_img2img.py
+6
-1
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py
...nes/stable_diffusion/pipeline_stable_diffusion_inpaint.py
+6
-1
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint_legacy.py
...ble_diffusion/pipeline_stable_diffusion_inpaint_legacy.py
+6
-1
tests/pipelines/stable_diffusion/test_stable_diffusion.py
tests/pipelines/stable_diffusion/test_stable_diffusion.py
+1
-1
tests/pipelines/stable_diffusion_2/test_stable_diffusion.py
tests/pipelines/stable_diffusion_2/test_stable_diffusion.py
+8
-8
No files found.
examples/community/clip_guided_stable_diffusion.py
View file @
29021090
...
...
@@ -78,7 +78,11 @@ class CLIPGuidedStableDiffusion(DiffusionPipeline):
)
self
.
normalize
=
transforms
.
Normalize
(
mean
=
feature_extractor
.
image_mean
,
std
=
feature_extractor
.
image_std
)
cut_out_size
=
feature_extractor
.
size
if
isinstance
(
feature_extractor
.
size
,
int
)
else
feature_extractor
.
size
[
"shortest_edge"
]
cut_out_size
=
(
feature_extractor
.
size
if
isinstance
(
feature_extractor
.
size
,
int
)
else
feature_extractor
.
size
[
"shortest_edge"
]
)
self
.
make_cutouts
=
MakeCutouts
(
cut_out_size
)
set_requires_grad
(
self
.
text_encoder
,
False
)
...
...
src/diffusers/pipelines/alt_diffusion/pipeline_alt_diffusion.py
View file @
29021090
...
...
@@ -229,10 +229,15 @@ class AltDiffusionPipeline(DiffusionPipeline):
device
=
torch
.
device
(
f
"cuda:
{
gpu_id
}
"
)
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
,
self
.
safety_checker
]:
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
]:
if
cpu_offloaded_model
is
not
None
:
cpu_offload
(
cpu_offloaded_model
,
device
)
if
self
.
safety_checker
is
not
None
:
# TODO(Patrick) - there is currently a bug with cpu offload of nn.Parameter in accelerate
# fix by only offloading self.safety_checker for now
cpu_offload
(
self
.
safety_checker
.
vision_model
)
@
property
def
_execution_device
(
self
):
r
"""
...
...
src/diffusers/pipelines/alt_diffusion/pipeline_alt_diffusion_img2img.py
View file @
29021090
...
...
@@ -224,10 +224,15 @@ class AltDiffusionImg2ImgPipeline(DiffusionPipeline):
device
=
torch
.
device
(
f
"cuda:
{
gpu_id
}
"
)
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
,
self
.
safety_checker
]:
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
]:
if
cpu_offloaded_model
is
not
None
:
cpu_offload
(
cpu_offloaded_model
,
device
)
if
self
.
safety_checker
is
not
None
:
# TODO(Patrick) - there is currently a bug with cpu offload of nn.Parameter in accelerate
# fix by only offloading self.safety_checker for now
cpu_offload
(
self
.
safety_checker
.
vision_model
)
@
property
def
_execution_device
(
self
):
r
"""
...
...
src/diffusers/pipelines/stable_diffusion/pipeline_cycle_diffusion.py
View file @
29021090
...
...
@@ -257,10 +257,15 @@ class CycleDiffusionPipeline(DiffusionPipeline):
device
=
torch
.
device
(
f
"cuda:
{
gpu_id
}
"
)
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
,
self
.
safety_checker
]:
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
]:
if
cpu_offloaded_model
is
not
None
:
cpu_offload
(
cpu_offloaded_model
,
device
)
if
self
.
safety_checker
is
not
None
:
# TODO(Patrick) - there is currently a bug with cpu offload of nn.Parameter in accelerate
# fix by only offloading self.safety_checker for now
cpu_offload
(
self
.
safety_checker
.
vision_model
)
@
property
# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline._execution_device
def
_execution_device
(
self
):
...
...
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py
View file @
29021090
...
...
@@ -228,10 +228,15 @@ class StableDiffusionPipeline(DiffusionPipeline):
device
=
torch
.
device
(
f
"cuda:
{
gpu_id
}
"
)
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
,
self
.
safety_checker
]:
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
]:
if
cpu_offloaded_model
is
not
None
:
cpu_offload
(
cpu_offloaded_model
,
device
)
if
self
.
safety_checker
is
not
None
:
# TODO(Patrick) - there is currently a bug with cpu offload of nn.Parameter in accelerate
# fix by only offloading self.safety_checker for now
cpu_offload
(
self
.
safety_checker
.
vision_model
)
@
property
def
_execution_device
(
self
):
r
"""
...
...
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_img2img.py
View file @
29021090
...
...
@@ -226,10 +226,15 @@ class StableDiffusionImg2ImgPipeline(DiffusionPipeline):
device
=
torch
.
device
(
f
"cuda:
{
gpu_id
}
"
)
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
,
self
.
safety_checker
]:
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
]:
if
cpu_offloaded_model
is
not
None
:
cpu_offload
(
cpu_offloaded_model
,
device
)
if
self
.
safety_checker
is
not
None
:
# TODO(Patrick) - there is currently a bug with cpu offload of nn.Parameter in accelerate
# fix by only offloading self.safety_checker for now
cpu_offload
(
self
.
safety_checker
.
vision_model
)
@
property
# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline._execution_device
def
_execution_device
(
self
):
...
...
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint.py
View file @
29021090
...
...
@@ -291,10 +291,15 @@ class StableDiffusionInpaintPipeline(DiffusionPipeline):
device
=
torch
.
device
(
f
"cuda:
{
gpu_id
}
"
)
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
,
self
.
safety_checker
]:
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
]:
if
cpu_offloaded_model
is
not
None
:
cpu_offload
(
cpu_offloaded_model
,
device
)
if
self
.
safety_checker
is
not
None
:
# TODO(Patrick) - there is currently a bug with cpu offload of nn.Parameter in accelerate
# fix by only offloading self.safety_checker for now
cpu_offload
(
self
.
safety_checker
.
vision_model
)
# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline.enable_xformers_memory_efficient_attention
def
enable_xformers_memory_efficient_attention
(
self
):
r
"""
...
...
src/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_inpaint_legacy.py
View file @
29021090
...
...
@@ -239,10 +239,15 @@ class StableDiffusionInpaintPipelineLegacy(DiffusionPipeline):
device
=
torch
.
device
(
f
"cuda:
{
gpu_id
}
"
)
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
,
self
.
safety_checker
]:
for
cpu_offloaded_model
in
[
self
.
unet
,
self
.
text_encoder
,
self
.
vae
]:
if
cpu_offloaded_model
is
not
None
:
cpu_offload
(
cpu_offloaded_model
,
device
)
if
self
.
safety_checker
is
not
None
:
# TODO(Patrick) - there is currently a bug with cpu offload of nn.Parameter in accelerate
# fix by only offloading self.safety_checker for now
cpu_offload
(
self
.
safety_checker
.
vision_model
)
# Copied from diffusers.pipelines.stable_diffusion.pipeline_stable_diffusion.StableDiffusionPipeline.enable_xformers_memory_efficient_attention
def
enable_xformers_memory_efficient_attention
(
self
):
r
"""
...
...
tests/pipelines/stable_diffusion/test_stable_diffusion.py
View file @
29021090
...
...
@@ -948,7 +948,7 @@ class StableDiffusionPipelineIntegrationTests(unittest.TestCase):
expected_slice
=
np
.
array
(
[
1.8285
,
1.2857
,
-
0.1024
,
1.2406
,
-
2.3068
,
1.0747
,
-
0.0818
,
-
0.6520
,
-
2.9506
]
)
assert
np
.
abs
(
latents_slice
.
flatten
()
-
expected_slice
).
max
()
<
1
e-3
assert
np
.
abs
(
latents_slice
.
flatten
()
-
expected_slice
).
max
()
<
5
e-3
elif
step
==
50
:
latents
=
latents
.
detach
().
cpu
().
numpy
()
assert
latents
.
shape
==
(
1
,
4
,
64
,
64
)
...
...
tests/pipelines/stable_diffusion_2/test_stable_diffusion.py
View file @
29021090
...
...
@@ -609,11 +609,12 @@ class StableDiffusion2PipelineIntegrationTests(unittest.TestCase):
assert
mem_bytes
>
3.75
*
10
**
9
assert
np
.
abs
(
image_chunked
.
flatten
()
-
image
.
flatten
()).
max
()
<
1e-3
def
test_stable_diffusion_
text2img_pipeline_fp16
(
self
):
def
test_stable_diffusion_
same_quality
(
self
):
torch
.
cuda
.
reset_peak_memory_stats
()
model_id
=
"stabilityai/stable-diffusion-2-base"
pipe
=
StableDiffusionPipeline
.
from_pretrained
(
model_id
,
revision
=
"fp16"
,
torch_dtype
=
torch
.
float16
)
pipe
=
pipe
.
to
(
torch_device
)
pipe
.
enable_attention_slicing
()
pipe
.
set_progress_bar_config
(
disable
=
None
)
prompt
=
"a photograph of an astronaut riding a horse"
...
...
@@ -624,18 +625,17 @@ class StableDiffusion2PipelineIntegrationTests(unittest.TestCase):
)
image_chunked
=
output_chunked
.
images
pipe
=
StableDiffusionPipeline
.
from_pretrained
(
model_id
)
pipe
=
pipe
.
to
(
torch_device
)
generator
=
torch
.
Generator
(
device
=
torch_device
).
manual_seed
(
0
)
with
torch
.
autocast
(
torch_device
):
output
=
pipe
(
[
prompt
],
generator
=
generator
,
guidance_scale
=
7.5
,
num_inference_steps
=
10
,
output_type
=
"numpy"
)
image
=
output
.
images
output
=
pipe
([
prompt
],
generator
=
generator
,
guidance_scale
=
7.5
,
num_inference_steps
=
10
,
output_type
=
"numpy"
)
image
=
output
.
images
# Make sure results are close enough
diff
=
np
.
abs
(
image_chunked
.
flatten
()
-
image
.
flatten
())
# They ARE different since ops are not run always at the same precision
# however, they should be extremely close.
assert
diff
.
mean
()
<
2
e-2
assert
diff
.
mean
()
<
5
e-2
def
test_stable_diffusion_text2img_pipeline_default
(
self
):
expected_image
=
load_numpy
(
...
...
@@ -669,7 +669,7 @@ class StableDiffusion2PipelineIntegrationTests(unittest.TestCase):
assert
latents
.
shape
==
(
1
,
4
,
64
,
64
)
latents_slice
=
latents
[
0
,
-
3
:,
-
3
:,
-
1
]
expected_slice
=
np
.
array
([
1.8606
,
1.3169
,
-
0.0691
,
1.2374
,
-
2.309
,
1.077
,
-
0.1084
,
-
0.6774
,
-
2.9594
])
assert
np
.
abs
(
latents_slice
.
flatten
()
-
expected_slice
).
max
()
<
1
e-3
assert
np
.
abs
(
latents_slice
.
flatten
()
-
expected_slice
).
max
()
<
5
e-3
elif
step
==
20
:
latents
=
latents
.
detach
().
cpu
().
numpy
()
assert
latents
.
shape
==
(
1
,
4
,
64
,
64
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment