Update idle time configuration to improve resource management

- Reduced default values for IDLE_MINUTES from 60 to 30 and IDLE_GRACE_MINUTES from 90 to 45 across configuration files and documentation.
- Updated related documentation to reflect the new default idle time settings, ensuring consistency in user guidance and system behavior.
This commit is contained in:
Leonid Pershin
2026-08-21 08:35:43 +03:00
parent 6871c511c4
commit 9a4b87dc06
9 changed files with 14 additions and 14 deletions
+1 -1
View File
@@ -133,7 +133,7 @@ Killer молчит:
Учётные данные на VM: application credential (или роль без `compute:create`), только delete/shelve. Файл не попадает в Output/Models. Истечение кредов = killer слеп; тогда спасает `gpu-rent status` с ноутбука. Учётные данные на VM: application credential (или роль без `compute:create`), только delete/shelve. Файл не попадает в Output/Models. Истечение кредов = killer слеп; тогда спасает `gpu-rent status` с ноутбука.
Дефолты: `IDLE_MINUTES=60`, `IDLE_GRACE_MINUTES=90`. Дефолты: `IDLE_MINUTES=30`, `IDLE_GRACE_MINUTES=45`.
## Watchdog туннеля (на ноутбуке) ## Watchdog туннеля (на ноутбуке)
+2 -2
View File
@@ -201,8 +201,8 @@ FLAVOR_FALLBACK=true
SCAN_POOLS=ru-6,ru-7 SCAN_POOLS=ru-6,ru-7
DEFAULT_SPOT=true DEFAULT_SPOT=true
KEEP_FLOATING_IP=false KEEP_FLOATING_IP=false
IDLE_MINUTES=60 IDLE_MINUTES=30
IDLE_GRACE_MINUTES=90 IDLE_GRACE_MINUTES=45
# LOCAL_WATCHDOG_GRACE_MINUTES=10 # LOCAL_WATCHDOG_GRACE_MINUTES=10
PULL_OUTPUT=false PULL_OUTPUT=false
NOTIFY_READY=true NOTIFY_READY=true
+1 -1
View File
@@ -87,7 +87,7 @@ ComfyUI в `dlbackend` качается всегда. Речь только о *
8. Первый старт SwarmUI (папки чекпоинтов уже не пустые → установщик не предлагает свой SD; Extensions и Autocompletions уже на месте). 8. Первый старт SwarmUI (папки чекпоинтов уже не пустые → установщик не предлагает свой SD; Extensions и Autocompletions уже на месте).
9. Ждать backend Idle, затем вооружить idle-killer. 9. Ждать backend Idle, затем вооружить idle-killer.
Качание нескольких GB легко длиннее льготы 90 минут. Поэтому killer не живёт, пока не закончился seed. Качание нескольких GB легко длиннее льготы 45 минут. Поэтому killer не живёт, пока не закончился seed.
Позже тот же код: `gpu-rent seed-models` — докачать новые строки манифеста на уже живой диск (идемпотентно). Позже тот же код: `gpu-rent seed-models` — докачать новые строки манифеста на уже живой диск (идемпотентно).
+1 -1
View File
@@ -10,4 +10,4 @@
- App cred с узкими access_rules на Selectel: код fail closed; на spike убедиться, что Keystone принимает rules. - App cred с узкими access_rules на Selectel: код fail closed; на spike убедиться, что Keystone принимает rules.
- Snapshot attached boot после Idle: время; create from snapshot ок. - Snapshot attached boot после Idle: время; create from snapshot ок.
Если 90 мин льготы мало на первый Comfy — подними `IDLE_GRACE_MINUTES`, не отключай killer. Если 45 мин льготы мало на первый Comfy — подними `IDLE_GRACE_MINUTES`, не отключай killer.
+1 -1
View File
@@ -273,7 +273,7 @@ copy models.example.yaml models.yaml
- **GPU** — пока жив compute. - **GPU** — пока жив compute.
- **Data-диск** — тарифицируется **всегда** после создания. - **Data-диск** — тарифицируется **всегда** после создания.
- Preemptible ~**24 ч** → `EXPIRED`; `tunnel` или `up` восстановят. - Preemptible ~**24 ч** → `EXPIRED`; `tunnel` или `up` восстановят.
- Idle-killer: после льготы (~90 мин) + ~60 мин пустой очереди → delete compute. - Idle-killer: после льготы (~45 мин) + ~30 мин пустой очереди → delete compute.
- Цены в OpenStack API нет — смотри панель Selectel. - Цены в OpenStack API нет — смотри панель Selectel.
Дальше: чеклист живого прогона [spike-notes.md](spike-notes.md), справочник команд [cli.md](cli.md). Дальше: чеклист живого прогона [spike-notes.md](spike-notes.md), справочник команд [cli.md](cli.md).
+2 -2
View File
@@ -72,8 +72,8 @@ FLAVOR_FALLBACK=true
SCAN_POOLS=ru-6,ru-7 SCAN_POOLS=ru-6,ru-7
DEFAULT_SPOT=true DEFAULT_SPOT=true
KEEP_FLOATING_IP=false KEEP_FLOATING_IP=false
IDLE_MINUTES=60 IDLE_MINUTES=30
IDLE_GRACE_MINUTES=90 IDLE_GRACE_MINUTES=45
# Optional local safety net (after: gpu-rent watchdog install) # Optional local safety net (after: gpu-rent watchdog install)
# LOCAL_WATCHDOG_GRACE_MINUTES=10 # LOCAL_WATCHDOG_GRACE_MINUTES=10
PULL_OUTPUT=false PULL_OUTPUT=false
+2 -2
View File
@@ -19,8 +19,8 @@
# SWARMUI_LOCAL_PORT=17801 # SWARMUI_LOCAL_PORT=17801
# DATA_VOLUME_SIZE_GB=100 # DATA_VOLUME_SIZE_GB=100
# ENABLE_SWARMUI=true # ENABLE_SWARMUI=true
# IDLE_MINUTES=60 # IDLE_MINUTES=30
# IDLE_GRACE_MINUTES=90 # IDLE_GRACE_MINUTES=45
# NOTIFY_READY=true # NOTIFY_READY=true
# UP_STOP_ON_FAIL=true # при падении up гасить GPU (default); false / --keep-on-fail # UP_STOP_ON_FAIL=true # при падении up гасить GPU (default); false / --keep-on-fail
# Prefer auto /32 (leave unset). Spike/WARP only: # Prefer auto /32 (leave unset). Spike/WARP only:
+2 -2
View File
@@ -255,8 +255,8 @@ def load_config(*, require_auth: bool = True) -> Config:
scan_pools=(os.environ.get("SCAN_POOLS") or "ru-6,ru-7").strip(), scan_pools=(os.environ.get("SCAN_POOLS") or "ru-6,ru-7").strip(),
default_spot=_as_bool(os.environ.get("DEFAULT_SPOT"), True), default_spot=_as_bool(os.environ.get("DEFAULT_SPOT"), True),
keep_floating_ip=_as_bool(os.environ.get("KEEP_FLOATING_IP"), False), keep_floating_ip=_as_bool(os.environ.get("KEEP_FLOATING_IP"), False),
idle_minutes=_as_int(os.environ.get("IDLE_MINUTES"), 60), idle_minutes=_as_int(os.environ.get("IDLE_MINUTES"), 30),
idle_grace_minutes=_as_int(os.environ.get("IDLE_GRACE_MINUTES"), 90), idle_grace_minutes=_as_int(os.environ.get("IDLE_GRACE_MINUTES"), 45),
pull_output=_as_bool(os.environ.get("PULL_OUTPUT"), False), pull_output=_as_bool(os.environ.get("PULL_OUTPUT"), False),
notify_ready=_as_bool(os.environ.get("NOTIFY_READY"), True), notify_ready=_as_bool(os.environ.get("NOTIFY_READY"), True),
# Default on: failed up must not leave a billing GPU running. # Default on: failed up must not leave a billing GPU running.
+2 -2
View File
@@ -242,7 +242,7 @@ def main() -> int:
now = time.time() now = time.time()
grace_from = float(creds.get("grace_from") or 0) grace_from = float(creds.get("grace_from") or 0)
grace_minutes = float(creds.get("grace_minutes") or 90) grace_minutes = float(creds.get("grace_minutes") or 45)
if now < grace_from + grace_minutes * 60: if now < grace_from + grace_minutes * 60:
left = int(grace_from + grace_minutes * 60 - now) left = int(grace_from + grace_minutes * 60 - now)
log(f"grace {left}s left") log(f"grace {left}s left")
@@ -269,7 +269,7 @@ def main() -> int:
log(f"busy: {llm_detail}") log(f"busy: {llm_detail}")
return 0 return 0
idle_minutes = float(creds.get("idle_minutes") or 60) idle_minutes = float(creds.get("idle_minutes") or 30)
since = read_ts(IDLE_SINCE) since = read_ts(IDLE_SINCE)
if since is None: if since is None:
write_ts(IDLE_SINCE, now) write_ts(IDLE_SINCE, now)