You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
PR #52 (closes Issue #17 item 2) added a dp_size guard around the reserved_socket pre-binding in python/sglang/srt/entrypoints/http_server.py (around lines 2416-2479). When dp_size == 1, the server pre-binds reserved_socket and passes reserved_socket.fileno() to uvicorn. When dp_size > 1, the pre-bind is skipped, an info log is emitted, and fd=None is passed.
Validation status at merge time
dp_size == 1 path: empirically validated on H100 during cascade smoke testing. Server starts cleanly, reaches HTTP 200 health within 60s, no "Skipping reserved" log line confirming pre-bind path was taken.
dp_size > 1 path: static code review only. Multi-GPU hardware to exercise the dp_size > 1 runtime path was not available to the team at PR fix(http_server): guard reserved_socket pre-bind behind dp_size == 1 (KHA-305) #52 merge time. --gpu-id-step 0 to share a single GPU across workers was rejected by check_server_args (must be positive).
Why it's safe to merge as-is
The diff is small and isolated to one file. The dp_size > 1 branch is essentially "do less, pass None" with null-tolerant uvicorn call sites on both sides.
Any latent bug at dp_size > 1 would surface as a startup failure on configuration flip — there is no silent-corruption risk path.
Follow-up
When multi-GPU hardware access opens up (likely concurrent with the cluster work needed for larger model classes), validate the dp_size > 1 runtime path on hardware:
Server starts cleanly at dp_size = 2 (and higher).
The pre-bind is skipped (info log shows it).
uvicorn workers come up healthy without the pre-bound socket.
Health endpoint returns 200 in the multi-worker configuration.
This issue tracks the deferred validation publicly so the gap is visible in PR #52's history.
Background
PR #52 (closes Issue #17 item 2) added a
dp_sizeguard around thereserved_socketpre-binding inpython/sglang/srt/entrypoints/http_server.py(around lines 2416-2479). Whendp_size == 1, the server pre-bindsreserved_socketand passesreserved_socket.fileno()to uvicorn. Whendp_size > 1, the pre-bind is skipped, an info log is emitted, andfd=Noneis passed.Validation status at merge time
dp_size == 1path: empirically validated on H100 during cascade smoke testing. Server starts cleanly, reaches HTTP 200 health within 60s, no "Skipping reserved" log line confirming pre-bind path was taken.dp_size > 1path: static code review only. Multi-GPU hardware to exercise thedp_size > 1runtime path was not available to the team at PR fix(http_server): guard reserved_socket pre-bind behind dp_size == 1 (KHA-305) #52 merge time.--gpu-id-step 0to share a single GPU across workers was rejected bycheck_server_args(must be positive).Why it's safe to merge as-is
dp_size > 1branch is essentially "do less, passNone" with null-tolerant uvicorn call sites on both sides.dp_size > 1path is defensive code for a future configuration, not exercised in production.dp_size > 1would surface as a startup failure on configuration flip — there is no silent-corruption risk path.Follow-up
When multi-GPU hardware access opens up (likely concurrent with the cluster work needed for larger model classes), validate the
dp_size > 1runtime path on hardware:dp_size = 2(and higher).This issue tracks the deferred validation publicly so the gap is visible in PR #52's history.