[diffusion] feat: add --strict-ports option for predictable port assignment (#21320)
Co-authored-by: 阳虎 <yanghu@yanghudeMacBook-Pro.local>
This commit is contained in:
co-authored by
阳虎
parent
448b528720
commit
f83b1b73a8
@@ -349,7 +349,10 @@ def _get_config_info(
|
||||
model_id = matched_model_names[0]
|
||||
return _CONFIG_REGISTRY.get(model_id)
|
||||
else:
|
||||
raise RuntimeError(f"No model info found for model path: {model_path}")
|
||||
raise RuntimeError(
|
||||
f"No model info found for model path: {model_path}. "
|
||||
f"Please check the model path or specify the model_id explicitly."
|
||||
)
|
||||
|
||||
|
||||
# --- Part 3: Main Resolver ---
|
||||
|
||||
@@ -202,6 +202,9 @@ class ServerArgs:
|
||||
|
||||
scheduler_port: int = 5555
|
||||
|
||||
# Strict port mode: fail if requested port is unavailable instead of auto-selecting
|
||||
strict_ports: bool = False
|
||||
|
||||
output_path: str | None = "outputs/"
|
||||
input_save_path: str | None = "inputs/uploads"
|
||||
|
||||
@@ -384,17 +387,35 @@ class ServerArgs:
|
||||
)
|
||||
|
||||
def _adjust_network_ports(self):
|
||||
self.port = self.settle_port(self.port)
|
||||
initial_scheduler_port = self.scheduler_port + (
|
||||
random.randint(0, 100) if self.scheduler_port == 5555 else 0
|
||||
)
|
||||
self.scheduler_port = self.settle_port(initial_scheduler_port)
|
||||
initial_master_port = (
|
||||
self.master_port
|
||||
if self.master_port is not None
|
||||
else (30005 + random.randint(0, 100))
|
||||
)
|
||||
self.master_port = self.settle_port(initial_master_port, 37)
|
||||
if self.strict_ports:
|
||||
# Strict mode: fail if port is unavailable
|
||||
if not is_port_available(self.port):
|
||||
raise RuntimeError(
|
||||
f"Port {self.port} is unavailable and --strict-ports is enabled. "
|
||||
f"Either use a different port or remove --strict-ports to allow auto-selection."
|
||||
)
|
||||
if not is_port_available(self.scheduler_port):
|
||||
raise RuntimeError(
|
||||
f"Scheduler port {self.scheduler_port} is unavailable and --strict-ports is enabled. "
|
||||
f"Either use a different port or remove --strict-ports to allow auto-selection."
|
||||
)
|
||||
if self.master_port is not None and not is_port_available(self.master_port):
|
||||
raise RuntimeError(
|
||||
f"Master port {self.master_port} is unavailable and --strict-ports is enabled. "
|
||||
f"Either use a different port or remove --strict-ports to allow auto-selection."
|
||||
)
|
||||
else:
|
||||
self.port = self.settle_port(self.port)
|
||||
initial_scheduler_port = self.scheduler_port + (
|
||||
random.randint(0, 100) if self.scheduler_port == 5555 else 0
|
||||
)
|
||||
self.scheduler_port = self.settle_port(initial_scheduler_port)
|
||||
initial_master_port = (
|
||||
self.master_port
|
||||
if self.master_port is not None
|
||||
else (30005 + random.randint(0, 100))
|
||||
)
|
||||
self.master_port = self.settle_port(initial_master_port, 37)
|
||||
|
||||
def _adjust_parallelism(self):
|
||||
if self.tp_size is None:
|
||||
@@ -778,6 +799,12 @@ class ServerArgs:
|
||||
default=ServerArgs.port,
|
||||
help="Port for the HTTP API server.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--strict-ports",
|
||||
action=StoreBoolean,
|
||||
default=ServerArgs.strict_ports,
|
||||
help="If enabled, fail when requested ports are unavailable instead of auto-selecting.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--webui",
|
||||
action=StoreBoolean,
|
||||
|
||||
Reference in New Issue
Block a user