Distributed Training
Distributed training
When training on a single CPU is too slow, we can use multiple CPUs. This guide focuses on PyTorch-based DDP enabling distributed CPU training efficiently.
Distributed training on multiple CPUs is launched by mpirun which supports both Gloo and oneCCL as collective communication backends. And for performance seek, Intel recommends to use oneCCL backend.
Intelยฎ oneCCL (collective communications library) is a library for efficient distributed deep learning training implementing such collectives like allreduce, allgather, alltoall. For more information on oneCCL, please refer to the oneCCL documentation and oneCCL specification.
Module oneccl_bindings_for_pytorch
(torch_ccl
before version 1.12) implements PyTorch C10D ProcessGroup API and can be dynamically loaded as external ProcessGroup and only works on Linux platform now
Check more detailed information for oneccl_bind_pt.
We will show how to use oneCCL backend-ed distributed training as below steps.
Intelยฎ oneCCL Bindings for PyTorch installation:
Wheel files are available for the following Python versions:
1.12.1
โ
โ
โ
โ
1.12.0
โ
โ
โ
โ
1.11.0
โ
โ
โ
โ
1.10.0
โ
โ
โ
โ
Copied
where {pytorch_version}
should be your PyTorch version, for instance 1.12.0. Versions of oneCCL and PyTorch must match. oneccl_bindings_for_pytorch
1.12.0 prebuilt wheel does not work with PyTorch 1.12.1 (it is for PyTorch 1.12.0) PyTorch 1.12.1 should work with oneccl_bindings_for_pytorch
1.12.1
MPI tool set for Intelยฎ oneCCL 1.12.0
Copied
for Intelยฎ oneCCL whose version < 1.12.0
Copied
The following command enables training with 2 processes on one node, with one process running per one socket. The variables OMP_NUM_THREADS/CCL_WORKER_COUNT can be tuned for optimal performance.
Copied
The following command enables training with a total of four processes on two nodes (node0 and node1, taking node0 as the main process), ppn (processes per node) is set to 2, with one process running per one socket. The variables OMP_NUM_THREADS/CCL_WORKER_COUNT can be tuned for optimal performance.
In node0, you need to create a configuration file which contains the IP addresses of each node (for example hostfile) and pass that configuration file path as an argument.
Copied
Now, run the following command in node0 and 4DDP will be enabled in node0 and node1:
Copied
Last updated