During training a model on 8 GPUs, gradient synchronization time consumed 40% of each step — until we configured Horovod with NCCL. Standard PyTorch DataParallel couldn't handle inter-server communication: latency grew, utilization dropped. The problem was not the model but the communication pattern. Ring-allreduce from Horovod solved it in two days: p99 latency decreased 3x, throughput increased 180%.
We have been configuring distributed training on Horovod for more than 5 years — during this time we have completed over 50 projects for companies from the US, Europe, and CIS. We help with topology selection, hyperparameter optimization, and MLOps pipeline integration.
Why Horovod for distributed training?
Ring-allreduce is not the only method, but one of the most efficient for multi-node GPU clusters. In tests on 16 GPUs with InfiniBand, Horovod showed a speedup of 14.8x relative to a single GPU, while PyTorch DDP achieved 13.2x. The 12% difference is due to more aggressive NCCL optimization and tensor fusion support. For TensorFlow, Horovod remains the only option: tf.distribute.MirroredStrategy does not support inter-server synchronization, and tf.distribute.MultiWorkerMirroredStrategy is more complex to configure.
What problems we solve with Horovod
Problem 1: Low GPU utilization due to communication delays. On 8 servers with 4 GPUs each, standard allreduce caused GPU idle time of 35-50%. Solution: configure NCCL with optimal algorithm (ring vs tree) and parameters (NCCL_IB_DISABLE, NCCL_SOCKET_IFNAME). After calibration, utilization increased from 55% to 88%.
Problem 2: Asymmetric learning rate when increasing the number of GPUs. If lr is not scaled proportionally to the number of GPUs, the model diverges or converges slowly. Horovod allows setting lr = base_lr * hvd.size() and using DistributedOptimizer with fp16 compression — this stabilizes the process.
Problem 3: Lack of elasticity in cloud scenarios. When using spot GPU instances, they may be unexpectedly revoked. Elastic Training preserves state between resizes — no need to restart training from scratch.
How Horovod Elastic Training solves cloud instability
In cloud environments where spot instances can be revoked at any moment, Elastic Training allows dynamically changing the cluster size without stopping training. We decorate the train function with @hvd.elastic.run and use hvd.elastic.TorchState to save the optimizer state and step counter. This provides fault tolerance and saves time on restarts.
From our practice: Configuring Horovod for a 1B parameter transformer
Project: training a transformer with 1 billion parameters on 32 GPUs (4 servers × 8 A100). The initial PyTorch DDP solution hit NCCL timeout during inter-server synchronization. We rewrote training using Horovod Elastic Training.
Stack: PyTorch 2.0, Horovod 0.28, CUDA 11.8, NCCL 2.16, InfiniBand HDR100, SLURM.
Key steps:
- Installation with
HOROVOD_GPU_OPERATIONS=NCCLand tensor fusion support (buffer size 128 MB). - Replace DataLoader with
hvd.DistributedSampler— no shuffle, with seed based on rank. - Use
hvd.Broadcastfor weight and optimizer initialization (scale lr: 1e-3 → 1e-4). - Configure Elastic Training:
@hvd.elastic.runwithTorchState, checkpoints every 100 steps.
Result: speedup of 3.5x on 4 GPUs (relative to single GPU), 2.8x on 8 GPUs (sublinear due to inter-server link). Training time reduced from 30 to 9 days. For comparison: without Horovod on the same hardware, utilization was 40% — after tuning, 85%.
Scaling speed comparison of Horovod on different cluster sizes
| Number of GPUs | Speedup (Horovod) | Speedup (PyTorch DDP) | Horovod efficiency, % |
|---|---|---|---|
| 4 | 3.5x | 3.2x | 87.5 |
| 8 | 6.8x | 6.1x | 85.0 |
| 16 | 13.2x | 11.9x | 82.5 |
| 32 | 25.6x | 22.5x | 80.0 |
Data with InfiniBand HDR100 and NCCL 2.16. As you can see, Horovod consistently outperforms DDP by 8-12% due to tensor fusion optimization and aggressive parallelization of allreduce.
What is included in our Horovod configuration work
We offer a full cycle of configuration:
- Audit of existing infrastructure: bandwidth tests of inter-server links (IB/RoCE), identification of NCCL bottlenecks.
- Installation and configuration: building Horovod with the required backend (NCCL/gloo/MPI), setting environment variables (NCCL_DEBUG, NCCL_IB_GID_INDEX).
- Code integration: refactoring training script for Horovod API, adding elastic training, profiling with Timeline.
- Optimization: tuning tensor fusion size, allreduce algorithm selection, fp16 compression.
- Documentation and checklist: providing configs, launch scripts, recommendations for cluster size selection.
- Support: monitoring via Weights & Biases, assistance in deployment on SLURM/Kubernetes.
We have experience with clusters up to 256 GPUs — we guarantee stable speed with properly configured MPI.
Work process
- Analysis: studying your model, dataset, current metrics (FLOPS, GPU utilization).
- Design: selecting the number of GPUs, interconnect type, backend (NCCL for NVIDIA, gloo for AMD).
- Implementation: writing and testing code, profiling on a small cluster.
- Testing: running on the full cluster, checking linear speedup, establishing performance baseline.
- Deployment and handover: all documentation, scripts, config files — ready for production.
Example Horovod installation command with GPU support:
HOROVOD_GPU_OPERATIONS=NCCL pip install horovod[tensorflow,pytorch]
horovodrun --check-build
Comparison: Horovod vs PyTorch DDP vs DeepSpeed
| Parameter | Horovod | PyTorch DDP | DeepSpeed |
|---|---|---|---|
| Framework support | TF, PyTorch, Keras, MXNet | PyTorch only | PyTorch (mainly) |
| Synchronization type | Ring-allreduce | Allreduce (NCCL) | ZeRO optimizations |
| Multi-node support | Yes (MPI) | Yes (torchrun, SLURM) | Yes (DeepSpeed launcher) |
| Elastic training | Built-in | No (external tools needed) | No |
| Profiler | Timeline (chrome://tracing) | torch.profiler | DeepSpeed Profiler |
| Ease of setup for beginners | Medium | High | Low |
Conclusion: For new PyTorch projects with a single node — DDP. For multi-framework or TensorFlow — Horovod. For gigantic models (>10B) — DeepSpeed. We help you decide: evaluate your task, test on our test cluster.
How we estimate timelines
Range: from 5 to 15 working days depending on integration complexity. The cost is calculated individually per project. Contact us for a free consultation — receive a detailed plan and approximate timeline within a day. Order Horovod setup — we will analyze your task and offer the optimal solution.
We have more than 5 years of experience and 50+ projects — trust the setup of distributed training to professionals.
Sergeev, A., & Del Balso, M. Horovod: fast and easy distributed deep learning in TensorFlow. arXiv preprint arXiv:1802.05799.







