import sys
from types import SimpleNamespace
from unittest.mock import patch
import torch
from modelexpress.engines.vllm.adapter import (
VllmAdapter,
_get_vllm_device_id,
_get_vllm_worker_rank,
build_vllm_load_context,
)
def _vllm_config(*, rank: int, tp_size: int, pp_size: int):
return SimpleNamespace(
parallel_config=SimpleNamespace(
rank=rank,
tensor_parallel_size=tp_size,
pipeline_parallel_size=pp_size,
)
)
def test_worker_rank_uses_torch_distributed_global_rank():
config = _vllm_config(rank=2, tp_size=4, pp_size=2)
device = torch.device("cuda", 0)
with patch("torch.distributed.is_initialized", return_value=True), patch(
"torch.distributed.get_rank", return_value=6,
):
assert _get_vllm_worker_rank(config, device) == 6
def test_worker_rank_distinguishes_dp_replicas():
config = _vllm_config(rank=0, tp_size=4, pp_size=2)
device = torch.device("cuda", 0)
with patch("torch.distributed.is_initialized", return_value=True), patch(
"torch.distributed.get_rank", return_value=5,
):
dp0_rank = _get_vllm_worker_rank(config, device)
with patch("torch.distributed.is_initialized", return_value=True), patch(
"torch.distributed.get_rank", return_value=13,
):
dp1_rank = _get_vllm_worker_rank(config, device)
assert dp0_rank == 5
assert dp1_rank == 13
def test_worker_rank_falls_back_to_parallel_config_rank_pre_init():
config = _vllm_config(rank=3, tp_size=4, pp_size=2)
bare_device = torch.device("cuda")
with patch("torch.distributed.is_initialized", return_value=False):
assert _get_vllm_worker_rank(config, bare_device) == 3
def test_vllm_device_id_uses_current_platform_device(monkeypatch):
fake_platforms = SimpleNamespace(
current_platform=SimpleNamespace(
current_device=lambda: 2,
),
)
monkeypatch.setitem(sys.modules, "vllm.platforms", fake_platforms)
assert _get_vllm_device_id(torch.device("cuda")) == 2
def test_vllm_is_cuda_alike_uses_current_platform(monkeypatch):
fake_platforms = SimpleNamespace(
current_platform=SimpleNamespace(
is_cuda_alike=lambda: True,
),
)
monkeypatch.setitem(sys.modules, "vllm.platforms", fake_platforms)
adapter = VllmAdapter(_context_config(load_device="cpu"), _model_config())
assert adapter.is_cuda_alike() is True
def test_build_vllm_load_context_uses_current_platform_for_bare_cuda(monkeypatch):
_stub_vllm_current_device(monkeypatch, current_device=2)
_stub_metadata_client(monkeypatch)
vllm_config = _context_config(load_device=None)
ctx = build_vllm_load_context(vllm_config, _model_config())
assert ctx.target_device == torch.device("cuda")
assert ctx.target_device.index is None
assert ctx.device_id == 2
def test_build_vllm_load_context_keeps_explicit_cuda_index(monkeypatch):
_stub_vllm_current_device(monkeypatch, current_device=2)
_stub_metadata_client(monkeypatch)
vllm_config = _context_config(load_device="cuda:3")
ctx = build_vllm_load_context(vllm_config, _model_config())
assert ctx.target_device == torch.device("cuda:3")
assert ctx.target_device.index == 3
assert ctx.device_id == ctx.target_device.index
def _stub_vllm_current_device(monkeypatch, *, current_device: int) -> None:
fake_platforms = SimpleNamespace(
current_platform=SimpleNamespace(
current_device=lambda: current_device,
),
)
monkeypatch.setitem(sys.modules, "vllm.platforms", fake_platforms)
def _stub_metadata_client(monkeypatch) -> None:
monkeypatch.setattr(
"modelexpress.engines.vllm.adapter.create_metadata_client",
lambda worker_rank: object(),
)
def _context_config(*, load_device):
return SimpleNamespace(
device_config=SimpleNamespace(device="cuda"),
load_config=SimpleNamespace(device=load_device),
parallel_config=SimpleNamespace(
rank=0,
tensor_parallel_size=2,
pipeline_parallel_size=1,
),
)
def _model_config():
return SimpleNamespace(
dtype=torch.bfloat16,
model="test-model",
quantization=None,
revision=None,
)