You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
DeepSpeed ZeRO Stage 3 shards the optimizer states, gradients and the model parameters (also optionally activations). Sharding model parameters and activations comes with an increase in distributed communication, however allows you to scale your models massively from one GPU to multiple GPUs.
795
+
**The DeepSpeed team report the ability to fine-tune models with over 40B parameters on a single GPU and over 2 Trillion parameters on 512 GPUs.** For more information we suggest checking the `DeepSpeed ZeRO-3 Offload documentation <https://www.deepspeed.ai/news/2021/03/07/zero3-offload.html>`__.
796
+
797
+
We've ran benchmarks and give a simple example of how all these features in Lightning, which you can see at `minGPT <https://github.com/SeanNaren/minGPT/tree/stage3>`_.
798
+
799
+
Currently this functionality is only available on master and will be included in our next 1.3 Release Candidate and 1.3 release.
To reach the highest memory efficiency or model size, you must:
807
+
808
+
1. Use the DeepSpeed Plugin with the stage 3 parameter
809
+
2. Use CPU Offloading to offload weights to CPU, plus have a reasonable amount of CPU RAM to offload onto
810
+
3. Use DeepSpeed Activation Checkpointing to shard activations
811
+
812
+
Below we describe how to enable all of these to see benefit. **With all these improvements we reached 45 Billion parameters training a GPT model on 8 GPUs with ~1TB of CPU RAM available**.
813
+
814
+
Also please have a look at our :ref:`deepspeed-zero-stage-3-tips` which contains a lot of helpful information when configuring your own models.
815
+
816
+
.. note::
817
+
Currently we only support non-elastic checkpointing. This means saving the model across GPUs will save shards of the model on all processes, which will then require the same amount of GPUS to load.
818
+
This additionally means for inference you must use the ``Trainer.test` or ``Trainer.predict`` functionality as described below, to ensure we set up the distributed environment correctly.
819
+
820
+
This limitation is actively being worked on and will be resolved in the near future.
821
+
822
+
.. code-block:: python
823
+
824
+
from pytorch_lightning import Trainer
825
+
from pytorch_lightning.plugins import DeepSpeedPlugin
When instantiating really large models, it is sometimes necessary to shard the model layers instantly.
845
+
846
+
This is the case if layers may not fit on one single machines CPU or GPU memory, but would fit once sharded across multiple machines.
847
+
We expose a hook that layers initialized within the hook will be sharded instantly on a per layer basis, allowing you to instantly shard models.
848
+
849
+
This reduces the time taken to initialize very large models, as well as ensure we do not run out of memory when instantiating larger models. For more information you can refer to the DeepSpeed docs for `Constructing Massive Models <https://deepspeed.readthedocs.io/en/latest/zero3.html>`_.
850
+
851
+
.. note::
852
+
When using ``configure_sharded_model`` hook to shard models, note that ``LightningModule.load_from_checkpoint`` for loading saved checkpoints may not work. If you've trained on one GPU, you can manually instantiate the model and call the hook,
853
+
however when using multiple GPUs, this will not work as ``LightningModule.load_from_checkpoint`` doesn't support sharded checkpoints.
854
+
855
+
We recommend using the ``Trainer`` and using ``Trainer.test`` or ``Trainer.predict`` for inference.
856
+
857
+
.. code-block:: python
858
+
859
+
from pytorch_lightning import Trainer
860
+
from pytorch_lightning.plugins import DeepSpeedPlugin
861
+
from deepspeed.ops.adam import FusedAdam
862
+
863
+
classMyModel(pl.LightningModule):
864
+
...
865
+
defconfigure_sharded_model(self):
866
+
# Created within sharded model context, modules are instantly sharded across processes
DeepSpeed ZeRO Stage 3 Offloads optimizer state, gradients to the host CPU to reduce memory usage as ZeRO Stage 2 does, however additionally allows you to offload the parameters as well for even more memory saving.
885
+
886
+
.. code-block:: python
887
+
888
+
from pytorch_lightning import Trainer
889
+
from pytorch_lightning.plugins import DeepSpeedPlugin
partition_activations=True, # Optionally move activations to CPU if you have enough memory
936
+
cpu_checkpointing=True# Optionally Partition activations across machines
937
+
),
938
+
precision=16
939
+
)
940
+
trainer.fit(model)
941
+
942
+
943
+
.. _deepspeed-zero-stage-3-tips:
944
+
945
+
DeepSpeed ZeRO Stage 3 Tips
946
+
"""""""""""""""""""""""""""
947
+
948
+
Here are some helpful information when setting up DeepSpeed ZeRO Stage 3 with Lightning.
949
+
950
+
* If you're using Adam or AdamW, ensure to use FusedAdam or DeepSpeedCPUAdam (for CPU Offloading) rather than the default torch optimizers as they come with large speed benefits
951
+
* Treat your GPU/CPU memory as one large pool. In some cases, you may not want to offload certain things (like activations) to provide even more space to offload model parameters
952
+
* When offloading to the CPU, make sure to bump up the batch size as GPU memory will be freed
0 commit comments