Default flash attention retains redundant BF16 KV projection history
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 68/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- cpp
- Ambito
- machine-learning, performance
Direzione di ricerca
Leggi prima le righe 208-322 di gemma/attention.cc e le righe 275-297 di gemma/kv_cache.cc per seguire la proiezione, la trasposizione e le allocazioni della cache. Riproduci il carico di lavoro Gemma 3 default-flash con il prompt e le impostazioni della sequenza indicati, quindi esamina le estensioni della cache e l’RSS di picco. Il lavoro è completato quando la cronologia KV ridondante non viene conservata, mentre la lunghezza del contesto, l’arrotondamento BF16 e il comportamento del modello rimangono invariati.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
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
ComputeQKVwrites BF16 projections into sequence-majorkv_cache.- It applies normalization and positional encoding with BF16 rounding.
- It transposes the results into
k_cacheandv_cache. FlashAttentionconsumes those transposed buffers.- 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.
- Lingua principale
- C++
- Stelle
- 7k
- Fork
- 660
- Merge medio
- 1g 15h
- PR unite (30g)
- 19
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di google/gemma.cpp
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
I maintainer di solito rispondono entro 1 giorno
-
IFields::Read aborts on truncated data instead of returning pos == 0Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 25/100
google/gemma.cpp#1048 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
google/gemma.cpp#1036 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Reduce KV memory for local-attention layersForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
google/gemma.cpp#1016 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Add experimental W8A8 MatMul with optional QuaRot-style rotationForse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 5/5 Più di una settimana Idoneità per principianti 35/100
google/gemma.cpp#1002 · 8 commenti ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di google/gemma.cpp
Issue simili
-
ws_bridge: stripping format=evr for matchmaker connections can concatenate the path and queryApertabug
Difficoltà 2/5 1-3 ore Idoneità per principianti 73/100
EchoTools/nevr-runtime#116 ·
I maintainer di solito rispondono entro 1 giorno
-
code-quality libc++
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 82/100
llvm/llvm-project#229284 ·
I maintainer di solito rispondono entro 1 giorno
-
test-issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
llvm/offload-test-suite#1557 ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno
-
iOS: hidden scale bar invalidates its intrinsic content size on every layout pass of MLNMapViewAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
maplibre/maplibre-native#4723 ·
I maintainer di solito rispondono entro 1 giorno