iree-android: stateful prefill/step contract with a reusable prompt-prefix KV snapshot (and an embeddings-input variant for Vulkan)
メンテナーはふだん 1 日以内に返信
まだ誰も着手していません。
評価
- 難易度
- 5/5
- 見積もり時間
- 1週間以上
- 初心者へのやさしさ
- 30/100
- issue の種類
- 機能追加
- 明瞭さ
- おおむね明確
- 活発さ
- 停滞
調査の方向性
Start by reading the Android runtime contract and the FunctionGemma export path mentioned in FunctionGemmaExportHarness.kt:258–383; compare the exported gemma_prefill and gemma_with_past graphs with the runtime’s current stateless step(IntArray) path. The proposal also spans device-side KV lifetime, JNI input and error handling, Vulkan embeddings, and head slicing. Done means implementing and validating the stateful prefill, snapshot, step, and release contract, including the embeddings-input variant, against the supplied parity golden sets on the target device.
索引モデルが issue の本文から書いたものです。
説明
Motivation, with numbers
runtime-iree-android only offers the stateless redecode contract (step(IntArray) -> IntArray, whole sequence recomputed). On an arm32 Android device (32-bit process, 4× ARMv8, Mali) with FunctionGemma-270M FP32 and IREE 3.11.0:
| SEQ | CPU arm32 per step | Vulkan per step (head sliced, embeddings gathered on the host) |
|---|---|---|
| 64 | 10.4 s (6.6 s with the head sliced) | 3.16 s |
| 256 | 41.9 s | 7.76 s |
| 1024 | 77.3 s (sliced head) | 29.9 s |
A 15-token tool call against an 853-token catalog prompt therefore costs ≈ 19 min on the CPU and ≈ 7.5 min on the GPU. Prompt shortening does not fix it (short descriptions: −29 % tokens, −2/8 accuracy). With a KV contract that prefills the catalog once per process, snapshots the KV state, and per turn prefills only the utterance (≈ 36 tokens) plus ~15 decode steps, the same call projects to 8–29 s on the GPU. There is no other route to an interactive NLU on this class of device, and no arm64 firmware option (the product stays 32-bit).
Proposal
- Contract:
prefill(ids) -> (lastId, kvHandle),snapshot(kvHandle) -> kvHandle',step(kvHandle, id) -> id,release(kvHandle); KV kept device-side (HAL buffers), never round-tripped through the JVM. The FunctionGemma export already emitsgemma_prefill/gemma_with_pastgraphs (FunctionGemmaExportHarness.kt:258–383) — this is the runtime side of those. - Head sliced to the target position in every graph (separate issue; 36 % of the step and the 32-bit memory cap).
- Embeddings-input variant (
prefill(ids, embeddings)): IREE 3.11.0's SPIR-V backend cannot legalize the token-embedding gather (failed to legalize operation 'vector.step'on the gather dispatch). Gathering the 640-float rows on the host and passingtensor<1xSEQx640xf32>makes the same graph compile and run on Mali at 2.4–2.6× the CPU speed. The JNI currently accepts onlyIntArray. - Error reporting through JNI (see the null-return issue).
I can provide the device, the measured graphs (MLIR with the sliced head and the host-gather input), the iree-benchmark-module scripts, and the golden sets for parity.
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).
- 主要言語
- Kotlin
- スター
- 8
- フォーク
- 3
- 平均マージ
- 1日 20時間
- マージ済み PR(30日)
- 44
環境構築
このプロジェクトには開発コンテナ、Dockerfile、コントリビューションガイドがありません。まず README を読み、一般的な手順ははじめてのコントリビューションガイドを参照してください。
はじめの一歩
- issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
- 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
- リポジトリをフォークし、ブランチを切って変更します。
- issue 番号を参照したプルリクエストを送ります。
SKaiNET-developers/SKaiNET-transformers のほかの issue
-
documentation good first issue size:xs skill:docs sub-issue
難易度 2/5 1〜3時間 初心者へのやさしさ 78/100
SKaiNET-developers/SKaiNET-transformers#478 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
enhancement skill:kotlin-core
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
SKaiNET-developers/SKaiNET-transformers#502 ·
メンテナーはふだん 1 日以内に返信
-
bug
難易度 4/5 3〜5日 初心者へのやさしさ 48/100
SKaiNET-developers/SKaiNET-transformers#483 ·
メンテナーはふだん 1 日以内に返信
-
coding good first issue size:s skill:kotlin-core sub-issue
難易度 4/5 1〜2日 初心者へのやさしさ 64/100
SKaiNET-developers/SKaiNET-transformers#477 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
-
coding good first issue size:s skill:numerics sub-issue
難易度 4/5 3〜5日 初心者へのやさしさ 55/100
SKaiNET-developers/SKaiNET-transformers#476 · コメント 1 件 ·
メンテナーはふだん 1 日以内に返信
SKaiNET-developers/SKaiNET-transformers の issue をすべて見る
似ている issue
-
needs-triage
難易度 2/5 1〜3時間 初心者へのやさしさ 68/100
メンテナーはふだん 1 日以内に返信
-
documentation good first issue
難易度 2/5 1〜3時間 初心者へのやさしさ 76/100
jainam6610/calm-ui#11 ·
メンテナーはふだん 1 日以内に返信
-
area:sdk bug good first issue priority:medium
難易度 2/5 1〜3時間 初心者へのやさしさ 72/100
Kotlin-server-squad/vizcore#255 ·
メンテナーはふだん 1 日以内に返信
-
Toast Notificationsオープン
難易度 2/5 1〜3時間 初心者へのやさしさ 64/100
メンテナーはふだん 1 日以内に返信
-
難易度 2/5 1〜3時間 初心者へのやさしさ 62/100
open-learning-exchange/myplanet#18392 ·
メンテナーはふだん 2 日以内に返信