Skip to content

Default flash attention retains redundant BF16 KV projection history #1029

Description

@Mikyx-1

Summary

Default flash attention retains two BF16 representations of KV history.
The sequence-major projection buffer remains allocated and populated after
its keys and values have been transposed into the buffers attention reads.
This increases resident memory as context length grows.

Affected path

  • Backend: default --attention_impl flash.
  • Confirmed with Gemma 3 270M, 1B, and 4B text inference.
  • Measured baseline: ffc1abc05abdf11d875d25d36c8859553ddf2641.
  • The retained-history path is also present on current dev (b68def1).
  • T5 and DeepSeek use their legacy buffers differently.

What happens

  1. ComputeQKV writes BF16 projections into sequence-major kv_cache.
  2. It applies normalization and positional encoding with BF16 rounding.
  3. It transposes the results into k_cache and v_cache.
  4. FlashAttention consumes those transposed buffers.
  5. The original projection buffer still retains every layer and position.

References:

Reproduction and observed cost

Run default-flash Gemma 3 270M with a 32,736-token text prompt,
sequence capacity 32,768, prefill batch 4,096, and 16 decode tokens.
Inspect the allocated cache extents and peak process RSS during inference.

The projection buffer occupies 578 MiB including row padding.
The transposed K/V buffers occupy another 576 MiB.
Measured peak process RSS is 1,778.59 MiB on this workload.
This is active retained data, not merely unused virtual address space.

Environment: Linux, Intel i5-12400F, six pinned threads,
Release AVX2/Haswell build, no oneDNN, and approximately 15.5 GiB RAM.

Expected behavior

Projection intermediates should not retain a second complete KV history
after attention's persistent representation has been produced.
Required context, existing BF16 rounding, and model behavior must be preserved.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions