from __future__ import annotations
from ... import envs
from ... import p2p_pb2
def _derive_expert_parallel_size(parallel) -> int:
if not getattr(parallel, "enable_expert_parallel", False):
return 1
tp_size = getattr(parallel, "tensor_parallel_size", 1) or 1
dp_size = getattr(parallel, "data_parallel_size", 1) or 1
pcp_size = getattr(parallel, "prefill_context_parallel_size", 1) or 1
return max(1, tp_size * dp_size * pcp_size)
def build_source_identity(
vllm_config, model_config,
) -> 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 = _derive_expert_parallel_size(parallel)
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,
revision=_resolve_model_revision(model_config),
)
def _resolve_model_revision(model_config) -> str:
override = envs.MX_MODEL_REVISION
if override:
return override
revision = getattr(model_config, "revision", None)
return revision or ""