From 960411af1bf36b77634108617c2f778fa2b24e34 Mon Sep 17 00:00:00 2001 From: Soila Kavulya Date: Thu, 15 Feb 2024 12:58:57 -0800 Subject: [PATCH 1/2] Fix throughput calculation for diffusion models --- .../diffusers/pipelines/controlnet/pipeline_controlnet.py | 5 +++-- .../pipelines/stable_diffusion/pipeline_stable_diffusion.py | 5 +++-- .../stable_diffusion/pipeline_stable_diffusion_ldm3d.py | 5 +++-- .../stable_diffusion/pipeline_stable_diffusion_upscale.py | 5 +++-- .../stable_diffusion_xl/pipeline_stable_diffusion_xl.py | 5 +++-- 5 files changed, 15 insertions(+), 10 deletions(-) diff --git a/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py b/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py index 81e151f723..5393becddf 100644 --- a/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py +++ b/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py @@ -496,10 +496,11 @@ def __call__( hb_profiler.start() # 8. Denoising loop + throughput_warmup_steps = kwargs.get("throughput_warmup_steps", 3) for j in self.progress_bar(range(num_batches)): # The throughput is calculated from the 3rd iteration # because compilation occurs in the first two iterations - if j == kwargs.get("throughput_warmup_steps", 3): + if j == throughput_warmup_steps: t1 = time.time() latents_batch = latents_batches[0] @@ -615,7 +616,7 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - 2) * batch_size, + num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py index 8f412f0c20..fed4c35566 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py @@ -477,10 +477,11 @@ def __call__( self._num_timesteps = len(timesteps) # 8. Denoising loop + throughput_warmup_steps = kwargs.get("throughput_warmup_steps", 3) for j in self.progress_bar(range(num_batches)): # The throughput is calculated from the 3rd iteration # because compilation occurs in the first two iterations - if j == kwargs.get("throughput_warmup_steps", 3): + if j == throughput_warmup_steps: t1 = time.time() latents_batch = latents_batches[0] @@ -560,7 +561,7 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - 2) * batch_size, + num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py index 0fbcd4a274..750dd570c1 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py @@ -339,10 +339,11 @@ def __call__( t1 = t0 # 8. Denoising loop + throughput_warmup_steps = kwargs.get("throughput_warmup_steps", 3) for j in self.progress_bar(range(num_batches)): # The throughput is calculated from the 3rd iteration # because compilation occurs in the first two iterations - if j == kwargs.get("throughput_warmup_steps", 3): + if j == throughput_warmup_steps: t1 = time.time() latents_batch = latents_batches[0] @@ -401,7 +402,7 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - 2) * batch_size, + num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py index a574746e38..54e4ae8592 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py @@ -436,10 +436,11 @@ def __call__( t1 = t0 # 10. Denoising loop + throughput_warmup_steps = kwargs.get("throughput_warmup_steps", 3) for j in self.progress_bar(range(num_batches)): # The throughput is calculated from the 3rd iteration # because compilation occurs in the first two iterations - if j == kwargs.get("throughput_warmup_steps", 3): + if j == throughput_warmup_steps: t1 = time.time() latents_batch = latents_batches[0] @@ -522,7 +523,7 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - 2) * batch_size, + num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py b/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py index 72c132847f..da9a29eaf3 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py @@ -678,10 +678,11 @@ def __call__( self._num_timesteps = len(timesteps) # 8.3 Denoising loop + throughput_warmup_steps = kwargs.get("throughput_warmup_steps", 3) for j in self.progress_bar(range(num_batches)): # The throughput is calculated from the 3rd iteration # because compilation occurs in the first two iterations - if j == kwargs.get("throughput_warmup_steps", 3): + if j == throughput_warmup_steps: t1 = time.time() latents_batch = latents_batches[0] @@ -778,7 +779,7 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - 2) * batch_size, + num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) From eeb2c4ec957a25e3f76ba1fafd3f0accf942dca0 Mon Sep 17 00:00:00 2001 From: Soila Kavulya Date: Fri, 1 Mar 2024 07:48:04 -0800 Subject: [PATCH 2/2] Update style check in diffusers --- .../diffusers/pipelines/controlnet/pipeline_controlnet.py | 4 +++- .../pipelines/stable_diffusion/pipeline_stable_diffusion.py | 4 +++- .../stable_diffusion/pipeline_stable_diffusion_ldm3d.py | 4 +++- .../stable_diffusion/pipeline_stable_diffusion_upscale.py | 4 +++- .../stable_diffusion_xl/pipeline_stable_diffusion_xl.py | 4 +++- 5 files changed, 15 insertions(+), 5 deletions(-) diff --git a/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py b/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py index 5393becddf..57675812f7 100644 --- a/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py +++ b/optimum/habana/diffusers/pipelines/controlnet/pipeline_controlnet.py @@ -616,7 +616,9 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, + num_samples=num_batches * batch_size + if t1 == t0 + else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py index fed4c35566..bf5d90df51 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion.py @@ -561,7 +561,9 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, + num_samples=num_batches * batch_size + if t1 == t0 + else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py index 750dd570c1..ffde6d08a7 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_ldm3d.py @@ -402,7 +402,9 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, + num_samples=num_batches * batch_size + if t1 == t0 + else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py index 54e4ae8592..c4f7a5d245 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion/pipeline_stable_diffusion_upscale.py @@ -523,7 +523,9 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, + num_samples=num_batches * batch_size + if t1 == t0 + else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, ) diff --git a/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py b/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py index da9a29eaf3..406f46753b 100644 --- a/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py +++ b/optimum/habana/diffusers/pipelines/stable_diffusion_xl/pipeline_stable_diffusion_xl.py @@ -779,7 +779,9 @@ def __call__( speed_measures = speed_metrics( split=speed_metrics_prefix, start_time=t0, - num_samples=num_batches * batch_size if t1 == t0 else (num_batches - throughput_warmup_steps) * batch_size, + num_samples=num_batches * batch_size + if t1 == t0 + else (num_batches - throughput_warmup_steps) * batch_size, num_steps=num_batches, start_time_after_warmup=t1, )