Laya MLX peut-il devenir dix fois plus rapide ? Une investigation mathématique
Date de recherche : 2026-09-19. Référence : les résultats FP16 MLX versionnés sur l’Apple M3 Max avec 40 cœurs GPU et 128 GiB de mémoire unifiée. Ce rapport sépare les faits algébriques, les estimations de coût statiques, les mesures CPU de matrices de checkpoint sélectionnées et les hypothèses nécessitant des expériences d’inférence. Aucune inférence GPU ni nouvelle mesure de latence n’a été effectuée pour cette investigation mathématique. L’investigation d’ingénierie compagne contient les temps des candidats lorsqu’ils sont disponibles. Ici, « exact » désigne la préservation des dépendances mathématiques et de la fonction en arithmétique réelle ; un ordre de réduction GPU ou un kernel différent peut encore changer les résultats à virgule flottante, donc les tolérances numériques existantes et le contrat de sortie exposé restent des portes d’acceptation.
Décision : ne pas budgéter d’amélioration universelle de 10× de bout en bout à partir de kernels écrits à la main tout en conservant ces checkpoints et leurs sorties complètes. L’attention locale exacte et l’élagage de sortie sont des améliorations utiles et bornées. La décomposition en rang faible direct n’est pas proche d’être sans perte sur les quatre matrices de poids échantillonnées. Une amélioration de produit de 10× est crédible pour des charges à répétition exacte substantielle, ou comme objectif d’un modèle distillé/restructuré nettement plus petit. Ce sont des promesses différentes et elles doivent avoir des benchmarks différents.
1. Ce qu’exige réellement un gain de dix fois
Voici les médianes de bout en bout synchronisées et à chaud existantes, incluant la préparation et le formatage ; ce ne sont pas de nouvelles mesures. Chaque référence a utilisé cinq warmups, 50 itérations mesurées et une limite de lot de 64 questions. Un jeu court de 50 questions répète trois définitions de question ; son runtime d’origine évalue néanmoins les 50. Les temps de téléchargement, de chargement et de compilation sont hors de ces médianes.
| Modèle | Courte 1 : référence → cible 10× | Courte 10 | Courte 50 | Longue 1 | Longue 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 |
| Multilingual | 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 |
| Typed decisions | 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 |
Sources : Laya FP16, multilingue FP16, typed-decisions FP16. Les longueurs courtes paddées sont 93/91/93 ; les longueurs longues sont 512/1024/1024. Comparer leurs lignes longues ne garde pas la longueur de tokens constante. La cible est une amélioration supplémentaire par rapport à MLX FP16 natif, pas par rapport à PyTorch MPS FP32.
Pour toute optimisation proposée, soit f sa fraction mesurée du temps d’horloge murale de bout en bout et s sa propre accélération. La loi d’Amdahl donne :
whole-request speedup = 1 / (1 - f + f/s)
10× requires f > 0.9 and s >= f / (f - 0.9)
Même accélérer un point chaud contenant 95% du temps de requête exige une amélioration de 19× sur ce point chaud. À 98%, il faut encore 12.25× ; à 99%, 11×. Toute préparation, conversion de sortie ou synchronisation non touchée consommant au moins 10% empêche un gain fini de 10× à partir de la seule portion restante. Des médianes indépendantes de forward et de bout en bout ne peuvent pas être soustraites pour estimer cette fraction ; utilise une expérience de mesure segmentée ou un profil.
2. Travail dense et bornes inférieures conditionnelles
D’après model.py, définis la largeur cachée D, la largeur du MLP de l’encodeur I, la profondeur de l’encodeur N, la profondeur de la tête H, la taille de lot B et la longueur de tokens paddés L. En comptant une multiplication et une addition comme deux FLOPs :
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 inclut les deux branches du MLP d’encodeur à porte et sa projection de sortie. Les MLP de tête utilisent une expansion conventionnelle différente, en 4D. Ces formules excluent les normes, les activations, le scoring, les masques, les transferts et l’ordonnancement ; elles sont un modèle de coût d’implémentation dense conventionnel, pas une borne inférieure arithmétique inconditionnelle sur tous les algorithmes possibles.
| Famille | D / I / N / H | Poids denses principaux A | Part du MLP de l’encodeur dans A | Octets FP16 pour A |
|---|---|---|---|---|
| Laya / typed decisions | 1024 / 2624 / 28 / 2 | 368,312,320 | 61.28% | 736,624,640 |
| Multilingual | 768 / 1152 / 22 / 2 | 124,452,864 | 46.92% | 248,905,728 |
L’embedding multilingue a 196,608,000 poids, mais l’inférence rassemble des lignes sélectionnées plutôt que de multiplier par le vocabulaire entier. Le nombre total de paramètres du checkpoint exagère donc son travail par token relativement à l’anglais. Un fichier d’embedding plus petit n’est pas automatiquement une inférence plus rapide.
| Modèle / forme | Travail dense + attention dense | Débit effectif requis à la cible 10× |
|---|---|---|
| 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 |
| Multilingual, B=1 L=91 | 23.26 GFLOPs | 31.48 TFLOP/s |
| Multilingual, B=50 L=91 | 1163.05 GFLOPs | 91.17 TFLOP/s |
| Multilingual, B=1 L=1024 | 332.19 GFLOPs | 88.27 TFLOP/s |
| Typed decisions, B=1 L=1024 | 883.15 GFLOPs | 89.00 TFLOP/s |
Ce sont des exigences, pas des pics GPU Apple revendiqués. Un plafond dense GEMM mesuré à ces formes est la comparaison d’ingénierie utile. Un plafond mesuré peut rendre un projet invraisemblable ; ce n’est toujours pas une preuve de borne supérieure matérielle. Comme le travail CPU tient aussi dans la cible, l’exécution GPU réelle doit se terminer plus tôt que ce tableau ne le permet si le travail CPU ne la chevauche pas.
Apple spécifie une bande passante de mémoire unifiée de 400 GB/s pour cette configuration M3 Max à 40 cœurs. Sous l’hypothèse explicite que les poids matriciels FP16 principaux sont lus depuis la mémoire unifiée une fois par requête et ne sont pas déjà retenus dans un cache sur puce, les planchers de streaming idéaux sont de 1.842 ms pour l’anglais/typed et 0.622 ms pour le multilingue. Ceux-ci omettent les activations, les embeddings, les poids du scorer et tout le calcul. Ils supposent aussi que la bande passante agrégée annoncée est entièrement disponible pour cette charge. Spécifications techniques Apple.
Les cibles anglaises courte-single de 1.342/1.371 ms sont déjà en dessous de ce plancher de streaming FP16 conventionnel. Pour satisfaire ces cibles à 400 GB/s sans changer le stockage des poids, il faudrait qu’environ 200/188 MB des poids comptés évitent la lecture mémoire, ou un autre changement des hypothèses d’exécution. Ce rapport ne suppose ni n’invente une capacité de cache sur puce. La réutilisation des poids au sein d’un lot, la compression exacte et des algorithmes alternatifs changent la borne ; l’observation n’est pas un théorème d’impossibilité universel.
Pour la partie dense seule, l’intensité arithmétique idéale poids uniquement est de BL FLOPs/byte en FP16 : 93 à B=1 L=93 et 4650 à B=50. Le trafic d’activation abaisse ces nombres. Cela explique pourquoi la compression des poids devient une stratégie de débit moins convaincante à mesure que le nombre de tokens partageant chaque matrice augmente.
3. Quelle quantité exacte de travail peut réellement être retirée ?
La première couche d’encodeur globale rend chaque token valide potentiellement pertinent, et les deux couches de tête de décision sont globales. L’absence d’un token dans la sortie finale ne rend pas sa représentation intermédiaire dispensable : des requêtes ultérieures l’utilisent encore comme clé/valeur.
L’exception exacte est la dernière couche de tête. Calcule ses K/V pour tous les tokens valides, Q seulement pour CLS et les marqueurs d’option, et sa projection de sortie/MLP seulement à ces positions sélectionnées. La tête précédente et l’encodeur complet doivent encore produire tous les états de token valides. C’est un élagage de dépendances, pas un retrait de tête d’attention. Avec R=5 positions sélectionnées, CLS compris, son économie dense maximale est de 20 B (L-R) D² FLOPs lorsque Q est séparé de la projection QKV fusionnée, plus 4 B L (L-R) D FLOPs d’attention. Préserver la projection QKV fusionnée est plus simple mais économise moins.
L’attention d’encodeur locale permet abs(q_position-k_position) <= 64, une fenêtre intérieure inclusive de 129 positions. Le nombre de paires locales valides pour L>64 est 129L - 64*65. Sauter les tuiles K/V interdites est mathématiquement exact si le padding et les positions sont préservés. Un masque appliqué après la multiplication QK dense ne réalise pas cette économie arithmétique.
| Modèle / longueur | Part des produits d’attention dans les FLOPs modélisés totaux | Économie exacte de fenêtre locale | Économie de sélection de la tête finale, R=5 | Économie combinée |
|---|---|---|---|---|
| Laya, 93 | 1.53% | 0.086% | 2.701% | 2.787% |
| Laya, 512 | 7.87% | 3.607% | 2.857% | 6.464% |
| Typed decisions, 1024 | 14.59% | 7.686% | 2.904% | 10.589% |
| Multilingual, 91 | 2.62% | 0.130% | 4.465% | 4.595% |
| Multilingual, 1024 | 23.27% | 11.919% | 4.584% | 16.503% |
Ce sont des réductions du travail modélisé, pas des prédictions de latence. Elles laissent 83.5–97.2% du travail modélisé intact, loin du budget de 10%. Même rendre tous les produits d’attention gratuits ne retire que 1.53–23.27% ici. Inversement, une accélération hypothétique de 10× de chaque projection dense tout en laissant l’attention inchangée ne donne que 8.79× pour les entrées anglaises courtes et 3.23× pour les entrées multilingues longues à efficacité FLOP égale. Un vrai profil doit remplacer ces fractions arithmétiques par des fractions de temps mesurées avant d’appliquer Amdahl.
Le runtime appelle déjà le SDPA rapide de MLX. FlashAttention calcule la même fonction d’attention softmax dense avec moins de trafic mémoire intermédiaire ; son tuilage ne rend pas une attention globale arbitraire linéaire en nombre de tokens. Exploiter le masque local existant du checkpoint est exact, tandis qu’imposer une nouvelle parcimonie à ses couches globales change le modèle. Le rang faible de QKᵀ n’implique pas un rang faible après exponentiation élément par élément et normalisation de ligne. Article FlashAttention, API d’attention MLX.
Le dépadding est lui aussi exact avec des séquences indépendantes, des positions d’origine et un ordre de sortie maintenus. Les jeux courts actuels de 50 questions ne gaspillent que 8.9% des tokens paddés anglais/typed et 5.8% des tokens multilingues. Ces jeux ne peuvent pas obtenir 10× par retrait du padding. Une charge différente contenant un élément de 1024 tokens et 49 éléments de 64 tokens gaspillerait assez de padding pour un rapport de travail par token de 12.3× ; ce serait un résultat d’ordonnancement propre à cette distribution.
4. La factorisation en rang faible révèle-t-elle un raccourci caché de 10× ?
Pour une matrice figée W de forme m × n, la remplacer par deux facteurs U(m × r) et V(r × n) fait passer le coût de multiplication par token de mn à r(m+n). L’équilibre exige r < mn/(m+n) ; une réduction de 10× du travail matriciel exige :
r <= mn / (10(m+n))
best squared Frobenius residual at rank r = sum_{j>r} sigma_j²
La seconde expression est l’optimum du SVD tronqué. Une projection carrée de largeur 1024 nécessite un rang d’au plus 51 ; sa factorisation exacte de plein rang double au contraire le nombre de multiplications. GELU, le gating, le softmax et le LayerNorm dépendant de l’entrée empêchent de multiplier simplement les poids de couches voisines en une seule matrice constante.
J’ai inspecté quatre matrices explicitement sélectionnées de couches intermédiaires à l’aide d’un solveur propre de Gram en float64 sur CPU, une matrice de sortie d’attention et une matrice d’entrée de MLP fusionnée de chaque famille de modèles. Le plus grand système propre était 1024×1024 ; toutes les limites de threads BLAS demandées valaient un, aucune bibliothèque GPU n’a été importée et aucune passe avant de modèle n’a été exécutée. Ce sont des spectres complets des matrices sélectionnées, pas une estimation par projection aléatoire ni un relevé de chaque couche.
| Matrice échantillonnée | Forme | Rang maximal pour une réduction de 10× du travail matriciel | Énergie de Frobenius au carré retenue à ce rang | Meilleure erreur de Frobenius relative | Rang retenant 99% de l’énergie |
|---|---|---|---|---|---|
| Laya couche 14 attention Wo | 1024×1024 | 51 | 28.66% | 84.46% | 690 |
| Laya couche 14 MLP Wi | 5248×1024 | 85 | 29.29% | 84.09% | 956 |
| Multilingual couche 11 attention Wo | 768×768 | 38 | 24.97% | 86.62% | 516 |
| Multilingual couche 11 MLP Wi | 2304×768 | 57 | 32.88% | 81.93% | 697 |
Les mesures brutes, les valeurs SHA-256 des matrices sélectionnées, les extrêmes de valeurs singulières, les rangs stables et des rangs candidats supplémentaires sont dans math_spectrum.json. Chaque matrice échantillonnée est numériquement de plein rang. Dans les quatre, retenir 99% de l’énergie de Frobenius au carré exige un rang au-dessus du seuil de rentabilité arithmétique des deux facteurs. Le MLP Wi multilingue a un rang stable de seulement 13.29, pourtant le rang 57 ne retient que 32.88% de l’énergie totale : le rang stable n’est pas la dimension nécessaire pour une petite erreur de reconstruction.
C’est une preuve solide contre le SVD poids uniquement simple comme raccourci quasi sans perte. Cela ne prouve pas une mauvaise exactitude de tâche pour tout modèle de rang faible : les activations de tokens peuvent occuper une distribution restreinte, et un réentraînement peut déplacer du calcul utile vers une représentation plus petite. Une compression sensible aux activations devrait minimiser l’erreur pondérée par la covariance d’entrée réelle, approximativement ||(W-Wr) Sigma_x^(1/2)||F, puis tester la qualité de bout en bout. L’analyse des quatre matrices n’estime pas ces covariances, ni une borne d’erreur globale sur les logits, ni un gain de vitesse atteignable sur le modèle complet. Un delta de fine-tuning en rang faible n’implique pas non plus que la matrice pré-entraînée figée elle-même puisse être écartée.
Une multiplication matricielle rapide écrite à la main ne retire pas cette preuve. À titre d’illustration arithmétique, une récursion de blocs à sept produits au lieu de huit n’économise que 12.5% du travail de multiplication par niveau, avant les additions matricielles et le trafic supplémentaires ; même dix niveaux idéaux produisent environ 3.8× moins de multiplications. Appliquer une récursion profonde à des projections de largeur 768–1024 n’est pas un plan de latence 10× crédible, surtout face à des GEMM GPU déjà tuilés. Ce n’est pas une prétention que tous les algorithmes exacts possibles ont été écartés.
5. Quantization, élagage et sortie anticipée changent le contrat
Quantization poids uniquement. Pour des groupes affines de 64 avec échelle et décalage FP16, les octets stockés par paramètre matriciel sont approximativement bits/8 + 4/64. Cela donne des réductions idéales de stockage matriciel de 1.88× à 8 bits, 3.56× à 4 bits et 6.40× à 2 bits par rapport à FP16. Ce ne sont pas des réductions de calcul ni des gains de temps d’horloge murale. Dix fois moins de trafic de poids par ce seul mécanisme exigerait environ un bit par poids plus des métadonnées, une approximation radicalement différente. Les tenseurs existants de norme/embedding/tête et le surcoût de décodage réduisent encore le bénéfice sur la requête complète. Documentation quantize de MLX, documentation de la matmul quantizée.
La quantization peut être utile à B=1 si le trafic de poids domine, mais elle n’accélère pas nécessairement un grand GEMM à beaucoup de tokens. Elle change les logits, les espérances de score, la confiance par entropie et les probabilités d’action. L’API publique expose tout cela, donc l’accord sur l’argmax seul ne suffit pas. Si chaque logit final change d’au plus epsilon, une marge entre les deux premiers logits supérieure à 2*epsilon certifie le libellé gagnant, mais ne certifie pas l’accord sur les probabilités, les scores ou les actions. La calibration de température divise les erreurs de logits par sa température ; une petite température peut amplifier une erreur brute apparemment faible. Les checkpoints existants contiennent des buckets de température par nombre d’options proches de 0.1006, ce qui rend ce point pertinent.
Élagage de tokens. À largeur/profondeur inchangées et efficacité de calcul dense constante, un objectif approximatif de travail dense 10× exige de retenir environ 10% du traitement des tokens à travers les couches, pas de retirer quelques tokens de ponctuation. L’élagage après avoir traité une fraction a de la profondeur d’origine a un rapport de travail dense a + (1-a)rho, où rho est la fraction de tokens retenus pour les couches suivantes. Si a >= 0.1, même écarter tous les tokens restants ne peut pas donner plus de 10× dans ce modèle simplifié. Dans ce modèle, la première couche globale relie déjà chaque token d’état à tous les tokens de question/option non masqués. L’importance apprise des tokens et l’élagage dynamique peuvent être étudiés, mais leur correction est une prétention de qualité de tâche nécessitant entraînement/calibration. Les tokens écartés peuvent contenir des négations, des entités rares ou le fait qui décide une option serrée ; une faible attention précoce n’est pas une preuve de non-pertinence aux couches ultérieures.
Sortie anticipée. Alimenter simplement une tête entraînée après la couche 28 avec les états cachés de la couche 3 ne préserve pas sa distribution d’entrée. Des têtes intermédiaires et une règle de confiance validée doivent être entraînées. Un budget de profondeur à coût uniforme de 10× représente environ 2.8 couches d’encodeur pour l’anglais ou 2.2 pour le multilingue, avant le surcoût de la tête et du CPU. Conserver la tête complète actuelle rend le budget dense des séquences courtes plus strict : ses deux couches valent à elles seules 6.83%/11.37% de A anglais/multilingue. Pour le multilingue, cette tête à elle seule dépasse tout le budget de travail dense de 10%. La divergence au sein d’un lot compte aussi : sortir des éléments individuels n’économise rien s’ils restent dans un lot dense non réduit. FastBERT et DeeBERT établissent des approches d’inférence adaptative entraînées avec des compromis exactitude/vitesse ; leurs gains rapportés ne sont pas des mesures de Laya ni de ce Mac.
Un élève approximatif avec repli sur le professeur a un coût normalisé attendu d’environ c + q, où c est le coût de l’élève divisé par le coût du professeur et q le taux de repli sur le professeur, en supposant une exécution sérielle. Pour atteindre 10×, c + q <= 0.1 : un élève coûtant 5% du professeur laisse au plus 5% des requêtes pour le repli. Cela peut améliorer la latence moyenne tandis que le p95 des requêtes difficiles reste proche de la latence du professeur. Le routage fondé sur la confiance n’est pas un certificat d’équivalence exacte.
6. Que peut-on réutiliser exactement entre les questions ?
Le prompt est [CLS] question/options [SEP] state [SEP] ; différentes questions peuvent changer à la fois l’offset de l’état et sa troncature. Pour une requête i de la première couche, la sortie d’attention est :
o_i = sum_j exp(q_i dot k_j / sqrt(d)) v_j
/ sum_j exp(q_i dot k_j / sqrt(d))
Changer n’importe quelle clé/valeur de question non masquée peut changer à la fois le numérateur et le dénominateur pour chaque requête d’état. Pour des logits finis, les poids softmax non masqués sont positifs en arithmétique réelle. Par conséquent, l’état contextuel après la première couche globale dépend de la question. Tous les K/V suivants dépendent de ces états modifiés. Réutiliser un encodage d’état complet ou un cache K/V de type décodeur entre différentes questions change donc la fonction. Un texte brut partagé ne suffit pas ; l’offset, la troncature, les masques et les métadonnées de marqueur comptent aussi.
Il y a une petite exception exacte qui mérite d’être distinguée : avant cette première opération d’attention, les embeddings de tokens normalisés et leurs projections Q/K/V de première couche, pré-RoPE dépendent uniquement de l’identité du token. Ils peuvent être mis en cache ou précalculés, avec les positions RoPE absolues appliquées ensuite. Éliminer toute la première projection QKV ne retire que 0.85%/1.42% du travail dense principal en anglais/multilingue, avant le trafic de recherche. Une table QKV de vocabulaire complet ajoute environ 309 MB/1.18 GB de stockage FP16 si elle est retenue aux côtés des embeddings ordinaires. Les statistiques suffisantes softmax état-à-état de la première couche peuvent aussi être réutilisées sous des conditions identiques de tokens/ troncature d’état et de positions relatives, puis combinées avec les contributions de question par une fusion softmax stable. Cela n’économise qu’une partie d’une couche d’attention ; cela ne rend pas réutilisables les états contextuels ultérieurs.
La déduplication exacte d’entrées complètes a un potentiel bien plus grand. Si N questions demandées contiennent U entrées de passe avant préparées identiques, évalue U et remappe leurs sorties brutes vers toutes les questions d’origine avec les libellés ordonnés, la calibration, les IDs et la comptabilité d’usage corrects. L’égalité et les clés de cache doivent couvrir tous les tenseurs préparés, y compris les masques, les positions des marqueurs et les types de question ; les clés inter-appels doivent aussi identifier la révision du checkpoint, le dtype et la configuration d’exécution. Dans le jeu existant de 50 questions, U <= 3, donc le rapport de travail linéaire idéal est 50/3 = 16.67×. La latence réelle est moins prévisible car les petits lots ont une efficacité différente et la préparation/le mapping de sortie subsistent. Pour 10 questions et trois entrées uniques, le rapport n’est que de 3.33×. Un benchmark de 50 questions distinctes doit accompagner l’un ou l’autre résultat.
Avec un cache de résultats inter-appels, la latence normalisée moyenne est 1-h+h*epsilon, où h est le taux de hits et epsilon le coût d’un hit divisé par le coût d’une inférence non mise en cache. Une amélioration moyenne de 10× exige h >= 0.9/(1-epsilon) ; si un hit coûte 1% d’une inférence, le taux de hits requis est de 90.91%. Rapporte séparément les taux de hits, les misses, la latence à cache froid et le chemin de miss. Le benchmark standard répète exactement la même requête, donc un cache inter-appels non étiqueté cesserait en grande partie de mesurer l’exécution du modèle.
Un encodeur à état partagé plus une cross-attention spécifique à la question est un produit repensé prometteur, mais il exige un réentraînement ou une distillation car il retire l’interaction précoce d’origine entre question et état. Si la passe d’état réutilisable coûte environ une ancienne passe par question, alors à Q=50 la passe partagée consomme 2% de l’ancien budget total ; le travail spécifique aux questions peut consommer au plus 8% de plus pour une cible de 10×. À Q=10, cette unique passe partagée utilise déjà 10% avant le travail spécifique aux questions. La longueur de l’état, la complexité des options et l’encodeur d’état plus petit choisi changent cette estimation.
7. Une voie crédible vers une amélioration du modèle d’un ordre de grandeur
Réduire à la fois la profondeur et la largeur offre assez de marge arithmétique pour absorber le surcoût. Ce qui suit sont des budgets de conception d’élève, pas des modèles implémentés, ni des prétentions de qualité, ni des gains de vitesse mesurés. Ils conservent les mêmes longueurs de tokens, utilisent un MLP d’encodeur à porte et une couche conventionnelle de tête de décision, et comptent la même formule A.
| Professeur | Candidat N / D / I / H | Poids denses principaux | Rapport de travail dense professeur/élève |
|---|---|---|---|
| Laya / typed | 6 / 512 / 1344 / 1 | 21.82 M | 16.88× |
| Laya / typed | 4 / 512 / 1344 / 1 | 15.60 M | 23.61× |
| Multilingual | 6 / 384 / 576 / 1 | 9.29 M | 13.40× |
| Multilingual | 4 / 384 / 576 / 1 | 6.78 M | 18.35× |
L’embedding peut rester relativement grand et rester peu coûteux à rassembler. Distille les distributions d’options et les sorties d’action du professeur, ajoute des tâches étiquetées, couvre le comportement score/noul et différents nombres d’options, puis réajuste la calibration de sortie sur des données mises de côté. Évalue la couverture linguistique complète et des questions distinctes. TinyBERT est une preuve que réduire conjointement profondeur et largeur de l’encodeur par distillation peut produire un compromis vitesse/qualité majeur dans un autre cadre BERT ; son gain d’inférence rapporté de 9.4× ne se transfère pas numériquement à Laya.
Pour l’ingénierie écrite à la main, priorise les décisions suivantes :
- Établir la limite avant d’écrire un nouveau GEMM. Mesure le temps du modèle compilé et des primitives denses représentatives à B=1 et à un lot de débit. Compare le débit soutenu réel aux exigences de 31–104 TFLOP/s ci-dessus. Si le retrait des lancements laisse l’exécution dense dominante, de nouveaux kernels élément par élément ne peuvent pas fournir l’ordre de grandeur manquant.
- Implémenter la sélection exacte de sortie et l’attention locale exacte comme projets bornés. La dernière tête a une preuve de dépendance claire ; le chemin local multilingue long a la plus grande opportunité arithmétique exacte. Inspecte les fractions de temps d’horloge murale mesurées avant de maintenir du Metal personnalisé. Préserve le contrat numérique de l’attention rapide existante et teste les longueurs limites/padding.
- Ne livrer la déduplication exacte qu’avec une comptabilité de charge. C’est la voie la plus rapide vers un résultat possible de 10× pour une application suffisamment répétitive. Elle doit coexister avec des benchmarks d’entrées uniques non mises en cache pour que les utilisateurs puissent prédire leurs propres résultats.
- Traiter le rang faible 4/8 bits et sensible aux activations comme des approximations mesurées. Exige ensemble une amélioration de vitesse et des portes de qualité calibrée. Ni moins d’octets stockés ni un petit nombre de rang stable ne suffisent.
- Si 10× est requis sur des requêtes neuves et diverses, développe et valide l’architecture élève plus petite ou à état partagé. Le budget de l’élève vise délibérément plus de 10× de réduction du travail dense car l’attention, la préparation CPU et le surcoût des petits kernels subsistent. Un budget de qualité et des données d’entraînement/évaluation adaptées sont des prérequis ; le jeu de parité existant ne peut pas valider cette prétention.
Pour les variantes approximatives, l’acceptation devrait consigner l’accord sur les choix et l’exactitude étiquetée, l’erreur de score, la dérive de probabilité, la calibration de confiance, les probabilités d’action et les cas à marge serrée. Les contrôles existants de 378/378 argmax, 600 appels répétés finis et l’alignement de régression AG News établissent le comportement du portage actuel sur ces tests ; ils ne valident pas un nouveau modèle compressé. Garde une identité de modèle distincte et rapporte ensemble p50/p95, la configuration à froid, la mémoire, le nombre d’entrées uniques et la qualité.
Reproduction et portée
- math_costs.py reproduit chaque tableau dérivé de l’architecture et chaque cible de latence à partir des configs de checkpoint et du JSON de benchmark existant ; math_costs.json consigne les hachages des fichiers d’entrée et les révisions de checkpoint.
- math_spectrum.py reproduit les quatre spectres matriciels CPU sélectionnés ; math_spectrum.json inclut les hachages exacts des matrices. Il n’utilise que NumPy et safetensors et ne charge pas le modèle complet.
- Exécute
.venv/bin/python experiments/math_costs.pyet.venv/bin/python experiments/math_spectrum.pydepuis la racine du dépôt après avoir téléchargé les checkpoints sources épinglés. L’échantillonnage CPU et les temps GPU d’ingénierie ont été coordonnés pour éviter tout chevauchement. - La sémantique actuelle de quantization de MLX a été vérifiée avec la skill
find-docsà l’aide de la résolution de bibliothèque Context7 requise suivie d’une requête distincte sur la documentation de quantization. La documentation officielle de MLX, les articles ModernBERT/FlashAttention et distillation/sortie anticipée, les spécifications Apple et le modèle local réel ont été utilisés comme sources. Aucun chiffre de performance tiré d’un article n’est présenté comme une mesure sur cette machine.
中文结论: 相同 checkpoint、相同完整输出语义下,暂时没有可信的“手写几个 kernel 就再快 10×”路径。现有模型的大头是 dense 计算;局部 attention 加最后 head 精确裁剪只减少约 2.8%–16.5% 的建模 FLOPs。真实权重抽样显示,把矩阵分解压到十分之一工作量会产生约 82%–87% 的最佳相对 Frobenius 重建误差,不能当成近似无损捷径。10× 更有希望来自高重复输入的精确去重/缓存,或通过蒸馏把层数与宽度一起缩小、重新设计共享 state 的编码方式。前者需要公布命中率与独立输入性能,后者需要训练和重新验证准确率、分数、概率及 action 行为。