Documentação

O Laya MLX pode ficar dez vezes mais rápido? Uma investigação matemática

Data da investigação: 2026-09-19. Linha de base: os resultados MLX FP16 confirmados no Apple M3 Max com 40 núcleos de GPU e 128 GiB de memória unificada. Este relatório separa factos algébricos, estimativas estáticas de custo, medições na CPU de matrizes selecionadas dos checkpoints e hipóteses que exigem experiências de inferência. Não foi realizada nenhuma inferência de GPU nem nova medição de latência para esta investigação matemática. A investigação de engenharia que a acompanha contém tempos de candidatos quando disponíveis. Aqui, «exato» refere-se a preservar as dependências matemáticas e a função aritmética real; uma ordem de redução diferente na GPU ou um kernel diferente pode ainda alterar os resultados de vírgula flutuante, por isso as tolerâncias numéricas existentes e o contrato de saída exposto continuam a ser portões de aceitação.

Decisão: não orçamentar uma melhoria universal de 10× ponta a ponta a partir de kernels escritos à mão mantendo estes checkpoints e as suas saídas completas. A atenção local exata e a poda de saídas são melhorias válidas, mas limitadas. A decomposição direta de baixo posto não está perto de ser sem perdas nas quatro matrizes de pesos amostradas. Uma melhoria de 10× no produto é credível para cargas de trabalho com uma repetição exata substancial, ou como objetivo de um modelo destilado/reestruturado substancialmente mais pequeno. São promessas diferentes e têm de ter benchmarks diferentes.

1. O que exige realmente dez vezes mais rápido

Estes são os tempos de latência medianos ponta a ponta existentes, sincronizados e a quente, incluindo preparação e formatação; não são medições novas. Cada linha de base usou cinco warmups, 50 iterações cronometradas e um limite de lote de perguntas de 64. Um fixture curto de 50 perguntas repete três definições de pergunta; o seu runtime original avalia, ainda assim, as 50. O tempo de download, carregamento e compilação está fora destas medianas.

Modelo Curta 1: linha de base → alvo 10× Curta 10 Curta 50 Longa 1 Longa 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

Fontes: Laya FP16, multilingual FP16, typed-decisions FP16. Os comprimentos curtos com padding são 93/91/93; os comprimentos longos são 512/1024/1024. Comparar as suas linhas longas não mantém constante o comprimento em tokens. O alvo é uma melhoria adicional sobre o MLX FP16 nativo, não sobre o PyTorch MPS FP32.

Para qualquer otimização proposta, seja f a sua fração medida do tempo real ponta a ponta e s a sua própria aceleração. A lei de Amdahl dá:

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

Mesmo acelerar um hotspot que contém 95% do tempo do pedido exige uma melhoria do hotspot de 19×. A 98% ainda exige 12.25×; a 99%, 11×. Qualquer preparação, conversão de saída ou sincronização intacta que consuma pelo menos 10% impede um ganho finito de 10× apenas a partir da porção restante. As medianas independentes de forward e ponta a ponta não podem ser subtraídas para estimar essa fração; usa uma experiência de medição por segmentos ou um perfil.

2. Trabalho denso e limites inferiores condicionais

A partir de model.py, define a largura oculta D, a largura da MLP do codificador I, a profundidade do codificador N, a profundidade da cabeça H, o tamanho do lote B e o comprimento dos tokens com padding L. Contando uma multiplicação e uma adição como dois 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 inclui ambos os ramos da MLP com gating do codificador e a sua projeção de saída. As MLPs da cabeça usam uma expansão 4D diferente e convencional. Estas fórmulas excluem norms, ativações, pontuação, máscaras, transferências e escalonamento; são um modelo de custo de implementação densa convencional, não um limite inferior aritmético incondicional sobre todos os algoritmos possíveis.

Família D / I / N / H Principais pesos densos A Fração da MLP do codificador em A Bytes FP16 para 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

O embedding multilingue tem 196,608,000 pesos, mas a inferência reúne linhas selecionadas em vez de multiplicar por todo o vocabulário. O total de parâmetros do checkpoint exagera, por isso, o seu trabalho por token em relação ao inglês. Um ficheiro de embedding mais pequeno não é automaticamente uma inferência mais rápida.

Modelo / forma Trabalho denso + de atenção densa Débito efetivo necessário no alvo de 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

