From 1d0ad05fb139af91a45d10e86937fa50ae7db9a3 Mon Sep 17 00:00:00 2001 From: Stas Bekman Date: Fri, 10 Dec 2021 16:22:20 -0800 Subject: [PATCH 1/3] document MoE model approach --- docs/source/imgs/perf-moe-transformer.png | Bin 0 -> 72860 bytes docs/source/performance.md | 32 +++++++++++++++++++++- 2 files changed, 31 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 f60226353ecc..a72713555668 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,36 @@ 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. + +Most 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: [blog post](https://www.deepspeed.ai/news/2021/12/09/deepspeed-moe-nlg.html), [code](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. From 3338b4fa304dcecc0f93360c35d66a5e1dbcf6df Mon Sep 17 00:00:00 2001 From: Stas Bekman Date: Fri, 10 Dec 2021 18:12:49 -0800 Subject: [PATCH 2/3] additional info from Samyam --- docs/source/performance.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/docs/source/performance.md b/docs/source/performance.md index a72713555668..a67562925995 100644 --- a/docs/source/performance.md +++ b/docs/source/performance.md @@ -509,13 +509,16 @@ You can find exhaustive details and comparison tables in the papers listed at th 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. -Most implementations are built around Tensorflow/TPUs: +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: [blog post](https://www.deepspeed.ai/news/2021/12/09/deepspeed-moe-nlg.html), [code](Thttps://github.com/microsoft/Megatron-DeepSpeed/tree/moe-training) +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). From 5dc7fa9bd689b68049a0fed69a431e375ca19066 Mon Sep 17 00:00:00 2001 From: Stas Bekman Date: Fri, 10 Dec 2021 18:17:54 -0800 Subject: [PATCH 3/3] fix --- docs/source/performance.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/source/performance.md b/docs/source/performance.md index a67562925995..74d05ebeabfc 100644 --- a/docs/source/performance.md +++ b/docs/source/performance.md @@ -517,8 +517,7 @@ Most related papers and implementations are built around Tensorflow/TPUs: - [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). +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).