Initialize the distributed environment.
(
parallel_config: ParallelConfig,
rank: int,
distributed_init_method: Optional[str] = None,
)
| 183 | |
| 184 | |
| 185 | def _init_distributed_environment( |
| 186 | parallel_config: ParallelConfig, |
| 187 | rank: int, |
| 188 | distributed_init_method: Optional[str] = None, |
| 189 | ) -> None: |
| 190 | """Initialize the distributed environment.""" |
| 191 | if torch.distributed.is_initialized(): |
| 192 | torch_world_size = torch.distributed.get_world_size() |
| 193 | if torch_world_size != parallel_config.world_size: |
| 194 | raise RuntimeError( |
| 195 | "torch.distributed is already initialized but the torch world " |
| 196 | "size does not match parallel_config.world_size " |
| 197 | f"({torch_world_size} vs. {parallel_config.world_size}).") |
| 198 | elif not distributed_init_method: |
| 199 | raise ValueError( |
| 200 | "distributed_init_method must be set if torch.distributed " |
| 201 | "is not already initialized") |
| 202 | else: |
| 203 | torch.distributed.init_process_group( |
| 204 | backend="nccl", |
| 205 | world_size=parallel_config.world_size, |
| 206 | rank=rank, |
| 207 | init_method=distributed_init_method, |
| 208 | ) |
| 209 | |
| 210 | # A small all_reduce for warmup. |
| 211 | torch.distributed.all_reduce(torch.zeros(1).cuda()) |
| 212 | initialize_model_parallel(parallel_config.tensor_parallel_size, |
| 213 | parallel_config.pipeline_parallel_size) |
| 214 | |
| 215 | |
| 216 | def _check_if_gpu_supports_dtype(torch_dtype: torch.dtype): |
no test coverage detected