| # Adapted from https://github.com/vllm-project/vllm/blob/v0.6.4.post1/vllm/distributed/device_communicators/xpu_communicator.py | |
| import torch | |
| import torch.distributed as dist | |
| from torch.distributed import ProcessGroup | |
| from sglang.srt.utils import is_xpu | |
| class XpuCommunicator: | |
| def __init__(self, group: ProcessGroup): | |
| if not is_xpu(): | |
| self.disabled = True | |
| return | |
| self.disabled = False | |
| self.group = group | |
| self.world_size = dist.get_world_size(self.group) | |
| def all_reduce(self, x: torch.Tensor) -> torch.Tensor: | |
| dist.all_reduce(x, group=self.group) | |
| return x | |
| def gather( | |
| self, input_: torch.Tensor, rank_in_group: int, dst: int = 0, dim: int = -1 | |
| ): | |
| # For xpu path, gather doesn't work properly together with ray | |
| # cluster so we use all_gather instead for now. | |
| input_size = input_.size() | |
| # Allocate output tensor. | |
| output_tensor = torch.empty( | |
| (self.world_size,) + input_size, dtype=input_.dtype, device=input_.device | |
| ) | |
| # All-gather. | |
| torch.distributed.all_gather_into_tensor( | |
| output_tensor, input_, group=self.group | |
| ) | |
| if rank_in_group == dst: | |
| # Reshape | |
| output_tensor = output_tensor.movedim(0, dim) | |
| output_tensor = output_tensor.reshape( | |
| input_size[:dim] | |
| + (self.world_size * input_size[dim],) | |
| + input_size[dim + 1 :] | |
| ) | |
| else: | |
| output_tensor = None | |
| return output_tensor | |
Xet Storage Details
- Size:
- 1.59 kB
- Xet hash:
- c5d2dcb6f505192a9fab1bcd435b50610024afacce12e7f1fb8d98f79bc2b48e
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.