From 027074f4d0503e4fc077beb069e651435979b7b2 Mon Sep 17 00:00:00 2001 From: Stas Bekman Date: Fri, 10 Dec 2021 18:24:38 -0800 Subject: [PATCH] [doc] document MoE model approach and current solutions (#14725) * document MoE model approach * additional info from Samyam * fix --- docs/source/imgs/perf-moe-transformer.png | Bin 0 -> 72860 bytes docs/source/performance.md | 34 +++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 docs/source/imgs/perf-moe-transformer.png diff --git a/docs/source/imgs/perf-moe-transformer.png b/docs/source/imgs/perf-moe-transformer.png new file mode 100644 index 0000000000000000000000000000000000000000..5999f55d2a7372ed086a6a4d4811162fe0c12eb2 GIT binary patch literal 72860 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�V8Pn7O{KN|frby}s=OwE4XfPZb7?MGd~ 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 z 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 MPZTAK#Pz)X2NVFafdBvi literal 0 HcmV?d00001 diff --git a/docs/source/performance.md b/docs/source/performance.md index f60226353e..74d05ebeab 100644 --- a/docs/source/performance.md +++ b/docs/source/performance.md @@ -55,7 +55,7 @@ Software: - fp16/bf16 (smaller data/faster throughput) - tf32 (faster throughput) - Gradient checkpointing - +- Sparsity ## Hardware @@ -490,6 +490,38 @@ One of the important requirements to reach great training speed is the ability t pytorch-nightly introduced `torch.optim._multi_tensor` which should significantly speed up the optimizers for situations with lots of small feature tensors. It should eventually become the default, but if you want to experiment with it sooner and don't mind using the bleed-edge, see: https://github.com/huggingface/transformers/issues/9965 +### Sparsity + +#### Mixture of Experts + +Quite a few of the recent papers reported a 4-5x training speedup and a faster inference by integrating +Mixture of Experts (MoE) into the Transformer models. + +Since it has been discovered that more parameters lead to better performance, this technique allows to increase the number of parameters by an order of magnitude without increasing training costs. + +In this approach every other FFN layer is replaced with a MoE Layer which consists of many experts, with a gated function that trains each expert in a balanced way depending on the input token's position in a sequence. + +![MoE Transformer 2x block](/imgs/perf-moe-transformer.png) + +(source: [GLAM](https://ai.googleblog.com/2021/12/more-efficient-in-context-learning-with.html)) + +You can find exhaustive details and comparison tables in the papers listed at the end of this section. + +The main drawback of this approach is that it requires staggering amounts of GPU memory - almost an order of magnitude larger than its dense equivalent. Various distillation and approaches are proposed to how to overcome the much higher memory requirements. + +There is direct trade-off though, you can use just a few experts with a 2-3x smaller base model instead of dozens or hundreds experts leading to a 5x smaller model and thus increase the training speed moderately while increasing the memory requirements moderately as well. + +Most related papers and implementations are built around Tensorflow/TPUs: + +- [GShard: Scaling Giant Models with Conditional Computation and Automatic Sharding](https://arxiv.org/abs/2006.16668) +- [Switch Transformers: Scaling to Trillion Parameter Models with Simple and Efficient Sparsity](https://arxiv.org/abs/2101.03961) +- [GLaM: Generalist Language Model (GLaM)](https://ai.googleblog.com/2021/12/more-efficient-in-context-learning-with.html) + +And for Pytorch DeepSpeed has built one as well: [Mixture of Experts](https://www.deepspeed.ai/tutorials/mixture-of-experts/) - blog posts: [1](https://www.microsoft.com/en-us/research/blog/deepspeed-powers-8x-larger-moe-model-training-with-high-performance/), [2](https://www.microsoft.com/en-us/research/publication/scalable-and-efficient-moe-training-for-multitask-multilingual-models/) and specific deployment with large transformer-based natural language generation models: [blog post](https://www.deepspeed.ai/news/2021/12/09/deepspeed-moe-nlg.html), [Megatron-Deepspeed branch](Thttps://github.com/microsoft/Megatron-DeepSpeed/tree/moe-training). + + + + ## Contribute This document is far from being complete and a lot more needs to be added, so if you have additions or corrections to make please don't hesitate to open a PR or if you aren't sure start an Issue and we can discuss the details there.