@@ -536,8 +536,11 @@ async def run_server(args, **uvicorn_kwargs) -> None:
536
536
raise KeyError (f"invalid tool call parser: { args .tool_call_parser } "
537
537
f"(chose from {{ { ',' .join (valide_tool_parses )} }})" )
538
538
539
- temp_socket = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
540
- temp_socket .bind (("" , args .port ))
539
+ # workaround to make sure that we bind the port before the engine is set up.
540
+ # This avoids race conditions with ray.
541
+ # see https://github.com/vllm-project/vllm/issues/8204
542
+ sock = socket .socket (socket .AF_INET , socket .SOCK_STREAM )
543
+ sock .bind (("" , args .port ))
541
544
542
545
def signal_handler (* _ ) -> None :
543
546
# Interrupt server on sigterm while initializing
@@ -551,8 +554,6 @@ def signal_handler(*_) -> None:
551
554
model_config = await engine_client .get_model_config ()
552
555
init_app_state (engine_client , model_config , app .state , args )
553
556
554
- temp_socket .close ()
555
-
556
557
shutdown_task = await serve_http (
557
558
app ,
558
559
host = args .host ,
@@ -563,6 +564,7 @@ def signal_handler(*_) -> None:
563
564
ssl_certfile = args .ssl_certfile ,
564
565
ssl_ca_certs = args .ssl_ca_certs ,
565
566
ssl_cert_reqs = args .ssl_cert_reqs ,
567
+ fd = sock .fileno (),
566
568
** uvicorn_kwargs ,
567
569
)
568
570
0 commit comments