From 38867c97d081bc073bf8ae3fe9f70952131ce642 Mon Sep 17 00:00:00 2001 From: Angel Li Date: Mon, 24 Nov 2025 11:13:51 -0800 Subject: [PATCH 1/2] varlen attention tutorial --- _static/img/varlen_diagram.png | Bin 0 -> 212324 bytes .../variable_length_attention_tutorial.ipynb | 331 ++++++++++++++++++ 2 files changed, 331 insertions(+) create mode 100644 _static/img/varlen_diagram.png create mode 100644 intermediate_source/variable_length_attention_tutorial.ipynb diff --git a/_static/img/varlen_diagram.png b/_static/img/varlen_diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c82ce4f99bb6293390a69b5668b74232682622e1 GIT binary patch literal 212324 zcmeGEcT`i`_67`t2&gm_K>_IkN|oN5^p5n73ZeHBI-#f(5s)e!r1utjSLwZXLJvLk zNJ;X=bM#*C_Z#nc-}C>;7|Gt*d#_#QT63=FdFD*Q)K%pO?vUTXz`!6-keAlLz__D| zfq}((3kSXB(dd9S1_r*ewUm^)f|L}Ex{ITQwH*KhLq05C7gtZSmo(i_gZAbvX$i$G zmAjwrODNuA3pk|VE4~!dgj3$Fe635`d0;?_$IP<(rlYL+ zHm2LGZYw{8-vfCyoCF#Y^w?Yy#u%Bu(6A;fx-C)mM2(bqZlY0)4_AXRmQ`*PvJzo@ zd2qa`d6J{pO#X(F%-hGFFfUNPxkM8BRE3}x;xe5{v*9VQY_{&88b3CL$xbUNn8T-*auhC zP~zi9ZAuQ2Z(b4F>P>P3XgT{nzg|i=S0mJX;~pw5KSoDKJB5SM+4)t>hrz;v`NgXC zdBI1Cp?88<%Awsou5Y{$z7f&XcX29dzi-E+h93H-e06h<9>durVk3qgt

d*DF3D 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

lv%L$oC>fOK)6TyD+@g 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 **Note:** \n", + "> This tutorial currently requires you to use the PyTorch nightly build.\n", + "\n", + "### What you will learn\n", + "\n", + "- Variable length attention and how it differs from `scaled_dot_product_attention`\n", + "- Explore an example of how to use `varlen_attn` in a simple Transformer attention layer \n", + "\n", + "### Prerequisites\n", + "\n", + "- PyTorch v2.10.0.dev or later\n", + "- A basic understanding of attention and our current offerings. Please reference these tutorials for more details on flex attention and SDPA. " + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Overview of Variable Length Attention \n", + "\n", + "In normal SDPA, sequences are expected to be a fixed length. In practice, this means that input tensors are often **padded** to the same length in a batch. However, this wastes both memory and compute through storing this padding and performing unnecessary computations. \n", + "\n", + "Variable length attention handles sequences of varying length by **packing** the tensors in a batch together and essentially collapsing the batch dimension. Note that NestedTensor is another way to enable variable length with packed tensors (see tutorial [here](https://docs.pytorch.org/tutorials/unstable/nestedtensor.html)).\n", + "\n", + "However, we still need to maintain the boundaries between documents. To do so, we compute cumulative sequence positions for query and key/value that mark the end of documents. In the diagram below, doc 1 is 7 tokens long, doc 2 is 10 tokens long, etc. so `cu_seq_lens = [0, 7, 17, ...]`.\n", + "\n", + "![Padding vs Packing Diagram](../_static/img/varlen_diagram.png)\n" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Definition\n", + "\n", + "Below is the definition of `varlen_attn` which returns the output tensor from the attention computation. \n", + "\n", + "```python\n", + "def varlen_attn(\n", + " query: torch.Tensor,\n", + " key: torch.Tensor,\n", + " value: torch.Tensor,\n", + " cu_seq_q: torch.Tensor,\n", + " cu_seq_k: torch.Tensor,\n", + " max_q: int,\n", + " max_k: int,\n", + " is_causal: bool = False,\n", + " return_aux: AuxRequest | None = None,\n", + ") -> torch.Tensor | tuple[torch.Tensor, torch.Tensor]:\n", + "```\n", + "\n", + "`query`, `key`, and `value` correspond to the `q`, `k`, and `v` of the packed input. `cu_seq_q` and `cu_seq_k` are the cumulative indices for query and key/value, respectively. These mark the logical boundaries that separate the documents in our input. `max_q` and `max_k` are the maximum sequence lengths of query and key, respectively. `is_causal` applies causal masking if set to True and `return_aux` specifies which auxiliary outputs to return (ie `lse`).\n", + "\n", + "**Note on causal masking**\n", + "\n", + "When `is_causal` is set to True, causal masking is applied which means that tokens can only attend to previous tokens. For bidirectional attention, set this flag to False. \n", + "\n", + "In torchtitan (PyTorch's pretraining framework), we set `is_causal = True` uniformly to prevent the model from cheating and artifically driving the loss down too quickly." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Example \n", + "\n", + "Let's walk through a simple example of how we would use `varlen_attn` in the context of training a Transformer model." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating the metadata\n", + "\n", + "Given an input batch, how would we construct the metadata that `varlen_attn` expects? More specifically, how do we calculate the cumulative sequence indices? \n", + "\n", + "The helper function `create_varlen_metadata` returns the required `cu_seqlens` and `max_seqlen` given `input_batch` and the end of sequence token ID that marks the end of documents." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "\n", + "def create_varlen_metadata(input_batch: torch.Tensor, eos_id: int):\n", + " batch_size, seq_len = input_batch.shape\n", + " device = input_batch.device\n", + " cu_seqlens_list, all_seq_lengths = [], []\n", + " offset = 0\n", + "\n", + " for b in range(batch_size):\n", + " tokens = input_batch[b]\n", + " eos_positions = (tokens == eos_id).nonzero(as_tuple=True)[0].to(torch.int32)\n", + "\n", + " # we use the position of the eos tokens to mark the end of documents\n", + " sample_cu_seqlens = torch.cat(\n", + " [\n", + " torch.tensor([0], dtype=torch.int32, device=device),\n", + " eos_positions + 1,\n", + " torch.tensor([seq_len], dtype=torch.int32, device=device),\n", + " ]\n", + " )\n", + " sample_cu_seqlens = torch.unique_consecutive(sample_cu_seqlens)\n", + "\n", + " seq_lengths = torch.diff(sample_cu_seqlens)\n", + " all_seq_lengths.append(seq_lengths)\n", + "\n", + " cu_seqlens_adjusted = sample_cu_seqlens[:-1] + offset\n", + " cu_seqlens_list.append(cu_seqlens_adjusted)\n", + "\n", + " offset += seq_len\n", + "\n", + " packed_cu_seqlens = torch.cat(\n", + " cu_seqlens_list + [torch.tensor([offset], dtype=torch.int32, device=device)]\n", + " )\n", + "\n", + " max_seqlen = 0\n", + " if len(all_seq_lengths) > 0:\n", + " all_seq_lengths = torch.cat(all_seq_lengths)\n", + " max_seqlen = all_seq_lengths.max().item()\n", + "\n", + " return packed_cu_seqlens, max_seqlen" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Defining the Attention Block\n", + "\n", + "Let's explore how we would use `varlen_attn` in an Attention module. We define an attention module as usual, but in the `forward` method, we call the new `varlen_attn` custom op. \n", + "\n", + "This function expects the `cu_seq` indices and `max_len` that we computed earlier using `create_varlen_metadata` to mark the boundaries of the different documents. \n", + "\n", + "Before we call `varlen_attn`, we also pack our input so that it has the shape `(total tokens, dim)`. Recall that variable length attention allows us to collapse the `batch_size` dimension so that we can lay out our input samples contiguously. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "from torch.nn.attention.varlen import varlen_attn\n", + "\n", + "\n", + "class SimpleVarlenAttention(nn.Module):\n", + " def __init__(self, embed_dim: int, num_heads: int):\n", + " super().__init__()\n", + " self.embed_dim = embed_dim\n", + " self.num_heads = num_heads\n", + " self.head_dim = embed_dim // num_heads\n", + "\n", + " self.qkv_proj = nn.Linear(embed_dim, 3 * embed_dim, bias=False)\n", + " self.out_proj = nn.Linear(embed_dim, embed_dim, bias=False)\n", + "\n", + " def forward(\n", + " self, x: torch.Tensor, cu_seq: torch.Tensor, max_len: int\n", + " ) -> torch.Tensor:\n", + " batch_size, seq_len, _ = x.shape\n", + " x_packed = x.view(batch_size * seq_len, -1) # pack x into (total_tokens, dim)\n", + "\n", + " qkv = self.qkv_proj(x_packed)\n", + " q, k, v = qkv.chunk(3, dim=-1)\n", + "\n", + " q = q.view(-1, self.num_heads, self.head_dim)\n", + " k = k.view(-1, self.num_heads, self.head_dim)\n", + " v = v.view(-1, self.num_heads, self.head_dim)\n", + "\n", + " attn_out = varlen_attn(\n", + " query=q,\n", + " key=k,\n", + " value=v,\n", + " cu_seq_q=cu_seq,\n", + " cu_seq_k=cu_seq,\n", + " max_q=max_len,\n", + " max_k=max_len,\n", + " is_causal=True,\n", + " )\n", + " attn_out = attn_out.view(-1, self.embed_dim)\n", + " attn_out = self.out_proj(attn_out)\n", + " return attn_out.view(batch_size, seq_len, self.embed_dim)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can also use `torch.compile` with `varlen_attn` and define \n", + "\n", + "```python \n", + "compiled_varlen_attn: ClassVar[Callable] = torch.compile(\n", + " varlen_attn, mode=\"max-autotune-no-cudagraphs\"\n", + ")\n", + "```\n", + "\n", + "We can call `compiled_varlen_attn` instead of `varlen_attn` in the Attention forward, and everything else stays the same." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Creating a Transformer\n", + "\n", + "Now, we can use this `SimpleVarlenAttention` module in a simple Transformer." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "class SimpleVarlenTransformer(nn.Module):\n", + " \"\"\"\n", + " simple 1 layer transformer with varlen attention\n", + " \"\"\"\n", + "\n", + " def __init__(self, vocab_size: int, embed_dim: int, num_heads: int):\n", + " super().__init__()\n", + " self.tok_embeddings = nn.Embedding(vocab_size, embed_dim)\n", + " self.attention = SimpleVarlenAttention(embed_dim, num_heads)\n", + " self.norm = nn.LayerNorm(embed_dim)\n", + "\n", + " def forward(\n", + " self, tokens: torch.Tensor, cu_seq: torch.Tensor, max_len: int\n", + " ) -> torch.Tensor:\n", + " x = self.tok_embeddings(tokens)\n", + " x = x + self.attention(x, cu_seq, max_len)\n", + " x = self.norm(x)\n", + " return x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### Running a Training Step\n", + "\n", + "Now we're ready to put all the pieces together! Let's run a training step with our `SimpleVarlenTransformer`. We define our model, compute `cu_seq` and `max_len` using `create_varlen_metadata`, and run a forward and backward pass. " + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "def main():\n", + " torch.manual_seed(42)\n", + "\n", + " batch_size = 3\n", + " seq_len = 64\n", + " vocab_size = 1000\n", + " embed_dim = 128\n", + " num_heads = 4\n", + " eos_id = 2\n", + " num_docs = 3\n", + " device = \"cuda\"\n", + " dtype = torch.bfloat16\n", + "\n", + " model = SimpleVarlenTransformer(vocab_size, embed_dim, num_heads).to(\n", + " device=device, dtype=dtype\n", + " )\n", + "\n", + " # create input_batch tokens\n", + " input_batch = torch.randint(0, vocab_size, (batch_size, seq_len), device=device)\n", + "\n", + " for b in range(batch_size):\n", + " # getting random positions to cut the input into multiple documents\n", + " doc_positions = torch.randint(10, seq_len - 1, (num_docs - 1,))\n", + " for pos in doc_positions:\n", + " input_batch[b, pos] = eos_id # insert eos token to simulate end of sample\n", + " input_batch[b, -1] = eos_id\n", + "\n", + " cu_seq, max_len = create_varlen_metadata(input_batch, eos_id)\n", + " print(f\"cu_seq: {cu_seq}, max_len: {max_len}\") # cu_seq: tensor([0, 32, 47, 64, 92, 103, 128, 168, 177, 192]), max_len: 40\n", + "\n", + " # fwd pass\n", + " output = model(input_batch, cu_seq, max_len)\n", + " print(f\"output shape: {output.shape}\") # (3, 64, 128)\n", + "\n", + " # bwd pass\n", + " loss = output.mean()\n", + " loss.backward()\n", + "\n", + "\n", + "if __name__ == \"__main__\":\n", + " main()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Limitations \n", + "\n", + "Note that this op currently only works with NVIDIA CUDA on A100 machines or newer. Supported dtypes include BF16 and FP16.\n" + ] + } + ], + "metadata": { + "orig_nbformat": 4 + }, + "nbformat": 4, + "nbformat_minor": 2 +} From 9a5f7f4fa9d7b5d38bac464daf0af4b71e5b9691 Mon Sep 17 00:00:00 2001 From: Angel Li Date: Tue, 2 Dec 2025 07:51:30 -0800 Subject: [PATCH 2/2] convert to .py file --- compilers_index.rst | 8 + .../variable_length_attention_tutorial.ipynb | 331 ---------------- .../variable_length_attention_tutorial.py | 359 ++++++++++++++++++ 3 files changed, 367 insertions(+), 331 deletions(-) delete mode 100644 intermediate_source/variable_length_attention_tutorial.ipynb create mode 100644 intermediate_source/variable_length_attention_tutorial.py diff --git a/compilers_index.rst b/compilers_index.rst index ec426cecc80..7cb3a5153a9 100644 --- a/compilers_index.rst +++ b/compilers_index.rst @@ -89,6 +89,13 @@ control, as well as third-party backend solutions. :link: recipes/compiling_optimizer_lr_scheduler.html :tags: Model-Optimization,torch.compile +.. customcarditem:: + :header: Using Variable Length Attention with ``torch.compile`` + :card_description: Speed up training with torch.compiled variable length attention + :image: _static/img/thumbnails/cropped/generic-pytorch-logo.png + :link: intermediate/variable_length_attention_tutorial.html + :tags: Model-Optimization,torch.compile + .. customcarditem:: :header: Using User-Defined Triton Kernels with ``torch.compile`` :card_description: Learn how to use user-defined kernels with ``torch.compile`` @@ -191,6 +198,7 @@ control, as well as third-party backend solutions. recipes/torch_export_challenges_solutions recipes/compiling_optimizer recipes/compiling_optimizer_lr_scheduler + intermediate/variable_length_attention_tutorial recipes/torch_compile_user_defined_triton_kernel_tutorial recipes/torch_compile_caching_tutorial recipes/regional_compilation diff --git a/intermediate_source/variable_length_attention_tutorial.ipynb b/intermediate_source/variable_length_attention_tutorial.ipynb deleted file mode 100644 index c88ff16e950..00000000000 --- a/intermediate_source/variable_length_attention_tutorial.ipynb +++ /dev/null @@ -1,331 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Using Variable Length Attention in PyTorch\n", - "\n", - "## Summary\n", - "\n", - "In this tutorial, we will introduce a variable length attention API. This API is called `varlen_attn` and is a custom op in PyTorch, meaning it is also compilable using `torch.compile`. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "> **Note:** \n", - "> This tutorial currently requires you to use the PyTorch nightly build.\n", - "\n", - "### What you will learn\n", - "\n", - "- Variable length attention and how it differs from `scaled_dot_product_attention`\n", - "- Explore an example of how to use `varlen_attn` in a simple Transformer attention layer \n", - "\n", - "### Prerequisites\n", - "\n", - "- PyTorch v2.10.0.dev or later\n", - "- A basic understanding of attention and our current offerings. Please reference these tutorials for more details on flex attention and SDPA. " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Overview of Variable Length Attention \n", - "\n", - "In normal SDPA, sequences are expected to be a fixed length. In practice, this means that input tensors are often **padded** to the same length in a batch. However, this wastes both memory and compute through storing this padding and performing unnecessary computations. \n", - "\n", - "Variable length attention handles sequences of varying length by **packing** the tensors in a batch together and essentially collapsing the batch dimension. Note that NestedTensor is another way to enable variable length with packed tensors (see tutorial [here](https://docs.pytorch.org/tutorials/unstable/nestedtensor.html)).\n", - "\n", - "However, we still need to maintain the boundaries between documents. To do so, we compute cumulative sequence positions for query and key/value that mark the end of documents. In the diagram below, doc 1 is 7 tokens long, doc 2 is 10 tokens long, etc. so `cu_seq_lens = [0, 7, 17, ...]`.\n", - "\n", - "![Padding vs Packing Diagram](../_static/img/varlen_diagram.png)\n" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Definition\n", - "\n", - "Below is the definition of `varlen_attn` which returns the output tensor from the attention computation. \n", - "\n", - "```python\n", - "def varlen_attn(\n", - " query: torch.Tensor,\n", - " key: torch.Tensor,\n", - " value: torch.Tensor,\n", - " cu_seq_q: torch.Tensor,\n", - " cu_seq_k: torch.Tensor,\n", - " max_q: int,\n", - " max_k: int,\n", - " is_causal: bool = False,\n", - " return_aux: AuxRequest | None = None,\n", - ") -> torch.Tensor | tuple[torch.Tensor, torch.Tensor]:\n", - "```\n", - "\n", - "`query`, `key`, and `value` correspond to the `q`, `k`, and `v` of the packed input. `cu_seq_q` and `cu_seq_k` are the cumulative indices for query and key/value, respectively. These mark the logical boundaries that separate the documents in our input. `max_q` and `max_k` are the maximum sequence lengths of query and key, respectively. `is_causal` applies causal masking if set to True and `return_aux` specifies which auxiliary outputs to return (ie `lse`).\n", - "\n", - "**Note on causal masking**\n", - "\n", - "When `is_causal` is set to True, causal masking is applied which means that tokens can only attend to previous tokens. For bidirectional attention, set this flag to False. \n", - "\n", - "In torchtitan (PyTorch's pretraining framework), we set `is_causal = True` uniformly to prevent the model from cheating and artifically driving the loss down too quickly." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Example \n", - "\n", - "Let's walk through a simple example of how we would use `varlen_attn` in the context of training a Transformer model." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating the metadata\n", - "\n", - "Given an input batch, how would we construct the metadata that `varlen_attn` expects? More specifically, how do we calculate the cumulative sequence indices? \n", - "\n", - "The helper function `create_varlen_metadata` returns the required `cu_seqlens` and `max_seqlen` given `input_batch` and the end of sequence token ID that marks the end of documents." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "\n", - "def create_varlen_metadata(input_batch: torch.Tensor, eos_id: int):\n", - " batch_size, seq_len = input_batch.shape\n", - " device = input_batch.device\n", - " cu_seqlens_list, all_seq_lengths = [], []\n", - " offset = 0\n", - "\n", - " for b in range(batch_size):\n", - " tokens = input_batch[b]\n", - " eos_positions = (tokens == eos_id).nonzero(as_tuple=True)[0].to(torch.int32)\n", - "\n", - " # we use the position of the eos tokens to mark the end of documents\n", - " sample_cu_seqlens = torch.cat(\n", - " [\n", - " torch.tensor([0], dtype=torch.int32, device=device),\n", - " eos_positions + 1,\n", - " torch.tensor([seq_len], dtype=torch.int32, device=device),\n", - " ]\n", - " )\n", - " sample_cu_seqlens = torch.unique_consecutive(sample_cu_seqlens)\n", - "\n", - " seq_lengths = torch.diff(sample_cu_seqlens)\n", - " all_seq_lengths.append(seq_lengths)\n", - "\n", - " cu_seqlens_adjusted = sample_cu_seqlens[:-1] + offset\n", - " cu_seqlens_list.append(cu_seqlens_adjusted)\n", - "\n", - " offset += seq_len\n", - "\n", - " packed_cu_seqlens = torch.cat(\n", - " cu_seqlens_list + [torch.tensor([offset], dtype=torch.int32, device=device)]\n", - " )\n", - "\n", - " max_seqlen = 0\n", - " if len(all_seq_lengths) > 0:\n", - " all_seq_lengths = torch.cat(all_seq_lengths)\n", - " max_seqlen = all_seq_lengths.max().item()\n", - "\n", - " return packed_cu_seqlens, max_seqlen" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Defining the Attention Block\n", - "\n", - "Let's explore how we would use `varlen_attn` in an Attention module. We define an attention module as usual, but in the `forward` method, we call the new `varlen_attn` custom op. \n", - "\n", - "This function expects the `cu_seq` indices and `max_len` that we computed earlier using `create_varlen_metadata` to mark the boundaries of the different documents. \n", - "\n", - "Before we call `varlen_attn`, we also pack our input so that it has the shape `(total tokens, dim)`. Recall that variable length attention allows us to collapse the `batch_size` dimension so that we can lay out our input samples contiguously. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "import torch\n", - "import torch.nn as nn\n", - "from torch.nn.attention.varlen import varlen_attn\n", - "\n", - "\n", - "class SimpleVarlenAttention(nn.Module):\n", - " def __init__(self, embed_dim: int, num_heads: int):\n", - " super().__init__()\n", - " self.embed_dim = embed_dim\n", - " self.num_heads = num_heads\n", - " self.head_dim = embed_dim // num_heads\n", - "\n", - " self.qkv_proj = nn.Linear(embed_dim, 3 * embed_dim, bias=False)\n", - " self.out_proj = nn.Linear(embed_dim, embed_dim, bias=False)\n", - "\n", - " def forward(\n", - " self, x: torch.Tensor, cu_seq: torch.Tensor, max_len: int\n", - " ) -> torch.Tensor:\n", - " batch_size, seq_len, _ = x.shape\n", - " x_packed = x.view(batch_size * seq_len, -1) # pack x into (total_tokens, dim)\n", - "\n", - " qkv = self.qkv_proj(x_packed)\n", - " q, k, v = qkv.chunk(3, dim=-1)\n", - "\n", - " q = q.view(-1, self.num_heads, self.head_dim)\n", - " k = k.view(-1, self.num_heads, self.head_dim)\n", - " v = v.view(-1, self.num_heads, self.head_dim)\n", - "\n", - " attn_out = varlen_attn(\n", - " query=q,\n", - " key=k,\n", - " value=v,\n", - " cu_seq_q=cu_seq,\n", - " cu_seq_k=cu_seq,\n", - " max_q=max_len,\n", - " max_k=max_len,\n", - " is_causal=True,\n", - " )\n", - " attn_out = attn_out.view(-1, self.embed_dim)\n", - " attn_out = self.out_proj(attn_out)\n", - " return attn_out.view(batch_size, seq_len, self.embed_dim)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "We can also use `torch.compile` with `varlen_attn` and define \n", - "\n", - "```python \n", - "compiled_varlen_attn: ClassVar[Callable] = torch.compile(\n", - " varlen_attn, mode=\"max-autotune-no-cudagraphs\"\n", - ")\n", - "```\n", - "\n", - "We can call `compiled_varlen_attn` instead of `varlen_attn` in the Attention forward, and everything else stays the same." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Creating a Transformer\n", - "\n", - "Now, we can use this `SimpleVarlenAttention` module in a simple Transformer." - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "class SimpleVarlenTransformer(nn.Module):\n", - " \"\"\"\n", - " simple 1 layer transformer with varlen attention\n", - " \"\"\"\n", - "\n", - " def __init__(self, vocab_size: int, embed_dim: int, num_heads: int):\n", - " super().__init__()\n", - " self.tok_embeddings = nn.Embedding(vocab_size, embed_dim)\n", - " self.attention = SimpleVarlenAttention(embed_dim, num_heads)\n", - " self.norm = nn.LayerNorm(embed_dim)\n", - "\n", - " def forward(\n", - " self, tokens: torch.Tensor, cu_seq: torch.Tensor, max_len: int\n", - " ) -> torch.Tensor:\n", - " x = self.tok_embeddings(tokens)\n", - " x = x + self.attention(x, cu_seq, max_len)\n", - " x = self.norm(x)\n", - " return x" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "### Running a Training Step\n", - "\n", - "Now we're ready to put all the pieces together! Let's run a training step with our `SimpleVarlenTransformer`. We define our model, compute `cu_seq` and `max_len` using `create_varlen_metadata`, and run a forward and backward pass. " - ] - }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [ - "def main():\n", - " torch.manual_seed(42)\n", - "\n", - " batch_size = 3\n", - " seq_len = 64\n", - " vocab_size = 1000\n", - " embed_dim = 128\n", - " num_heads = 4\n", - " eos_id = 2\n", - " num_docs = 3\n", - " device = \"cuda\"\n", - " dtype = torch.bfloat16\n", - "\n", - " model = SimpleVarlenTransformer(vocab_size, embed_dim, num_heads).to(\n", - " device=device, dtype=dtype\n", - " )\n", - "\n", - " # create input_batch tokens\n", - " input_batch = torch.randint(0, vocab_size, (batch_size, seq_len), device=device)\n", - "\n", - " for b in range(batch_size):\n", - " # getting random positions to cut the input into multiple documents\n", - " doc_positions = torch.randint(10, seq_len - 1, (num_docs - 1,))\n", - " for pos in doc_positions:\n", - " input_batch[b, pos] = eos_id # insert eos token to simulate end of sample\n", - " input_batch[b, -1] = eos_id\n", - "\n", - " cu_seq, max_len = create_varlen_metadata(input_batch, eos_id)\n", - " print(f\"cu_seq: {cu_seq}, max_len: {max_len}\") # cu_seq: tensor([0, 32, 47, 64, 92, 103, 128, 168, 177, 192]), max_len: 40\n", - "\n", - " # fwd pass\n", - " output = model(input_batch, cu_seq, max_len)\n", - " print(f\"output shape: {output.shape}\") # (3, 64, 128)\n", - "\n", - " # bwd pass\n", - " loss = output.mean()\n", - " loss.backward()\n", - "\n", - "\n", - "if __name__ == \"__main__\":\n", - " main()" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Limitations \n", - "\n", - "Note that this op currently only works with NVIDIA CUDA on A100 machines or newer. Supported dtypes include BF16 and FP16.\n" - ] - } - ], - "metadata": { - "orig_nbformat": 4 - }, - "nbformat": 4, - "nbformat_minor": 2 -} diff --git a/intermediate_source/variable_length_attention_tutorial.py b/intermediate_source/variable_length_attention_tutorial.py new file mode 100644 index 00000000000..61faabaed01 --- /dev/null +++ b/intermediate_source/variable_length_attention_tutorial.py @@ -0,0 +1,359 @@ +""" +Using Variable Length Attention in PyTorch +========================================== + +.. meta:: + :description: Learn how to use PyTorch's varlen_attn API for efficient variable length attention without padding. Complete tutorial with code examples for training Transformers with packed sequences. + :keywords: pytorch, attention, variable length, transformer, varlen_attn, packed sequences, memory optimization, torch.compile + +**Author:** `Angel Li `_ + + +In this tutorial, we will introduce a variable length attention API. +This API is called ``varlen_attn`` and is a custom op in PyTorch, +meaning it is also compilable using ``torch.compile``. + +""" + +###################################################################### +# | **Note:** +# | This tutorial currently requires you to use the PyTorch nightly +# build. This op currently only works with NVIDIA CUDA on A100 machines +# or newer. Supported dtypes include BF16 and FP16. +# +# What you will learn +# ~~~~~~~~~~~~~~~~~~~ +# +# - Variable length attention and how it differs from +# Scaled Dot Product Attention (SDPA) +# - Explore an example of how to use ``varlen_attn`` in a simple +# Transformer attention layer +# +# Prerequisites +# ~~~~~~~~~~~~~ +# +# - PyTorch v2.10.0.dev or later +# - NVIDIA A100 GPU or newer +# - A basic understanding of attention and our current offerings. Please +# reference these tutorials for more details on `FlexAttention `__ and +# `SDPA `__. +# + + +###################################################################### +# Overview of Variable Length Attention +# ------------------------------------- +# +# In normal SDPA, sequences are expected to be a fixed length. In +# practice, this means that input tensors are often **padded** to the same +# length in a batch. However, this wastes both memory and compute through +# storing this padding and performing unnecessary computations. + +# Variable length attention handles sequences of varying length by +# **packing** the tensors in a batch together and essentially collapsing +# the batch dimension. + +# However, we still need to maintain the boundaries between documents. To +# do so, we compute cumulative sequence positions for query and key/value +# that mark the end of documents. In the diagram below, doc 1 is 7 tokens +# long, doc 2 is 10 tokens long, etc. so +# ``cu_seq_lens = [0, 7, 17, ...]``. +# +# .. figure:: ../_static/img/varlen_diagram.png +# :alt: Padding vs Packing Diagram +# +# Padding vs Packing Diagram +# + +# Note that ``NestedTensor`` is another way to enable +# variable length with packed tensors (see tutorial +# `here `__). + + +###################################################################### +# Definition +# ~~~~~~~~~~ +# +# Below is the definition of ``varlen_attn`` which returns the output +# tensor from the attention computation. +# +# .. code:: python +# +# def varlen_attn( +# query: torch.Tensor, +# key: torch.Tensor, +# value: torch.Tensor, +# cu_seq_q: torch.Tensor, +# cu_seq_k: torch.Tensor, +# max_q: int, +# max_k: int, +# is_causal: bool = False, +# return_aux: AuxRequest | None = None, +# ) -> torch.Tensor | tuple[torch.Tensor, torch.Tensor]: +# +# ``query``, ``key``, and ``value`` correspond to the ``q``, ``k``, and +# ``v`` of the packed input. ``cu_seq_q`` and ``cu_seq_k`` are the +# cumulative indices for query and key/value, respectively. These mark the +# logical boundaries that separate the documents in our input. ``max_q`` +# and ``max_k`` are the maximum sequence lengths of query and key, +# respectively. ``is_causal`` applies causal masking if set to True and +# ``return_aux`` specifies which auxiliary outputs to return (ie ``lse``). +# +# **Note on causal masking** +# +# When ``is_causal`` is set to True, causal masking is applied which means +# that tokens can only attend to previous tokens. For bidirectional +# attention, set this flag to False. +# +# In torchtitan (PyTorch’s pretraining framework), we set +# ``is_causal = True`` uniformly to prevent the model from cheating and +# artifically driving the loss down too quickly. +# + + +###################################################################### +# Example +# ------- +# +# Let’s walk through a simple example of how we would use ``varlen_attn`` +# in the context of training a Transformer model. +# + + +###################################################################### +# Creating Required Metadata for ``varlen_attn`` from Input Batches +# ~~~~~~~~~~~~~~~~~~~~~ +# +# Given an input batch, how would we construct the metadata that +# ``varlen_attn`` expects? More specifically, how do we calculate the +# cumulative sequence indices? +# +# The helper function ``create_varlen_metadata`` returns the required +# ``cu_seqlens`` and ``max_seqlen`` given ``input_batch`` and the end of +# sequence token ID that marks the end of documents. +# + +import torch + + +def create_varlen_metadata(input_batch: torch.Tensor, eos_id: int): + batch_size, seq_len = input_batch.shape + device = input_batch.device + cu_seqlens_list, all_seq_lengths = [], [] + offset = 0 + + for b in range(batch_size): + tokens = input_batch[b] + eos_positions = (tokens == eos_id).nonzero(as_tuple=True)[0].to(torch.int32) + + # we use the position of the eos tokens to mark the end of documents + sample_cu_seqlens = torch.cat( + [ + torch.tensor([0], dtype=torch.int32, device=device), + eos_positions + 1, + torch.tensor([seq_len], dtype=torch.int32, device=device), + ] + ) + sample_cu_seqlens = torch.unique_consecutive(sample_cu_seqlens) + + seq_lengths = torch.diff(sample_cu_seqlens) + all_seq_lengths.append(seq_lengths) + + cu_seqlens_adjusted = sample_cu_seqlens[:-1] + offset + cu_seqlens_list.append(cu_seqlens_adjusted) + + offset += seq_len + + packed_cu_seqlens = torch.cat( + cu_seqlens_list + [torch.tensor([offset], dtype=torch.int32, device=device)] + ) + + max_seqlen = 0 + if len(all_seq_lengths) > 0: + all_seq_lengths = torch.cat(all_seq_lengths) + max_seqlen = all_seq_lengths.max().item() + + return packed_cu_seqlens, max_seqlen + + +###################################################################### +# Implementing the Attention Block with ``varlen_attn`` +# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +# +# Let’s explore how we would use ``varlen_attn`` in an Attention module. +# We define an attention module as usual, but in the ``forward`` method, +# we call the new ``varlen_attn`` custom op. +# +# This function expects the ``cu_seq`` indices and ``max_len`` that we +# computed earlier using ``create_varlen_metadata`` to mark the boundaries +# of the different documents. +# +# Before we call ``varlen_attn``, we also pack our input so that it has +# the shape ``(total tokens, dim)``. Recall that variable length attention +# allows us to collapse the ``batch_size`` dimension so that we can lay +# out our input samples contiguously. +# + +import torch +import torch.nn as nn +from torch.nn.attention.varlen import varlen_attn + + +class SimpleVarlenAttention(nn.Module): + def __init__(self, embed_dim: int, num_heads: int): + super().__init__() + self.embed_dim = embed_dim + self.num_heads = num_heads + self.head_dim = embed_dim // num_heads + + self.qkv_proj = nn.Linear(embed_dim, 3 * embed_dim, bias=False) + self.out_proj = nn.Linear(embed_dim, embed_dim, bias=False) + + def forward( + self, x: torch.Tensor, cu_seq: torch.Tensor, max_len: int + ) -> torch.Tensor: + batch_size, seq_len, _ = x.shape + x_packed = x.view(batch_size * seq_len, -1) # pack x into (total_tokens, dim) + + qkv = self.qkv_proj(x_packed) + q, k, v = qkv.chunk(3, dim=-1) + + q = q.view(-1, self.num_heads, self.head_dim) + k = k.view(-1, self.num_heads, self.head_dim) + v = v.view(-1, self.num_heads, self.head_dim) + + attn_out = varlen_attn( + query=q, + key=k, + value=v, + cu_seq_q=cu_seq, + cu_seq_k=cu_seq, + max_q=max_len, + max_k=max_len, + is_causal=True, + ) + attn_out = attn_out.view(-1, self.embed_dim) + attn_out = self.out_proj(attn_out) + return attn_out.view(batch_size, seq_len, self.embed_dim) + + +###################################################################### +# We can also use ``torch.compile`` with ``varlen_attn`` and define +# +# .. code:: python +# +# compiled_varlen_attn: ClassVar[Callable] = torch.compile( +# varlen_attn, mode="max-autotune-no-cudagraphs" +# ) +# +# We can call ``compiled_varlen_attn`` instead of ``varlen_attn`` in the +# Attention forward, and everything else stays the same. +# + + +###################################################################### +# Creating a Transformer +# ~~~~~~~~~~~~~~~~~~~~~~ +# +# Now, we can use this ``SimpleVarlenAttention`` module in a simple +# Transformer. +# + + +class SimpleVarlenTransformer(nn.Module): + """ + simple 1 layer transformer with varlen attention + """ + + def __init__(self, vocab_size: int, embed_dim: int, num_heads: int): + super().__init__() + self.tok_embeddings = nn.Embedding(vocab_size, embed_dim) + self.attention = SimpleVarlenAttention(embed_dim, num_heads) + self.norm = nn.LayerNorm(embed_dim) + + def forward( + self, tokens: torch.Tensor, cu_seq: torch.Tensor, max_len: int + ) -> torch.Tensor: + x = self.tok_embeddings(tokens) + x = x + self.attention(x, cu_seq, max_len) + x = self.norm(x) + return x + + +###################################################################### +# Running a Training Step +# ~~~~~~~~~~~~~~~~~~~~~~~ +# +# Now we’re ready to put all the pieces together! Let’s run a training +# step with our ``SimpleVarlenTransformer``. We define our model, compute +# ``cu_seq`` and ``max_len`` using ``create_varlen_metadata``, and run a +# forward and backward pass. +# + + +def main(): + torch.manual_seed(42) + + batch_size = 3 + seq_len = 64 + vocab_size = 1000 + embed_dim = 128 + num_heads = 4 + eos_id = 2 + num_docs = 3 + device = "cuda" + dtype = torch.bfloat16 + + model = SimpleVarlenTransformer(vocab_size, embed_dim, num_heads).to( + device=device, dtype=dtype + ) + + # create input_batch tokens + input_batch = torch.randint(0, vocab_size, (batch_size, seq_len), device=device) + + for b in range(batch_size): + # getting random positions to cut the input into multiple documents + doc_positions = torch.randint(10, seq_len - 1, (num_docs - 1,)) + for pos in doc_positions: + input_batch[b, pos] = eos_id # insert eos token to simulate end of sample + input_batch[b, -1] = eos_id + + cu_seq, max_len = create_varlen_metadata(input_batch, eos_id) + print( + f"cu_seq: {cu_seq}, max_len: {max_len}" + ) # cu_seq: tensor([0, 32, 47, 64, 92, 103, 128, 168, 177, 192]), max_len: 40 + + # fwd pass + output = model(input_batch, cu_seq, max_len) + print(f"output shape: {output.shape}") # (3, 64, 128) + + # bwd pass + loss = output.mean() + loss.backward() + + +if __name__ == "__main__": + main() + + +###################################################################### +# Conclusion +# ----------- +# +# In this tutorial, we have covered how to use the ``varlen_attn`` API in PyTorch to efficiently +# to handle sequences of varying lengths without padding. We explored how to create the +# necessary metadata including the cumulative sequence indices, implemented a simple +# Transformer attention layer with variable length attention, and ran a complete +# training step. +# +# This approach eliminates wasted computation on padding tokens +# and enables more efficient training and inference for models processing +# documents of different lengths. + +""" +.. seealso:: + +* [Implementing High-Performance Transformers with Scaled Dot Product Attention ](https://docs.pytorch.org/tutorials/intermediate/scaled_dot_product_attention_tutorial.html) +* [torch.nn.functional.scaled_dot_product_attention](https://docs.pytorch.org/docs/stable/generated/torch.nn.functional.scaled_dot_product_attention.html) + +"""