Unverified Commit 7855ac59 authored by Fanli Lin's avatar Fanli Lin Committed by GitHub
Browse files

[tests] make tests device-agnostic (part 4) (#10508)



* initial comit

* fix empty cache

* fix one more

* fix style

* update device functions

* update

* update

* Update src/diffusers/utils/testing_utils.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update src/diffusers/utils/testing_utils.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update src/diffusers/utils/testing_utils.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update tests/pipelines/controlnet/test_controlnet.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update src/diffusers/utils/testing_utils.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update src/diffusers/utils/testing_utils.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update tests/pipelines/controlnet/test_controlnet.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* with gc.collect

* update

* make style

* check_torch_dependencies

* add mps empty cache

* add changes

* bug fix

* enable on xpu

* update more cases

* revert

* revert back

* Update test_stable_diffusion_xl.py

* Update tests/pipelines/stable_diffusion/test_stable_diffusion.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update tests/pipelines/stable_diffusion/test_stable_diffusion.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update tests/pipelines/stable_diffusion/test_stable_diffusion_img2img.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update tests/pipelines/stable_diffusion/test_stable_diffusion_img2img.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Update tests/pipelines/stable_diffusion/test_stable_diffusion_img2img.py
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* Apply suggestions from code review
Co-authored-by: default avatarhlky <hlky@hlky.ac>

* add test marker

---------
Co-authored-by: default avatarhlky <hlky@hlky.ac>
parent 30cef6bf
...@@ -20,14 +20,20 @@ import numpy as np ...@@ -20,14 +20,20 @@ import numpy as np
import torch import torch
from diffusers import StableDiffusionXLKDiffusionPipeline from diffusers import StableDiffusionXLKDiffusionPipeline
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu, slow, torch_device from diffusers.utils.testing_utils import (
backend_empty_cache,
enable_full_determinism,
require_torch_accelerator,
slow,
torch_device,
)
enable_full_determinism() enable_full_determinism()
@slow @slow
@require_torch_gpu @require_torch_accelerator
class StableDiffusionXLKPipelineIntegrationTests(unittest.TestCase): class StableDiffusionXLKPipelineIntegrationTests(unittest.TestCase):
dtype = torch.float16 dtype = torch.float16
...@@ -35,13 +41,13 @@ class StableDiffusionXLKPipelineIntegrationTests(unittest.TestCase): ...@@ -35,13 +41,13 @@ class StableDiffusionXLKPipelineIntegrationTests(unittest.TestCase):
# clean up the VRAM before each test # clean up the VRAM before each test
super().setUp() super().setUp()
gc.collect() gc.collect()
torch.cuda.empty_cache() backend_empty_cache(torch_device)
def tearDown(self): def tearDown(self):
# clean up the VRAM after each test # clean up the VRAM after each test
super().tearDown() super().tearDown()
gc.collect() gc.collect()
torch.cuda.empty_cache() backend_empty_cache(torch_device)
def test_stable_diffusion_xl(self): def test_stable_diffusion_xl(self):
sd_pipe = StableDiffusionXLKDiffusionPipeline.from_pretrained( sd_pipe = StableDiffusionXLKDiffusionPipeline.from_pretrained(
......
...@@ -22,12 +22,13 @@ from diffusers.utils import load_image, logging ...@@ -22,12 +22,13 @@ from diffusers.utils import load_image, logging
from diffusers.utils.import_utils import is_xformers_available from diffusers.utils.import_utils import is_xformers_available
from diffusers.utils.testing_utils import ( from diffusers.utils.testing_utils import (
CaptureLogger, CaptureLogger,
backend_empty_cache,
enable_full_determinism, enable_full_determinism,
floats_tensor, floats_tensor,
numpy_cosine_similarity_distance, numpy_cosine_similarity_distance,
require_accelerate_version_greater, require_accelerate_version_greater,
require_accelerator, require_accelerator,
require_torch_gpu, require_torch_accelerator,
slow, slow,
torch_device, torch_device,
) )
...@@ -515,19 +516,19 @@ class StableVideoDiffusionPipelineFastTests(PipelineTesterMixin, unittest.TestCa ...@@ -515,19 +516,19 @@ class StableVideoDiffusionPipelineFastTests(PipelineTesterMixin, unittest.TestCa
@slow @slow
@require_torch_gpu @require_torch_accelerator
class StableVideoDiffusionPipelineSlowTests(unittest.TestCase): class StableVideoDiffusionPipelineSlowTests(unittest.TestCase):
def setUp(self): def setUp(self):
# clean up the VRAM before each test # clean up the VRAM before each test
super().setUp() super().setUp()
gc.collect() gc.collect()
torch.cuda.empty_cache() backend_empty_cache(torch_device)
def tearDown(self): def tearDown(self):
# clean up the VRAM after each test # clean up the VRAM after each test
super().tearDown() super().tearDown()
gc.collect() gc.collect()
torch.cuda.empty_cache() backend_empty_cache(torch_device)
def test_sd_video(self): def test_sd_video(self):
pipe = StableVideoDiffusionPipeline.from_pretrained( pipe = StableVideoDiffusionPipeline.from_pretrained(
...@@ -535,7 +536,7 @@ class StableVideoDiffusionPipelineSlowTests(unittest.TestCase): ...@@ -535,7 +536,7 @@ class StableVideoDiffusionPipelineSlowTests(unittest.TestCase):
variant="fp16", variant="fp16",
torch_dtype=torch.float16, torch_dtype=torch.float16,
) )
pipe.enable_model_cpu_offload() pipe.enable_model_cpu_offload(device=torch_device)
pipe.set_progress_bar_config(disable=None) pipe.set_progress_bar_config(disable=None)
image = load_image( image = load_image(
"https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/pix2pix/cat_6.png?download=true" "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/pix2pix/cat_6.png?download=true"
......
...@@ -1383,11 +1383,11 @@ class PipelineFastTests(unittest.TestCase): ...@@ -1383,11 +1383,11 @@ class PipelineFastTests(unittest.TestCase):
feature_extractor=self.dummy_extractor, feature_extractor=self.dummy_extractor,
) )
sd.enable_model_cpu_offload() sd.enable_model_cpu_offload(device=torch_device)
logger = logging.get_logger("diffusers.pipelines.pipeline_utils") logger = logging.get_logger("diffusers.pipelines.pipeline_utils")
with CaptureLogger(logger) as cap_logger: with CaptureLogger(logger) as cap_logger:
sd.to("cuda") sd.to(torch_device)
assert "It is strongly recommended against doing so" in str(cap_logger) assert "It is strongly recommended against doing so" in str(cap_logger)
......
...@@ -23,10 +23,11 @@ from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer ...@@ -23,10 +23,11 @@ from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer
from diffusers import AutoencoderKL, DDIMScheduler, TextToVideoSDPipeline, UNet3DConditionModel from diffusers import AutoencoderKL, DDIMScheduler, TextToVideoSDPipeline, UNet3DConditionModel
from diffusers.utils import is_xformers_available from diffusers.utils import is_xformers_available
from diffusers.utils.testing_utils import ( from diffusers.utils.testing_utils import (
backend_empty_cache,
enable_full_determinism, enable_full_determinism,
load_numpy, load_numpy,
numpy_cosine_similarity_distance, numpy_cosine_similarity_distance,
require_torch_gpu, require_torch_accelerator,
skip_mps, skip_mps,
slow, slow,
torch_device, torch_device,
...@@ -184,19 +185,19 @@ class TextToVideoSDPipelineFastTests(PipelineTesterMixin, SDFunctionTesterMixin, ...@@ -184,19 +185,19 @@ class TextToVideoSDPipelineFastTests(PipelineTesterMixin, SDFunctionTesterMixin,
@slow @slow
@skip_mps @skip_mps
@require_torch_gpu @require_torch_accelerator
class TextToVideoSDPipelineSlowTests(unittest.TestCase): class TextToVideoSDPipelineSlowTests(unittest.TestCase):
def setUp(self): def setUp(self):
# clean up the VRAM before each test # clean up the VRAM before each test
super().setUp() super().setUp()
gc.collect() gc.collect()
torch.cuda.empty_cache() backend_empty_cache(torch_device)
def tearDown(self): def tearDown(self):
# clean up the VRAM after each test # clean up the VRAM after each test
super().tearDown() super().tearDown()
gc.collect() gc.collect()
torch.cuda.empty_cache() backend_empty_cache(torch_device)
def test_two_step_model(self): def test_two_step_model(self):
expected_video = load_numpy( expected_video = load_numpy(
......
...@@ -27,6 +27,7 @@ from diffusers.utils.testing_utils import ( ...@@ -27,6 +27,7 @@ from diffusers.utils.testing_utils import (
load_image, load_image,
nightly, nightly,
require_torch_2, require_torch_2,
require_torch_accelerator,
require_torch_gpu, require_torch_gpu,
run_test_in_subprocess, run_test_in_subprocess,
torch_device, torch_device,
...@@ -501,20 +502,19 @@ class UniDiffuserPipelineFastTests( ...@@ -501,20 +502,19 @@ class UniDiffuserPipelineFastTests(
def test_inference_batch_single_identical(self): def test_inference_batch_single_identical(self):
super().test_inference_batch_single_identical(expected_max_diff=2e-4) super().test_inference_batch_single_identical(expected_max_diff=2e-4)
@require_torch_gpu @require_torch_accelerator
def test_unidiffuser_default_joint_v1_cuda_fp16(self): def test_unidiffuser_default_joint_v1_fp16(self):
device = "cuda"
unidiffuser_pipe = UniDiffuserPipeline.from_pretrained( unidiffuser_pipe = UniDiffuserPipeline.from_pretrained(
"hf-internal-testing/unidiffuser-test-v1", torch_dtype=torch.float16 "hf-internal-testing/unidiffuser-test-v1", torch_dtype=torch.float16
) )
unidiffuser_pipe = unidiffuser_pipe.to(device) unidiffuser_pipe = unidiffuser_pipe.to(torch_device)
unidiffuser_pipe.set_progress_bar_config(disable=None) unidiffuser_pipe.set_progress_bar_config(disable=None)
# Set mode to 'joint' # Set mode to 'joint'
unidiffuser_pipe.set_joint_mode() unidiffuser_pipe.set_joint_mode()
assert unidiffuser_pipe.mode == "joint" assert unidiffuser_pipe.mode == "joint"
inputs = self.get_dummy_inputs_with_latents(device) inputs = self.get_dummy_inputs_with_latents(torch_device)
# Delete prompt and image for joint inference. # Delete prompt and image for joint inference.
del inputs["prompt"] del inputs["prompt"]
del inputs["image"] del inputs["image"]
...@@ -531,20 +531,19 @@ class UniDiffuserPipelineFastTests( ...@@ -531,20 +531,19 @@ class UniDiffuserPipelineFastTests(
expected_text_prefix = '" This This' expected_text_prefix = '" This This'
assert text[0][: len(expected_text_prefix)] == expected_text_prefix assert text[0][: len(expected_text_prefix)] == expected_text_prefix
@require_torch_gpu @require_torch_accelerator
def test_unidiffuser_default_text2img_v1_cuda_fp16(self): def test_unidiffuser_default_text2img_v1_fp16(self):
device = "cuda"
unidiffuser_pipe = UniDiffuserPipeline.from_pretrained( unidiffuser_pipe = UniDiffuserPipeline.from_pretrained(
"hf-internal-testing/unidiffuser-test-v1", torch_dtype=torch.float16 "hf-internal-testing/unidiffuser-test-v1", torch_dtype=torch.float16
) )
unidiffuser_pipe = unidiffuser_pipe.to(device) unidiffuser_pipe = unidiffuser_pipe.to(torch_device)
unidiffuser_pipe.set_progress_bar_config(disable=None) unidiffuser_pipe.set_progress_bar_config(disable=None)
# Set mode to 'text2img' # Set mode to 'text2img'
unidiffuser_pipe.set_text_to_image_mode() unidiffuser_pipe.set_text_to_image_mode()
assert unidiffuser_pipe.mode == "text2img" assert unidiffuser_pipe.mode == "text2img"
inputs = self.get_dummy_inputs_with_latents(device) inputs = self.get_dummy_inputs_with_latents(torch_device)
# Delete prompt and image for joint inference. # Delete prompt and image for joint inference.
del inputs["image"] del inputs["image"]
inputs["data_type"] = 1 inputs["data_type"] = 1
...@@ -556,20 +555,19 @@ class UniDiffuserPipelineFastTests( ...@@ -556,20 +555,19 @@ class UniDiffuserPipelineFastTests(
expected_img_slice = np.array([0.5054, 0.5498, 0.5854, 0.3052, 0.4458, 0.6489, 0.5122, 0.4810, 0.6138]) expected_img_slice = np.array([0.5054, 0.5498, 0.5854, 0.3052, 0.4458, 0.6489, 0.5122, 0.4810, 0.6138])
assert np.abs(image_slice.flatten() - expected_img_slice).max() < 1e-3 assert np.abs(image_slice.flatten() - expected_img_slice).max() < 1e-3
@require_torch_gpu @require_torch_accelerator
def test_unidiffuser_default_img2text_v1_cuda_fp16(self): def test_unidiffuser_default_img2text_v1_fp16(self):
device = "cuda"
unidiffuser_pipe = UniDiffuserPipeline.from_pretrained( unidiffuser_pipe = UniDiffuserPipeline.from_pretrained(
"hf-internal-testing/unidiffuser-test-v1", torch_dtype=torch.float16 "hf-internal-testing/unidiffuser-test-v1", torch_dtype=torch.float16
) )
unidiffuser_pipe = unidiffuser_pipe.to(device) unidiffuser_pipe = unidiffuser_pipe.to(torch_device)
unidiffuser_pipe.set_progress_bar_config(disable=None) unidiffuser_pipe.set_progress_bar_config(disable=None)
# Set mode to 'img2text' # Set mode to 'img2text'
unidiffuser_pipe.set_image_to_text_mode() unidiffuser_pipe.set_image_to_text_mode()
assert unidiffuser_pipe.mode == "img2text" assert unidiffuser_pipe.mode == "img2text"
inputs = self.get_dummy_inputs_with_latents(device) inputs = self.get_dummy_inputs_with_latents(torch_device)
# Delete prompt and image for joint inference. # Delete prompt and image for joint inference.
del inputs["prompt"] del inputs["prompt"]
inputs["data_type"] = 1 inputs["data_type"] = 1
......
...@@ -21,7 +21,7 @@ from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer ...@@ -21,7 +21,7 @@ from transformers import CLIPTextConfig, CLIPTextModel, CLIPTokenizer
from diffusers import DDPMWuerstchenScheduler, WuerstchenCombinedPipeline from diffusers import DDPMWuerstchenScheduler, WuerstchenCombinedPipeline
from diffusers.pipelines.wuerstchen import PaellaVQModel, WuerstchenDiffNeXt, WuerstchenPrior from diffusers.pipelines.wuerstchen import PaellaVQModel, WuerstchenDiffNeXt, WuerstchenPrior
from diffusers.utils.testing_utils import enable_full_determinism, require_torch_gpu, torch_device from diffusers.utils.testing_utils import enable_full_determinism, require_torch_accelerator, torch_device
from ..test_pipelines_common import PipelineTesterMixin from ..test_pipelines_common import PipelineTesterMixin
...@@ -198,7 +198,7 @@ class WuerstchenCombinedPipelineFastTests(PipelineTesterMixin, unittest.TestCase ...@@ -198,7 +198,7 @@ class WuerstchenCombinedPipelineFastTests(PipelineTesterMixin, unittest.TestCase
np.abs(image_from_tuple_slice.flatten() - expected_slice).max() < 1e-2 np.abs(image_from_tuple_slice.flatten() - expected_slice).max() < 1e-2
), f" expected_slice {expected_slice}, but got {image_from_tuple_slice.flatten()}" ), f" expected_slice {expected_slice}, but got {image_from_tuple_slice.flatten()}"
@require_torch_gpu @require_torch_accelerator
def test_offloads(self): def test_offloads(self):
pipes = [] pipes = []
components = self.get_dummy_components() components = self.get_dummy_components()
...@@ -207,12 +207,12 @@ class WuerstchenCombinedPipelineFastTests(PipelineTesterMixin, unittest.TestCase ...@@ -207,12 +207,12 @@ class WuerstchenCombinedPipelineFastTests(PipelineTesterMixin, unittest.TestCase
components = self.get_dummy_components() components = self.get_dummy_components()
sd_pipe = self.pipeline_class(**components) sd_pipe = self.pipeline_class(**components)
sd_pipe.enable_sequential_cpu_offload() sd_pipe.enable_sequential_cpu_offload(device=torch_device)
pipes.append(sd_pipe) pipes.append(sd_pipe)
components = self.get_dummy_components() components = self.get_dummy_components()
sd_pipe = self.pipeline_class(**components) sd_pipe = self.pipeline_class(**components)
sd_pipe.enable_model_cpu_offload() sd_pipe.enable_model_cpu_offload(device=torch_device)
pipes.append(sd_pipe) pipes.append(sd_pipe)
image_slices = [] image_slices = []
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment