Wire node memory and shard slot capabilities

This commit is contained in:
Dobromir Popov
2026-06-30 21:17:07 +02:00
parent 61074a8fe8
commit f1e4ed6a32
5 changed files with 53 additions and 4 deletions

View File

@@ -30,6 +30,7 @@ def _run_node(cfg: dict) -> None:
advertise_host=cfg.get("advertise_host"),
route_timeout=float(cfg.get("route_timeout", 30.0)),
vram_mb_override=cfg.get("vram_mb_override"),
max_loaded_shards=int(cfg.get("max_loaded_shards", 1)),
debug=bool(cfg.get("debug", False)),
)
except Exception as exc:
@@ -110,6 +111,8 @@ def _cmd_default(args) -> int:
overrides["route_timeout"] = args.route_timeout
if getattr(args, "memory", None) is not None:
overrides["vram_mb_override"] = args.memory
if getattr(args, "max_shards", None) is not None:
overrides["max_loaded_shards"] = args.max_shards
if args.debug:
overrides["debug"] = True
@@ -205,6 +208,7 @@ def _cmd_start(args) -> int:
advertise_host=getattr(args, "advertise_host", None),
route_timeout=getattr(args, "route_timeout", 30.0),
vram_mb_override=getattr(args, "memory", None),
max_loaded_shards=getattr(args, "max_shards", 1),
debug=getattr(args, "debug", False),
)
except Exception as exc:
@@ -250,6 +254,8 @@ def main() -> None:
help="Seconds to wait for tracker route lookup (default 30)")
parser.add_argument("--memory", type=int, metavar="MB", default=None,
help="Override autodetected VRAM/RAM budget in MB used for shard assignment")
parser.add_argument("--max-shards", type=int, metavar="N", default=None,
help="Maximum shard slots this node advertises to the tracker (default 1)")
parser.add_argument("--debug", action="store_true", help="Enable verbose node debug logging")
parser.add_argument("--no-tui", action="store_true", help="Plain-text output (no rich dashboard)")
parser.add_argument("--compact", action="store_true", help="Single-line status output")
@@ -283,6 +289,8 @@ def main() -> None:
help="Seconds to wait for tracker route lookup (default 30)")
start_cmd.add_argument("--memory", type=int, default=None, metavar="MB",
help="Override autodetected VRAM/RAM budget in MB used for shard assignment")
start_cmd.add_argument("--max-shards", type=int, default=1, metavar="N",
help="Maximum shard slots this node advertises to the tracker (default 1)")
start_cmd.add_argument("--debug", action="store_true", help="Enable verbose node debug logging")
args = parser.parse_args()

View File

@@ -265,6 +265,7 @@ def run_startup(
contracts: Any | None = None,
route_timeout: float = 30.0,
vram_mb_override: int | None = None,
max_loaded_shards: int = 1,
debug: bool = False,
) -> StubNodeServer | TorchNodeServer:
"""Execute the full startup sequence and return a running node server.
@@ -282,6 +283,8 @@ def run_startup(
tracker_url = tracker_url.rstrip("/")
relay_url = _discover_relay_url(tracker_url)
if max_loaded_shards < 1:
raise ValueError("--max-shards must be at least 1")
# 1. Hardware detection
if advertise_host is None and host == "0.0.0.0":
@@ -315,6 +318,11 @@ def run_startup(
print(" WARNING: No CUDA GPU detected — running in CPU mode", flush=True)
else:
print(f" GPU: {gpu_name} ({vram_mb} MB VRAM)", flush=True)
registration_capabilities = {
"max_loaded_shards": max_loaded_shards,
}
if vram_mb_override is not None or vram_mb > 0:
registration_capabilities["vram_bytes"] = max(0, int(vram_mb)) * 1024 * 1024
# 2. Wallet
print("Loading wallet...", flush=True)
@@ -404,6 +412,7 @@ def run_startup(
"score": 1.0,
"tracker_mode": (shard_start == 0),
"managed_assignment": not user_pinned_shard,
**registration_capabilities,
**relay_fields,
}
tracker_node_id: str | None = None
@@ -493,6 +502,7 @@ def run_startup(
"score": 1.0,
"tracker_mode": (assigned_shard_start == 0),
"managed_assignment": True,
**registration_capabilities,
**relay_fields,
}
tracker_node_id = None
@@ -593,6 +603,7 @@ def run_startup(
"hardware_profile": hw,
"wallet_address": address,
"score": 1.0,
**registration_capabilities,
**relay_fields,
},
)