Estes são requisitos, não picos da GPU Apple reivindicados. Um teto medido de GEMM denso nestas formas é a comparação de engenharia útil. Um teto medido pode tornar um projeto implausível; ainda assim, não é prova de um limite superior de hardware. Como o trabalho da CPU também cabe dentro do alvo, a execução real na GPU tem de terminar mais cedo do que esta tabela permite se o trabalho da CPU não se sobrepuser a ela.

A Apple especifica 400 GB/s de largura de banda de memória unificada para esta configuração M3 Max de 40 núcleos. Sob o pressuposto explícito de que os principais pesos de matriz FP16 são lidos da memória unificada uma vez por pedido e não estão já retidos em cache no chip, os limites inferiores ideais de streaming são 1.842 ms para inglês/typed e 0.622 ms para multilingue. Estes omitem ativações, embeddings, pesos do scorer e toda a computação. Assumem também que a largura de banda agregada anunciada está totalmente disponível para esta carga de trabalho. Especificações técnicas da Apple.

Os alvos ingleses de pergunta única curta de 1.342/1.371 ms já estão abaixo desse limite inferior convencional de streaming FP16. Para satisfazer esses alvos a 400 GB/s sem alterar o armazenamento dos pesos, seria necessário que aproximadamente 200/188 MB dos pesos contados evitassem a leitura de memória, ou outra alteração aos pressupostos de execução. Este relatório não assume nem inventa uma capacidade de cache no chip. A reutilização de pesos ao longo de um lote, a compressão exata e algoritmos alternativos alteram o limite; a observação não é um teorema universal de impossibilidade.

Apenas para a parte densa, a intensidade aritmética ideal apenas de pesos é BL FLOPs/byte em FP16: 93 em B=1 L=93 e 4650 em B=50. O tráfego de ativações baixa esses números. Isto explica porque a compressão de pesos se torna uma estratégia de débito menos convincente à medida que cresce o número de tokens que partilham cada matriz.

3. Quanto trabalho exato pode realmente ser removido?

A primeira camada global do codificador torna cada token válido potencialmente relevante, e ambas as camadas da cabeça de decisão são globais. O facto de um token estar ausente da saída final não torna a sua representação intermédia dispensável: as queries posteriores continuam a usá-lo como key/value.

A exceção exata é a última camada da cabeça. Calcula os seus K/V para todos os tokens válidos, o Q apenas para o CLS e os marcadores de opção, e a sua projeção de saída/MLP apenas nessas posições selecionadas. A cabeça anterior e o codificador completo têm de continuar a produzir todos os estados de tokens válidos. Isto é poda de dependências, não remoção de cabeças de atenção. Com R=5 posições selecionadas, incluindo o CLS, a sua poupança densa máxima é 20 B (L-R) D² FLOPs quando o Q é separado da projeção QKV fundida, mais 4 B L (L-R) D FLOPs de atenção. Preservar a projeção QKV fundida é mais simples, mas poupa menos.

A atenção local do codificador permite abs(q_position-k_position) <= 64, uma janela interior inclusiva de 129 posições. O número de pares locais válidos para L>64 é 129L - 64*65. Saltar os tiles K/V proibidos é matematicamente exato se o padding e as posições forem preservados. Uma máscara aplicada após a multiplicação QK densa não realiza essa poupança aritmética.

Modelo / comprimento Fração dos produtos de atenção nos FLOPs modelados totais Poupança exata da janela local Poupança da seleção da cabeça final, R=5 Poupança combinada
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%

Estas são reduções no trabalho modelado, não previsões de latência. Deixam intactos 83.5–97.2% do trabalho modelado, longe do orçamento de 10%. Mesmo tornar todos os produtos de atenção gratuitos remove aqui apenas 1.53–23.27%. Inversamente, uma aceleração hipotética de 10× de todas as projeções densas mantendo a atenção inalterada dá apenas 8.79× para entradas curtas em inglês e 3.23× para entradas longas em multilingue, com igual eficiência de FLOPs. Um perfil real tem de substituir estas frações aritméticas por frações de tempo medidas antes de aplicar Amdahl.

O runtime já chama o SDPA rápido do MLX. O FlashAttention calcula a mesma função densa de softmax-attention com menos tráfego de memória intermédia; o seu tiling não torna a atenção global arbitrária linear no número de tokens. Explorar a máscara local existente do checkpoint é exato, enquanto impor nova esparsidade às suas camadas globais altera o modelo. O baixo posto de QKᵀ não implica baixo posto após a exponenciação elementwise e a normalização por linhas. Artigo do FlashAttention, API de atenção do MLX.

