from __future__ import annotations
import hashlib
import logging
import os
import random
import time
import uuid
from contextlib import contextmanager
from typing import TYPE_CHECKING
import grpc
import torch
import torch.nn as nn
from .client import MxClient from .heartbeat import HeartbeatThread
from . import p2p_pb2
from vllm.config import ModelConfig, VllmConfig
from vllm.config.load import LoadConfig
from vllm.model_executor.model_loader import register_model_loader
from vllm.model_executor.model_loader.base_loader import BaseModelLoader
from vllm.model_executor.model_loader.default_loader import DefaultModelLoader
from vllm.model_executor.model_loader.dummy_loader import DummyModelLoader
from vllm.model_executor.model_loader.utils import (
initialize_model,
process_weights_after_loading,
)
from vllm.utils.torch_utils import set_default_torch_dtype
from .gds_loader import MxGdsLoader
from .gds_transfer import is_gds_available
from .nixl_transfer import NixlTransferManager, is_nixl_available
from .transfer_safety import (
TransferFingerprint,
check_transfer_allowed,
detect_model_features,
get_cuda_version,
get_deep_gemm_version,
get_gpu_capability,
get_torch_version,
get_vllm_version,
)
from .types import TensorDescriptor
if TYPE_CHECKING:
from .nixl_transfer import NixlTransferManager
logger = logging.getLogger("modelexpress.vllm_loader")
MAX_SOURCE_RETRIES = 3
PUBLISH_METADATA_MAX_ATTEMPTS = 3
PUBLISH_METADATA_INITIAL_BACKOFF_SECONDS = 1.0
PUBLISH_METADATA_RETRYABLE_STATUS_CODES = {
grpc.StatusCode.UNAVAILABLE,
grpc.StatusCode.DEADLINE_EXCEEDED,
}
def _configure_vllm_logging():
mx_root = logging.getLogger("modelexpress")
if mx_root.handlers:
return
vllm_logger = logging.getLogger("vllm")
for handler in vllm_logger.handlers:
mx_root.addHandler(handler)
mx_level = os.environ.get("MODEL_EXPRESS_LOG_LEVEL", "").upper()
if mx_level and hasattr(logging, mx_level):
mx_root.setLevel(getattr(logging, mx_level))
elif vllm_logger.level != logging.NOTSET:
mx_root.setLevel(vllm_logger.level)
def _safe_checksum(tensor: torch.Tensor) -> str:
try:
t = tensor.cpu()
if t.dtype == torch.bfloat16:
t = t.float()
return hashlib.md5(t.numpy().tobytes()).hexdigest()[:8]
except Exception as e:
return f"err:{e}"
def _get_global_rank(device: torch.device) -> int:
try:
import torch.distributed as dist
if dist.is_initialized():
rank = dist.get_rank()
logger.debug(f"Got global rank from torch.distributed: {rank}")
return rank
except (ImportError, RuntimeError) as e:
logger.debug(f"Could not get global rank from torch.distributed: {e}")
if hasattr(device, "index") and device.index is not None:
logger.debug(f"Using device.index as rank: {device.index}")
return device.index
return 0
def _get_worker_rank(device: torch.device) -> int:
try:
from vllm.distributed import get_tensor_model_parallel_rank
rank = get_tensor_model_parallel_rank()
logger.debug(f"Got TP rank from vllm.distributed: {rank}")
return rank
except (ImportError, RuntimeError) as e:
logger.debug(f"Could not get TP rank from vllm.distributed: {e}")
if hasattr(device, "index") and device.index is not None:
logger.debug(f"Using device.index as rank: {device.index}")
return device.index
return 0
class SourceTransferError(Exception):
from .types import ManifestMismatchError
@contextmanager
def _capture_tensor_attrs():
original_setattr = nn.Module.__setattr__
def capturing_setattr(self, name, value):
if (isinstance(value, torch.Tensor)
and not isinstance(value, nn.Parameter)
and value.is_cuda
and name not in self._parameters
and name not in self._buffers
and name not in self._modules):
if hasattr(self, name):
try:
delattr(self, name)
except AttributeError:
pass
self.register_buffer(name, value, persistent=False)
else:
original_setattr(self, name, value)
nn.Module.__setattr__ = capturing_setattr
try:
yield
finally:
nn.Module.__setattr__ = original_setattr
def _iter_module_tensors(
module: nn.Module,
) -> list[tuple[str, torch.Tensor, str]]:
results: list[tuple[str, torch.Tensor, str]] = []
for name, param in module.named_parameters():
if param.is_cuda:
results.append((name, param, "parameter"))
for name, buf in module.named_buffers():
if buf.is_cuda:
results.append((name, buf, "buffer"))
return results
def _storage_view(tensor: torch.Tensor) -> torch.Tensor:
return torch.empty(0, dtype=torch.uint8, device=tensor.device).set_(
tensor.untyped_storage()
)
def _collect_module_tensors(model: nn.Module) -> dict[str, torch.Tensor]:
tensors: dict[str, torch.Tensor] = {}
seen_ptrs: set[int] = set()
storage_view_count = 0
skipped_duplicate = 0
for name, tensor, _tensor_type in _iter_module_tensors(model):
t = tensor.data if hasattr(tensor, "data") else tensor
if t.is_contiguous():
ptr = t.data_ptr()
if ptr in seen_ptrs:
logger.debug(f"Skipping duplicate tensor '{name}' (same data_ptr)")
skipped_duplicate += 1
continue
seen_ptrs.add(ptr)
tensors[name] = t
else:
sv = _storage_view(t)
ptr = sv.data_ptr()
if ptr in seen_ptrs:
skipped_duplicate += 1
continue
seen_ptrs.add(ptr)
tensors[f"{name}.__storage"] = sv
storage_view_count += 1
if storage_view_count:
logger.info(
f"Registered {storage_view_count} non-contiguous tensors "
f"via storage-level byte transfer"
)
if skipped_duplicate:
logger.info(f"Skipped {skipped_duplicate} duplicate tensors (tied weights)")
return tensors
def _is_p2p_metadata_enabled() -> bool:
return os.environ.get("MX_P2P_METADATA", "0") == "1"
def _get_worker_host() -> str:
import socket
explicit = os.environ.get("MX_WORKER_HOST", "")
if explicit:
return explicit
try:
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("8.8.8.8", 80))
ip = s.getsockname()[0]
s.close()
if ip and not ip.startswith("127."):
return ip
except Exception:
pass
fqdn = socket.getfqdn()
if fqdn in ("localhost", "localhost.localdomain"):
raise RuntimeError(
"Cannot determine routable address for P2P metadata exchange. "
"Set MX_WORKER_HOST or configure DNS."
)
return fqdn
def _init_nixl_manager(
global_rank: int, device_id: int, role: str, listen_port: int = 0,
) -> NixlTransferManager:
agent_name = f"mx-{role}-worker{global_rank}-{uuid.uuid4().hex[:8]}"
logger.debug(f"[Worker {global_rank}] Initializing NIXL manager with agent_name={agent_name}")
manager = NixlTransferManager(
agent_name=agent_name,
device_id=device_id,
listen_port=listen_port,
)
manager.initialize()
logger.debug(f"[Worker {global_rank}] NIXL manager initialized")
return manager
def _log_tensor_summary(
tensors: dict[str, torch.Tensor], global_rank: int, label: str
) -> None:
total_size = sum(t.numel() * t.element_size() for t in tensors.values())
logger.info(
f"[Worker {global_rank}] {label}: {len(tensors)} tensors ({total_size / 1e9:.2f} GB)"
)
if logger.isEnabledFor(logging.DEBUG):
tensor_names = list(tensors.keys())
logger.debug(f"[Worker {global_rank}] First 5 tensor names: {tensor_names[:5]}")
for name in tensor_names[:3]:
t = tensors[name]
checksum = _safe_checksum(t)
logger.debug(
f"[Worker {global_rank}] Sample tensor '{name}': "
f"shape={t.shape}, dtype={t.dtype}, checksum={checksum}"
)
def _build_source_identity(
vllm_config: VllmConfig, model_config: ModelConfig
) -> p2p_pb2.SourceIdentity:
from importlib.metadata import version as pkg_version
try:
mx_version = pkg_version("modelexpress")
except Exception:
mx_version = "0.0.0"
parallel = vllm_config.parallel_config
tp_size = getattr(parallel, "tensor_parallel_size", 1)
pp_size = getattr(parallel, "pipeline_parallel_size", 1)
ep_size = getattr(parallel, "expert_parallel_size", 0)
dtype = str(model_config.dtype).replace("torch.", "")
quantization = model_config.quantization or ""
return p2p_pb2.SourceIdentity(
mx_version=mx_version,
mx_source_type=p2p_pb2.MX_SOURCE_TYPE_WEIGHTS,
model_name=model_config.model,
backend_framework=p2p_pb2.BACKEND_FRAMEWORK_VLLM,
tensor_parallel_size=tp_size,
pipeline_parallel_size=pp_size,
expert_parallel_size=ep_size,
dtype=dtype,
quantization=quantization,
extra_parameters={
**{f"feature.{k}": v for k, v in detect_model_features(model_config).items()},
"runtime.vllm_version": get_vllm_version(),
"runtime.torch_version": get_torch_version(),
"runtime.cuda_version": get_cuda_version(),
"runtime.deep_gemm_version": get_deep_gemm_version(),
"runtime.gpu_capability": get_gpu_capability(),
},
)
def _build_tensor_protos(
nixl_manager: NixlTransferManager,
tensors: dict[str, torch.Tensor],
device_id: int,
global_rank: int,
) -> list["p2p_pb2.TensorDescriptor"]:
use_contiguous = os.environ.get("MX_CONTIGUOUS_REG", "0") == "1"
if use_contiguous:
region_descriptors = nixl_manager.get_registered_descriptors()
protos = [
p2p_pb2.TensorDescriptor(
name=desc.name,
addr=desc.addr,
size=desc.size,
device_id=desc.device_id,
dtype=desc.dtype,
)
for desc in region_descriptors
]
logger.info(
f"[Worker {global_rank}] Built {len(protos)} REGION descriptors "
f"(MX_CONTIGUOUS_REG=1)"
)
else:
protos = [
p2p_pb2.TensorDescriptor(
name=name,
addr=t.data_ptr(),
size=t.numel() * t.element_size(),
device_id=device_id,
dtype=str(t.dtype),
)
for name, t in tensors.items()
]
return protos
def _publish_metadata_and_ready(
mx_client: MxClient,
nixl_manager: NixlTransferManager,
tensors: dict[str, torch.Tensor],
global_rank: int,
device_id: int,
identity: "p2p_pb2.SourceIdentity",
worker_id: str,
) -> None:
logger.info(
f"[Worker {global_rank}] Publishing {len(tensors)} tensors for model '{identity.model_name}'"
)
tensor_protos = _build_tensor_protos(
nixl_manager, tensors, device_id, global_rank,
)
if _is_p2p_metadata_enabled():
from .worker_server import WorkerGrpcServer
host = _get_worker_host()
grpc_base = int(os.environ.get("MX_WORKER_GRPC_PORT", "6555"))
worker_grpc_port = grpc_base + device_id
worker = p2p_pb2.WorkerMetadata(
worker_rank=global_rank,
metadata_endpoint=f"{host}:{nixl_manager._listen_port}",
agent_name=nixl_manager.agent_name,
worker_grpc_endpoint="", )
mx_source_id = _publish_metadata_to_server(
mx_client=mx_client,
identity=identity,
worker=worker,
worker_id=worker_id,
global_rank=global_rank,
)
grpc_server = WorkerGrpcServer(
tensor_protos=tensor_protos,
mx_source_id=mx_source_id,
port=worker_grpc_port,
)
actual_port = grpc_server.start()
_worker_servers[device_id] = grpc_server
worker = p2p_pb2.WorkerMetadata(
worker_rank=global_rank,
metadata_endpoint=f"{host}:{nixl_manager._listen_port}",
agent_name=nixl_manager.agent_name,
worker_grpc_endpoint=f"{host}:{actual_port}",
)
mx_source_id = _publish_metadata_to_server(
mx_client=mx_client,
identity=identity,
worker=worker,
worker_id=worker_id,
global_rank=global_rank,
)
logger.info(
f"[Worker {global_rank}] Published P2P metadata to MX server "
f"(mx_source_id={mx_source_id}, worker_grpc={host}:{actual_port})"
)
else:
worker = p2p_pb2.WorkerMetadata(
worker_rank=global_rank,
nixl_metadata=nixl_manager.nixl_metadata,
tensors=tensor_protos,
)
mx_source_id = _publish_metadata_to_server(
mx_client=mx_client,
identity=identity,
worker=worker,
worker_id=worker_id,
global_rank=global_rank,
)
logger.info(
f"[Worker {global_rank}] Published metadata to MX server "
f"(mx_source_id={mx_source_id}, worker_id={worker_id})"
)
heartbeat = HeartbeatThread(
mx_client=mx_client,
mx_source_id=mx_source_id,
worker_id=worker_id,
worker_rank=global_rank,
nixl_manager=nixl_manager,
)
heartbeat.start()
_heartbeat_threads[global_rank] = heartbeat
def _publish_metadata_to_server(
mx_client: MxClient,
identity: "p2p_pb2.SourceIdentity",
worker: "p2p_pb2.WorkerMetadata",
worker_id: str,
global_rank: int,
) -> str:
last_error: grpc.RpcError | None = None
for attempt in range(1, PUBLISH_METADATA_MAX_ATTEMPTS + 1):
try:
return mx_client.publish_metadata(identity, worker, worker_id)
except grpc.RpcError as exc:
if exc.code() not in PUBLISH_METADATA_RETRYABLE_STATUS_CODES:
raise
last_error = exc
if attempt == PUBLISH_METADATA_MAX_ATTEMPTS:
break
backoff_seconds = PUBLISH_METADATA_INITIAL_BACKOFF_SECONDS * (2 ** (attempt - 1))
logger.warning(
f"[Worker {global_rank}] Publish metadata attempt {attempt}/"
f"{PUBLISH_METADATA_MAX_ATTEMPTS} failed with retryable gRPC status "
f"{exc.code().name}: {exc}. Retrying in {backoff_seconds:.1f}s"
)
time.sleep(backoff_seconds)
message = (
f"[Worker {global_rank}] Failed to publish metadata after "
f"{PUBLISH_METADATA_MAX_ATTEMPTS} attempts"
)
logger.error("%s: %s", message, last_error)
raise RuntimeError(f"{message}: {last_error}") from last_error
@register_model_loader("mx")
class MxModelLoader(BaseModelLoader):
def __init__(self, load_config: LoadConfig):
super().__init__(load_config)
_configure_vllm_logging()
self._nixl_manager: NixlTransferManager | None = None
self._tensors: dict[str, torch.Tensor] = {}
self._mx_client = MxClient()
self._worker_id = uuid.uuid4().hex[:8]
logger.debug("MxModelLoader initialized (worker_id=%s)", self._worker_id)
import copy
disk_config = copy.copy(load_config)
try:
disk_config.load_format = "auto"
except AttributeError:
object.__setattr__(disk_config, "load_format", "auto")
self._default_loader = DefaultModelLoader(disk_config)
dummy_config = copy.copy(load_config)
try:
dummy_config.load_format = "dummy"
except AttributeError:
object.__setattr__(dummy_config, "load_format", "dummy")
self._dummy_loader = DummyModelLoader(dummy_config)
def load_model(
self, vllm_config: VllmConfig, model_config: ModelConfig
) -> nn.Module:
load_start = time.perf_counter()
device_config = vllm_config.device_config
load_config = vllm_config.load_config
load_device = (
device_config.device if load_config.device is None else load_config.device
)
target_device = torch.device(load_device)
global_rank = _get_global_rank(target_device)
device_id = _get_worker_rank(target_device)
identity = _build_source_identity(vllm_config, model_config)
logger.info(f"[Worker {global_rank}] MxModelLoader starting (model={identity.model_name})")
transfer_allowed, allow_reason = check_transfer_allowed(model_config)
with set_default_torch_dtype(model_config.dtype):
with target_device:
model = initialize_model(
vllm_config=vllm_config, model_config=model_config
)
loaded_as_target = False
rdma_attempted = False
if transfer_allowed:
loaded_as_target, rdma_attempted = self._try_load_from_candidates(
model, model_config, target_device, global_rank, device_id, identity
)
else:
logger.info(
f"[Worker {global_rank}] RDMA transfer disabled: {allow_reason}"
)
if not loaded_as_target:
if rdma_attempted:
self._tensors = {}
self._nixl_manager = None
_tensor_registry.pop(device_id, None)
_nixl_managers.pop(device_id, None)
del model
torch.cuda.empty_cache()
vllm_config.compilation_config.static_forward_context.clear()
vllm_config.compilation_config.static_all_moe_layers.clear()
logger.info(
f"[Worker {global_rank}] Re-initializing model after "
f"failed RDMA attempt"
)
with target_device:
model = initialize_model(
vllm_config=vllm_config, model_config=model_config
)
self._load_as_source(model, model_config, target_device, global_rank, device_id, identity)
total_time = time.perf_counter() - load_start
logger.info(
f"[Worker {global_rank}] MxModelLoader.load_model() COMPLETE "
f"in {total_time:.2f}s"
)
return model.eval()
def _fetch_worker_metadata(
self,
mx_source_id: str,
worker_id: str,
global_rank: int,
) -> p2p_pb2.WorkerMetadata | None:
fetch_start = time.perf_counter()
metadata_resp = self._mx_client.get_metadata(
mx_source_id=mx_source_id,
worker_id=worker_id,
)
if not metadata_resp.found:
logger.debug(
f"[Worker {global_rank}] Metadata not found for worker {worker_id}, skipping"
)
return None
worker = metadata_resp.worker
if not worker.tensors and not worker.worker_grpc_endpoint:
logger.debug(
f"[Worker {global_rank}] Worker {worker_id} has no tensors "
f"and no P2P endpoint, skipping"
)
return None
fetch_time = time.perf_counter() - fetch_start
mode = "P2P (lightweight)" if worker.worker_grpc_endpoint else "centralized"
tensor_count = len(worker.tensors)
logger.info(
f"[Worker {global_rank}] [TIMING] GetMetadata ({mode}): "
f"{fetch_time:.3f}s, {tensor_count} tensors"
)
return worker
def _try_load_from_candidates(
self,
model: nn.Module,
model_config: ModelConfig,
target_device: torch.device,
global_rank: int,
device_id: int,
identity: p2p_pb2.SourceIdentity,
) -> tuple[bool, bool]:
candidates = self._find_source_instances(identity, global_rank)
rdma_attempted = False
for instance in candidates[:MAX_SOURCE_RETRIES]:
mx_source_id = instance.mx_source_id
worker_id = instance.worker_id
try:
source_worker = self._fetch_worker_metadata(mx_source_id, worker_id, global_rank)
except Exception as e:
logger.warning(
f"[Worker {global_rank}] Failed to fetch metadata for worker {worker_id}: {e}. "
f"Trying next candidate."
)
continue
if source_worker is None:
continue
logger.info(
f"[Worker {global_rank}] Trying source worker {worker_id} "
f"({len(source_worker.tensors)} tensors)"
)
try:
rdma_attempted = True
self._load_as_target(
model, model_config, target_device,
global_rank, device_id, identity, source_worker, mx_source_id, worker_id,
)
return True, True
except SourceTransferError as e:
logger.warning(
f"[Worker {global_rank}] Source transfer failed for worker {worker_id}: {e}. "
f"Trying next candidate."
)
except ManifestMismatchError as e:
logger.warning(
f"[Worker {global_rank}] Manifest mismatch with worker {worker_id}: {e}. "
f"Trying next candidate."
)
if candidates:
tried = min(len(candidates), MAX_SOURCE_RETRIES)
logger.warning(
f"[Worker {global_rank}] Tried {tried} of {len(candidates)} source workers "
f"(max retries={MAX_SOURCE_RETRIES}), loading from disk"
)
else:
logger.info(f"[Worker {global_rank}] No source worker found - loading from disk")
return False, rdma_attempted
def _find_source_instances(
self, identity: p2p_pb2.SourceIdentity, global_rank: int
) -> list[p2p_pb2.SourceInstanceRef]:
if not is_nixl_available():
logger.debug(f"[Worker {global_rank}] NIXL not available, defaulting to source")
return []
try:
list_resp = self._mx_client.list_sources(
identity=identity,
status_filter=p2p_pb2.SOURCE_STATUS_READY,
)
if not list_resp.instances:
logger.debug(f"[Worker {global_rank}] No ready source instances found")
return []
candidates = [
inst for inst in list_resp.instances
if inst.worker_rank == global_rank
]
random.shuffle(candidates)
logger.info(
f"[Worker {global_rank}] Found {len(candidates)} ready source worker(s)"
)
return candidates
except Exception as e:
logger.warning(
f"[Worker {global_rank}] Error listing sources, falling back to disk: {e}"
)
return []
def _load_as_target(
self,
model: nn.Module,
model_config: ModelConfig,
target_device: torch.device,
global_rank: int,
device_id: int,
identity: "p2p_pb2.SourceIdentity",
source_worker,
mx_source_id: str,
source_worker_id: str,
) -> None:
self._dummy_loader.load_weights(model, model_config)
with _capture_tensor_attrs():
process_weights_after_loading(model, model_config, target_device)
self._receive_from_peer(model, global_rank, device_id, source_worker, mx_source_id)
target_fp = TransferFingerprint.from_environment(self._tensors)
logger.info(
f"[Worker {global_rank}] Transfer fingerprint: "
f"vllm={target_fp.vllm_version}, cuda={target_fp.cuda_version}, "
f"attn={target_fp.attention_backend}, "
f"deepgemm={target_fp.deep_gemm_version}, "
f"manifest={target_fp.manifest_hash[:12]}... ({target_fp.tensor_count} tensors)"
)
self._publish_metadata(global_rank, device_id, identity)
def _receive_from_peer(
self,
model: nn.Module,
global_rank: int,
device_id: int,
source_worker,
mx_source_id: str = "",
) -> None:
receive_start = time.perf_counter()
self._register_tensors(model, global_rank, device_id)
is_p2p = bool(source_worker.worker_grpc_endpoint)
remote_agent_name_override = None
if is_p2p:
from .worker_server import fetch_tensor_manifest
manifest_start = time.perf_counter()
logger.info(
f"[Worker {global_rank}] P2P mode: fetching tensor manifest from "
f"{source_worker.worker_grpc_endpoint}"
)
tensor_protos = fetch_tensor_manifest(
endpoint=source_worker.worker_grpc_endpoint,
mx_source_id=mx_source_id,
)
manifest_time = time.perf_counter() - manifest_start
source_tensors = [
TensorDescriptor(
name=t.name, addr=t.addr, size=t.size,
device_id=t.device_id, dtype=t.dtype,
)
for t in tensor_protos
]
logger.info(
f"[Worker {global_rank}] [TIMING] P2P tensor manifest: "
f"{manifest_time:.3f}s ({len(source_tensors)} tensors)"
)
nixl_fetch_start = time.perf_counter()
ep = source_worker.metadata_endpoint
host, port_str = ep.rsplit(":", 1)
self._nixl_manager.fetch_remote_and_wait(
remote_agent_name=source_worker.agent_name,
ip=host,
port=int(port_str),
)
nixl_fetch_time = time.perf_counter() - nixl_fetch_start
logger.info(
f"[Worker {global_rank}] [TIMING] P2P NIXL metadata fetch: "
f"{nixl_fetch_time:.3f}s"
)
remote_agent_name_override = source_worker.agent_name
else:
source_tensors = [
TensorDescriptor(
name=t.name, addr=t.addr, size=t.size,
device_id=t.device_id, dtype=t.dtype,
)
for t in source_worker.tensors
]
logger.info(
f"[Worker {global_rank}] Receiving {len(source_tensors)} tensors from source"
f"{' (P2P)' if is_p2p else ''}"
)
coalesce = os.environ.get("MX_CONTIGUOUS_REG", "0") == "1"
transfer_start = time.perf_counter()
try:
bytes_transferred, tensor_count, _ = self._nixl_manager.receive_from_source(
source_metadata=source_worker.nixl_metadata,
source_tensors=source_tensors,
timeout_seconds=300.0,
coalesce_transfers=coalesce,
remote_agent_name=remote_agent_name_override,
)
except ManifestMismatchError:
raise
except Exception as e:
raise SourceTransferError(f"RDMA receive failed: {e}") from e
transfer_time = time.perf_counter() - transfer_start
bandwidth_gbps = (bytes_transferred * 8) / (transfer_time * 1e9) if transfer_time > 0 else 0
logger.info(
f"[Worker {global_rank}] [TIMING] RDMA transfer complete: "
f"{tensor_count} tensors, {bytes_transferred / 1e9:.2f} GB, "
f"{transfer_time:.3f}s, {bandwidth_gbps:.1f} Gbps"
)
torch.cuda.synchronize()
total_time = time.perf_counter() - receive_start
logger.info(f"[Worker {global_rank}] [TIMING] Total receive time: {total_time:.2f}s")
def _load_as_source(
self,
model: nn.Module,
model_config: ModelConfig,
target_device: torch.device,
global_rank: int,
device_id: int,
identity: "p2p_pb2.SourceIdentity",
) -> None:
loaded_via_gds = False
if is_gds_available():
loaded_via_gds = self._try_gds_load(
model, model_config, device_id
)
if not loaded_via_gds:
logger.info(f"[Worker {device_id}] Loading weights from disk...")
self._default_loader.load_weights(model, model_config)
logger.info(f"[Worker {device_id}] Weights loaded from disk")
with _capture_tensor_attrs():
process_weights_after_loading(model, model_config, target_device)
self._register_tensors(model, global_rank, device_id)
source_fp = TransferFingerprint.from_environment(self._tensors)
logger.info(
f"[Worker {global_rank}] Source fingerprint: "
f"vllm={source_fp.vllm_version}, cuda={source_fp.cuda_version}, "
f"attn={source_fp.attention_backend}, "
f"deepgemm={source_fp.deep_gemm_version}, "
f"manifest={source_fp.manifest_hash[:12]}... ({source_fp.tensor_count} tensors)"
)
self._publish_metadata(global_rank, device_id, identity)
def _try_gds_load(
self,
model: nn.Module,
model_config: ModelConfig,
device_id: int,
) -> bool:
logger.info(f"[Worker {device_id}] GDS available, attempting GDS loading...")
gds_loader = MxGdsLoader()
try:
use_tqdm = getattr(self.load_config, "use_tqdm_on_load", True)
revision = getattr(model_config, "revision", None)
weights_iter = gds_loader.load_iter(
model_config.model, use_tqdm=use_tqdm, revision=revision
)
model.load_weights(weights_iter)
logger.info(f"[Worker {device_id}] GDS weight loading complete")
return True
except Exception as e:
logger.warning(
f"[Worker {device_id}] GDS loading failed, falling back to disk: {e}"
)
return False
finally:
gds_loader.shutdown()
def _register_tensors(self, model: nn.Module, global_rank: int, device_id: int) -> None:
if not is_nixl_available():
logger.warning(f"[Worker {global_rank}] NIXL not available, skipping registration")
return
self._tensors = _collect_module_tensors(model)
_log_tensor_summary(self._tensors, global_rank, "Registering tensors")
if self._nixl_manager is None:
base_port = int(os.environ.get("MX_METADATA_PORT", "5555"))
listen_port = base_port + device_id
self._nixl_manager = _init_nixl_manager(global_rank, device_id, "auto", listen_port)
if not self._nixl_manager.tensor_descriptors:
logger.debug(f"[Worker {global_rank}] Registering tensors with NIXL...")
self._nixl_manager.register_tensors(self._tensors)
logger.debug(f"[Worker {global_rank}] Tensors registered with NIXL")
_tensor_registry[device_id] = self._tensors
_nixl_managers[device_id] = self._nixl_manager
def _publish_metadata(self, global_rank: int, device_id: int, identity: "p2p_pb2.SourceIdentity") -> None:
try:
_publish_metadata_and_ready(
self._mx_client, self._nixl_manager, self._tensors,
global_rank, device_id, identity, self._worker_id
)
except Exception as e:
logger.warning(
f"[Worker {global_rank}] Failed to publish metadata, "
f"worker will continue without P2P serving: {e}"
)
def download_model(self, model_config: ModelConfig) -> None:
self._default_loader.download_model(model_config)
def load_weights(self, model: nn.Module, model_config: ModelConfig) -> None:
self._default_loader.load_weights(model, model_config)
@property
def nixl_manager(self) -> NixlTransferManager | None:
return self._nixl_manager
@property
def tensors(self) -> dict[str, torch.Tensor]:
return self._tensors
_tensor_registry: dict[int, dict[str, torch.Tensor]] = {}
_nixl_managers: dict[int, "NixlTransferManager"] = {}
_heartbeat_threads: dict[int, HeartbeatThread] = {}
_worker_servers: dict[int, "WorkerGrpcServer"] = {}