From fa311ec8320d2849b37ac5ae6a23f96619293411 Mon Sep 17 00:00:00 2001 From: Pei Zhang Date: Thu, 17 Oct 2024 11:12:24 -0700 Subject: [PATCH] add dist op doc (#8273) --- docs/source/_static/img/dist_op_stack.png | Bin 0 -> 82416 bytes docs/source/features/distop.md | 89 ++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 docs/source/_static/img/dist_op_stack.png create mode 100644 docs/source/features/distop.md diff --git a/docs/source/_static/img/dist_op_stack.png b/docs/source/_static/img/dist_op_stack.png new file mode 100644 index 0000000000000000000000000000000000000000..5d7215fe49ab877e4fd1e4b840f5600d23127e90 GIT binary patch literal 82416 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 F{txz&YlQ#+ literal 0 HcmV?d00001 diff --git a/docs/source/features/distop.md b/docs/source/features/distop.md new file mode 100644 index 00000000000..49355bf827f --- /dev/null +++ b/docs/source/features/distop.md @@ -0,0 +1,89 @@ +# Support of Torch Distributed API in PyTorch/XLA +Before the 2.5 release, PyTorch/XLA only supported collective ops through our custom API call `torch_xla.core.xla_model.*`. In the 2.5 release, we adopt `torch.distributed.*` in PyTorch/XLA for both Dynamo and non-Dynamo cases. +## Collective ops lowering +### Collective ops lowering stack +After introducing the [traceable collective communication APIs](https://github.com/pytorch/pytorch/issues/93173), dynamo can support the collective ops with reimplementing lowering in PyTorch/XLA. The collective op is only traceable through `torch.ops._c10d_functional` call. Below is the figure that shows how the collective op, `all_reduce` in this case, is lowered between torch and torch_xla: + + +Alt Text + +_Figure 1. Collective ops lowering stack_ + +### non-Dynamo case +Collective ops are lowered through registering the `ProcessGroupXla`, which is derived from `ProcessGroup`: + +```Python +# torch_xla/distributed/xla_backend.py +def _create_xla_process_group(prefix_store, rank, size, timeout): + assert not xr.is_spmd( + ), "XLA backend is not supported with SPMD. Please use a CPU process group instead." + return ProcessGroupXla(prefix_store, rank, size, timeout) + + +def _register_xla_backend(): + dist.Backend.register_backend('xla', _create_xla_process_group, devices='xla') + + +class ProcessGroupXla(ProcessGroup): + ... + def allreduce(self, tensors, all_reduce_options): + ... + def allgather(self, output_tensors_list, input_tensors, opts=None): + ... +``` + +The corresponding xla dist backend is initialized when we call: +```Python +def _mp_fn(rank): + dist.init_process_group("xla", init_method='xla://') + +In this way, collective ops will be called based on the progress group instance: + + # E.g., pytorch/pytorch/blob/main/torch/distributed/distributed_c10d.py + @_exception_logger + def all_gather(tensor_list, tensor, group=None, async_op=False): + ... + group = group or _get_default_group() + work = group.allgather([tensor_list], [tensor]) # uses ProcessGroupXla.allgather instead +``` + +### Dynamo case +For dynamo case, certain collective ops are remapped to the new function in [pytorch/torch/distributed/_functional_collectives.py](https://github.com/pytorch/pytorch/blob/v2.5.0-rc10/torch/distributed/_functional_collectives.py#L1129-L1150). For example, `all_reduce()` will be mapped to `all_reduce_inplace()`, where eventually `torch.ops._c10d_functional.all_reduce()`. Once we reach the _c10d_functional, we can rewrite the op through PyTorch/Xla lowering: + + +```C++ +at::Tensor all_reduce(const at::Tensor& self, std::string reduceOp, + std::string /*group_name*/) {...} + +TORCH_LIBRARY_IMPL(_c10d_functional, XLA, m) { + m.impl("all_reduce", all_reduce); +} +``` + + +## API description + +For release 2.5, we now support four collective operations for both Dynamo and non-Dynamo cases. Our goal is to align the distributed operation (dist op) APIs with PyTorch's upstream implementation. While the function signatures remain consistent, certain input restrictions still apply. +For instance, specifying multiple groups for distributed collective operations is not yet supported. For usage examples, refer to [test_collective_ops_tpu.py](https://github.com/pytorch/xla/blob/v2.5.0-rc10/test/pjrt/test_collective_ops_tpu.py), which demonstrates the use of dist ops in both Dynamo and non-Dynamo scenarios. +Below are the details for each operation: +```Python +dist.all_reduce(input: torch.Tensor, op: dist.ReduceOp = ReduceOp.SUM) +``` +`all_reduce` performs an in-place reduction on the `input` tensor by aggregating data from all nodes. + +```Python +dist.all_gather_into_tensor(output, input) +``` +`all_gather_into_tensor` gathers the input tensor from all nodes and updates the `output` tensor in-place. It also returns an alias of the output. + +```Python +dist.reduce_scatter_tensor(output, input, op: dist.ReduceOp = ReduceOp.SUM) +``` +`reduce_scatter_tensor` reduces the input tensor across all nodes and distributes the result to the `output` tensor in-place. It returns an alias of the output. + +```Python +dist.all_to_all_single(output, input, output_split_sizes=None, input_split_sizes=None) +``` +`all_to_all_single` function performs an all-to-all communication, updating the output tensor in-place and returning its alias. + +Note: Although `output_split_sizes` and `input_split_sizes` are accepted as arguments, they must be either None or set to all 1s. This limitation reflects a compromise between maintaining PyTorch’s API signature and the constraints of the XLA AllToAll operation.