Remover o padding também é exato desde que se mantenham sequências independentes, posições originais e a ordem de saída. Os atuais fixtures curtos de 50 perguntas desperdiçam apenas 8.9% dos tokens com padding em inglês/typed e 5.8% em multilingue. Esses fixtures não conseguem obter 10× com a remoção do padding. Uma carga de trabalho diferente que contenha um item de 1024 tokens e 49 itens de 64 tokens desperdiçaria padding suficiente para uma razão de trabalho em tokens de 12.3×; isso seria um resultado de escalonamento específico dessa distribuição.

4. A fatorização de baixo posto revela um atalho oculto de 10×?

Para uma matriz congelada W de forma m × n, substituí-la por dois fatores U(m × r) e V(r × n) altera o custo de multiplicação por token de mn para r(m+n). O ponto de equilíbrio exige r < mn/(m+n); uma redução de trabalho matricial de 10× exige:

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

A segunda expressão é o ótimo do SVD truncado. Uma projeção quadrada de 1024 de largura precisa de um posto no máximo 51; a sua fatorização exata de posto completo duplica, em vez disso, a contagem de multiplicações. O GELU, o gating, o softmax e o LayerNorm dependente da entrada impedem simplesmente multiplicar os pesos de camadas vizinhas numa única matriz constante.

Inspecionei quatro matrizes de camadas intermédias explicitamente selecionadas usando um eigendsolver de Gram em float64 na CPU, uma matriz de saída de atenção e uma matriz de entrada da MLP fundida de cada família de modelos. O maior sistema de eigenvalores era 1024×1024; todos os limites de threads BLAS pedidos eram um, não foram importadas bibliotecas de GPU e não foi corrida nenhuma passagem direta do modelo. Estes são espetros completos das matrizes selecionadas, não uma estimativa por projeção aleatória nem um levantamento de todas as camadas.

Matriz de amostra Forma Posto máximo para uma redução de trabalho matricial de 10× Energia de Frobenius ao quadrado retida nesse posto Melhor erro relativo de Frobenius Posto que retém 99% da energia
Laya layer 14 attention Wo 1024×1024 51 28.66% 84.46% 690
Laya layer 14 MLP Wi 5248×1024 85 29.29% 84.09% 956
Multilingual layer 11 attention Wo 768×768 38 24.97% 86.62% 516
Multilingual layer 11 MLP Wi 2304×768 57 32.88% 81.93% 697

As medições em bruto, os valores SHA-256 das matrizes selecionadas, os extremos dos valores singulares, os postos estáveis e postos candidatos adicionais estão em math_spectrum.json. Cada matriz amostrada é numericamente de posto completo. Nas quatro, reter 99% da energia de Frobenius ao quadrado exige um posto acima do ponto de equilíbrio aritmético dos dois fatores. A MLP Wi multilingue tem um posto estável de apenas 13.29, mas o posto 57 retém apenas 32.88% da energia total: o posto estável não é a dimensão necessária para um pequeno erro de reconstrução.

Isto é forte evidência contra o SVD simples apenas de pesos como atalho quase sem perdas. Não prova uma fraca exatidão de tarefas para todos os modelos de baixo posto: as ativações dos tokens podem ocupar uma distribuição restrita, e o re-treino pode mover computação útil para uma representação mais pequena. A compressão ciente das ativações deve minimizar o erro ponderado pela covariância real das entradas, aproximadamente ||(W-Wr) Sigma_x^(1/2)||F, e depois testar a qualidade ponta a ponta. A análise das quatro matrizes não estima essas covariâncias, um limite global de erro dos logits nem um aumento de velocidade alcançável no modelo completo. Um delta de ajuste fino de baixo posto também não implica que a própria matriz pré-treinada congelada possa ser descartada.

A multiplicação rápida de matrizes escrita à mão não remove esta evidência. Como ilustração aritmética, uma recursão de blocos com sete produtos em vez de oito poupa apenas 12.5% do trabalho de multiplicação por nível, antes de adições de matrizes e tráfego adicionais; mesmo dez níveis ideais produzem cerca de 3.8× menos multiplicações. Aplicar recursão profunda a projeções de 768–1024 de largura não é um plano credível de 10× de latência, sobretudo contra GEMMs de GPU já com tiling. Isto não é uma afirmação de que todos os algoritmos exatos possíveis tenham sido descartados.

5. A quantização, a poda e a saída antecipada alteram o contrato

Quantização apenas de pesos. Para grupos afins de 64 com escala e desvio FP16, os bytes armazenados por parâmetro de matriz são aproximadamente bits/8 + 4/64. Isto produz reduções ideais de armazenamento de matrizes de 1.88× em 8 bits, 3.56× em 4 bits e 6.40× em 2 bits em relação a FP16. Estas não são reduções de computação nem ganhos de tempo real. Dez vezes menos tráfego de pesos só por este mecanismo exigiria aproximadamente um bit por peso mais metadados, uma aproximação radicalmente diferente. Os tensores existentes de norm/embedding/head e a sobrecarga de descodificação reduzem ainda mais o benefício por pedido completo. Documentação de quantização do MLX, documentação de matmul quantizado.

A quantização pode ser útil em B=1 se o tráfego de pesos dominar, mas não tem necessariamente de acelerar um GEMM de muitos tokens. Altera os logits, as expetativas de pontuação, a confiança por entropia e as probabilidades de ação. A API pública expõe tudo isto, por isso a concordância de argmax por si só é insuficiente. Se cada logit final mudar no máximo epsilon, uma margem entre os dois principais logits superior a 2*epsilon certifica a etiqueta vencedora, mas não certifica a concordância de probabilidade, pontuação ou ação. A calibração de temperatura divide os erros de logit pela sua temperatura; uma temperatura pequena pode amplificar um erro em bruto aparentemente pequeno. Os checkpoints existentes contêm buckets de temperatura por contagem de opções próximos de 0.1006, o que torna isto relevante.

Poda de tokens. Com largura/profundidade inalteradas e eficiência de computação densa, um objetivo aproximado de 10× de trabalho denso exige reter cerca de 10% do processamento de tokens entre camadas, e não remover alguns tokens de pontuação. Podar após processar uma fração a da profundidade original tem uma razão de trabalho denso a + (1-a)rho, em que rho é a fração de tokens retidos para as camadas subsequentes. Se a >= 0.1, mesmo descartar todos os tokens restantes não pode produzir mais de 10× nesse modelo simplificado. Neste modelo, a primeira camada global já liga cada token do estado a todos os tokens não mascarados de pergunta/opção. A importância aprendida dos tokens e a poda dinâmica podem ser estudadas, mas a sua correção é uma afirmação de qualidade de tarefa que exige treino/calibração. Os tokens descartados podem conter negações, entidades raras ou o facto que decide uma opção próxima; uma atenção inicial baixa não é prova de irrelevância nas camadas posteriores.

Saída antecipada. Alimentar simplesmente uma cabeça treinada após a camada 28 com os estados ocultos da camada 3 não preserva a sua distribuição de entrada. É preciso treinar cabeças intermédias e uma regra de confiança validada. Um orçamento de profundidade de custo uniforme de 10× é cerca de 2.8 camadas do codificador para inglês ou 2.2 para multilingue, antes da sobrecarga da cabeça e da CPU. Manter a cabeça completa atual torna o orçamento denso de sequência curta mais restrito: as suas duas camadas são, só por si, 6.83%/11.37% de A em inglês/multilingue. Para o multilingue, só essa cabeça excede todo o orçamento de 10% de trabalho denso. A divergência de lote também importa: sair de itens individuais não poupa nada se eles permanecerem num lote denso não encolhido. FastBERT e DeeBERT estabelecem abordagens treinadas de inferência adaptativa com compromissos de exatidão/velocidade; os ganhos reportados não são medições do Laya nem deste Mac.

Um aluno aproximado mais um fallback para o professor tem um custo normalizado esperado de aproximadamente c + q, em que c é o custo do aluno dividido pelo custo do professor e q é a taxa de fallback para o professor, assumindo execução serial. Para cumprir 10×, c + q <= 0.1: um aluno que custa 5% do professor deixa no máximo 5% dos pedidos para fallback. Isto pode melhorar a latência média enquanto o p95 dos pedidos difíceis permanece próximo da latência do professor. O encaminhamento baseado em confiança não é um certificado de equivalência exata.

6. O que pode exatamente ser reutilizado entre perguntas?

O prompt é [CLS] question/options [SEP] state [SEP]; perguntas diferentes podem alterar tanto o deslocamento do estado como a truncagem do estado. Para a query i da primeira camada, a saída da atenção é:

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

