### What this PR does / why we need it?
Upgrade vllm commit to 2026.03.19.
1.Fix socket removed from StatelessProcessGroup. Upstream vLLM PR
[#36330](https://github.com/vllm-project/vllm/pull/36330) ("elastic_ep:
Fix stateless group port races") refactored StatelessProcessGroup and
removed the socket: socket.socket | None field. The socket ownership was
moved to a new create_tcp_store() helper instead of being stored as a
field on the dataclass.
2.fix `virtual_engine` parameter removed from `set_forward_context().
Upstream [V0 Deprecation] Deprecate virtual engine
[#37195](https://github.com/vllm-project/vllm/pull/37195)
### Does this PR introduce _any_ user-facing change?
NA
### How was this patch tested?
NA
- vLLM version: v0.17.0
- vLLM main:
8b6325758c
---------
Signed-off-by: leo-pony <nengjunma@outlook.com>
91 lines
3.1 KiB
Python
91 lines
3.1 KiB
Python
import os
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from vllm.distributed.utils import StatelessProcessGroup
|
|
|
|
from tests.ut.base import TestBase
|
|
from vllm_ascend.distributed.device_communicators.pyhccl import \
|
|
PyHcclCommunicator
|
|
from vllm_ascend.utils import ACL_FORMAT_FRACTAL_NZ, vllm_version_is
|
|
|
|
|
|
class MockHcclLib:
|
|
pass
|
|
|
|
|
|
class MockUniqueId:
|
|
pass
|
|
|
|
|
|
class TestPyHcclCommunicator(TestBase):
|
|
|
|
@patch.dict(os.environ, {"RANK": "0", "WORLD_SIZE": "1"})
|
|
def test_world_size_1_return_early(self):
|
|
comm = PyHcclCommunicator(
|
|
group=StatelessProcessGroup(0, 1, None, None),
|
|
device="npu:0",
|
|
)
|
|
self.assertTrue(comm.disabled)
|
|
self.assertFalse(comm.available)
|
|
|
|
@patch.dict(os.environ, {"RANK": "0", "WORLD_SIZE": "2"})
|
|
def test_load_hccl_fail(self):
|
|
comm = PyHcclCommunicator(group=StatelessProcessGroup(
|
|
0, 2, None, None),
|
|
device="npu:0",
|
|
library_path="/not/exist/path/libhccl.so")
|
|
self.assertTrue(comm.disabled)
|
|
|
|
@patch(
|
|
"vllm_ascend.distributed.device_communicators.pyhccl_wrapper.HCCLLibrary",
|
|
MockHcclLib)
|
|
@patch(
|
|
"vllm_ascend.distributed.device_communicators.pyhccl_wrapper.hcclUniqueId",
|
|
MockUniqueId)
|
|
@patch("torch.npu.device")
|
|
@patch("vllm_ascend.utils.current_stream",
|
|
return_value=MagicMock(npu_stream=5678))
|
|
def test_stateless_group(self, *_):
|
|
if vllm_version_is("0.18.0"):
|
|
group = StatelessProcessGroup(rank=3,
|
|
world_size=4,
|
|
store=None,
|
|
socket=None)
|
|
else:
|
|
group = StatelessProcessGroup(rank=3,
|
|
world_size=4,
|
|
store=None)
|
|
|
|
comm = PyHcclCommunicator(group=group, device=3)
|
|
|
|
self.assertEqual(comm.rank, 3)
|
|
self.assertEqual(comm.world_size, 4)
|
|
|
|
@patch.dict(os.environ, {"RANK": "1", "WORLD_SIZE": "2"})
|
|
@patch(
|
|
"vllm_ascend.distributed.device_communicators.pyhccl_wrapper.HCCLLibrary",
|
|
MockHcclLib)
|
|
@patch(
|
|
"vllm_ascend.distributed.device_communicators.pyhccl_wrapper.hcclUniqueId",
|
|
MockUniqueId)
|
|
@patch("torch.distributed.is_initialized", return_value=True)
|
|
@patch("torch.distributed.get_backend", return_value="nccl")
|
|
@patch("torch.distributed.get_rank", return_value=1)
|
|
@patch("torch.distributed.get_world_size", return_value=2)
|
|
@patch("torch.distributed.get_process_group_ranks", return_value=[0, 1])
|
|
@patch("torch.distributed.broadcast")
|
|
@patch("torch.npu.device")
|
|
@patch("vllm_ascend.utils.current_stream",
|
|
return_value=MagicMock(npu_stream=1234))
|
|
def test_multi_gpu_pg_torch(
|
|
self,
|
|
*_,
|
|
):
|
|
fake_pg = MagicMock()
|
|
comm = PyHcclCommunicator(group=fake_pg, device="npu:1")
|
|
|
|
self.assertEqual(comm.rank, 1)
|
|
self.assertEqual(comm.world_size, 2)
|
|
self.assertFalse(comm.available)
|
|
self.assertTrue(comm.disabled)
|