Skip to content

Commit

Permalink
[Misc][Utils] allow get_open_port to be called for multiple times (vl…
Browse files Browse the repository at this point in the history
  • Loading branch information
youkaichao authored and jimpang committed Jun 27, 2024
1 parent ce3d144 commit 1f57137
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
16 changes: 15 additions & 1 deletion tests/test_utils.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,13 @@
import asyncio
import os
import socket
import sys
from typing import (TYPE_CHECKING, Any, AsyncIterator, Awaitable, Protocol,
Tuple, TypeVar)

import pytest

from vllm.utils import deprecate_kwargs, merge_async_iterators
from vllm.utils import deprecate_kwargs, get_open_port, merge_async_iterators

from .utils import error_on_warning

Expand Down Expand Up @@ -116,3 +118,15 @@ def dummy(*, old_arg: object = None, new_arg: object = None):

with pytest.warns(DeprecationWarning, match="abcd"):
dummy(old_arg=1)


def test_get_open_port():
os.environ["VLLM_PORT"] = "5678"
# make sure we can get multiple ports, even if the env var is set
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s1:
s1.bind(("localhost", get_open_port()))
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s2:
s2.bind(("localhost", get_open_port()))
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s3:
s3.bind(("localhost", get_open_port()))
os.environ.pop("VLLM_PORT")
3 changes: 3 additions & 0 deletions vllm/envs.py
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,9 @@
lambda: os.getenv('VLLM_HOST_IP', "") or os.getenv("HOST_IP", ""),

# used in distributed environment to manually set the communication port
# Note: if VLLM_PORT is set, and some code asks for multiple ports, the
# VLLM_PORT will be used as the first port, and the rest will be generated
# by incrementing the VLLM_PORT value.
# '0' is used to make mypy happy
'VLLM_PORT':
lambda: int(os.getenv('VLLM_PORT', '0'))
Expand Down
10 changes: 9 additions & 1 deletion vllm/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,15 @@ def get_distributed_init_method(ip: str, port: int) -> str:
def get_open_port() -> int:
port = envs.VLLM_PORT
if port is not None:
return port
while True:
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.bind(("", port))
return port
except OSError:
port += 1 # Increment port number if already in use
logger.info("Port %d is already in use, trying port %d",
port - 1, port)
# try ipv4
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
Expand Down

0 comments on commit 1f57137

Please sign in to comment.