def _execution_device(self):
        r"""
        Returns the device on which the pipeline's models will be executed. After calling
        [`~DiffusionPipeline.enable_sequential_cpu_offload`] the execution device can only be inferred from
        Accelerate's module hooks.
        """
        from ..hooks.group_offloading import _get_group_onload_device

        # When apply group offloading at the leaf_level, we're in the same situation as accelerate's sequential
        # offloading. We need to return the onload device of the group offloading hooks so that the intermediates
        # required for computation (latents, prompt embeddings, etc.) can be created on the correct device.
        for name, model in self.components.items():
            if not isinstance(model, torch.nn.Module):
                continue
            try:
                return _get_group_onload_device(model)
            except ValueError:
                pass

        for name, model in self.components.items():
            if not isinstance(model, torch.nn.Module) or name in self._exclude_from_cpu_offload:
                continue

            if not hasattr(model, "_hf_hook"):
                return self.device
            for module in model.modules():
                if (
                    hasattr(module, "_hf_hook")
                    and hasattr(module._hf_hook, "execution_device")
                    and module._hf_hook.execution_device is not None
                ):
                    return torch.device(module._hf_hook.execution_device)
        return self.device

        Returns the device on which the pipeline's models will be executed. After calling
        [`~DiffusionPipeline.enable_sequential_cpu_offload`] the execution device can only be inferred from
        Accelerate's module hooks.
        
src/diffusers/pipelines/pipeline_utils.py