Alterar qualquer key/value não mascarado de pergunta pode alterar tanto o numerador como o denominador de todas as queries do estado. Para logits finitos, os pesos de softmax não mascarados são positivos em aritmética real. Por conseguinte, o estado contextual após a primeira camada global depende da pergunta. Todos os K/V subsequentes dependem desses estados alterados. Reutilizar uma codificação completa do estado ou uma cache K/V estilo descodificador entre perguntas diferentes altera, por isso, a função. O texto em bruto partilhado é insuficiente; o deslocamento, a truncagem, as máscaras e os metadados dos marcadores também importam.

Há uma pequena exceção exata que vale a pena distinguir: antes dessa primeira operação de atenção, os embeddings normalizados dos tokens e as suas projeções Q/K/V de primeira camada, pré-RoPE dependem apenas da identidade do token. Podem ser colocados em cache ou pré-calculados, com as posições RoPE absolutas aplicadas depois. Eliminar toda a primeira projeção QKV remove apenas 0.85%/1.42% do trabalho denso principal em inglês/multilingue, antes do tráfego de consulta. Uma tabela QKV de vocabulário completo acrescenta aproximadamente 309 MB/1.18 GB de armazenamento FP16 se for retida a par dos embeddings normais. As estatísticas suficientes de softmax estado-a-estado da primeira camada também podem ser reutilizadas sob condições idênticas de tokens de estado/truncagem e posições relativas, e depois combinadas com as contribuições das perguntas por fusão estável de softmax. Isto poupa apenas uma parte de uma camada de atenção; não torna reutilizáveis os estados contextuais posteriores.

A deduplicação exata de entradas completas tem um potencial muito maior. Se N perguntas pedidas contiverem U entradas de passagem direta preparadas idênticas, avalia U e mapeia as suas saídas em bruto de volta para todas as perguntas originais com as etiquetas ordenadas, a calibração, os IDs e a contabilização de utilização corretos. As chaves de igualdade e de cache devem cobrir todos os tensores preparados, incluindo máscaras, posições de marcadores e tipos de pergunta; as chaves entre chamadas devem também identificar a revisão do checkpoint, o dtype e a configuração de execução. No fixture existente de 50 perguntas, U <= 3, por isso a razão linear ideal de trabalho é 50/3 = 16.67×. A latência real é menos previsível porque os lotes pequenos têm eficiência diferente e a preparação/mapeamento de saída permanecem. Para 10 perguntas e três entradas únicas, a razão é apenas 3.33×. Um benchmark de 50 perguntas distintas deve acompanhar qualquer um dos resultados.

Com cache de resultados entre chamadas, a latência normalizada média é 1-h+h*epsilon, em que h é a taxa de acerto e epsilon o custo de acerto de cache dividido pelo custo de inferência sem cache. Uma melhoria média de 10× exige h >= 0.9/(1-epsilon); se um acerto custar 1% da inferência, a taxa de acerto necessária é 90.91%. Reporta separadamente as taxas de acerto, as falhas, a latência de cache a frio e o caminho de falha. O benchmark padrão repete exatamente o mesmo pedido, por isso uma cache entre chamadas não rotulada deixaria em grande parte de medir a execução do modelo.

Um codificador de estado partilhado mais cross-attention específica de cada pergunta é um produto redesenhado promissor, mas exige re-treino ou destilação porque remove a interação precoce original entre pergunta e estado. Se a passagem reutilizável do estado custar aproximadamente o que custava uma passagem antiga por pergunta, então em Q=50 a passagem partilhada consome 2% do antigo orçamento total; o trabalho específico de cada pergunta pode consumir, no máximo, mais 8% para um alvo de 10×. Em Q=10, essa única passagem partilhada já usa 10% antes do trabalho específico das perguntas. O comprimento do estado, a complexidade das opções e o codificador de estado mais pequeno escolhido alteram esta estimativa.

7. Um caminho credível para uma melhoria de ordem de grandeza do modelo

Reduzir tanto a profundidade como a largura fornece espaço aritmético suficiente para absorver a sobrecarga. Os seguintes são orçamentos de design do aluno, não modelos implementados, afirmações de qualidade nem aumentos de velocidade medidos. Mantêm os mesmos comprimentos de tokens, usam uma MLP de codificador com gating e uma camada convencional da cabeça de decisão, e contam a mesma fórmula A.

Professor Candidato N / D / I / H Principais pesos densos Razão de trabalho denso professor/aluno
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×

O embedding pode permanecer relativamente grande e continuar a ser barato de reunir. Destila as distribuições de opções e as saídas de ação do professor, mistura tarefas rotuladas, cobre o comportamento de score/noul e contagens de opções variáveis, e depois reajusta a calibração da saída em dados reservados. Avalia a cobertura linguística completa e perguntas distintas. O TinyBERT é prova de que reduzir em conjunto a profundidade/largura do codificador através da destilação pode produzir um compromisso importante de velocidade/qualidade noutro contexto BERT; o seu ganho de 9.4× na inferência não se transfere numericamente para o Laya.

Para engenharia escrita à mão, dá prioridade às seguintes decisões:

  1. Estabelece o limite antes de escrever um novo GEMM. Mede o tempo do modelo compilado e primitivas densas representativas em B=1 e num lote de débito. Compara o débito real sustentado com os requisitos de 31–104 TFLOP/s acima. Se a remoção de lançamentos deixar a execução densa dominante, novos kernels elementwise não conseguem fornecer a ordem de grandeza em falta.
  2. Implementa a seleção exata de saídas e a atenção local exata como projetos limitados. A última cabeça tem uma prova clara de dependências; o caminho local multilingue longo tem a maior oportunidade aritmética exata. Inspeciona as frações de tempo real medidas antes de manter Metal personalizado. Preserva o contrato numérico da atenção rápida existente e testa comprimentos-limite/padding.
  3. Disponibiliza a deduplicação exata apenas com contabilização da carga de trabalho. Este é o caminho mais rápido para um possível resultado de 10× numa aplicação suficientemente repetitiva. Tem de coexistir com benchmarks sem cache e de entradas únicas, para que os utilizadores possam prever os seus próprios resultados.
  4. Trata os 4/8 bits e o baixo posto ciente das ativações como aproximações medidas. Exige em conjunto uma melhoria de velocidade e portões de qualidade calibrados. Nem menos bytes armazenados nem um número baixo de posto estável são suficientes.
  5. Se forem necessários 10× em pedidos novos e diversos, desenvolve e valida a arquitetura de aluno mais pequeno ou de estado partilhado. O orçamento do aluno visa deliberadamente mais de 10× de redução de trabalho denso, porque a atenção, a preparação na CPU e a sobrecarga de kernels pequenos permanecem. Um orçamento de qualidade e dados adequados de treino/avaliação são pré-requisitos; o fixture de paridade existente não consegue validar esta afirmação.

Para variantes aproximadas, a aceitação deve registar a concordância de choice e a exatidão rotulada, o erro de pontuação, a deriva de probabilidade, a calibração de confiança, as probabilidades de ação e os casos de margem próxima. As verificações existentes de argmax 378/378, as 600 chamadas repetidas finitas e o alinhamento de regressão do AG News estabelecem o comportamento do port atual nesses testes; não validam um novo modelo comprimido. Mantém uma identidade de modelo distinta e reporta em conjunto p50/p95, configuração a frio, memória, contagem de entradas únicas e qualidade.

Reprodução e âmbito

  • math_costs.py reproduz todos os quadros derivados da arquitetura e o alvo de latência a partir das configurações dos checkpoints e do JSON de benchmark existente; math_costs.json regista os hashes dos ficheiros de entrada e as revisões dos checkpoints.
  • math_spectrum.py reproduz os quatro espetros de matrizes na CPU selecionados; math_spectrum.json inclui os hashes exatos das matrizes. Usa apenas NumPy e safetensors e não carrega o modelo completo.
  • Corre .venv/bin/python experiments/math_costs.py e .venv/bin/python experiments/math_spectrum.py a partir da raiz do repositório depois de descarregar os checkpoints de origem fixados. A amostragem na CPU e as medições de GPU de engenharia foram coordenadas para evitar sobreposição.
  • A semântica atual de quantização do MLX foi verificada com a skill find-docs usando a resolução de biblioteca Context7 exigida, seguida de uma consulta separada à documentação de quantização. Foram usadas como fontes a documentação oficial do MLX, os artigos ModernBERT/FlashAttention e de destilação/saída antecipada, as especificações da Apple e o modelo local real. Nenhum número de desempenho de um artigo é apresentado como medição nesta máquina.

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