Skip to content

Commit 9c080a9

Browse files
committed
add: compression verification prompt — gegenprüfung aller behauptungen
1 parent 0f603bf commit 9c080a9

1 file changed

Lines changed: 393 additions & 0 deletions

File tree

Lines changed: 393 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,393 @@
1+
# VERIFY: bgz17 Model Compression — Gegenprüfung aller Behauptungen
2+
3+
## MISSION
4+
5+
Systematische Verifizierung der bgz17 Kompressions-Pipeline gegen:
6+
1. Bestehenden Code in ndarray + lance-graph (WAS EXISTIERT, WAS FUNKTIONIERT)
7+
2. State-of-the-Art Quantisierung (GGUF Q4_K_M, GPTQ, AWQ, QuIP#, TurboQuant)
8+
3. Theoretische Grenzen (Shannon, Rate-Distortion, Johnson-Lindenstrauss)
9+
10+
Du bist Gutachter, nicht Entwickler. Du prüfst Behauptungen gegen Evidenz.
11+
Du baust nichts Neues bevor du nicht bewiesen hast dass das Bestehende funktioniert.
12+
13+
## P0 EISERNE REGEL
14+
15+
**LIES DEN CODE BEVOR DU URTEILST.**
16+
17+
```bash
18+
# ERST lesen, DANN bewerten. Keine Ausnahmen.
19+
cat crates/bgz17/src/base17.rs
20+
cat crates/bgz17/src/distance_matrix.rs
21+
cat crates/bgz17/src/bridge.rs
22+
cat crates/bgz17/src/generative.rs
23+
cat crates/bgz17/src/similarity.rs
24+
cat crates/lance-graph/src/graph/blasgraph/hdr.rs # Cascade, HHTL
25+
find . -name "*.rs" | xargs grep -l "euler\|fibonacci\|rotation\|palette\|codebook"
26+
find . -name "*.rs" | xargs grep -l "gguf\|quantiz\|compress"
27+
cargo test --workspace 2>&1 | tail -30
28+
```
29+
30+
Wenn eine Datei nicht existiert → die Behauptung ist NICHT implementiert.
31+
Wenn ein Test fehlschlägt → die Behauptung ist NICHT bewiesen.
32+
Wenn der Code anders funktioniert als behauptet → DOKUMENTIERE DIE ABWEICHUNG.
33+
34+
**LÖSCHE NICHTS.** Auch nicht wenn es falsch aussieht. Dokumentiere was falsch ist
35+
und warum, aber lass den Code stehen bis die Korrektur GETESTET ist.
36+
37+
## BEHAUPTUNG 1: Kompressions-Ratios
38+
39+
Behauptet wird:
40+
```
41+
GPT-2: ~500 MB → 1.7 MB (~300×)
42+
Jina: ~150 MB → 760 KB (~200×)
43+
BERT: ~440 MB → 800 KB (~550×)
44+
```
45+
46+
### Gegenprüfung:
47+
48+
```bash
49+
# A) Finde die tatsächlichen Ausgabe-Dateien
50+
find . -name "*.bgz17" -o -name "*.b17" -o -name "*compressed*" | xargs ls -lh
51+
find . -name "*.rs" | xargs grep -l "gpt2\|bert\|jina"
52+
53+
# B) Finde die Tests die das beweisen
54+
grep -rn "assert.*size\|assert.*bytes\|assert.*ratio\|assert.*compress" --include="*.rs"
55+
56+
# C) Finde die Benchmarks
57+
find . -name "*.rs" -path "*/bench*" | xargs grep -l "compress\|ratio"
58+
59+
# D) Vergleiche mit Referenz: Was ist die Q4_K_M Größe dieser Modelle?
60+
# GPT-2 124M params × 4 bits = 62 MB (Q4). Behauptung: 1.7 MB = 36× besser als Q4.
61+
# Ist das physikalisch möglich?
62+
# Shannon: H(X) = Σ p(x) log2(1/p(x))
63+
# Wenn die Weight-Verteilung das hergibt, ja. MESSE die tatsächliche Entropie.
64+
```
65+
66+
### Was wäre die Widerlegung?
67+
- Wenn die 1.7 MB nicht ausreichen um Inferenz-Ergebnisse zu reproduzieren
68+
- Wenn die Perplexity bei Dekompression >5% ansteigt vs Original
69+
- Wenn die 1.7 MB ein Codebook PLUS externes Wörterbuch brauchen das nicht mitgezählt wurde
70+
71+
## BEHAUPTUNG 2: Euler-Gamma Rotation + Fibonacci Codebook
72+
73+
Behauptet wird:
74+
- Euler-Gamma Rotation dreht Weight-Matrizen in eine Basis wo Fibonacci-Codebook
75+
die Redundanz besser erfasst als Hadamard (TurboQuant) oder Random Rotation (QuIP#)
76+
- Fibonacci macht Bits NICHT-uniform → kein POPCOUNT nötig → vpshufb Table Lookup
77+
- 3σ Separation zwischen Codebook-Einträgen → 99.73% korrekte Zuordnung
78+
79+
### Gegenprüfung:
80+
81+
```bash
82+
# A) Existiert die Rotation?
83+
grep -rn "euler.*gamma\|gamma.*rotation\|EulerGamma" --include="*.rs"
84+
grep -rn "fibonacci\|zeckendorf\|fib_encode\|fib_decode" --include="*.rs"
85+
86+
# B) Existiert das Codebook?
87+
grep -rn "codebook\|Codebook\|palette.*size\|num_clusters" --include="*.rs"
88+
# Was ist die tatsächliche Codebook-Größe? 256? 4096? Dynamisch?
89+
90+
# C) Existiert der 3σ Beweis?
91+
grep -rn "sigma\|separation\|3.*sigma\|three.*sigma" --include="*.rs" --include="*.md"
92+
# Gibt es einen Test der die Separation misst?
93+
94+
# D) Vergleiche mit TurboQuant (Google, 2025):
95+
# TurboQuant: Hadamard → gleichmäßige Verteilung → POPCOUNT effizient
96+
# bgz17: Euler-Gamma → konzentrierte Verteilung → vpshufb effizient
97+
# FRAGE: Auf welchen Weight-Verteilungen gewinnt welcher Ansatz?
98+
# MESSE: Nimm einen echten Attention-Layer, rotiere mit beiden, vergleiche MSE.
99+
100+
# E) Vergleiche mit QuIP# (Cornell, 2024):
101+
# QuIP#: Random orthogonal rotation → incoherence → uniform quantization
102+
# bgz17: Strukturierte Rotation → coherence ERHALTEN → non-uniform quantization
103+
# Das ist ein fundamentaler Designunterschied. Wer hat Recht?
104+
# MESSE: Gleicher Layer, beide Ansätze, vergleiche Reconstruction Error.
105+
```
106+
107+
### Was wäre die Widerlegung?
108+
- Wenn Hadamard-Rotation auf den selben Weights gleiche oder bessere MSE liefert
109+
- Wenn die Fibonacci-Codierung keinen messbaren Vorteil gegenüber linearer Quantisierung hat
110+
- Wenn die 3σ Separation nur für bestimmte Layer-Typen gilt (Attention ja, Conv2D nein)
111+
112+
## BEHAUPTUNG 3: HHTL Cascade 90% Early Exit
113+
114+
Behauptet wird:
115+
- HEEL/HIP/TWIG/LEAF Cascade verwirft 90% pro Stage
116+
- O(1) Lookup durch Palette-Index statt O(n) Sweep
117+
118+
### Gegenprüfung:
119+
120+
```bash
121+
# A) Existiert die Cascade?
122+
cat crates/lance-graph/src/graph/blasgraph/hdr.rs | head -100
123+
grep -n "cascade\|Cascade\|stage\|early_exit\|reject" crates/lance-graph/src/graph/blasgraph/hdr.rs
124+
125+
# B) Ist die 90% Rejection gemessen oder behauptet?
126+
grep -rn "rejection_rate\|reject.*percent\|90\|0\.9" --include="*.rs" -A2
127+
# Gibt es einen Benchmark der die tatsächliche Rejection Rate misst?
128+
129+
# C) Ist es O(1)?
130+
# O(1) durch Palette = HashMap<u8, Vec<VectorId>>
131+
# Aber: Die Cascade BAUT den Index. Das ist O(n) Preprocessing.
132+
# Zur Laufzeit: O(k) wo k = Anzahl Kandidaten nach Stage 1.
133+
# Wenn 90% rejected → k = 0.1n. Das ist O(n/10), nicht O(1).
134+
# KORREKTUR: O(1) gilt nur für den Palette-Lookup selbst,
135+
# nicht für die gesamte Query. Dokumentiere den Unterschied.
136+
```
137+
138+
## BEHAUPTUNG 4: Inferenz OHNE Dekompression (Compose Tables)
139+
140+
Behauptet wird:
141+
- Palette Compose Table (256×256×1 Byte = 64 KB) ermöglicht
142+
Multi-Hop Graph-Traversal komplett im komprimierten Space
143+
- compose[a][b] gibt den Palette-Index der Komposition zurück
144+
- Kein Dekomprimieren nötig für Nearest-Neighbor oder Traversal
145+
146+
### Gegenprüfung:
147+
148+
```bash
149+
# A) Existiert die Compose Table?
150+
grep -rn "compose\|ComposeTable\|compose_table" --include="*.rs"
151+
grep -rn "semiring\|Semiring" --include="*.rs"
152+
153+
# B) Ist die Komposition assoziativ? (Semiring-Eigenschaft)
154+
# compose(compose(a,b), c) == compose(a, compose(b,c)) ?
155+
# Gibt es einen Property Test dafür?
156+
grep -rn "proptest\|quickcheck\|associativ" --include="*.rs"
157+
158+
# C) Wie groß ist der Approximationsfehler?
159+
# |compose(a,b) - quant(exact_compose(deq(a), deq(b)))| ≤ ε
160+
# Ist ε gemessen? Für welche Operationen?
161+
162+
# D) Funktioniert das für LLM-Inferenz?
163+
# Matmul in Palette Space = was genau?
164+
# Input-Vektor × Weight-Matrix:
165+
# Input muss erst quantisiert werden → Palette-Index
166+
# Dann compose mit jedem Weight-Palette-Index
167+
# Das ist O(n) Compose-Lookups, nicht O(n²) float ops
168+
# ABER: Die Akkumulation der Compose-Ergebnisse?
169+
# Majority Vote? Oder Lookup in einer zweiten Tabelle?
170+
# FINDE den Code der das tatsächlich macht.
171+
```
172+
173+
### Was wäre die Widerlegung?
174+
- Wenn der Compose-Fehler für Multi-Hop > 3 Hops divergiert
175+
- Wenn Matmul-in-Palette-Space Perplexity um >10% verschlechtert
176+
- Wenn die Compose Table bei >256 Palette-Einträgen zu groß wird (4096² = 16 MB)
177+
178+
## BEHAUPTUNG 5: Streaming GGUF Slicer (2 GB RAM für 200 GB Modell)
179+
180+
Behauptet wird:
181+
- GGUF Tensor-für-Tensor lesen, komprimieren, schreiben
182+
- Peak RAM = größter Tensor + Pipeline-Buffers ≈ 2 GB
183+
- Funktioniert für Llama 4 Scout (55 GB GGUF) auf Railway Starter
184+
185+
### Gegenprüfung:
186+
187+
```bash
188+
# A) Existiert der Slicer?
189+
find . -name "*.rs" | xargs grep -l "gguf\|Gguf\|GGUF"
190+
# Vermutlich: NEIN. Das ist noch nicht implementiert.
191+
# Wenn nein → DOKUMENTIERE was fehlt, implementiere NICHTS ohne Test-First.
192+
193+
# B) Ist die Annahme korrekt dass GGUF sequentiell gelesen werden kann?
194+
# GGUF Header enthält Tensor-Offsets → ja, mmap + seek ist möglich.
195+
# ABER: Manche Tensoren haben Abhängigkeiten (Layer Norm braucht Weight + Bias).
196+
# Reicht es wirklich EINEN Tensor im RAM zu haben?
197+
198+
# C) Prüfe: Was ist der größte Tensor in Llama 4 Scout?
199+
# Expert FFN: hidden_dim × intermediate_dim × num_experts
200+
# 5120 × 13824 × 16 = 1.13 Milliarden × 2 Bytes (BF16) = 2.26 GB
201+
# DAS PASST NICHT IN 2 GB RAM.
202+
# ABER: Die 16 Experts sind separate Tensoren im GGUF.
203+
# Ein Expert: 5120 × 13824 × 2 = 141 MB. Das passt.
204+
# VERIFIZIERE: Sind die Experts im GGUF als einzelne Tensoren gespeichert?
205+
# grep "experts" im GGUF Header oder lese die llama.cpp Tensor-Namen.
206+
207+
# D) Referenz-Implementierung existiert:
208+
# - gguf-py (Python): streaming reader
209+
# - llama.cpp gguf.h (C): mmap reader
210+
# - Rust: https://crates.io/crates/gguf (prüfe ob brauchbar)
211+
```
212+
213+
## BEHAUPTUNG 6: Conv2D Weights (SD 1.5) vs Attention Weights
214+
215+
Behauptet wird:
216+
- Attention-Weights: hoch redundant → 200-300× Kompression
217+
- Conv2D-Weights: räumlich strukturiert → weniger Kompression
218+
- SD 3.5 Large ist ein DiT (Transformer) → gleiche Ratio wie LLMs
219+
220+
### Gegenprüfung:
221+
222+
```bash
223+
# A) Messe die tatsächliche Entropie von Conv2D vs Attention Weights
224+
# Lade SD 1.5 UNet, extrahiere:
225+
# - Einen Attention-Layer (Q,K,V Projection)
226+
# - Einen Conv2D-Layer (3×3 Kernel)
227+
# Berechne für beide:
228+
# - Singulärwert-Verteilung (SVD)
229+
# - Effektiver Rank
230+
# - Shannon-Entropie der Weight-Verteilung
231+
# - bgz17 Palette-Zuordnung: wie viele Cluster reichen für 99% Varianz?
232+
233+
# B) Verifiziere: Ist SD 3.5 Large wirklich ein reiner Transformer?
234+
# SD 3.5 verwendet "MMDiT" (Multi-Modal Diffusion Transformer)
235+
# ABER: Hat die VAE trotzdem Conv2D? (Ja, immer)
236+
# Wie groß ist der DiT-Teil vs VAE-Teil?
237+
238+
# C) Prüfe: Gibt es publizierte Ergebnisse für Transformer-basierte
239+
# Diffusion Model Quantisierung?
240+
# Flux GGUF existiert → welche Ratios erreichen die?
241+
# Wenn Flux Q4 bei 4× liegt und wir behaupten 100×, was erklärt den Faktor 25?
242+
```
243+
244+
## BEHAUPTUNG 7: Kahneman-Residual bei Bildverständnis
245+
246+
Behauptet wird:
247+
- HEEL-Vektor (Archetyp "Vogel") abziehen → Residual ist das Einzigartige
248+
- CHAODA erkennt dass "Vogel auf Zaun" eine Anomalie ist (niedrige Dichte)
249+
- SPO-Zerlegung: S(Vogel) P(SITZT_AUF) O(Zaun) → Residual = 50 Bytes
250+
251+
### Gegenprüfung:
252+
253+
```bash
254+
# A) Existiert der Tiny ImageNet Code?
255+
find . -name "*.rs" -o -name "*.py" | xargs grep -l "imagenet\|ImageNet\|tiny.*image"
256+
find . -name "*.rs" | xargs grep -l "quadrant\|Quadrant\|focus.*zone"
257+
258+
# B) Existiert die Entbündelung?
259+
grep -rn "unbundle\|entbündel\|residual.*heel\|heel.*subtract" --include="*.rs"
260+
261+
# C) Existiert die CHAODA Integration?
262+
grep -rn "chaoda\|CHAODA\|anomaly.*detect\|density.*anomal" --include="*.rs"
263+
# CHAODA kommt aus dem CLAM Paper (Ishaq et al. 2021).
264+
# Ist CLAM implementiert?
265+
grep -rn "clam\|Clam\|CLAM\|fractal.*dim\|local.*fractal" --include="*.rs"
266+
267+
# D) Die "50 Bytes" Behauptung:
268+
# Wenn ein Residual-Vektor 4608 Dimensionen hat und davon 80% Noise sind,
269+
# bleiben 920 Dimensionen × wie viele Bits?
270+
# Bei 1 Bit/Dim = 115 Bytes. Bei bgz17 Palette = ~20-50 Bytes. Plausibel.
271+
# ABER NUR wenn CHAODA die richtigen 80% als Noise identifiziert.
272+
# Gibt es einen Ground-Truth Test dafür?
273+
```
274+
275+
## BEHAUPTUNG 8: Parallele Mini-Queries statt KV Cache
276+
277+
Behauptet wird:
278+
- 24 parallele 32-Token Queries statt 1× 4096-Token Query
279+
- KV Cache: 24 × 32 × 32 KB = 24 MB statt 524 MB
280+
- NARS Revision bündelt 24 Evidenzen zu einem Truth Value
281+
282+
### Gegenprüfung:
283+
```
284+
# FRAGE: Verliert man Information durch die Zerlegung?
285+
# Ein 4096-Token Prompt hat Cross-Attention zwischen ALLEN Tokens.
286+
# 24 separate 32-Token Queries haben KEINE Cross-Attention untereinander.
287+
# Die Frage ist ob die SPO-Graph-Struktur die fehlende Cross-Attention ersetzt.
288+
#
289+
# HYPOTHESE: Ja, weil die Graph-Kanten die Beziehungen explizit kodieren
290+
# die Cross-Attention implizit lernen muss.
291+
#
292+
# TEST: Nimm eine Aufgabe die lange Kontexte braucht.
293+
# Vergleiche: 1× full context vs 24× mini + NARS merge.
294+
# Metrik: Task Accuracy, nicht Perplexity.
295+
#
296+
# ACHTUNG: Das ist ein FORSCHUNGSPROBLEM, kein Engineering-Problem.
297+
# Nicht behaupten dass es funktioniert bevor es gemessen ist.
298+
```
299+
300+
## PRÜFPLAN: Reihenfolge
301+
302+
```
303+
Phase 1: CODE LESEN (keine Änderungen)
304+
□ Alle Dateien in crates/bgz17/src/ lesen und inventarisieren
305+
□ Alle Dateien in crates/lance-graph/src/graph/blasgraph/ lesen
306+
□ Alle Tests finden und ausführen
307+
□ Tabelle: Behauptung → Code-Datei → Test → Status (✓/✗/MISSING)
308+
309+
Phase 2: MESSEN (keine Änderungen am Produktionscode)
310+
□ Entropie-Messung: Attention vs Conv2D Weights
311+
□ Rejection Rate der Cascade: tatsächlich 90%?
312+
□ Compose Table Approximationsfehler
313+
□ Fibonacci vs Linear Codebook: MSE Vergleich
314+
□ Euler-Gamma vs Hadamard Rotation: MSE Vergleich
315+
316+
Phase 3: VERGLEICH MIT STATE OF ART
317+
□ Gleichen Layer durch GPTQ, AWQ, QuIP# quantisieren
318+
□ bgz17 Ratio vs GPTQ/AWQ/QuIP# Ratio bei gleichem Reconstruction Error
319+
□ Inference Speed: bgz17 Compose vs dequantize+matmul
320+
□ Tabelle: Method → Size → MSE → Inference Speed → Hardware
321+
322+
Phase 4: DOKUMENTATION (erst hier, wenn Phase 1-3 abgeschlossen)
323+
□ Was ist BEWIESEN (Code + Test + Messung)
324+
□ Was ist PLAUSIBEL (Code existiert, Test fehlt)
325+
□ Was ist BEHAUPTET (kein Code, keine Messung)
326+
□ Was ist WIDERLEGT (Test zeigt anderes Ergebnis)
327+
```
328+
329+
## ABSCHLIESSENDE AUFFORDERUNG
330+
331+
**Bevor du IRGENDETWAS änderst, löschst, refactored, oder neu schreibst:**
332+
333+
1. Lies den bestehenden Code. Komplett. Nicht die ersten 20 Zeilen.
334+
2. Führe die bestehenden Tests aus. Alle. Nicht "die wichtigen".
335+
3. Miss die tatsächlichen Werte. Nicht schätzen. Messen.
336+
4. Vergleiche mit dem publizierten State of Art. Nicht mit deiner Intuition.
337+
5. Dokumentiere was du gefunden hast. Auch wenn es der Behauptung widerspricht.
338+
339+
**Lösche NICHTS bevor die Alternative GETESTET und BESSER ist.**
340+
341+
Der Code der heute kompiliert und Tests besteht ist wertvoller als
342+
der Code der morgen "besser sein könnte". Jede Zeile die existiert
343+
wurde aus einem Grund geschrieben. Finde den Grund bevor du löschst.
344+
345+
Wenn du eine Behauptung widerlegst: GRATULATION. Das ist wertvoller
346+
als sie zu bestätigen. Schreib genau auf warum sie falsch ist, welche
347+
Messung das zeigt, und was die korrekte Aussage wäre.
348+
349+
## REPOS IN SCOPE
350+
351+
```
352+
READ + TEST:
353+
ndarray/crates/bgz17/ ← Palette, Rotation, Codebook, Distance
354+
lance-graph/crates/lance-graph/ ← Cascade, HHTL, Semiring, Compose
355+
ndarray/crates/lance-graph/ ← Stub oder real? Prüfen.
356+
357+
READ ONLY (Vergleich):
358+
https://github.com/ggerganov/llama.cpp/gguf.h ← GGUF Format
359+
https://arxiv.org/abs/2401.xxxxx ← RaBitQ Paper
360+
https://arxiv.org/abs/2307.13304 ← QuIP# Paper
361+
https://arxiv.org/abs/2306.00978 ← AWQ Paper
362+
Google TurboQuant Blog Post 2025
363+
364+
NICHT ANFASSEN:
365+
Alles außerhalb der oben genannten Pfade.
366+
Keine neuen Crates erstellen.
367+
Keine Cargo.toml ändern.
368+
Keine CI ändern.
369+
```
370+
371+
## OUTPUT FORMAT
372+
373+
Erstelle am Ende eine Datei `.claude/knowledge/compression_verification.md`:
374+
375+
```markdown
376+
# Compression Claims Verification — [DATUM]
377+
378+
## Verified ✓
379+
| Claim | Code | Test | Measurement | vs State of Art |
380+
|-------|------|------|-------------|-----------------|
381+
382+
## Plausible ~ (code exists, test missing)
383+
| Claim | Code | What's Missing |
384+
|-------|------|----------------|
385+
386+
## Unverified ? (no code found)
387+
| Claim | Expected Location | Status |
388+
|-------|-------------------|--------|
389+
390+
## Falsified ✗ (measurement contradicts claim)
391+
| Claim | Expected | Measured | Explanation |
392+
|-------|----------|----------|-------------|
393+
```

0 commit comments

Comments
 (0)