[feature] Enable multi-node inference through Ray backend (#7938)
Signed-off-by: Maciej Bala <mbala@nvidia.com> Co-authored-by: Bartosz Stefaniak <bstefaniak@nvidia.com> Co-authored-by: 汪志鹏 <wangzhipeng628@gmail.com>
This commit is contained in:
20 files changed
+1721
-37
No files matched your search
@@ -251,7 +251,9 @@ class DiffusionWorker:
|
||||
rank: int,
|
||||
od_config: OmniDiffusionConfig,
|
||||
skip_load_model: bool = False,
|
||||
distributed_init_method: str | None = None,
|
||||
):
|
||||
self.distributed_init_method = distributed_init_method
|
||||
self.local_rank = local_rank
|
||||
self.rank = rank
|
||||
self.od_config = od_config
|
||||
@@ -320,15 +322,16 @@ class DiffusionWorker:
|
||||
world_size = self.od_config.num_gpus
|
||||
rank = self.rank
|
||||
|
||||
# Set environment variables for distributed initialization
|
||||
os.environ["MASTER_ADDR"] = "localhost"
|
||||
os.environ["MASTER_PORT"] = str(self.od_config.master_port)
|
||||
# Set environment variables for local distributed initialization.
|
||||
if self.distributed_init_method is None:
|
||||
os.environ["MASTER_ADDR"] = "localhost"
|
||||
os.environ["MASTER_PORT"] = str(self.od_config.master_port)
|
||||
os.environ["LOCAL_RANK"] = str(self.local_rank)
|
||||
os.environ["RANK"] = str(rank)
|
||||
os.environ["WORLD_SIZE"] = str(world_size)
|
||||
|
||||
# Setup device
|
||||
self.device = current_omni_platform.get_torch_device(rank)
|
||||
self.device = current_omni_platform.get_torch_device(self.local_rank)
|
||||
current_omni_platform.set_device(self.device)
|
||||
|
||||
# Create vllm_config for parallel configuration. Pass explicit device_config
|
||||
@@ -354,7 +357,12 @@ class DiffusionWorker:
|
||||
set_forward_context(vllm_config=self.vllm_config, omni_diffusion_config=self.od_config),
|
||||
set_current_vllm_config(self.vllm_config),
|
||||
):
|
||||
init_distributed_environment(world_size=world_size, rank=rank)
|
||||
init_distributed_environment(
|
||||
world_size=world_size,
|
||||
rank=rank,
|
||||
distributed_init_method=self.distributed_init_method or "env://",
|
||||
local_rank=self.local_rank,
|
||||
)
|
||||
logger.info(f"Worker {self.rank}: Initialized device and distributed environment.")
|
||||
|
||||
parallel_config = self.od_config.parallel_config
|
||||
@@ -1682,16 +1690,22 @@ class WorkerWrapperBase:
|
||||
wake_event: mp.Event = None,
|
||||
worker_extension_cls: str | None = None,
|
||||
custom_pipeline_args: dict[str, Any] | None = None,
|
||||
rank: int | None = None,
|
||||
distributed_init_method: str | None = None,
|
||||
):
|
||||
"""
|
||||
Initialize WorkerWrapperBase with support for worker extensions.
|
||||
|
||||
Args:
|
||||
gpu_id: GPU device ID
|
||||
gpu_id: Local GPU device ID
|
||||
od_config: OmniDiffusionConfig configuration
|
||||
worker_extension_cls: Optional qualified name of worker extension class
|
||||
custom_pipeline_args: Optional arguments passed to native pipelines.
|
||||
A ``pipeline_class`` entry triggers custom pipeline initialization.
|
||||
rank: Global distributed rank. Defaults to ``gpu_id`` for local
|
||||
multiprocessing.
|
||||
distributed_init_method: Explicit rendezvous URL, or None for the
|
||||
local launcher's environment-based rendezvous.
|
||||
"""
|
||||
self.gpu_id = gpu_id
|
||||
self.od_config = od_config
|
||||
@@ -1706,12 +1720,15 @@ class WorkerWrapperBase:
|
||||
# Create the actual worker instance. Only dynamic custom pipelines skip
|
||||
# initial loading; native pipelines may also use custom_pipeline_args
|
||||
# for model-specific component paths.
|
||||
worker = worker_class(
|
||||
local_rank=gpu_id,
|
||||
rank=gpu_id,
|
||||
od_config=od_config,
|
||||
skip_load_model=self.uses_custom_pipeline,
|
||||
)
|
||||
worker_init_kwargs: dict[str, Any] = {
|
||||
"local_rank": gpu_id,
|
||||
"rank": gpu_id if rank is None else rank,
|
||||
"od_config": od_config,
|
||||
"skip_load_model": self.uses_custom_pipeline,
|
||||
}
|
||||
if distributed_init_method is not None:
|
||||
worker_init_kwargs["distributed_init_method"] = distributed_init_method
|
||||
worker = worker_class(**worker_init_kwargs)
|
||||
try:
|
||||
# Re-initialize pipeline with custom pipeline if provided.
|
||||
if self.uses_custom_pipeline:
|
||||
|
||||
Reference in new issue
Block a user