From 9e69fdf7f308c2d59649edf753fe5f822c12e167 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 04:40:06 +0000 Subject: [PATCH 01/13] Fix FLUX scheduler --- xinference/model/image/stable_diffusion/core.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 3330fd9395..20d146db66 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -416,8 +416,12 @@ def _get_scheduler(model: Any, sampler_name: str): @contextlib.contextmanager def _reset_when_done(model: Any, sampler_name: str): assert model is not None + name_or_path: Optional[str] = getattr(model, "_name_or_path", None) + is_flux_sampler = "flux" in name_or_path.casefold() if name_or_path else False scheduler = DiffusionModel._get_scheduler(model, sampler_name) - if scheduler: + # When the model is not flux + should_swap_scheduler = scheduler is not None and not is_flux_sampler + if should_swap_scheduler: default_scheduler = model.scheduler model.scheduler = scheduler try: From 20f506603fb0e3e992c078247fb234c72a3189d7 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 06:35:26 +0000 Subject: [PATCH 02/13] fast --- xinference/model/image/stable_diffusion/core.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 20d146db66..4ba5e7663f 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -412,12 +412,13 @@ def _get_scheduler(model: Any, sampler_name: str): else: raise ValueError(f"Unknown sampler: {sampler_name}") - @staticmethod @contextlib.contextmanager - def _reset_when_done(model: Any, sampler_name: str): + def _reset_when_done(self, model: Any, sampler_name: str): assert model is not None - name_or_path: Optional[str] = getattr(model, "_name_or_path", None) - is_flux_sampler = "flux" in name_or_path.casefold() if name_or_path else False + if self._model_spec is None: + is_flux_sampler = False + else: + is_flux_sampler = "FLUX" in self._model_spec.model_name scheduler = DiffusionModel._get_scheduler(model, sampler_name) # When the model is not flux should_swap_scheduler = scheduler is not None and not is_flux_sampler From a1394b739971a18ead29aec36e32974cb37716d7 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 07:01:04 +0000 Subject: [PATCH 03/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 4ba5e7663f..f5d28b6c40 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -416,13 +416,13 @@ def _get_scheduler(model: Any, sampler_name: str): def _reset_when_done(self, model: Any, sampler_name: str): assert model is not None if self._model_spec is None: - is_flux_sampler = False + is_flux = False else: - is_flux_sampler = "FLUX" in self._model_spec.model_name + is_flux = "FLUX" in self._model_spec.model_name scheduler = DiffusionModel._get_scheduler(model, sampler_name) # When the model is not flux - should_swap_scheduler = scheduler is not None and not is_flux_sampler - if should_swap_scheduler: + set_scheduler = scheduler is not None and not is_flux + if set_scheduler: default_scheduler = model.scheduler model.scheduler = scheduler try: From e5807c09b3e66fee5a32189feeb8bc60235f467e Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 07:47:55 +0000 Subject: [PATCH 04/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index f5d28b6c40..97b2bc9a79 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -412,17 +412,18 @@ def _get_scheduler(model: Any, sampler_name: str): else: raise ValueError(f"Unknown sampler: {sampler_name}") + def _set_scheduler(self, model: Any, sampler_name: str) -> bool: + """Determine whether it is necessary to set up a scheduler""" + if self._model_spec is None: + return False + is_flux = "FLUX" in self._model_spec.model_name + scheduler = DiffusionModel._get_scheduler(model, sampler_name) + return scheduler is not None and not is_flux + @contextlib.contextmanager def _reset_when_done(self, model: Any, sampler_name: str): - assert model is not None - if self._model_spec is None: - is_flux = False - else: - is_flux = "FLUX" in self._model_spec.model_name scheduler = DiffusionModel._get_scheduler(model, sampler_name) - # When the model is not flux - set_scheduler = scheduler is not None and not is_flux - if set_scheduler: + if self._set_scheduler(model, sampler_name): default_scheduler = model.scheduler model.scheduler = scheduler try: From 9556af747a2ec83c791a32a2417f653bc8a5154a Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 07:54:39 +0000 Subject: [PATCH 05/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 97b2bc9a79..32f8ea3a3c 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -412,18 +412,18 @@ def _get_scheduler(model: Any, sampler_name: str): else: raise ValueError(f"Unknown sampler: {sampler_name}") - def _set_scheduler(self, model: Any, sampler_name: str) -> bool: + def _set_scheduler(self, model: Any, sampler_name: str): """Determine whether it is necessary to set up a scheduler""" if self._model_spec is None: return False is_flux = "FLUX" in self._model_spec.model_name scheduler = DiffusionModel._get_scheduler(model, sampler_name) - return scheduler is not None and not is_flux + return scheduler is not None and not is_flux, scheduler @contextlib.contextmanager def _reset_when_done(self, model: Any, sampler_name: str): - scheduler = DiffusionModel._get_scheduler(model, sampler_name) - if self._set_scheduler(model, sampler_name): + set_scheduler, scheduler = self._set_scheduler(model, sampler_name) + if set_scheduler: default_scheduler = model.scheduler model.scheduler = scheduler try: From 5183e8fc53b64ccef4ae4c27d7686fb9d384071f Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 08:02:25 +0000 Subject: [PATCH 06/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 32f8ea3a3c..a565cb79f6 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -412,18 +412,21 @@ def _get_scheduler(model: Any, sampler_name: str): else: raise ValueError(f"Unknown sampler: {sampler_name}") - def _set_scheduler(self, model: Any, sampler_name: str): + def _set_scheduler(self, model: Any, sampler_name: str) -> bool: """Determine whether it is necessary to set up a scheduler""" if self._model_spec is None: return False is_flux = "FLUX" in self._model_spec.model_name scheduler = DiffusionModel._get_scheduler(model, sampler_name) - return scheduler is not None and not is_flux, scheduler + if scheduler is None or is_flux: + warnings.warn("No scheduler found or FLUX model, skipping scheduler setup") + return False + return scheduler is not None and not is_flux @contextlib.contextmanager def _reset_when_done(self, model: Any, sampler_name: str): - set_scheduler, scheduler = self._set_scheduler(model, sampler_name) - if set_scheduler: + scheduler = DiffusionModel._get_scheduler(model, sampler_name) + if self._set_scheduler(model, sampler_name): default_scheduler = model.scheduler model.scheduler = scheduler try: From cb8d34a524d0fa18503c5bcdde2b98a5da2ccb89 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 08:09:33 +0000 Subject: [PATCH 07/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index a565cb79f6..8ef2700da6 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -412,21 +412,20 @@ def _get_scheduler(model: Any, sampler_name: str): else: raise ValueError(f"Unknown sampler: {sampler_name}") - def _set_scheduler(self, model: Any, sampler_name: str) -> bool: + def _set_scheduler(self, model: Any, sampler_name: str, scheduler: Any) -> bool: """Determine whether it is necessary to set up a scheduler""" if self._model_spec is None: return False is_flux = "FLUX" in self._model_spec.model_name - scheduler = DiffusionModel._get_scheduler(model, sampler_name) if scheduler is None or is_flux: warnings.warn("No scheduler found or FLUX model, skipping scheduler setup") return False - return scheduler is not None and not is_flux + return True @contextlib.contextmanager def _reset_when_done(self, model: Any, sampler_name: str): scheduler = DiffusionModel._get_scheduler(model, sampler_name) - if self._set_scheduler(model, sampler_name): + if self._set_scheduler(model, sampler_name, scheduler): default_scheduler = model.scheduler model.scheduler = scheduler try: From 9ed74f3637ca2b12493ff1d69fe4837b2cb5e5fc Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 08:15:34 +0000 Subject: [PATCH 08/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 8ef2700da6..88566ded08 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -412,7 +412,7 @@ def _get_scheduler(model: Any, sampler_name: str): else: raise ValueError(f"Unknown sampler: {sampler_name}") - def _set_scheduler(self, model: Any, sampler_name: str, scheduler: Any) -> bool: + def _set_scheduler(self, scheduler: Any) -> bool: """Determine whether it is necessary to set up a scheduler""" if self._model_spec is None: return False @@ -425,7 +425,7 @@ def _set_scheduler(self, model: Any, sampler_name: str, scheduler: Any) -> bool: @contextlib.contextmanager def _reset_when_done(self, model: Any, sampler_name: str): scheduler = DiffusionModel._get_scheduler(model, sampler_name) - if self._set_scheduler(model, sampler_name, scheduler): + if self._set_scheduler(scheduler): default_scheduler = model.scheduler model.scheduler = scheduler try: From 2487c22cd50679ce9032e3778f0e3614610e8fb7 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 08:18:36 +0000 Subject: [PATCH 09/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 88566ded08..196966147a 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -412,7 +412,7 @@ def _get_scheduler(model: Any, sampler_name: str): else: raise ValueError(f"Unknown sampler: {sampler_name}") - def _set_scheduler(self, scheduler: Any) -> bool: + def _need_set_scheduler(self, scheduler: Any) -> bool: """Determine whether it is necessary to set up a scheduler""" if self._model_spec is None: return False @@ -425,7 +425,7 @@ def _set_scheduler(self, scheduler: Any) -> bool: @contextlib.contextmanager def _reset_when_done(self, model: Any, sampler_name: str): scheduler = DiffusionModel._get_scheduler(model, sampler_name) - if self._set_scheduler(scheduler): + if self._need_set_scheduler(scheduler): default_scheduler = model.scheduler model.scheduler = scheduler try: From c2b49caef315c6e915ca641a7a4d1ff205cc5171 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 10:00:25 +0000 Subject: [PATCH 10/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 196966147a..94712fefb2 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -22,7 +22,6 @@ import os import re import sys -import warnings from glob import glob from typing import TYPE_CHECKING, Any, Dict, List, Optional, Tuple, Union @@ -418,7 +417,7 @@ def _need_set_scheduler(self, scheduler: Any) -> bool: return False is_flux = "FLUX" in self._model_spec.model_name if scheduler is None or is_flux: - warnings.warn("No scheduler found or FLUX model, skipping scheduler setup") + logger.warning("No scheduler found or FLUX model, skipping scheduler setup") return False return True @@ -525,7 +524,7 @@ def _filter_kwargs(cls, model, kwargs: dict): for key in list(kwargs): allow_key = model_accept_param(key, model) if not allow_key: - warnings.warn(f"{type(model)} cannot accept `{key}`, will ignore it") + logger.warning(f"{type(model)} cannot accept `{key}`, will ignore it") kwargs.pop(key) def text_to_image( From 6e5272b4bccf2ee5c2a2c29be30c4fc6e55a7199 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 10:03:12 +0000 Subject: [PATCH 11/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 1 + 1 file changed, 1 insertion(+) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 94712fefb2..635b97a321 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -425,6 +425,7 @@ def _need_set_scheduler(self, scheduler: Any) -> bool: def _reset_when_done(self, model: Any, sampler_name: str): scheduler = DiffusionModel._get_scheduler(model, sampler_name) if self._need_set_scheduler(scheduler): + logger.debug("Already used the scheduler") default_scheduler = model.scheduler model.scheduler = scheduler try: From 2725610ca33af84233833f63012a94d408920603 Mon Sep 17 00:00:00 2001 From: Example User Date: Thu, 20 Feb 2025 10:06:59 +0000 Subject: [PATCH 12/13] BUG: fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 635b97a321..366b2a7271 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -425,7 +425,7 @@ def _need_set_scheduler(self, scheduler: Any) -> bool: def _reset_when_done(self, model: Any, sampler_name: str): scheduler = DiffusionModel._get_scheduler(model, sampler_name) if self._need_set_scheduler(scheduler): - logger.debug("Already used the scheduler") + logger.debug("Use scheduler %s", scheduler) default_scheduler = model.scheduler model.scheduler = scheduler try: From 0c64d5063ff062ad6a6404f9ef064647dcc29dfd Mon Sep 17 00:00:00 2001 From: Example User Date: Fri, 21 Feb 2025 03:53:50 +0000 Subject: [PATCH 13/13] fix FLUX when a scheduler is specified which is incompatible --- xinference/model/image/stable_diffusion/core.py | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/xinference/model/image/stable_diffusion/core.py b/xinference/model/image/stable_diffusion/core.py index 366b2a7271..c2f1dca787 100644 --- a/xinference/model/image/stable_diffusion/core.py +++ b/xinference/model/image/stable_diffusion/core.py @@ -415,9 +415,10 @@ def _need_set_scheduler(self, scheduler: Any) -> bool: """Determine whether it is necessary to set up a scheduler""" if self._model_spec is None: return False - is_flux = "FLUX" in self._model_spec.model_name - if scheduler is None or is_flux: - logger.warning("No scheduler found or FLUX model, skipping scheduler setup") + if scheduler is None: + return False + if "FLUX" in self._model_spec.model_name: + logger.warning("FLUX model, skipping scheduler setup") return False return True