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

[tests] make tests device-agnostic (part 3) (#10437)



* 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

* bug fix

* Apply suggestions from code review

---------
Co-authored-by: default avatarhlky <hlky@hlky.ac>
parent 158a5a87
...@@ -23,11 +23,15 @@ from diffusers import IFInpaintingPipeline ...@@ -23,11 +23,15 @@ from diffusers import IFInpaintingPipeline
from diffusers.models.attention_processor import AttnAddedKVProcessor from diffusers.models.attention_processor import AttnAddedKVProcessor
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 (
backend_empty_cache,
backend_max_memory_allocated,
backend_reset_max_memory_allocated,
backend_reset_peak_memory_stats,
floats_tensor, floats_tensor,
load_numpy, load_numpy,
require_accelerator, require_accelerator,
require_hf_hub_version_greater, require_hf_hub_version_greater,
require_torch_gpu, require_torch_accelerator,
require_transformers_version_greater, require_transformers_version_greater,
skip_mps, skip_mps,
slow, slow,
...@@ -106,30 +110,30 @@ class IFInpaintingPipelineFastTests(PipelineTesterMixin, IFPipelineTesterMixin, ...@@ -106,30 +110,30 @@ class IFInpaintingPipelineFastTests(PipelineTesterMixin, IFPipelineTesterMixin,
@slow @slow
@require_torch_gpu @require_torch_accelerator
class IFInpaintingPipelineSlowTests(unittest.TestCase): class IFInpaintingPipelineSlowTests(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_if_inpainting(self): def test_if_inpainting(self):
pipe = IFInpaintingPipeline.from_pretrained( pipe = IFInpaintingPipeline.from_pretrained(
"DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16 "DeepFloyd/IF-I-XL-v1.0", variant="fp16", torch_dtype=torch.float16
) )
pipe.unet.set_attn_processor(AttnAddedKVProcessor()) pipe.unet.set_attn_processor(AttnAddedKVProcessor())
pipe.enable_model_cpu_offload() pipe.enable_model_cpu_offload(device=torch_device)
torch.cuda.empty_cache() backend_empty_cache(torch_device)
torch.cuda.reset_max_memory_allocated() backend_reset_max_memory_allocated(torch_device)
torch.cuda.reset_peak_memory_stats() backend_reset_peak_memory_stats(torch_device)
image = floats_tensor((1, 3, 64, 64), rng=random.Random(0)).to(torch_device) image = floats_tensor((1, 3, 64, 64), rng=random.Random(0)).to(torch_device)
mask_image = floats_tensor((1, 3, 64, 64), rng=random.Random(1)).to(torch_device) mask_image = floats_tensor((1, 3, 64, 64), rng=random.Random(1)).to(torch_device)
...@@ -145,7 +149,7 @@ class IFInpaintingPipelineSlowTests(unittest.TestCase): ...@@ -145,7 +149,7 @@ class IFInpaintingPipelineSlowTests(unittest.TestCase):
) )
image = output.images[0] image = output.images[0]
mem_bytes = torch.cuda.max_memory_allocated() mem_bytes = backend_max_memory_allocated(torch_device)
assert mem_bytes < 12 * 10**9 assert mem_bytes < 12 * 10**9
expected_image = load_numpy( expected_image = load_numpy(
......
...@@ -23,11 +23,15 @@ from diffusers import IFInpaintingSuperResolutionPipeline ...@@ -23,11 +23,15 @@ from diffusers import IFInpaintingSuperResolutionPipeline
from diffusers.models.attention_processor import AttnAddedKVProcessor from diffusers.models.attention_processor import AttnAddedKVProcessor
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 (
backend_empty_cache,
backend_max_memory_allocated,
backend_reset_max_memory_allocated,
backend_reset_peak_memory_stats,
floats_tensor, floats_tensor,
load_numpy, load_numpy,
require_accelerator, require_accelerator,
require_hf_hub_version_greater, require_hf_hub_version_greater,
require_torch_gpu, require_torch_accelerator,
require_transformers_version_greater, require_transformers_version_greater,
skip_mps, skip_mps,
slow, slow,
...@@ -108,31 +112,31 @@ class IFInpaintingSuperResolutionPipelineFastTests(PipelineTesterMixin, IFPipeli ...@@ -108,31 +112,31 @@ class IFInpaintingSuperResolutionPipelineFastTests(PipelineTesterMixin, IFPipeli
@slow @slow
@require_torch_gpu @require_torch_accelerator
class IFInpaintingSuperResolutionPipelineSlowTests(unittest.TestCase): class IFInpaintingSuperResolutionPipelineSlowTests(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_if_inpainting_superresolution(self): def test_if_inpainting_superresolution(self):
pipe = IFInpaintingSuperResolutionPipeline.from_pretrained( pipe = IFInpaintingSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", variant="fp16", torch_dtype=torch.float16 "DeepFloyd/IF-II-L-v1.0", variant="fp16", torch_dtype=torch.float16
) )
pipe.unet.set_attn_processor(AttnAddedKVProcessor()) pipe.unet.set_attn_processor(AttnAddedKVProcessor())
pipe.enable_model_cpu_offload() pipe.enable_model_cpu_offload(device=torch_device)
# Super resolution test # Super resolution test
torch.cuda.empty_cache() backend_empty_cache(torch_device)
torch.cuda.reset_max_memory_allocated() backend_reset_max_memory_allocated(torch_device)
torch.cuda.reset_peak_memory_stats() backend_reset_peak_memory_stats(torch_device)
generator = torch.Generator(device="cpu").manual_seed(0) generator = torch.Generator(device="cpu").manual_seed(0)
...@@ -154,7 +158,7 @@ class IFInpaintingSuperResolutionPipelineSlowTests(unittest.TestCase): ...@@ -154,7 +158,7 @@ class IFInpaintingSuperResolutionPipelineSlowTests(unittest.TestCase):
assert image.shape == (256, 256, 3) assert image.shape == (256, 256, 3)
mem_bytes = torch.cuda.max_memory_allocated() mem_bytes = backend_max_memory_allocated(torch_device)
assert mem_bytes < 12 * 10**9 assert mem_bytes < 12 * 10**9
expected_image = load_numpy( expected_image = load_numpy(
......
...@@ -23,11 +23,15 @@ from diffusers import IFSuperResolutionPipeline ...@@ -23,11 +23,15 @@ from diffusers import IFSuperResolutionPipeline
from diffusers.models.attention_processor import AttnAddedKVProcessor from diffusers.models.attention_processor import AttnAddedKVProcessor
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 (
backend_empty_cache,
backend_max_memory_allocated,
backend_reset_max_memory_allocated,
backend_reset_peak_memory_stats,
floats_tensor, floats_tensor,
load_numpy, load_numpy,
require_accelerator, require_accelerator,
require_hf_hub_version_greater, require_hf_hub_version_greater,
require_torch_gpu, require_torch_accelerator,
require_transformers_version_greater, require_transformers_version_greater,
skip_mps, skip_mps,
slow, slow,
...@@ -101,31 +105,31 @@ class IFSuperResolutionPipelineFastTests(PipelineTesterMixin, IFPipelineTesterMi ...@@ -101,31 +105,31 @@ class IFSuperResolutionPipelineFastTests(PipelineTesterMixin, IFPipelineTesterMi
@slow @slow
@require_torch_gpu @require_torch_accelerator
class IFSuperResolutionPipelineSlowTests(unittest.TestCase): class IFSuperResolutionPipelineSlowTests(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_if_superresolution(self): def test_if_superresolution(self):
pipe = IFSuperResolutionPipeline.from_pretrained( pipe = IFSuperResolutionPipeline.from_pretrained(
"DeepFloyd/IF-II-L-v1.0", variant="fp16", torch_dtype=torch.float16 "DeepFloyd/IF-II-L-v1.0", variant="fp16", torch_dtype=torch.float16
) )
pipe.unet.set_attn_processor(AttnAddedKVProcessor()) pipe.unet.set_attn_processor(AttnAddedKVProcessor())
pipe.enable_model_cpu_offload() pipe.enable_model_cpu_offload(device=torch_device)
# Super resolution test # Super resolution test
torch.cuda.empty_cache() backend_empty_cache(torch_device)
torch.cuda.reset_max_memory_allocated() backend_reset_max_memory_allocated(torch_device)
torch.cuda.reset_peak_memory_stats() backend_reset_peak_memory_stats(torch_device)
image = floats_tensor((1, 3, 64, 64), rng=random.Random(0)).to(torch_device) image = floats_tensor((1, 3, 64, 64), rng=random.Random(0)).to(torch_device)
generator = torch.Generator(device="cpu").manual_seed(0) generator = torch.Generator(device="cpu").manual_seed(0)
...@@ -141,7 +145,7 @@ class IFSuperResolutionPipelineSlowTests(unittest.TestCase): ...@@ -141,7 +145,7 @@ class IFSuperResolutionPipelineSlowTests(unittest.TestCase):
assert image.shape == (256, 256, 3) assert image.shape == (256, 256, 3)
mem_bytes = torch.cuda.max_memory_allocated() mem_bytes = backend_max_memory_allocated(torch_device)
assert mem_bytes < 12 * 10**9 assert mem_bytes < 12 * 10**9
expected_image = load_numpy( expected_image = load_numpy(
......
...@@ -30,7 +30,7 @@ from diffusers import ( ...@@ -30,7 +30,7 @@ from diffusers import (
from diffusers.utils.testing_utils import ( from diffusers.utils.testing_utils import (
enable_full_determinism, enable_full_determinism,
numpy_cosine_similarity_distance, numpy_cosine_similarity_distance,
require_torch_gpu, require_torch_accelerator,
slow, slow,
torch_device, torch_device,
) )
...@@ -299,7 +299,7 @@ class HunyuanDiTPipelineFastTests(PipelineTesterMixin, unittest.TestCase): ...@@ -299,7 +299,7 @@ class HunyuanDiTPipelineFastTests(PipelineTesterMixin, unittest.TestCase):
@slow @slow
@require_torch_gpu @require_torch_accelerator
class HunyuanDiTPipelineIntegrationTests(unittest.TestCase): class HunyuanDiTPipelineIntegrationTests(unittest.TestCase):
prompt = "一个宇航员在骑马" prompt = "一个宇航员在骑马"
...@@ -319,7 +319,7 @@ class HunyuanDiTPipelineIntegrationTests(unittest.TestCase): ...@@ -319,7 +319,7 @@ class HunyuanDiTPipelineIntegrationTests(unittest.TestCase):
pipe = HunyuanDiTPipeline.from_pretrained( pipe = HunyuanDiTPipeline.from_pretrained(
"XCLiu/HunyuanDiT-0523", revision="refs/pr/2", torch_dtype=torch.float16 "XCLiu/HunyuanDiT-0523", revision="refs/pr/2", torch_dtype=torch.float16
) )
pipe.enable_model_cpu_offload() pipe.enable_model_cpu_offload(device=torch_device)
prompt = self.prompt prompt = self.prompt
image = pipe( image = pipe(
......
...@@ -36,10 +36,11 @@ from diffusers import ( ...@@ -36,10 +36,11 @@ from diffusers import (
from diffusers.models.unets import I2VGenXLUNet from diffusers.models.unets import I2VGenXLUNet
from diffusers.utils import is_xformers_available, load_image from diffusers.utils import is_xformers_available, load_image
from diffusers.utils.testing_utils import ( from diffusers.utils.testing_utils import (
backend_empty_cache,
enable_full_determinism, enable_full_determinism,
floats_tensor, floats_tensor,
numpy_cosine_similarity_distance, numpy_cosine_similarity_distance,
require_torch_gpu, require_torch_accelerator,
skip_mps, skip_mps,
slow, slow,
torch_device, torch_device,
...@@ -228,23 +229,23 @@ class I2VGenXLPipelineFastTests(SDFunctionTesterMixin, PipelineTesterMixin, unit ...@@ -228,23 +229,23 @@ class I2VGenXLPipelineFastTests(SDFunctionTesterMixin, PipelineTesterMixin, unit
@slow @slow
@require_torch_gpu @require_torch_accelerator
class I2VGenXLPipelineSlowTests(unittest.TestCase): class I2VGenXLPipelineSlowTests(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_i2vgen_xl(self): def test_i2vgen_xl(self):
pipe = I2VGenXLPipeline.from_pretrained("ali-vilab/i2vgen-xl", torch_dtype=torch.float16, variant="fp16") pipe = I2VGenXLPipeline.from_pretrained("ali-vilab/i2vgen-xl", torch_dtype=torch.float16, variant="fp16")
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"
......
...@@ -66,6 +66,7 @@ from diffusers.utils import ( ...@@ -66,6 +66,7 @@ from diffusers.utils import (
) )
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,
get_python_version, get_python_version,
...@@ -78,7 +79,7 @@ from diffusers.utils.testing_utils import ( ...@@ -78,7 +79,7 @@ from diffusers.utils.testing_utils import (
require_hf_hub_version_greater, require_hf_hub_version_greater,
require_onnxruntime, require_onnxruntime,
require_torch_2, require_torch_2,
require_torch_gpu, require_torch_accelerator,
require_transformers_version_greater, require_transformers_version_greater,
run_test_in_subprocess, run_test_in_subprocess,
slow, slow,
...@@ -1150,7 +1151,7 @@ class CustomPipelineTests(unittest.TestCase): ...@@ -1150,7 +1151,7 @@ class CustomPipelineTests(unittest.TestCase):
assert conf_1 == conf_2 assert conf_1 == conf_2
@slow @slow
@require_torch_gpu @require_torch_accelerator
def test_download_from_git(self): def test_download_from_git(self):
# Because adaptive_avg_pool2d_backward_cuda # Because adaptive_avg_pool2d_backward_cuda
# does not have a deterministic implementation. # does not have a deterministic implementation.
...@@ -1364,7 +1365,7 @@ class PipelineFastTests(unittest.TestCase): ...@@ -1364,7 +1365,7 @@ class PipelineFastTests(unittest.TestCase):
assert image_img2img.shape == (1, 32, 32, 3) assert image_img2img.shape == (1, 32, 32, 3)
assert image_text2img.shape == (1, 64, 64, 3) assert image_text2img.shape == (1, 64, 64, 3)
@require_torch_gpu @require_torch_accelerator
def test_pipe_false_offload_warn(self): def test_pipe_false_offload_warn(self):
unet = self.dummy_cond_unet() unet = self.dummy_cond_unet()
scheduler = PNDMScheduler(skip_prk_steps=True) scheduler = PNDMScheduler(skip_prk_steps=True)
...@@ -1898,19 +1899,19 @@ class PipelineFastTests(unittest.TestCase): ...@@ -1898,19 +1899,19 @@ class PipelineFastTests(unittest.TestCase):
@slow @slow
@require_torch_gpu @require_torch_accelerator
class PipelineSlowTests(unittest.TestCase): class PipelineSlowTests(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_smart_download(self): def test_smart_download(self):
model_id = "hf-internal-testing/unet-pipeline-dummy" model_id = "hf-internal-testing/unet-pipeline-dummy"
...@@ -2102,7 +2103,7 @@ class PipelineSlowTests(unittest.TestCase): ...@@ -2102,7 +2103,7 @@ class PipelineSlowTests(unittest.TestCase):
pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4") pipe = StableDiffusionPipeline.from_pretrained("CompVis/stable-diffusion-v1-4")
pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config) pipe.scheduler = UniPCMultistepScheduler.from_config(pipe.scheduler.config)
pipe.enable_model_cpu_offload() pipe.enable_model_cpu_offload(device=torch_device)
pipe.enable_attention_slicing() pipe.enable_attention_slicing()
compel = Compel(tokenizer=pipe.tokenizer, text_encoder=pipe.text_encoder) compel = Compel(tokenizer=pipe.tokenizer, text_encoder=pipe.text_encoder)
...@@ -2129,19 +2130,19 @@ class PipelineSlowTests(unittest.TestCase): ...@@ -2129,19 +2130,19 @@ class PipelineSlowTests(unittest.TestCase):
@nightly @nightly
@require_torch_gpu @require_torch_accelerator
class PipelineNightlyTests(unittest.TestCase): class PipelineNightlyTests(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_ddpm_ddim_equality_batched(self): def test_ddpm_ddim_equality_batched(self):
seed = 0 seed = 0
......
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