FunctionGemma redecode contract: LM head + argmax run over all SEQ positions (36 % of every step, 1 GB scratch at SEQ 1024 in a 32-bit process); parameter archives are per-SEQ
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Idoneità per principianti
- 35/100
- Tipo di issue
- Funzionalità
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Tranquilla
- Stack tecnologico
- kotlin
- Ambito
- machine-learning
Direzione di ricerca
Start with FunctionGemmaExportHarness.kt at the ops.argMax(logits, dim = -1) call and trace how the exported redecode graph receives its inputs and emits parameters. The issue proposes changing position selection before the LM head and making position tables independent of SEQ; inspect the export and parameter archive paths to scope both changes. Done means the target position is computed without full-SEQ LM-head and argmax scratch, and one archive works across SEQ sizes.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Summary
The exported redecode graph (func @gemma(tensor<1xSEQxi32>) -> tensor<SEQxi32>) computes the LM head for every position and then materialises three more SEQ×262144 tensors for the argmax, although the caller only ever reads one position per step:
%v3325 = stablehlo.dot_general %hidden, %embT : (tensor<1x64x640xf32>, tensor<640x262144xf32>) -> tensor<1x64x262144xf32>
%v3327 = stablehlo.reduce(... maximum ...) -> tensor<1x64xf32>
%v3329 = stablehlo.compare EQ ... -> tensor<1x64x262144xi1>
%v3330 = stablehlo.iota dim = 2 : tensor<1x64x262144xi32>
%v3332 = stablehlo.select ... -> tensor<1x64x262144xi32>
%v3334 = stablehlo.reduce(... minimum ...) -> tensor<1x64xi32>
(ops.argMax(logits, dim = -1) at FunctionGemmaExportHarness.kt:207.)
Measured consequences (arm32 Android device, IREE 3.11.0, FP32 archive, 13-token prompt)
| graph (SEQ 64) | CPU arm32 local-task, 4 threads |
Vulkan (Mali, host-side gather) |
|---|---|---|
| as exported | 10.40 s / step | 4.00 s |
| head sliced to the target position before the dot (hand-patched MLIR) | 6.61 s (−36 %) | 3.16 s |
| body only, no head | 4.49 s | — |
- SEQ 1024 (needed for an 853-token tool catalog prompt) cannot run in a 32-bit process: the step dies on
calloc(1, 1076363436)— the1024×262144i32 iota/select scratch. With the head sliced, SEQ 1024 runs on both CPU (77.3 s) and GPU (29.9 s). - Cost is linear in SEQ (SEQ 256 = 4.03× SEQ 64), so every prompt token costs ≈ 0.16 s per generated token on the CPU.
- Parameter archives are per-SEQ: the export bakes SEQ-sized position tables into the parameters (parameter
t46is 32 KB at SEQ 64, 128 KB at SEQ 256; a SEQ 256 module opened against the SEQ 64.irpafails withparameter 't46' range out of bounds). A cartridge shipping two SEQ tiers ships two 1 GB archives.
Proposal
- Add the target position as an input (or define "last non-pad position" semantics) and slice the hidden state before the LM head; return
tensor<1xi32>(or keepSEQxi32with the one computed position, for compatibility). - Emit the RoPE/position tables as computed values or as SEQ-independent parameters so one
.irpaserves every SEQ. - Both are prerequisites for the KV-cache contract (separate issue) and for the Vulkan tier, which is otherwise the fastest path on this device.
Context. Measured on 2026-09-03 while bringing FunctionGemma-270M up as an NLU cartridge on an arm32 Android device (Android 14, armeabi-v7a-only 32-bit process, 4× ARMv8 @ 2.0 GHz, Mali GPU) with SKaiNET 0.53.0 + SKaiNET-transformers 0.53.0 from Maven Central. Harness and raw result files: a local harness (can share on request).
- Lingua principale
- Kotlin
- Stelle
- 8
- Fork
- 3
- Merge medio
- 1g 16h
- PR unite (30g)
- 48
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
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 SKaiNET-developers/SKaiNET-transformers
-
documentation good first issue size:xs skill:docs sub-issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
SKaiNET-developers/SKaiNET-transformers#478 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
enhancement skill:kotlin-core
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
SKaiNET-developers/SKaiNET-transformers#502 ·
I maintainer di solito rispondono entro 1 giorno
-
bug
Difficoltà 4/5 3-5 giorni Idoneità per principianti 48/100
SKaiNET-developers/SKaiNET-transformers#483 ·
I maintainer di solito rispondono entro 1 giorno
-
coding good first issue size:s skill:kotlin-core sub-issue
Difficoltà 4/5 1-2 giorni Idoneità per principianti 64/100
SKaiNET-developers/SKaiNET-transformers#477 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
coding good first issue size:s skill:numerics sub-issue
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
SKaiNET-developers/SKaiNET-transformers#476 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di SKaiNET-developers/SKaiNET-transformers
Issue simili
-
[Submission] AI服务引擎Apertasubmit-adaption submit-adaption-pre
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 76/100
BetterAndroid/android-notification-icon-project#783 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 68/100
-
coding size:s skill:kotlin-core sub-issue
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
SKaiNET-developers/SKaiNET#1421 ·
I maintainer di solito rispondono entro 1 giorno
-
Show Full DetailsAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 65/100
leonlatsch/Photok#809 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 84/100
I maintainer di solito rispondono entro 1 giorno