Hacktoberfest 2026: le issue che i maintainer hanno segnato per ottobre, aperte e adatte ai principianti. Sfoglia le issue Hacktoberfest

TensorData and TensorStorage are parallel layers — unify the storage model (ownership, views, dtype/encoding, placement): SKEEP-003 discussion anchor

Aperta
#932 6 commenti 0 reazioni 0 assegnatari Vedi su GitHub

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
25/100
Tipo di issue
Refactoring
Chiarezza
Abbastanza chiara
Stato di attività
Tranquilla
Stack tecnologico
kotlin

Direzione di ricerca

Read the TensorData code under skainet-lang-core/.../tensor/data/ alongside the 20-file TensorStorage layer under .../tensor/storage/, then trace which abstractions Tensor currently holds and where allocations and backend dispatch use them. Compare the two candidate end-states described in the issue and review the maintainer discussion; done requires a decided direction that preserves packed encodings bit-identically.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

SKaiNET carries two storage abstractions:

  • TensorData (skainet-lang-core/.../tensor/data/) — the live one. Every Tensor holds one; backends dispatch by downcasting to concrete classes/markers (is Q4_KTensorData -> .packedData); all common-code storage is heap arrays.
  • TensorStorage (.../tensor/storage/, 20 files) — a designed descriptor layer with the right concepts (BufferHandle.{Owned,Borrowed,Aliased,FileBacked,DeviceResident}, Placement/MemoryDomain, TensorEncoding, MemoryPlanner, StorageSpec) whose own KDoc says "new loaders, planners, and backends should target TensorStorage directly" — but which no Tensor ever holds. StorageSpec has zero consumers; the planner is never consulted at any allocation; Aliased is never produced; FileBacked and DeviceResident throw in every consumer; LogicalDType.fromDType has no inverse, so the layer structurally cannot back Tensor<T> today.

The result is a set of related, recurring costs:

  • ownership is recorded but never enforced (lifetimes fell back to GC after explicit arenas OOM'd — the missing piece is a weights-persistent vs activations-transient scope split, which Placement.Residency models but nothing uses)
  • two disconnected view systems (SlicedTensorView index remap vs BufferHandle.Aliased byte range)
  • three type representations (DType KClass generic, LogicalDType enum, TensorEncoding), with packed tensors erasing their logical dtype entirely (Q4_KTensorData : TensorData<DType, Byte> — a logically-FP32 weight is not typed as such; ops find it by class check)
  • placement/mmap/off-heap work (#921, #922, SKEEP-002) keeps landing at the edges because the middle isn't wired

An SKEEP-003 draft (PR to follow) lays out the analysis and two candidate end-states — (a) TensorStorage becomes the single byte-owner and TensorData a typed view protocol over it; (b) TensorData stays primary and absorbs BufferHandle/Placement, retiring the parallel descriptor — deliberately without a recommendation: the trade-off (dispatch rewrite + dtype coherence vs minimal churn + status quo dispatch) is a maintainer decision. Both directions share two prerequisites (two-way LogicalDType ↔ DType bridge; decide StorageSpec's fate) and one hard constraint: the packed-encoding system (7 GGML block formats, ternary, TurboQuant, kernel dispatch, StableHLO skainet.tensor_encodings export) must survive bit-identically.

Mechanical bugs found during the same audit are filed separately (TensorStorageFactory contract violations, GGUF encoding mapping dropping five formats, transfer-API gaps, rank-broken copyToFloatArray default, memory-diagnostics paper-cuts) — they are fixable under either end-state.

Lingua principale
Kotlin
Stelle
52
Fork
15
Merge medio
1g 8h
PR unite (30g)
37

Preparare l'ambiente

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di SKaiNET-developers/SKaiNET

Tutte le issue di SKaiNET-developers/SKaiNET

Issue simili

Altre issue su Kotlin

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.