[UX] Improve data-parallel launch validation (#49124)
Signed-off-by: Taneem Ibrahim <taneem.ibrahim@gmail.com> Co-authored-by: Wentao Ye <44945378+yewentao256@users.noreply.github.com>
This commit is contained in:
co-authored by
Wentao Ye
parent
7b40fb9645
commit
453f01783d
+52
-23
@@ -1955,12 +1955,21 @@ class EngineArgs:
|
||||
assert not headless or not self.data_parallel_hybrid_lb, (
|
||||
"data_parallel_hybrid_lb is not applicable in headless mode"
|
||||
)
|
||||
assert not (self.data_parallel_hybrid_lb and self.data_parallel_external_lb), (
|
||||
"data_parallel_hybrid_lb and data_parallel_external_lb cannot both be True."
|
||||
)
|
||||
assert self.data_parallel_backend == "mp" or self.nnodes == 1, (
|
||||
"nnodes > 1 is only supported with data_parallel_backend=mp"
|
||||
)
|
||||
if self.data_parallel_hybrid_lb and self.data_parallel_external_lb:
|
||||
raise ValueError(
|
||||
"Invalid data-parallel launch options: "
|
||||
"`--data-parallel-hybrid-lb` and "
|
||||
"`--data-parallel-external-lb` cannot be enabled together. "
|
||||
"Enable only one load-balancing mode."
|
||||
)
|
||||
if self.nnodes > 1 and self.data_parallel_backend != "mp":
|
||||
raise ValueError(
|
||||
"Invalid data-parallel launch options: "
|
||||
f"`--nnodes {self.nnodes}` requires "
|
||||
"`--data-parallel-backend mp`; got "
|
||||
f"`--data-parallel-backend {self.data_parallel_backend}`. "
|
||||
"Use the MP backend or set `--nnodes 1`."
|
||||
)
|
||||
inferred_data_parallel_rank = 0
|
||||
if self.nnodes > 1:
|
||||
world_size = (
|
||||
@@ -1971,13 +1980,22 @@ class EngineArgs:
|
||||
world_size_within_dp = (
|
||||
self.pipeline_parallel_size * self.tensor_parallel_size
|
||||
)
|
||||
if world_size % self.nnodes != 0:
|
||||
raise ValueError(
|
||||
"Invalid data-parallel launch options: "
|
||||
f"`--nnodes {self.nnodes}` must evenly divide the total "
|
||||
f"world size ({world_size}). Adjust `--nnodes`, "
|
||||
"`--data-parallel-size`, `--pipeline-parallel-size`, or "
|
||||
"`--tensor-parallel-size`."
|
||||
)
|
||||
if not 0 <= self.node_rank < self.nnodes:
|
||||
raise ValueError(
|
||||
"Invalid data-parallel launch options: `--node-rank` must "
|
||||
f"be between 0 and {self.nnodes - 1}; got "
|
||||
f"`--node-rank {self.node_rank}`. Set it to this node's "
|
||||
"zero-based index."
|
||||
)
|
||||
local_world_size = world_size // self.nnodes
|
||||
assert world_size % self.nnodes == 0, (
|
||||
f"world_size={world_size} must be divisible by nnodes={self.nnodes}."
|
||||
)
|
||||
assert self.node_rank < self.nnodes, (
|
||||
f"node_rank={self.node_rank} must be less than nnodes={self.nnodes}."
|
||||
)
|
||||
inferred_data_parallel_rank = (
|
||||
self.node_rank * local_world_size
|
||||
) // world_size_within_dp
|
||||
@@ -2008,14 +2026,21 @@ class EngineArgs:
|
||||
)
|
||||
# Local DP rank = 1, use pure-external LB.
|
||||
if data_parallel_external_lb:
|
||||
assert self.data_parallel_rank is not None, (
|
||||
"data_parallel_rank or node_rank must be specified if "
|
||||
"data_parallel_external_lb is enable."
|
||||
)
|
||||
assert self.data_parallel_size_local in (1, None), (
|
||||
"data_parallel_size_local must be 1 or None when data_parallel_rank "
|
||||
"is set"
|
||||
)
|
||||
if self.data_parallel_rank is None:
|
||||
raise ValueError(
|
||||
"Invalid data-parallel launch options: "
|
||||
"`--data-parallel-external-lb` requires a data-parallel "
|
||||
"rank. Set `--data-parallel-rank`, or set "
|
||||
"`--data-parallel-size` greater than 1 and use `--nnodes` "
|
||||
"with `--node-rank` so the rank can be inferred."
|
||||
)
|
||||
if self.data_parallel_size_local not in (1, None):
|
||||
raise ValueError(
|
||||
"Invalid data-parallel launch options: an external "
|
||||
"data-parallel rank requires `--data-parallel-size-local "
|
||||
f"1`; got {self.data_parallel_size_local}. Set it to 1 or "
|
||||
"omit it."
|
||||
)
|
||||
data_parallel_size_local = 1
|
||||
# Use full external lb if we have local_size of 1.
|
||||
self.data_parallel_hybrid_lb = False
|
||||
@@ -2050,9 +2075,13 @@ class EngineArgs:
|
||||
self.node_rank,
|
||||
)
|
||||
else:
|
||||
assert not self.data_parallel_hybrid_lb, (
|
||||
"data_parallel_size_local must be set to use data_parallel_hybrid_lb."
|
||||
)
|
||||
if self.data_parallel_hybrid_lb:
|
||||
raise ValueError(
|
||||
"Invalid data-parallel launch options: "
|
||||
"`--data-parallel-hybrid-lb` requires "
|
||||
"`--data-parallel-size-local`. Set it to the number of "
|
||||
"data-parallel ranks on this node."
|
||||
)
|
||||
|
||||
if self.data_parallel_backend == "ray" and (
|
||||
envs.VLLM_RAY_DP_PACK_STRATEGY == "span"
|
||||
|
||||
Reference in New Issue
Block a user