Unverified Commit b05f5c92 authored by Russell Bryant's avatar Russell Bryant Committed by GitHub
Browse files

[Core] Allow IPv6 in VLLM_HOST_IP with zmq (#8575)


Signed-off-by: default avatarRussell Bryant <rbryant@redhat.com>
parent 9b0e3ec9
...@@ -9,11 +9,12 @@ from unittest.mock import patch ...@@ -9,11 +9,12 @@ from unittest.mock import patch
import torch import torch
import torch.distributed as dist import torch.distributed as dist
from torch.distributed import ProcessGroup from torch.distributed import ProcessGroup
from zmq import IPV6 # type: ignore
from zmq import SUB, SUBSCRIBE, XPUB, XPUB_VERBOSE, Context # type: ignore from zmq import SUB, SUBSCRIBE, XPUB, XPUB_VERBOSE, Context # type: ignore
import vllm.envs as envs import vllm.envs as envs
from vllm.logger import init_logger from vllm.logger import init_logger
from vllm.utils import get_ip, get_open_port from vllm.utils import get_ip, get_open_port, is_valid_ipv6_address
VLLM_RINGBUFFER_WARNING_INTERVAL = envs.VLLM_RINGBUFFER_WARNING_INTERVAL VLLM_RINGBUFFER_WARNING_INTERVAL = envs.VLLM_RINGBUFFER_WARNING_INTERVAL
...@@ -214,6 +215,8 @@ class MessageQueue: ...@@ -214,6 +215,8 @@ class MessageQueue:
self.remote_socket = context.socket(XPUB) self.remote_socket = context.socket(XPUB)
self.remote_socket.setsockopt(XPUB_VERBOSE, True) self.remote_socket.setsockopt(XPUB_VERBOSE, True)
remote_subscribe_port = get_open_port() remote_subscribe_port = get_open_port()
if is_valid_ipv6_address(connect_ip):
self.remote_socket.setsockopt(IPV6, 1)
socket_addr = f"tcp://*:{remote_subscribe_port}" socket_addr = f"tcp://*:{remote_subscribe_port}"
self.remote_socket.bind(socket_addr) self.remote_socket.bind(socket_addr)
...@@ -274,6 +277,8 @@ class MessageQueue: ...@@ -274,6 +277,8 @@ class MessageQueue:
self.remote_socket = context.socket(SUB) self.remote_socket = context.socket(SUB)
self.remote_socket.setsockopt_string(SUBSCRIBE, "") self.remote_socket.setsockopt_string(SUBSCRIBE, "")
if is_valid_ipv6_address(handle.connect_ip):
self.remote_socket.setsockopt(IPV6, 1)
socket_addr = f"tcp://{handle.connect_ip}:{handle.remote_subscribe_port}" socket_addr = f"tcp://{handle.connect_ip}:{handle.remote_subscribe_port}"
logger.debug("Connecting to %s", socket_addr) logger.debug("Connecting to %s", socket_addr)
self.remote_socket.connect(socket_addr) self.remote_socket.connect(socket_addr)
......
...@@ -5,6 +5,7 @@ import datetime ...@@ -5,6 +5,7 @@ import datetime
import enum import enum
import gc import gc
import inspect import inspect
import ipaddress
import os import os
import random import random
import socket import socket
...@@ -533,6 +534,14 @@ def get_ip() -> str: ...@@ -533,6 +534,14 @@ def get_ip() -> str:
return "0.0.0.0" return "0.0.0.0"
def is_valid_ipv6_address(address: str) -> bool:
try:
ipaddress.IPv6Address(address)
return True
except ValueError:
return False
def get_distributed_init_method(ip: str, port: int) -> str: def get_distributed_init_method(ip: str, port: int) -> str:
# Brackets are not permitted in ipv4 addresses, # Brackets are not permitted in ipv4 addresses,
# see https://github.com/python/cpython/issues/103848 # see https://github.com/python/cpython/issues/103848
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment