Dokumentation

Kann Laya MLX zehnmal schneller werden? Eine mathematische Untersuchung

Forschungsdatum: 2026-09-19. Baseline: die festgeschriebenen FP16-MLX-Ergebnisse auf dem Apple M3 Max mit 40 GPU-Kernen und 128 GiB Unified Memory. Dieser Bericht trennt algebraische Fakten, statische Kostenschätzungen, CPU-Messungen ausgewählter Checkpoint-Matrizen und Hypothesen, die Inferenzexperimente erfordern. Für diese mathematische Untersuchung wurde keine GPU-Inferenz und keine neue Latenzmessung durchgeführt. Die begleitende Engineering-Untersuchung enthält Kandidaten-Zeitmessungen, sofern verfügbar. Hier bedeutet „exakt“, die mathematischen Abhängigkeiten und die reell-arithmetische Funktion zu bewahren; eine andere GPU-Reduktionsreihenfolge oder ein anderer Kernel kann Fließkommaergebnisse dennoch verändern, sodass die bestehenden numerischen Toleranzen und der Vertrag über exponierte Ausgaben weiterhin Abnahmegates bleiben.

Entscheidung: Plane keine universelle 10×-Ende-zu-Ende-Verbesserung durch handgeschriebene Kernel ein, während diese Checkpoints und ihre vollständigen Ausgaben beibehalten werden. Exakte lokale Attention und Output-Pruning sind lohnende, begrenzte Verbesserungen. Die direkte Low-Rank-Zerlegung ist in den vier beprobten Gewichtsmatrizen nicht annähernd verlustfrei. Eine 10×-Produktverbesserung ist glaubwürdig für Workloads mit erheblicher exakter Wiederholung oder als Ziel eines deutlich kleineren destillierten/neustrukturierten Modells. Das sind unterschiedliche Versprechen, und sie müssen unterschiedliche Benchmarks haben.

1. Was zehnmal schneller tatsächlich erfordert

Dies sind die bestehenden synchronisierten, warmen Ende-zu-Ende-Medianwerte, einschließlich Vorbereitung und Formatierung; sie sind keine neuen Messungen. Jede Baseline verwendete fünf Warmups, 50 getimte Iterationen und ein Fragen-Batch-Limit von 64. Ein kurzes 50-Fragen-Fixture wiederholt drei Fragedefinitionen; seine ursprüngliche Runtime wertet dennoch alle 50 aus. Download-, Lade- und Kompilierungszeit liegen außerhalb dieser Medianwerte.

Modell Kurz 1: Baseline → 10×-Ziel Kurz 10 Kurz 50 Lang 1 Lang 10
Laya 13.421 → 1.342 ms 71.068 → 7.107 ms 336.030 → 33.603 ms 44.927 → 4.493 ms 420.987 → 42.099 ms
Mehrsprachig 7.390 → 0.739 ms 27.386 → 2.739 ms 127.565 → 12.756 ms 37.635 → 3.763 ms 389.487 → 38.949 ms
Typisierte Entscheidungen 13.712 → 1.371 ms 75.618 → 7.562 ms 380.560 → 38.056 ms 99.233 → 9.923 ms 1000.294 → 100.029 ms

Quellen: Laya FP16, Mehrsprachig FP16, Typisierte Entscheidungen FP16. Kurze gepaddete Längen sind 93/91/93; lange Längen sind 512/1024/1024. Der Vergleich ihrer langen Zeilen hält die Token-Länge nicht konstant. Das Ziel ist eine weitere Verbesserung gegenüber nativer MLX FP16, nicht gegenüber PyTorch MPS FP32.

Für jede vorgeschlagene Optimierung sei f ihr gemessener Anteil an der Ende-zu-Ende-Wanduhrzeit und s ihre eigene Beschleunigung. Amdahls Gesetz ergibt:

whole-request speedup = 1 / (1 - f + f/s)
10× requires f > 0.9 and s >= f / (f - 0.9)

Selbst die Beschleunigung eines Hotspots, der 95% der Anfragezeit enthält, erfordert eine 19×-Verbesserung des Hotspots. Bei 98% sind es noch 12.25×; bei 99%, 11×. Jede unberührte Vorbereitung, Ausgabekonvertierung oder Synchronisierung, die mindestens 10% verbraucht, verhindert einen endlichen 10×-Gewinn allein aus dem verbleibenden Anteil. Unabhängige Forward- und Ende-zu-Ende-Medianwerte können nicht subtrahiert werden, um diesen Anteil zu schätzen; verwende ein segmentiertes Timing-Experiment oder ein Profil.

2. Dichte Arbeit und bedingte Untergrenzen

Aus model.py definiere die Hidden-Breite D, die Encoder-MLP-Breite I, die Encoder-Tiefe N, die Head-Tiefe H, die Batch-Größe B und die gepaddete Token-Länge L. Eine Multiplikation und eine Addition als zwei FLOPs gezählt:

A = N * (4 D² + 3 D I) + H * 12 D²
main dense FLOPs = 2 B L A
current dense attention products = 4 B (N + H) L² D

3DI umfasst beide Zweige der gated Encoder-MLP und ihre Ausgabeprojektion. Head-MLPs verwenden eine andere, konventionelle 4D-Erweiterung. Diese Formeln schließen Normen, Aktivierungen, Scoring, Masken, Transfers und Scheduling aus; sie sind ein konventionelles Kostenmodell einer dichten Implementierung, keine unbedingte arithmetische Untergrenze über alle möglichen Algorithmen.

Familie D / I / N / H Hauptgewichte dicht A Encoder-MLP-Anteil an A FP16-Bytes für A
Laya / typisierte Entscheidungen 1024 / 2624 / 28 / 2 368,312,320 61.28% 736,624,640
Mehrsprachig 768 / 1152 / 22 / 2 124,452,864 46.92% 248,905,728

Das mehrsprachige Embedding hat 196,608,000 Gewichte, aber die Inferenz sammelt ausgewählte Zeilen statt mit dem gesamten Vokabular zu multiplizieren. Die gesamten Checkpoint-Parameter übertreiben daher seine Arbeit pro Token im Vergleich zu Englisch. Eine kleinere Embedding-Datei bedeutet nicht automatisch schnellere Inferenz.

Modell / Shape Dichte + dichte-Attention-Arbeit Erforderlicher effektiver Durchsatz beim 10×-Ziel
Laya, B=1 L=93 69.57 GFLOPs 51.84 TFLOP/s
Laya, B=50 L=93 3478.44 GFLOPs 103.52 TFLOP/s
Laya, B=1 L=512 409.36 GFLOPs 91.12 TFLOP/s
Mehrsprachig, B=1 L=91 23.26 GFLOPs 31.48 TFLOP/s
Mehrsprachig, B=50 L=91 1163.05 GFLOPs 91.17 TFLOP/s
Mehrsprachig, B=1 L=1024 332.19 GFLOPs 88.27 TFLOP/s
Typisierte Entscheidungen, B=1 L=1024 883.15 GFLOPs 89.00 TFLOP/s

Dies sind Anforderungen, keine behaupteten Spitzenwerte der Apple-GPU. Eine gemessene Obergrenze für dichtes GEMM bei diesen Shapes ist der nützliche Engineering-Vergleich. Eine gemessene Obergrenze kann ein Projekt unplausibel machen; sie ist trotzdem kein Beweis für eine Hardware-Obergrenze. Da auch CPU-Arbeit in das Ziel passt, muss die tatsächliche GPU-Ausführung früher fertig werden, als diese Tabelle zulässt, wenn CPU-Arbeit sie nicht überlappt.

Apple gibt 400 GB/s Unified-Memory-Bandbreite für diese 40-Kern-M3-Max-Konfiguration an. Unter der ausdrücklichen Annahme, dass die Haupt-FP16-Matrixgewichte einmal pro Anfrage aus dem Unified Memory gelesen werden und nicht bereits im On-Chip-Cache gehalten werden, liegen die idealen Streaming-Untergrenzen bei 1.842 ms für Englisch/Typisiert und 0.622 ms für Mehrsprachig. Diese lassen Aktivierungen, Embeddings, Scorer-Gewichte und alle Berechnung weg. Sie nehmen außerdem an, dass die beworbene aggregierte Bandbreite diesem Workload vollständig zur Verfügung steht. Technische Spezifikationen von Apple.

Die englischen short-single-Ziele von 1.342/1.371 ms liegen bereits unter dieser konventionellen FP16-Streaming-Untergrenze. Um diese Ziele bei 400 GB/s zu erfüllen, ohne die Gewichtsspeicherung zu ändern, müssten etwa 200/188 MB der gezählten Gewichte den Speicherlesevorgang vermeiden, oder es müsste eine andere Änderung an den Ausführungsannahmen geben. Dieser Bericht nimmt keine On-Chip-Cache-Kapazität an oder erfindet sie. Gewichtswiederverwendung über einen Batch, exakte Kompression und alternative Algorithmen verändern die Grenze; die Beobachtung ist kein universelles Unmöglichkeitstheorem.

Für den dichten Teil allein beträgt die ideale rein gewichtsbezogene Arithmetikintensität BL FLOPs/byte in FP16: 93 bei B=1 L=93 und 4650 bei B=50. Aktivierungsverkehr senkt diese Zahlen. Das erklärt, warum Gewichtskompression als Durchsatzstrategie weniger überzeugend wird, je mehr Tokens sich jede Matrix teilen.

3. Wie viel exakte Arbeit kann tatsächlich entfernt werden?

Die erste globale Encoder-Schicht macht jedes gültige Token potenziell relevant, und beide Decision-Head-Schichten sind global. Dass ein Token in der endgültigen Ausgabe fehlt, macht seine Zwischenrepräsentation nicht entbehrlich: spätere Queries verwenden es weiterhin als Key/Value.

Die exakte Ausnahme ist die letzte Head-Schicht. Berechne ihre K/V für alle gültigen Tokens, Q nur für CLS und Options-Marker, und ihre Ausgabeprojektion/MLP nur an diesen ausgewählten Positionen. Der vorherige Head und der vollständige Encoder müssen weiterhin alle gültigen Token-Zustände erzeugen. Dies ist Dependency-Pruning, keine Entfernung von Attention-Heads. Mit R=5 ausgewählten Positionen einschließlich CLS beträgt ihre maximale dichte Einsparung 20 B (L-R) D² FLOPs, wenn Q aus der fusionierten QKV-Projektion herausgetrennt wird, plus 4 B L (L-R) D Attention-FLOPs. Die fusionierte QKV-Projektion beizubehalten ist einfacher, spart aber weniger.

Die lokale Encoder-Attention erlaubt abs(q_position-k_position) <= 64, ein inklusive 129-Positionen großes inneres Fenster. Die Anzahl gültiger lokaler Paare für L>64 ist 129L - 64*65. Das Überspringen verbotener K/V-Kacheln ist mathematisch exakt, wenn Padding und Positionen bewahrt werden. Eine Maske, die nach der dichten QK-Multiplikation angewendet wird, realisiert diese Arithmetik-Einsparung nicht.

Modell / Länge Anteil der Attention-Produkte an den modellierten Gesamt-FLOPs Exakte Local-Window-Einsparung Final-Head-Auswahl-Einsparung, R=5 Kombinierte Einsparung
Laya, 93 1.53% 0.086% 2.701% 2.787%
Laya, 512 7.87% 3.607% 2.857% 6.464%
Typisierte Entscheidungen, 1024 14.59% 7.686% 2.904% 10.589%
Mehrsprachig, 91 2.62% 0.130% 4.465% 4.595%
Mehrsprachig, 1024 23.27% 11.919% 4.584% 16.503%

Dies sind Reduktionen der modellierten Arbeit, keine Latenzvorhersagen. Sie lassen 83.5–97.2% der modellierten Arbeit intakt, weit entfernt vom 10%-Budget. Selbst wenn man alle Attention-Produkte kostenlos macht, entfernt das hier nur 1.53–23.27%. Umgekehrt ergibt eine hypothetische 10×-Beschleunigung jeder dichten Projektion bei unveränderter Attention nur 8.79× für englische kurze Eingaben und 3.23× für mehrsprachige lange Eingaben bei gleicher FLOP-Effizienz. Ein echtes Profil muss diese Arithmetikanteile durch gemessene Zeitanteile ersetzen, bevor Amdahl angewendet wird.

Die Runtime ruft bereits MLX Fast SDPA auf. FlashAttention berechnet dieselbe dichte Softmax-Attention-Funktion mit weniger Zwischenspeicherverkehr; sein Tiling macht beliebige globale Attention nicht linear in der Token-Anzahl. Die vorhandene lokale Maske des Checkpoints auszunutzen ist exakt, während das Aufzwingen neuer Sparsity auf seine globalen Schichten das Modell verändert. Der niedrige Rang von QKᵀ impliziert keinen niedrigen Rang nach elementweiser Exponentiation und Zeilennormalisierung. FlashAttention-Paper, MLX-Attention-API.

Unpadding ist ebenfalls exakt, wenn unabhängige Sequenzen, ursprüngliche Positionen und die Ausgabereihenfolge bewahrt werden. Die aktuellen kurzen 50-Fragen-Fixtures verschwenden nur 8.9% der englischen/typisierten und 5.8% der mehrsprachigen gepaddeten Tokens. Diese Fixtures können durch Padding-Entfernung keine 10× erreichen. Ein anderer Workload mit einem 1024-Token-Element und 49 64-Token-Elementen würde genug Padding für ein 12.3× Token-Arbeitsverhältnis verschwenden; das wäre ein für diese Verteilung spezifisches Scheduling-Ergebnis.

4. Offenbart Low-Rank-Faktorisierung eine verborgene 10×-Abkürzung?

Für eine eingefrorene Matrix W der Shape m × n ändert der Ersatz durch zwei Faktoren U(m × r) und V(r × n) die Multiplikationskosten pro Token von mn auf r(m+n). Break-even erfordert r < mn/(m+n); eine 10×-Reduktion der Matrixarbeit erfordert:

r <= mn / (10(m+n))
best squared Frobenius residual at rank r = sum_{j>r} sigma_j²

Der zweite Ausdruck ist das truncated-SVD-Optimum. Eine quadratische 1024-breite Projektion braucht höchstens Rang 51; ihre exakte Vollrang-Faktorisierung verdoppelt stattdessen die Multiplikationsanzahl. GELU, Gating, Softmax und eingabeabhängiger LayerNorm verhindern, benachbarte Schichtgewichte einfach zu einer konstanten Matrix zu multiplizieren.

Ich untersuchte vier explizit ausgewählte Mittel-Schicht-Matrizen mit einem CPU-float64-Gram-Eigenlöser, eine Attention-Ausgabematrix und eine fusionierte MLP-Eingabematrix aus jeder Modellfamilie. Das größte Eigensystem war 1024×1024; alle angeforderten BLAS-Thread-Limits waren eins, es wurden keine GPU-Bibliotheken importiert und kein Modell-Forward-Pass ausgeführt. Dies sind vollständige Spektren der ausgewählten Matrizen, keine Schätzung per Zufallsprojektion und keine Erhebung jeder Schicht.

Probenmatrix Shape Maximaler Rang für 10×-Reduktion der Matrixarbeit Bei diesem Rang beibehaltene quadrierte Frobenius-Energie Bester relativer Frobenius-Fehler Rang, der 99% der Energie beibehält
Laya Schicht 14 Attention Wo 1024×1024 51 28.66% 84.46% 690
Laya Schicht 14 MLP Wi 5248×1024 85 29.29% 84.09% 956
Mehrsprachig Schicht 11 Attention Wo 768×768 38 24.97% 86.62% 516
Mehrsprachig Schicht 11 MLP Wi 2304×768 57 32.88% 81.93% 697

Rohmessungen, SHA-256-Werte der ausgewählten Matrizen, Singularwert-Extrema, stabile Ränge und zusätzliche Kandidatenränge stehen in math_spectrum.json. Jede beprobte Matrix hat numerisch vollen Rang. Bei allen vier erfordert das Beibehalten von 99% der quadrierten Frobenius-Energie einen Rang oberhalb des arithmetischen Break-even-Punkts der zwei Faktoren. Die mehrsprachige MLP Wi hat nur stabilen Rang 13.29, doch Rang 57 behält bloß 32.88% der Gesamtenergie: Der stabile Rang ist nicht die Dimension, die für einen kleinen Rekonstruktionsfehler nötig ist.

Dies ist starker Beleg gegen reine gewichtsbezogene SVD als annähernd verlustfreie Abkürzung. Es beweist keine schlechte Task-Genauigkeit für jedes Low-Rank-Modell: Token-Aktivierungen können eine eingeschränkte Verteilung einnehmen, und Neuschulung kann nützliche Berechnung in eine kleinere Repräsentation verschieben. Aktivierungsbewusste Kompression sollte den Fehler minimieren, gewichtet nach der tatsächlichen Eingabekovarianz, etwa ||(W-Wr) Sigma_x^(1/2)||F, und dann die Ende-zu-Ende-Qualität testen. Die Vier-Matrizen-Analyse schätzt diese Kovarianzen, eine globale Logit-Fehlergrenze oder eine erreichbare Ganzmodell-Beschleunigung nicht. Ein Low-Rank-Fine-Tuning-Delta impliziert auch nicht, dass die eingefrorene vortrainierte Matrix selbst verworfen werden kann.

Handgeschriebene schnelle Matrixmultiplikation beseitigt diesen Beleg nicht. Als arithmetische Illustration spart eine Block-Rekursion mit sieben statt acht Produkten pro Ebene nur 12.5% der Multiplikationsarbeit, vor zusätzlichen Matrixadditionen und Verkehr; selbst zehn ideale Ebenen erzeugen etwa 3.8× weniger Multiplikationen. Tiefe Rekursion auf 768–1024-breite Projektionen anzuwenden ist kein glaubwürdiger 10×-Latenzplan, besonders gegenüber bereits gekachelten GPU-GEMMs. Dies ist keine Behauptung, dass alle möglichen exakten Algorithmen ausgeschlossen wurden.

5. Quantisierung, Pruning und Early Exit ändern den Vertrag

Reine Gewichtsquantisierung. Für affine Gruppen von 64 mit FP16-Skala und -Offset betragen die gespeicherten Bytes pro Matrixparameter etwa bits/8 + 4/64. Das ergibt ideale Matrixspeicher-Reduktionen von 1.88× bei 8-Bit, 3.56× bei 4-Bit und 6.40× bei 2-Bit relativ zu FP16. Dies sind keine Rechen- oder Wanduhrzeitgewinne. Zehnmal weniger Gewichtsverkehr allein durch diesen Mechanismus würde ungefähr ein Bit pro Gewicht plus Metadaten erfordern, eine radikal andere Approximation. Bestehende Norm-/Embedding-/Head-Tensoren und Decode-Overhead reduzieren den Nutzen der gesamten Anfrage weiter. MLX-Quantize-Dokumentation, Dokumentation zu quantized matmul.

Quantisierung kann bei B=1 nützlich sein, wenn Gewichtsverkehr dominiert, aber sie muss ein großes Token-GEMM nicht beschleunigen. Sie verändert Logits, Score-Erwartungen, Entropie-Konfidenz und Action-Wahrscheinlichkeiten. Die öffentliche API exponiert all dies, sodass Argmax-Übereinstimmung allein nicht ausreicht. Wenn sich jedes endgültige Logit um höchstens epsilon ändert, zertifiziert ein Top-Zwei-Logit-Abstand größer als 2*epsilon das gewinnende Label, aber nicht Wahrscheinlichkeits-, Score- oder Action-Übereinstimmung. Die Temperaturkalibrierung dividiert Logit-Fehler durch ihre Temperatur; eine kleine Temperatur kann einen scheinbar kleinen Rohfehler vergrößern. Die bestehenden Checkpoints enthalten Temperatur-Buckets für die Optionsanzahl nahe 0.1006, was dies relevant macht.

Token-Pruning. Bei unveränderter Breite/Tiefe und Effizienz der dichten Berechnung erfordert ein approximatives 10×-Ziel der dichten Arbeit, etwa 10% der Token-Verarbeitung über die Schichten beizubehalten, nicht ein paar Interpunktions-Tokens zu entfernen. Pruning nach Verarbeitung eines Anteils a der ursprünglichen Tiefe hat ein Dichtearbeits-Verhältnis a + (1-a)rho, wobei rho der Anteil beibehaltener Tokens für nachfolgende Schichten ist. Wenn a >= 0.1, kann selbst das Verwerfen jedes verbleibenden Tokens in diesem vereinfachten Modell nicht mehr als 10× ergeben. In diesem Modell verbindet die erste globale Schicht bereits jedes Zustands-Token mit allen unmaskierten Frage-/Options-Tokens. Gelernte Token-Wichtigkeit und dynamisches Pruning können untersucht werden, aber ihre Korrektheit ist eine Aussage zur Task-Qualität, die Training/Kalibrierung erfordert. Verworfene Tokens können Verneinungen, seltene Entitäten oder das Faktum enthalten, das eine knappe Option entscheidet; niedrige frühe Attention ist kein Beweis für Irrelevanz in späteren Schichten.

Early Exit. Layer-3-Hidden-States einfach an einen nach Schicht 28 trainierten Head zu geben, bewahrt nicht seine Eingabeverteilung. Zwischen-Heads und eine validierte Konfidenzregel müssen trainiert werden. Ein 10×-Tiefenbudget bei gleichmäßigen Kosten entspricht etwa 2.8 Encoder-Schichten für Englisch oder 2.2 für Mehrsprachig, vor Head- und CPU-Overhead. Den vollständigen aktuellen Head beizubehalten macht das dichte Budget für kurze Sequenzen strenger: Seine zwei Schichten allein sind 6.83%/11.37% von A für Englisch/Mehrsprachig. Für Mehrsprachig übersteigt dieser Head allein das gesamte 10%-Budget der dichten Arbeit. Auch Batch-Divergenz zählt: Einzelne Elemente früh zu beenden spart nichts, wenn sie in einem nicht verkleinerten dichten Batch verbleiben. FastBERT und DeeBERT etablieren trainierte Ansätze adaptiver Inferenz mit Genauigkeits-/Geschwindigkeitskompromissen; ihre berichteten Gewinne sind keine Messungen von Laya oder dieser Mac.

Ein approximativer Student plus Teacher-Fallback hat erwartete normalisierte Kosten von ungefähr c + q, wobei c die Student-Kosten geteilt durch die Teacher-Kosten und q die Teacher-Fallback-Rate ist, unter der Annahme serieller Ausführung. Um 10× zu erreichen, c + q <= 0.1: Ein Student, der 5% des Teachers kostet, lässt höchstens 5% der Anfragen für den Fallback übrig. Das kann die mittlere Latenz verbessern, während das p95 der schwierigen Anfragen nahe der Teacher-Latenz bleibt. Konfidenzbasiertes Routing ist kein exaktes Äquivalenzzertifikat.

6. Was genau kann über Fragen hinweg wiederverwendet werden?

Der Prompt ist [CLS] question/options [SEP] state [SEP]; unterschiedliche Fragen können sowohl den Zustands-Offset als auch die Zustands-Trunkierung ändern. Für die Query i der ersten Schicht ist die Attention-Ausgabe:

o_i = sum_j exp(q_i dot k_j / sqrt(d)) v_j
      / sum_j exp(q_i dot k_j / sqrt(d))

Das Ändern eines beliebigen unmaskierten Frage-Key/Value kann sowohl Zähler als auch Nenner für jede Zustands-Query verändern. Bei endlichen Logits sind die unmaskierten Softmax-Gewichte in reeller Arithmetik positiv. Folglich hängt der kontextuelle Zustand nach der ersten globalen Schicht von der Frage ab. Alle nachfolgenden K/V hängen von diesen geänderten Zuständen ab. Eine vollständige Zustandskodierung oder einen Decoder-artigen K/V-Cache über verschiedene Fragen hinweg wiederzuverwenden, verändert daher die Funktion. Geteilter Rohtext reicht nicht aus; Offset, Trunkierung, Masken und Marker-Metadaten zählen ebenfalls.

Es gibt eine kleine exakte Ausnahme, die es wert ist, unterschieden zu werden: Vor dieser ersten Attention-Operation hängen normalisierte Token-Embeddings und ihre Pre-RoPE-Q/K/V-Projektionen der ersten Schicht nur von der Token-Identität ab. Sie können gecacht oder vorberechnet werden, wobei absolute RoPE-Positionen danach angewendet werden. Die vollständige erste QKV-Projektion zu eliminieren entfernt nur 0.85%/1.42% der Haupt-Dichtearbeit bei Englisch/Mehrsprachig, vor Lookup-Verkehr. Eine QKV-Tabelle über das gesamte Vokabular fügt grob 309 MB/1.18 GB FP16-Speicher hinzu, wenn sie neben den gewöhnlichen Embeddings behalten wird. Die Softmax-Suffizienzstatistiken von Zustand zu Zustand der ersten Schicht können ebenfalls wiederverwendet werden, unter identischen Bedingungen von Zustands-Token/Trunkierung und relativer Position, und dann mit Fragebeiträgen durch stabiles Softmax-Merging kombiniert werden. Dies spart nur einen Teil einer Attention-Schicht; es macht spätere kontextuelle Zustände nicht wiederverwendbar.

Exakte Deduplizierung ganzer Eingaben hat ein viel größeres Potenzial. Wenn N angeforderte Fragen U identische vorbereitete Forward-Eingaben enthalten, werte U aus und ordne ihre Rohausgaben allen ursprünglichen Fragen mit den korrekten geordneten Labels, Kalibrierung, IDs und Usage-Abrechnung zu. Gleichheits- und Cache-Schlüssel müssen alle vorbereiteten Tensoren abdecken, einschließlich Masken, Marker-Positionen und Fragetypen; schlüsselübergreifende Aufrufe müssen außerdem Checkpoint-Revision, dtype und Ausführungskonfiguration identifizieren. Im bestehenden 50-Fragen-Fixture ist U <= 3, sodass das ideale lineare Arbeitsverhältnis 50/3 = 16.67× beträgt. Die tatsächliche Latenz ist weniger vorhersagbar, weil kleine Batches eine andere Effizienz haben und Vorbereitung/Ausgabe-Zuordnung bleiben. Bei 10 Fragen und drei eindeutigen Eingaben beträgt das Verhältnis nur 3.33×. Ein Benchmark mit 50 unterschiedlichen Fragen muss beide Ergebnisse begleiten.

Mit aufrufübergreifendem Ergebnis-Caching beträgt die durchschnittliche normalisierte Latenz 1-h+h*epsilon, wobei h die Trefferquote und epsilon die Cache-Trefferkosten geteilt durch die Kosten der nicht gecachten Inferenz ist. Eine durchschnittliche 10×-Verbesserung erfordert h >= 0.9/(1-epsilon); wenn ein Treffer 1% der Inferenz kostet, beträgt die erforderliche Trefferquote 90.91%. Berichte Trefferquoten, Misses, Cold-Cache-Latenz und den Miss-Pfad separat. Der Standard-Benchmark wiederholt exakt dieselbe Anfrage, sodass ein unbeschrifteter aufrufübergreifender Cache die Messung der Modellausführung weitgehend einstellen würde.

Ein Shared-State-Encoder plus fragespezifische Cross-Attention ist ein vielversprechendes neu entworfenes Produkt, erfordert aber Neuschulung oder Destillation, weil es die ursprüngliche frühe Frage/Zustand-Interaktion entfernt. Wenn der wiederverwendbare Zustandsdurchlauf ungefähr einen alten Pro-Frage-Durchlauf kostet, dann verbraucht der geteilte Durchlauf bei Q=50 2% des alten Gesamtbudgets; fragespezifische Arbeit darf für ein 10×-Ziel höchstens weitere 8% verbrauchen. Bei Q=10 nutzt dieser einzelne geteilte Durchlauf bereits 10%, bevor fragespezifische Arbeit beginnt. Zustandslänge, Optionskomplexität und der gewählte kleinere Zustandsencoder verändern diese Schätzung.

7. Ein glaubwürdiger Weg zu einer Modellverbesserung um eine Größenordnung

Sowohl Tiefe als auch Breite zu reduzieren schafft genug arithmetischen Raum, um Overhead aufzunehmen. Das Folgende sind Student-Design-Budgets, keine implementierten Modelle, Qualitätsaussagen oder gemessenen Beschleunigungen. Sie behalten dieselben Token-Längen bei, verwenden eine gated Encoder-MLP und eine konventionelle Decision-Head-Schicht und zählen dieselbe A-Formel.

Teacher Kandidat N / D / I / H Hauptgewichte dicht Teacher/Student-Verhältnis der Dichtearbeit
Laya / typisiert 6 / 512 / 1344 / 1 21.82 M 16.88×
Laya / typisiert 4 / 512 / 1344 / 1 15.60 M 23.61×
Mehrsprachig 6 / 384 / 576 / 1 9.29 M 13.40×
Mehrsprachig 4 / 384 / 576 / 1 6.78 M 18.35×

Das Embedding kann relativ groß bleiben und dennoch günstig zu sammeln sein. Destilliere die Optionsverteilungen und Action-Ausgaben des Teachers, mische gelabelte Aufgaben hinein, decke score/noul-Verhalten und variierende Optionsanzahlen ab und passe dann die Ausgabekalibrierung auf zurückgehaltenen Daten neu an. Evaluiere die vollständige Sprachabdeckung und unterschiedliche Fragen. TinyBERT ist ein Beleg dafür, dass das gemeinsame Reduzieren von Encoder-Tiefe/-Breite durch Destillation in einer anderen BERT-Umgebung einen großen Geschwindigkeits-/Qualitätskompromiss erzielen kann; sein berichteter 9.4×-Inferenzgewinn überträgt sich nicht numerisch auf Laya.

