From cb8ea868f8dda0692f1d1325e97c9a211bcab65a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sof=C3=ADa=20Guerra?=
<106115312+sofiaguerraber@users.noreply.github.com>
Date: Tue, 29 Nov 2022 14:07:42 -0300
Subject: [PATCH 01/13] Creating blog post
---
...training-foundation-models-on-ibm-cloud.md | 78 ++++++++++++++++++
...ch-fsdp-image1-IBM_scaling_FSDP_visual.png | Bin 0 -> 1026664 bytes
2 files changed, 78 insertions(+)
create mode 100644 _posts/2022-11-29-scaling-pytorch-fsdp-for-training-foundation-models-on-ibm-cloud.md
create mode 100644 assets/images/scaling-pytorch-fsdp-image1-IBM_scaling_FSDP_visual.png
diff --git a/_posts/2022-11-29-scaling-pytorch-fsdp-for-training-foundation-models-on-ibm-cloud.md b/_posts/2022-11-29-scaling-pytorch-fsdp-for-training-foundation-models-on-ibm-cloud.md
new file mode 100644
index 000000000000..b40a0137f8b9
--- /dev/null
+++ b/_posts/2022-11-29-scaling-pytorch-fsdp-for-training-foundation-models-on-ibm-cloud.md
@@ -0,0 +1,78 @@
+---
+layout: blog_detail
+title: "Scaling PyTorch FSDP for Training Foundation Models on IBM Cloud"
+author: Less Wright, Hamid Shojanazeri, Geeta Chauhan
+featured-img: "/assets/images/scaling-pytorch-fsdp-image1-IBM_scaling_FSDP_visual.png"
+---
+
+Large model training using a cloud native approach is of growing interest for many enterprises given the emergence and success of [foundation models](https://research.ibm.com/blog/what-are-foundation-models). Some AI practitioners may assume that the only way they can achieve high GPU utilization for distributed training jobs is to run them on HPC systems, such as those inter-connected with Infiniband and may not consider Ethernet connected systems. We demonstrate how the latest distributed training technique, Fully Sharded Data Parallel (FSDP) from PyTorch, successfully scales to models of size 10B+ parameters using commodity Ethernet networking in IBM Cloud.
+
+## PyTorch FSDP Scaling
+
+As models get larger, the standard techniques for data parallel training work only if the GPU can hold a full replica of the model, along with its training state (optimizer, activations, etc.). However, GPU memory increases have not kept up with the model size increases and new techniques for training such models have emerged (e.g., Fully Sharded Data Parallel, [DeepSpeed](https://www.deepspeed.ai/)), which allow us to efficiently distribute the model and data over multiple GPUs during training. In this blog post, we demonstrate a path to achieve remarkable scaling of model training to 64 nodes (512 GPUs) using PyTorch native FSDP APIs as we increase model sizes to 11B.
+
+### What is Fully Sharded Data Parallel?
+
+FSDP extends the distributed data parallel training (DDP) approach by sharding model parameters, gradient and optimizer states into K FSDP units, determined by using a wrapping policy. FSDP achieves large model training efficiency in terms of resources and performance by significantly reducing the memory footprint on each GPU and overlapping computation and communication.
+
+Resource efficiency is achieved with memory footprint reduction by having all GPUs own a portion of each FSDP unit. To process a given FSDP unit, all GPUs share their locally owned portion via all_gather communication calls.
+
+Performance efficiency is accomplished by overlapping all_gather communication calls for upcoming FSDP units with computation of the current FSDP unit. Once the current FSDP unit has been processed, the non-locally owned parameters are dropped, freeing memory for the upcoming FSDP units. This process achieves training efficiency by the overlap of computation and communication, while also reducing the peak memory needed by each GPU.
+
+In what follows, we demonstrate how FSDP allows us to keep hundreds of GPUs highly utilized throughout a distributed training job, while running over standard Ethernet networking (system description towards the end of the blog). We chose the T5 architecture for our experiments and leveraged the code from the [FSDP workshop](https://github.com/pytorch/workshops/tree/master/FSDP_Workshop). In each of our experiments, we start with a single node experiment to create a baseline and report the metric seconds/iteration normalized by the batch size as well as compute the teraflops based on the [Megatron-LM paper](https://cs.stanford.edu/~matei/papers/2021/sc_megatron_lm.pdf) (see Appendix for details of teraflop computation for T5). Our experiments aim to maximize the batch size (while avoiding cudaMalloc retries) to take full advantage of overlap in computation and communications, as discussed below. Scaling is defined as the ratio of the seconds/iteration normalized by batch size for N nodes versus a single node, representing how well we can utilize the additional GPUs as more nodes are added.
+
+### Experimental Results
+
+Our first set of experiments using the T5-3B configuration (mixed precision with BF16, activation checkpointing, and transformer wrapping policy) demonstrated scaling efficiency of 95% as we increased the number of GPUs from 8 to 512 (1 to 64 nodes, respectively). We achieved these results without any modifications to the existing FSDP APIs. We observed that, for this scale, over Ethernet based network, there is sufficient bandwidth to enable continuous overlap of communication and computation.
+
+However, when we increased the T5 model size to 11B, the scaling efficiency declined substantially to 20%. The PyTorch profiler shows that overlap of communication and computation was very limited. Further investigation into the network bandwidth usage revealed that the poor overlap is being caused by latency in the communication of individual packets and not the bandwidth required (in fact, our peak bandwidth utilization is 1/4th of that available). This led us to hypothesize that if we can increase the compute time by increasing the batch size, we can better overlap communication and computation. However, given we are already at maximum GPU memory allocation, we must identify opportunities to rebalance the memory allocation to allow for increase in batch size. We identified that the model state was being allocated a lot more memory than was needed. The primary function of these reservations is to have pre-reserved memory ready to aggressively send/receive tensors during the communication periods and too few buffers can result in increased wait times, whereas too many buffers result in smaller batch sizes.
+
+To achieve better efficiency, the PyTorch distributed team introduced a new control knob, the rate_limiter which controls how much memory is allocated for send/receive of tensors, alleviating the memory pressure and providing room for higher batch sizes. In our case, the rate_limiter could increase the batch size from 20 to 50, thus increasing compute time by 2.5x and allowing for much greater overlap of communication and computation. With this fix, we increased the scaling efficiency to >75% (at 32 nodes)!
+
+Continued investigation into the factors limiting scaling efficiency uncovered that the rate limiter was creating a recurring pipeline bubble of GPU idle time. This was due to the rate limiter using a block and flush approach for the allocation and release of each set of memory buffers. By waiting for the entire block to complete before initiating a new all_gather, the GPU was idling at the start of each block, while waiting for the new set of all_gather parameters to arrive. This bubble was alleviated by moving to a sliding window approach. Upon the completion of a single all_gather step and its computation (rather than a block of them), the memory is freed and the next all_gather is immediately issued in a much more uniform manner. This improvement eliminated the pipeline bubble and boosted the scaling efficiencies to >90% (at 32 nodes).
+
+
+
+
+
+
+ Figure 1: Scaling of T5-XL (3B) and T5-XXL (11B) from 1 node to 64 nodes
+
+
+
+
+
+
+
+ Figure 2: TFLOPs/sec usage for T5-XL(3B) and T5-XXL (11B) as we increase number of nodes
+
+
+## IBM Cloud AI System and Middleware
+
+The AI infrastructure used for this work is a large-scale AI system on IBM Cloud consisting of nearly 200 nodes, each node with 8 NVIDIA A100 80GB cards, 96 vCPUs, and 1.2TB CPU RAM. The GPU cards within a node are connected via NVLink with a card-to-card bandwidth of 600GBps. Nodes are connected by 2 x 100Gbps Ethernet links with SRIOV based TCP/IP stack, providing a usable bandwidth of 120Gbps.
+
+The IBM Cloud AI System has been production-ready since May of 2022 and is configured with the OpenShift container platform to run AI workloads. We also built a software stack for production AI workloads that provide end-to-end tools for training workloads. The middleware leverages Ray for pre and post processing workloads and PyTorch for training of models. We also integrate a Kubernetes native scheduler, MCAD, that manages multiple jobs with job queuing, gang scheduling, prioritization, and quota management. A multi-NIC CNI discovers all available network interfaces and handles them as a single NIC pool enabling optimized use of the network interfaces in Kubernetes. Finally, CodeFlare CLI supports a single pane for observability of the full stack using a desktop CLI (e.g., GPU utilization, application metrics like loss, gradient norm).
+
+
+ Figure 3: Foundation Model Middleware Stack
+
+
+### Conclusion and Future Work
+
+In conclusion, we demonstrated how we can achieve remarkable scaling of FSDP APIs over non-InfiniBand networks. We identified the bottleneck that had limited scaling to less than 20% efficiency for 11B parameter model training. After identifying the issue, we were able to correct this with a new rate limiter control to ensure a more optimal balance of reserved memory and communication overlap relative to compute time. With this improvement, we were able to achieve 90% scaling efficiency (a 4.5x improvement), at 256 GPUs and 80% at 512 GPUs for training of the 11B parameter model. In addition, the 3B parameter model scales extremely well with 95% efficiency even as we increase the number of GPUs to 512.
+
+This is a first in the industry to achieve such scaling efficiencies for up to 11B parameter models using Kubernetes with vanilla Ethernet and PyTorch native FSDP API’s. This improvement enables users to train huge models on a Hybrid Cloud platform in a cost efficient and sustainable manner.
+
+We plan on continuing to investigate scaling with decoder only models and increasing the size of these models to 100B+ parameters. From a system design perspective, we are exploring capabilities such as RoCE and GDR that can improve latencies of communications over Ethernet networks.
+
+## Acknowledgements
+
+This blog was possible because of contributions from both PyTorch Distributed and IBM Research teams. From the PyTorch Distributed team, we would like to thank Less Wright, Hamid Shojanazeri, Geeta Chauhan, Shen Li, Rohan Varma, Yanli Zhao, Andrew Gu, Anjali Sridhar, Chien-Chin Huang, and Bernard Nguyen. From the IBM Research team, we would like to thank Linsong Chu, Sophia Wen, Lixiang (Eric) Luo, Marquita Ellis, Davis Wertheimer, Supriyo Chakraborty, Raghu Ganti, Mudhakar Srivatsa, Seetharami Seelam, Carlos Costa, Abhishek Malvankar, Diana Arroyo, Alaa Youssef, Nick Mitchell.
+
+## Appendix
+
+#### Teraflop computation
+
+The T5-XXL (11B) architecture has two types of T5 blocks, one is an encoder and the second is a decoder. Following the approach of Megatron-LM, where each matrix multiplication requires FLOPs, where the first matrix is of size and the second is . The encoder block consists of self-attention and feed forward layers, whereas the decoder block consists of self-attention, cross-attention, and feed forward layers.
+
+The attention (both self and cross) block consists of QKV projection, requires operations, attention matrix computation requiring operations, attention over values needs computations, and post-attention linear projection requires operations. Finally, the feed forward layer requires operations. The total for an encoder block is , whereas for a decoder block, it comes to . With a total of 12 encoder and 12 decoder blocks and 2 forward pass (as we discard the activations) and one backward pass (equivalent to two forward passes), the final FLOPs computation comes to be , where B is the batch size per GPU, s is sequence length, h is hidden state size, V is vocabulary size. We repeat a similar computation for T5-XL (3B) architecture, which is slightly different.
\ No newline at end of file
diff --git a/assets/images/scaling-pytorch-fsdp-image1-IBM_scaling_FSDP_visual.png b/assets/images/scaling-pytorch-fsdp-image1-IBM_scaling_FSDP_visual.png
new file mode 100644
index 0000000000000000000000000000000000000000..10f97abb662c56ec15fa7cd6bd8bd7683b5fce8a
GIT binary patch
literal 1026664
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