From 6939adbaf9912cc8eababb318a1429d175921845 Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:14:18 -0700 Subject: [PATCH 1/9] Fix misc blog things --- _posts/2024-08-07-flexattention.md | 7 +++++-- assets/images/flexattention/fg9.png | Bin 30270 -> 216153 bytes 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index 7e15ccb38727..39c633090a02 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -141,7 +141,8 @@ Soft-capping is a technique used in [Gemma2](https://huggingface.co/blog/gemma2\ ```py softcap = 20 -def soft_cap(score, b, h, q_idx, kv_idx): score = score / softcap +def soft_cap(score, b, h, q_idx, kv_idx): + score = score / softcap score = torch.tanh(score) score = score * softcap return score @@ -229,6 +230,7 @@ We benchmark it against `F.scaled_dot_product_attention` with a sliding window m ### PrefixLM ![PrefixLM diagram](/assets/images/flexattention/fg10.png){:style="max-width:600px; display:block; margin-left: auto; margin-right: auto; width:100%"} +*Source: PaliGemma: [A versatile 3B VLM for transfer](https://arxiv.org/abs/2407.07726)* The T5 architecture, proposed in [Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer](https://arxiv.org/abs/1910.10683), describes an attention variant that performs full bidirectional attention on a “prefix”, and causal attention on the rest. We again compose two mask functions to accomplish this, one for causal masking and one that is based off of the prefix length. @@ -262,7 +264,7 @@ Through `BlockMask`, we can support this efficiently in FlexAttention as well\! document_id: [SEQ_LEN] def document_masking(b, h, q_idx, kv_idx): - return document_id[q_idx] == document_id[kv_idx] + return document_id[q_idx] == document_id[kv_idx] ``` And that’s it\! In this case, we see that we end up with a blockdiagonal mask. @@ -458,6 +460,7 @@ We look forward to leveraging the approach we used here to more applications in ### Limitations and Future Work +- FlexAttention is currently available in PyTorch nightly releases, we plan to release it as a prototype feature in 2.5.0 - We did not cover how to use FlexAttention for inference here (or how to implement PagedAttention) \- we will cover those in a later post. - We are working to improve the performance of FlexAttention to match FlashAttention3 on H100 GPUs. - FlexAttention requires that all sequence lengths be a multiple of 128 \- this will be addressed soon. diff --git a/assets/images/flexattention/fg9.png b/assets/images/flexattention/fg9.png index b544dc9f86eaa075556e97060650c4b6f2e459c1..3604c5beea91f26f15335f22755ac269df1806bf 100644 GIT binary patch literal 216153 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 From 47a45c8387833ceba0aa27756ea2a853ec1d8f4a Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:24:44 -0700 Subject: [PATCH 2/9] Fix up centering --- _posts/2024-08-07-flexattention.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index 39c633090a02..e59df2c9c981 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -202,6 +202,7 @@ While the TFlops are roughly the same, the execution time is 2x faster for the m ### Sliding Window \+ Causal ![Sliding Window Causal diagrams](/assets/images/flexattention/fg8.png){:style="width:100%"} +

    Source: Mistral 7B

    Popularized by [Mistral](https://arxiv.org/abs/2310.06825), sliding window attention (also known as local attention) takes advantage of the intuition that the most recent tokens are the most useful. In particular, it allows the query token to only attend to, say, the 1024 most recent tokens. This is often used together with causal attention. @@ -230,7 +231,7 @@ We benchmark it against `F.scaled_dot_product_attention` with a sliding window m ### PrefixLM ![PrefixLM diagram](/assets/images/flexattention/fg10.png){:style="max-width:600px; display:block; margin-left: auto; margin-right: auto; width:100%"} -*Source: PaliGemma: [A versatile 3B VLM for transfer](https://arxiv.org/abs/2407.07726)* +

    Source: PaliGemma: A versatile 3B VLM for transfer

    The T5 architecture, proposed in [Exploring the Limits of Transfer Learning with a Unified Text-to-Text Transformer](https://arxiv.org/abs/1910.10683), describes an attention variant that performs full bidirectional attention on a “prefix”, and causal attention on the rest. We again compose two mask functions to accomplish this, one for causal masking and one that is based off of the prefix length. From 4fd0d7903af14cc0efb45026c433e54d13abd375 Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:31:20 -0700 Subject: [PATCH 3/9] add source for alibi --- _posts/2024-08-07-flexattention.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index e59df2c9c981..53446e936a04 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -120,6 +120,7 @@ Note that unlike typical implementations, this does *not* need to materialize a ### ALiBi Bias ![alibi bias](/assets/images/flexattention/fg6.png){:style="max-width:600px; display:block; margin-left: auto; margin-right: auto; width:100%"} +

    Source: Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation

    ALiBi was introduced in [Train Short, Test Long: Attention with Linear Biases Enables Input Length Extrapolation](https://arxiv.org/abs/2108.12409), and claims to have beneficial properties for length extrapolation at inference. Notably, MosaicML has pointed to [“lack of kernel support”](https://twitter.com/jefrankle/status/1804567458092605736) as the main reason why they eventually switched from ALiBi to rotary embeddings. From d0548ea0de91fe807e038d3bc99c0046bdbb6b5b Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:36:57 -0700 Subject: [PATCH 4/9] add authorship --- _posts/2024-08-07-flexattention.md | 1 + 1 file changed, 1 insertion(+) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index 53446e936a04..5197e56834c9 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -1,6 +1,7 @@ --- layout: blog_detail title: "FlexAttention: The Flexibility of PyTorch with the Performance of FlashAttention" +author: Team PyTorch: Horace He, Driss Guessous, Yanbo Liang, Joy Dong --- ![a cartoon chart flexing his muscles](/assets/images/flexattention/fg1.jpg){:style="width:100%"} From 8ce7620ae7c5ed492e81399f1557158484bbac7a Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:44:23 -0700 Subject: [PATCH 5/9] try again --- _posts/2024-08-07-flexattention.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index 5197e56834c9..1094a42c112e 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -1,7 +1,7 @@ --- layout: blog_detail title: "FlexAttention: The Flexibility of PyTorch with the Performance of FlashAttention" -author: Team PyTorch: Horace He, Driss Guessous, Yanbo Liang, Joy Dong +author: Team PyTorch\: Horace He, Driss Guessous, Yanbo Liang, Joy Dong --- ![a cartoon chart flexing his muscles](/assets/images/flexattention/fg1.jpg){:style="width:100%"} From 6973ca67150debddb0984c9d4fac6c44e268a150 Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:47:15 -0700 Subject: [PATCH 6/9] try --- _posts/2024-08-07-flexattention.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index 1094a42c112e..947794cdcac6 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -1,7 +1,7 @@ --- layout: blog_detail title: "FlexAttention: The Flexibility of PyTorch with the Performance of FlashAttention" -author: Team PyTorch\: Horace He, Driss Guessous, Yanbo Liang, Joy Dong +author: "Team PyTorch: Horace He, Driss Guessous, Yanbo Liang, Joy Dong" --- ![a cartoon chart flexing his muscles](/assets/images/flexattention/fg1.jpg){:style="width:100%"} From 027eceefd699cce47ffa2045e886dd5ad95629ef Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:48:06 -0700 Subject: [PATCH 7/9] Fix link --- _posts/2024-08-07-flexattention.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index 947794cdcac6..e02c3105093a 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -150,7 +150,7 @@ def soft_cap(score, b, h, q_idx, kv_idx): return score ``` -Note that we also automatically generate the backwards pass from the forwards pass here. Also, although this implementation is semantically correct, we likely want to use a tanh approximation in this case for performance reasons. See [attention-gym](https://github.com/pytorch-labs/attention-gym/blob/738268eae279c48dc8c4d1c6f40b3cfaec648831/attn\_gym/mods/softcapping.py\#L1) for more details. +Note that we also automatically generate the backwards pass from the forwards pass here. Also, although this implementation is semantically correct, we likely want to use a tanh approximation in this case for performance reasons. See [attention-gym](https://github.com/pytorch-labs/attention-gym/blob/main/attn_gym/mods/softcapping.py) for more details. ### Causal Mask From 820e0c6a2caf12e73ba686a1784f27d0daa90ae9 Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 15:57:17 -0700 Subject: [PATCH 8/9] fix all the links --- _posts/2024-08-07-flexattention.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index e02c3105093a..4a57a0b7aca6 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -139,7 +139,7 @@ This demonstrates one interesting piece of flexibility `torch.compile` provides ### Soft-capping -Soft-capping is a technique used in [Gemma2](https://huggingface.co/blog/gemma2\#soft-capping-and-attention-implementations) and Grok-1 that prevents logits from growing excessively large. In FlexAttention, it looks like: +Soft-capping is a technique used in [Gemma2](https://huggingface.co/blog/gemma2#soft-capping-and-attention-implementations) and Grok-1 that prevents logits from growing excessively large. In FlexAttention, it looks like: ```py softcap = 20 @@ -167,7 +167,7 @@ However, masking is special compared to other modifications \- if something is m ## Mask Mods -To take advantage of sparsity from masking, we need to do some more work. Specifically, by passing a `mask_mod` to [`create_block_mask`](https://github.com/pytorch/pytorch/blob/e49c0acc396e89baf8c6450e1fa0571d4ce2d4ed/torch/nn/attention/flex_attention.py\#L594), we can create a `BlockMask`. FlexAttention can then use `BlockMask` to take advantage of the sparsity\! +To take advantage of sparsity from masking, we need to do some more work. Specifically, by passing a `mask_mod` to [`create_block_mask`](https://github.com/pytorch/pytorch/blob/e49c0acc396e89baf8c6450e1fa0571d4ce2d4ed/torch/nn/attention/flex_attention.py#L594), we can create a `BlockMask`. FlexAttention can then use `BlockMask` to take advantage of the sparsity\! The signature of `mask_mod` is very similar to `score_mod` \- just without the `score`. In particular @@ -429,7 +429,7 @@ Although the results are not bitwise identical, we are confident that FlexAttent ### Performance -Generally speaking, FlexAttention is nearly as performant as a handwritten Triton kernel, which is unsurprising, as we heavily leverage a handwritten Triton kernel. However, due to its generality, we do incur a small performance penalty. For example, we must incur some additional latency to determine which block to compute next. In some cases, we provide some kernel options that can affect the performance of the kernel while changing its behavior. They can be found here: [performance knobs](https://github.com/pytorch/pytorch/blob/ee09d066d35d7e17cf7e9479c0b8bfc70cffc264/torch/_inductor/kernel/flex_attention.py\#L146-L155) +Generally speaking, FlexAttention is nearly as performant as a handwritten Triton kernel, which is unsurprising, as we heavily leverage a handwritten Triton kernel. However, due to its generality, we do incur a small performance penalty. For example, we must incur some additional latency to determine which block to compute next. In some cases, we provide some kernel options that can affect the performance of the kernel while changing its behavior. They can be found here: [performance knobs](https://github.com/pytorch/pytorch/blob/ee09d066d35d7e17cf7e9479c0b8bfc70cffc264/torch/_inductor/kernel/flex_attention.py#L146-L155) As a case study, let's explore how the knobs affect the performance of causal attention. We will compare performance of the triton kernel versus FlashAttentionv2 on A100. The script can be found [here](https://github.com/pytorch/pytorch/blob/main/benchmarks/transformer/score_mod.py). From cddae2516f72ccaea1159218dada3dfc23c1b918 Mon Sep 17 00:00:00 2001 From: Driss Guessous <32754868+drisspg@users.noreply.github.com> Date: Wed, 7 Aug 2024 18:49:50 -0700 Subject: [PATCH 9/9] ack sectioin --- _posts/2024-08-07-flexattention.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/_posts/2024-08-07-flexattention.md b/_posts/2024-08-07-flexattention.md index 4a57a0b7aca6..4c34879d33b6 100644 --- a/_posts/2024-08-07-flexattention.md +++ b/_posts/2024-08-07-flexattention.md @@ -468,3 +468,15 @@ We look forward to leveraging the approach we used here to more applications in - We are working to improve the performance of FlexAttention to match FlashAttention3 on H100 GPUs. - FlexAttention requires that all sequence lengths be a multiple of 128 \- this will be addressed soon. - We plan on adding GQA support soon \- for now, you can just replicate the kv heads. + + +### Acknowledgements + +We want to highlight some prior work (and people) that have inspired FlexAttention. + +- Tri Dao's work on FlashAttention +- Francisco Massa and the Xformers team for BlockSparseAttention in Triton +- The Jax team's work on SplashAttention +- Philippe Tillet and Keren Zhou for helping us with Triton +- Ali Hassani for discussions on neighborhood attention +- Everybody who's complained about attention kernels not supporting their favorite attention variant :) \ No newline at end of file