mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
feat(config): dynamic ram cache size
Use the util function to calculate ram cache size on startup. This way, the `ram` setting will always be optimized for a system, even if they add or remove RAM. In other words, the default value is now dynamic.
This commit is contained in:
parent
fabef8b45b
commit
6e882d3fd6
@ -10,6 +10,7 @@ from functools import lru_cache
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Any, Literal, Optional
|
from typing import Any, Literal, Optional
|
||||||
|
|
||||||
|
import psutil
|
||||||
import yaml
|
import yaml
|
||||||
from pydantic import BaseModel, Field, PrivateAttr, field_validator
|
from pydantic import BaseModel, Field, PrivateAttr, field_validator
|
||||||
from pydantic_settings import BaseSettings, SettingsConfigDict
|
from pydantic_settings import BaseSettings, SettingsConfigDict
|
||||||
@ -32,6 +33,24 @@ LOG_LEVEL = Literal["debug", "info", "warning", "error", "critical"]
|
|||||||
CONFIG_SCHEMA_VERSION = 4
|
CONFIG_SCHEMA_VERSION = 4
|
||||||
|
|
||||||
|
|
||||||
|
def get_default_ram_cache_size() -> float:
|
||||||
|
"""Run a heuristic for the default RAM cache based on installed RAM."""
|
||||||
|
|
||||||
|
# On some machines, psutil.virtual_memory().total gives a value that is slightly less than the actual RAM, so the
|
||||||
|
# limits are set slightly lower than than what we expect the actual RAM to be.
|
||||||
|
|
||||||
|
GB = 1024**3
|
||||||
|
max_ram = psutil.virtual_memory().total / GB
|
||||||
|
|
||||||
|
if max_ram >= 60:
|
||||||
|
return 15.0
|
||||||
|
if max_ram >= 30:
|
||||||
|
return 7.5
|
||||||
|
if max_ram >= 14:
|
||||||
|
return 4.0
|
||||||
|
return 2.1 # 2.1 is just large enough for sd 1.5 ;-)
|
||||||
|
|
||||||
|
|
||||||
class URLRegexTokenPair(BaseModel):
|
class URLRegexTokenPair(BaseModel):
|
||||||
url_regex: str = Field(description="Regular expression to match against the URL")
|
url_regex: str = Field(description="Regular expression to match against the URL")
|
||||||
token: str = Field(description="Token to use when the URL matches the regex")
|
token: str = Field(description="Token to use when the URL matches the regex")
|
||||||
@ -147,7 +166,7 @@ class InvokeAIAppConfig(BaseSettings):
|
|||||||
profiles_dir: Path = Field(default=Path("profiles"), description="Path to profiles output directory.")
|
profiles_dir: Path = Field(default=Path("profiles"), description="Path to profiles output directory.")
|
||||||
|
|
||||||
# CACHE
|
# CACHE
|
||||||
ram: float = Field(default=DEFAULT_RAM_CACHE, gt=0, description="Maximum memory amount used by memory model cache for rapid switching (GB).")
|
ram: float = Field(default_factory=get_default_ram_cache_size, gt=0, description="Maximum memory amount used by memory model cache for rapid switching (GB).")
|
||||||
vram: float = Field(default=DEFAULT_VRAM_CACHE, ge=0, description="Amount of VRAM reserved for model storage (GB).")
|
vram: float = Field(default=DEFAULT_VRAM_CACHE, ge=0, description="Amount of VRAM reserved for model storage (GB).")
|
||||||
convert_cache: float = Field(default=DEFAULT_CONVERT_CACHE, ge=0, description="Maximum size of on-disk converted models cache (GB).")
|
convert_cache: float = Field(default=DEFAULT_CONVERT_CACHE, ge=0, description="Maximum size of on-disk converted models cache (GB).")
|
||||||
lazy_offload: bool = Field(default=True, description="Keep models in VRAM until their space is needed.")
|
lazy_offload: bool = Field(default=True, description="Keep models in VRAM until their space is needed.")
|
||||||
|
Loading…
Reference in New Issue
Block a user