Für handgeschriebenes Engineering priorisiere die folgenden Entscheidungen:

  1. Ermittle die Grenze, bevor du ein neues GEMM schreibst. Messe die kompilierte Modellzeit und repräsentative dichte Primitive bei B=1 und einem Durchsatz-Batch. Vergleiche den tatsächlichen anhaltenden Durchsatz mit den obigen Anforderungen von 31–104 TFLOP/s. Wenn das Entfernen von Launches die dichte Ausführung dominant lässt, können neue elementweise Kernel die fehlende Größenordnung nicht liefern.
  2. Implementiere exakte Ausgabeselektion und exakte lokale Attention als begrenzte Projekte. Der letzte Head hat einen klaren Abhängigkeitsbeweis; der lange mehrsprachige lokale Pfad hat die größte exakte Arithmetikgelegenheit. Prüfe gemessene Wanduhrzeit-Anteile, bevor du eigenes Metal pflegst. Bewahre den numerischen Vertrag der bestehenden schnellen Attention und teste Grenzlängen/Padding.
  3. Liefere exakte Deduplizierung nur mit Workload-Abrechnung aus. Dies ist der schnellste Weg zu einem möglichen 10×-Ergebnis für eine ausreichend repetitive Anwendung. Sie muss mit ungecachten Benchmarks für eindeutige Eingaben koexistieren, damit Nutzer ihre eigenen Ergebnisse vorhersagen können.
  4. Behandle 4/8-Bit und aktivierungsbewussten Low-Rank als gemessene Approximationen. Verlange eine Geschwindigkeitsverbesserung und kalibrierte Qualitäts-Gates gemeinsam. Weder weniger gespeicherte Bytes noch eine niedrige stabile Rangzahl reichen aus.
  5. Wenn 10× bei frischen, vielfältigen Anfragen erforderlich ist, entwickle und validiere den kleineren Student oder die Shared-State-Architektur. Das Student-Budget zielt bewusst auf mehr als 10× Reduktion der Dichtearbeit, weil Attention, CPU-Vorbereitung und Small-Kernel-Overhead bleiben. Ein Qualitätsbudget und geeignete Trainings-/Evaluationsdaten sind Voraussetzungen; das bestehende Paritäts-Fixture kann diese Aussage nicht validieren.

Für approximative Varianten sollte die Abnahme Choice-Übereinstimmung und gelabelte Genauigkeit, Score-Fehler, Wahrscheinlichkeitsdrift, Konfidenzkalibrierung, Action-Wahrscheinlichkeiten und knappe Grenzfälle aufzeichnen. Bestehende 378/378-Argmax-Prüfungen, 600 endliche Wiederholungsaufrufe und die AG-News-Regressionsangleichung etablieren das Verhalten des aktuellen Ports in diesen Tests; sie validieren kein neues komprimiertes Modell. Behalte eine eigene Modellidentität bei und berichte p50/p95, Cold-Setup, Speicher, Anzahl eindeutiger Eingaben und Qualität zusammen.

Reproduktion und Umfang

  • math_costs.py reproduziert jede architektur-abgeleitete Tabelle und jedes Latenzziel aus Checkpoint-Konfigurationen und dem bestehenden Benchmark-JSON; math_costs.json zeichnet Eingabedatei-Hashes und Checkpoint-Revisionen auf.
  • math_spectrum.py reproduziert die vier ausgewählten CPU-Matrixspektren; math_spectrum.json enthält exakte Matrix-Hashes. Es verwendet nur NumPy und safetensors und lädt nicht das vollständige Modell.
  • Führe .venv/bin/python experiments/math_costs.py und .venv/bin/python experiments/math_spectrum.py vom Repository-Wurzelverzeichnis aus, nachdem du die fixierten Quell-Checkpoints heruntergeladen hast. CPU-Sampling und Engineering-GPU-Zeiten wurden koordiniert, um Überlappung zu vermeiden.
  • Die aktuelle MLX-Quantisierungssemantik wurde mit der find-docs-Skill unter Verwendung der erforderlichen Context7-Bibliotheksauflösung und anschließender separater Quantisierungsdokumentationsabfrage geprüft. Offizielle MLX-Dokumentation, die ModernBERT/FlashAttention- und Destillations-/Early-Exit-Papers, Apple-Spezifikationen und das tatsächliche lokale Modell wurden als Quellen verwendet. Keine Performance-Zahl aus einem Paper wird als Messung auf dieser Maschine präsentiert.

中文结论: 相同 checkpoint、相同完整输出语义下,暂时没有可信的“手写几个 kernel 就再快 10×”路径。现有模型的大头是 dense 计算;局部 attention 加最后 head 精确裁剪只减少约 2.8%–16.5% 的建模 FLOPs。真实权重抽样显示,把矩阵分解压到十分之一工作量会产生约 82%–87% 的最佳相对 Frobenius 重建误差,不能当成近似无损捷径。10× 更有希望来自高重复输入的精确去重/缓存,或通过蒸馏把层数与宽度一起缩小、重新设计共享 state 的编码方式。前者需要公布命中率与独立输入性能,后者需要训练和重新验证准确率、分数、概率及 action 行为。