From 2ec9dab595d43febeefbeb9f76981c3fdb34ab7d Mon Sep 17 00:00:00 2001 From: Martin Kristiansen Date: Wed, 19 Jul 2023 11:16:00 -0400 Subject: [PATCH 1/3] Changing ImageToLatentsInvocation node to default to detected precision instead of fp16 --- invokeai/app/invocations/latent.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index 743a648785..ed20704e41 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -22,7 +22,7 @@ from ...backend.stable_diffusion.diffusers_pipeline import ( from ...backend.stable_diffusion.diffusion.shared_invokeai_diffusion import \ PostprocessingSettings from ...backend.stable_diffusion.schedulers import SCHEDULER_MAP -from ...backend.util.devices import choose_torch_device, torch_dtype +from ...backend.util.devices import choose_torch_device, torch_dtype, choose_precision from ..models.image import ImageCategory, ImageField, ResourceOrigin from .baseinvocation import (BaseInvocation, BaseInvocationOutput, InvocationConfig, InvocationContext) @@ -492,7 +492,7 @@ class LatentsToImageInvocation(BaseInvocation): tiled: bool = Field( default=False, description="Decode latents by overlaping tiles(less memory consumption)") - fp32: bool = Field(False, description="Decode in full precision") + fp32: bool = Field(default=choose_precision(choose_torch_device())=='float32', description="Decode in full precision") metadata: Optional[CoreMetadata] = Field(default=None, description="Optional core metadata to be written to the image") # Schema customisation From fface339ae291fb1c1ca235225a977a986e31169 Mon Sep 17 00:00:00 2001 From: Martin Kristiansen Date: Wed, 19 Jul 2023 11:38:13 -0400 Subject: [PATCH 2/3] Same fix for ImageToLatentsInvocation --- invokeai/app/invocations/latent.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index ed20704e41..2529f23cd5 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -686,7 +686,7 @@ class ImageToLatentsInvocation(BaseInvocation): tiled: bool = Field( default=False, description="Encode latents by overlaping tiles(less memory consumption)") - fp32: bool = Field(False, description="Decode in full precision") + fp32: bool = Field(default=choose_precision(choose_torch_device())=='float32', description="Decode in full precision") # Schema customisation From 07c48b2fd15b2ef822cd7985100707e6892c7385 Mon Sep 17 00:00:00 2001 From: Martin Kristiansen Date: Wed, 19 Jul 2023 11:55:37 -0400 Subject: [PATCH 3/3] Moving detected precision to DEFAULT_PRECISION constant --- invokeai/app/invocations/latent.py | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/invokeai/app/invocations/latent.py b/invokeai/app/invocations/latent.py index 2529f23cd5..cd15fe156b 100644 --- a/invokeai/app/invocations/latent.py +++ b/invokeai/app/invocations/latent.py @@ -38,6 +38,10 @@ from diffusers.models.attention_processor import ( XFormersAttnProcessor, ) + +DEFAULT_PRECISION = choose_precision(choose_torch_device()) + + class LatentsField(BaseModel): """A latents field used for passing latents between invocations""" @@ -492,7 +496,7 @@ class LatentsToImageInvocation(BaseInvocation): tiled: bool = Field( default=False, description="Decode latents by overlaping tiles(less memory consumption)") - fp32: bool = Field(default=choose_precision(choose_torch_device())=='float32', description="Decode in full precision") + fp32: bool = Field(DEFAULT_PRECISION=='float32', description="Decode in full precision") metadata: Optional[CoreMetadata] = Field(default=None, description="Optional core metadata to be written to the image") # Schema customisation @@ -686,7 +690,7 @@ class ImageToLatentsInvocation(BaseInvocation): tiled: bool = Field( default=False, description="Encode latents by overlaping tiles(less memory consumption)") - fp32: bool = Field(default=choose_precision(choose_torch_device())=='float32', description="Decode in full precision") + fp32: bool = Field(DEFAULT_PRECISION=='float32', description="Decode in full precision") # Schema customisation