From 94b3582a4678af8778b2cbe84bcf7df1b3da7bd7 Mon Sep 17 00:00:00 2001 From: lucasdelimanogueira Date: Fri, 24 May 2024 18:31:59 -0300 Subject: [PATCH] test broadcast and all reduce --- norch/csrc/distributed.cpp | 6 +----- norch/csrc/distributed.h | 2 ++ norch/csrc/distributed.o | Bin 178792 -> 0 bytes norch/distributed/distributed.py | 2 +- train.py | 21 +++++++++++++-------- 5 files changed, 17 insertions(+), 14 deletions(-) delete mode 100755 norch/csrc/distributed.o diff --git a/norch/csrc/distributed.cpp b/norch/csrc/distributed.cpp index 666c435..8124ec0 100644 --- a/norch/csrc/distributed.cpp +++ b/norch/csrc/distributed.cpp @@ -46,17 +46,13 @@ void broadcast_tensor(Tensor* tensor) { cudaStreamDestroy(stream); } -void allreduce_mean_tensor(Tensor* tensor) { +void allreduce_sum_tensor(Tensor* tensor) { cudaStream_t stream; cudaStreamCreate(&stream); // Perform NCCL AllReduce operation to calculate the sum of all tensors across all processes NCCL_CHECK(ncclAllReduce(tensor->data, tensor->data, tensor->size, ncclFloat, ncclSum, nccl_comm, stream)); - // Divide the sum by the world size to get the mean - float scale = 1.0f / world_size; - scalar_mul_tensor_cuda(tensor, scale, tensor->data); - cudaStreamSynchronize(stream); cudaStreamDestroy(stream); } diff --git a/norch/csrc/distributed.h b/norch/csrc/distributed.h index 40da266..1040fc0 100644 --- a/norch/csrc/distributed.h +++ b/norch/csrc/distributed.h @@ -21,6 +21,8 @@ extern "C" { void init_process_group(int rank, int world_size); + void broadcast_tensor(Tensor* tensor); + void allreduce_sum_tensor(Tensor* tensor); } #endif /* DISTRIBUTED_H */ diff --git a/norch/csrc/distributed.o b/norch/csrc/distributed.o deleted file mode 100755 index 144f330cbae42f669eb351ae0f7955c39ef2f718..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 178792 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 m|1*q|(XNaoXNdOH$>*o