Документация

Может ли Laya MLX стать в десять раз быстрее? Математическое исследование

Дата исследования: 2026-09-19. Базовая линия: зафиксированные результаты FP16 MLX на Apple M3 Max с 40 ядрами GPU и 128 GiB унифицированной памяти. Этот отчёт разделяет алгебраические факты, статические оценки стоимости, CPU-измерения выбранных матриц чекпойнтов и гипотезы, требующие экспериментов с выводом. Для этого математического исследования не выполнялся ни GPU-вывод, ни новое измерение задержки. Сопутствующее инженерное исследование содержит тайминги кандидатов, когда они доступны. Здесь «точный» означает сохранение математических зависимостей и функции действительной арифметики; иной порядок редукции на GPU или ядро всё равно могут изменить результаты с плавающей точкой, поэтому существующие численные допуски и контракт раскрываемых выходов остаются воротами приёмки.

Решение: не закладывать бюджет на универсальное сквозное улучшение в 10× от написанных вручную ядер при сохранении этих чекпойнтов и их полных выходов. Точное локальное внимание и отсечение выходов — стоящие, ограниченные улучшения. Прямое низкоранговое разложение далеко от без потерь на четырёх выборочных матрицах весов. Продуктовое улучшение в 10× правдоподобно для нагрузок с существенным точным повторением или как цель значительно меньшей дистиллированной/переструктурированной модели. Это разные обещания, и у них должны быть разные бенчмарки.

1. Что на самом деле требует ускорение в десять раз

Это существующие синхронизированные тёплые сквозные медианы, включая подготовку и форматирование; они не являются новыми измерениями. Каждая базовая линия использовала пять прогревов, 50 измеренных итераций и лимит пакета вопросов 64. Короткая фикстура на 50 вопросов повторяет три определения вопросов; её исходная среда выполнения тем не менее вычисляет все 50. Время скачивания, загрузки и компиляции вне этих медиан.

Модель Короткий 1: базовая → цель 10× Короткий 10 Короткий 50 Длинный 1 Длинный 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

Источники: Laya FP16, многоязычный FP16, typed-decisions FP16. Короткие дополненные длины — 93/91/93; длинные — 512/1024/1024. Сравнение их длинных строк не удерживает длину токенов постоянной. Цель — дальнейшее улучшение над нативным MLX FP16, а не над PyTorch MPS FP32.

Для любой предложенной оптимизации пусть f — её измеренная доля сквозного настенного времени, а s — её собственное ускорение. Закон Амдала даёт:

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

Даже ускорение горячего места, содержащего 95% времени запроса, требует 19× улучшения этого места. При 98% всё ещё требуется 12.25×; при 99% — 11×. Любая нетронутая подготовка, преобразование вывода или синхронизация, потребляющие не менее 10%, предотвращают конечный выигрыш в 10× только из оставшейся части. Независимые медианы прямого прохода и сквозные нельзя вычитать, чтобы оценить эту долю; используйте сегментированный эксперимент по хронометражу или профилирование.

2. Плотная работа и условные нижние границы

Из model.py, определим скрытую ширину D, ширину MLP энкодера I, глубину энкодера N, глубину головы H, размер пакета B и дополненную длину токенов L. Считая умножение и сложение за два 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 включает обе ветви плотного MLP энкодера с вентилем и его проекцию вывода. MLP головы используют иное, обычное расширение 4D. Эти формулы исключают нормы, активации, оценивание, маски, передачи и планирование; это модель стоимости обычной плотной реализации, а не безусловная арифметическая нижняя граница по всем возможным алгоритмам.

Семейство D / I / N / H Основные плотные веса A Доля MLP энкодера в A Байты FP16 для 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

Многоязычный эмбеддинг имеет 196,608,000 весов, но вывод собирает выбранные строки, а не умножает на весь словарь. Поэтому общие параметры чекпойнта преувеличивают его пошаговую работу относительно английского. Меньший файл эмбеддинга не означает автоматически более быстрый вывод.

Модель / форма Работа плотных + плотное внимание Требуемая эффективная пропускная способность при цели 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

Это требования, а не заявленные пики GPU Apple. Измеренный потолок плотного GEMM на этих формах — полезное инженерное сравнение. Измеренный потолок может сделать проект неправдоподобным; но он всё ещё не доказывает верхнюю границу аппаратного обеспечения. Поскольку работа CPU также укладывается в цель, фактическое выполнение на GPU должно завершиться раньше, чем позволяет эта таблица, если работа CPU не перекрывает его.

Apple указывает пропускную способность унифицированной памяти 400 GB/s для этой конфигурации M3 Max на 40 ядрах. При явном допущении, что основные матричные веса FP16 читаются из унифицированной памяти один раз на запрос и ещё не удержаны в кэше на кристалле, идеальные границы потоковой передачи составляют 1.842 ms для английского/typed и 0.622 ms для многоязычного. Они опускают активации, эмбеддинги, веса scorer и все вычисления. Они также предполагают, что заявленная совокупная пропускная способность полностью доступна этой нагрузке. Технические характеристики Apple.

Цели английского короткого одиночного запроса 1.342/1.371 ms уже ниже этой обычной границы потоковой передачи FP16. Чтобы удовлетворить эти цели при 400 GB/s без изменения хранения весов, потребовалось бы, чтобы примерно 200/188 MB из учитываемых весов избежали чтения из памяти, или иное изменение допущений выполнения. Этот отчёт не предполагает и не изобретает ёмкость кэша на кристалле. Переиспользование весов в пакете, точное сжатие и альтернативные алгоритмы меняют границу; наблюдение не является универсальной теоремой о невозможности.

Для одной плотной части идеальная арифметическая интенсивность только по весам составляет BL FLOPs/byte в FP16: 93 при B=1 L=93 и 4650 при B=50. Трафик активаций снижает эти числа. Это объясняет, почему сжатие весов становится менее убедительной стратегией пропускной способности по мере роста числа токенов, разделяющих каждую матрицу.

3. Сколько точной работы на самом деле можно убрать?

Первый глобальный слой энкодера делает каждый допустимый токен потенциально релевантным, и оба слоя головы решений глобальны. Отсутствие токена в финальном выходе не делает его промежуточное представление ненужным: последующие запросы всё ещё используют его как ключ/значение.

Точное исключение — последний слой головы. Вычислите его K/V для всех допустимых токенов, Q только для CLS и маркеров вариантов, и его проекцию вывода/MLP только в этих выбранных позициях. Предыдущая голова и полный энкодер всё равно должны произвести все допустимые состояния токенов. Это отсечение зависимостей, а не удаление головы внимания. При R=5 выбранных позициях, включая CLS, его максимальная плотная экономия составляет 20 B (L-R) D² FLOPs, когда Q выделен из слитой проекции QKV, плюс 4 B L (L-R) D FLOPs внимания. Сохранение слитой проекции QKV проще, но экономит меньше.

Локальное внимание энкодера допускает abs(q_position-k_position) <= 64, инклюзивное внутреннее окно из 129 позиций. Число допустимых локальных пар для L>64 равно 129L - 64*65. Пропуск запрещённых тайлов K/V математически точен, если сохранены дополнение и позиции. Маска, применённая после плотного умножения QK, не реализует эту арифметическую экономию.

Модель / длина Доля произведений внимания в общих смоделированных FLOPs Точная экономия локального окна Экономия выбора финальной головы, R=5 Совокупная экономия
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%

Это сокращения смоделированной работы, а не предсказания задержки. Они оставляют 83.5–97.2% смоделированной работы нетронутой, далеко от бюджета 10%. Даже сделав все произведения внимания бесплатными, здесь убирается лишь 1.53–23.27%. И наоборот, гипотетическое ускорение в 10× каждой плотной проекции при неизменном внимании даёт лишь 8.79× для английских коротких входов и 3.23× для многоязычных длинных входов при равной эффективности FLOP. Реальный профиль должен заменить эти арифметические доли измеренными долями времени, прежде чем применять Амдала.

Среда выполнения уже вызывает быстрый SDPA MLX. FlashAttention вычисляет ту же функцию плотного softmax-внимания с меньшим трафиком промежуточной памяти; его тайлинг не делает произвольное глобальное внимание линейным по числу токенов. Использование существующей локальной маски чекпойнта точно, тогда как навязывание новой разреженности его глобальным слоям меняет модель. Низкий ранг QKᵀ не подразумевает низкий ранг после поэлементного возведения в степень и нормировки по строке. Статья FlashAttention, API внимания MLX.

Удаление дополнения также точно при независимых последовательностях, исходных позициях и сохранённом порядке вывода. Текущие короткие фикстуры на 50 вопросов тратят впустую лишь 8.9% дополненных токенов для английского/typed и 5.8% для многоязычного. Эти фикстуры не могут получить 10× от удаления дополнения. Иная нагрузка, содержащая один элемент на 1024 токена и 49 элементов на 64 токена, потратила бы впустую достаточно дополнения для отношения пошаговой работы 12.3×; это был бы результат планирования, специфичный для этого распределения.

4. Раскрывает ли низкоранговая факторизация скрытый короткий путь к 10×?

Для замороженной матрицы W формы m × n замена её двумя факторами U(m × r) и V(r × n) меняет стоимость умножения на токен с mn на r(m+n). Безубыточность требует r < mn/(m+n); сокращение матричной работы в 10× требует:

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

Второе выражение — оптимум усечённого SVD. Квадратной проекции ширины 1024 нужен ранг не выше 51; её точная полного ранга факторизация вместо этого удваивает число умножений. GELU, вентиль, softmax и зависящая от входа LayerNorm мешают простому перемножению весов соседних слоёв в одну константную матрицу.

Я исследовал четыре явно выбранные матрицы средних слоёв, используя CPU-решатель собственных значений Грама в float64: одну выходную матрицу внимания и одну входную матрицу слитого MLP из каждого семейства моделей. Крупнейшая собственная система была 1024×1024; все запрошенные лимиты потоков BLAS были равны одному, GPU-библиотеки не импортировались, и ни один прямой проход модели не выполнялся. Это полные спектры выбранных матриц, а не оценка случайной проекции и не обследование каждого слоя.

Выборочная матрица Форма Максимальный ранг для сокращения матричной работы в 10× Сохранённая квадратичная энергия Фробениуса при этом ранге Лучшая относительная ошибка Фробениуса Ранг, сохраняющий 99% энергии
Laya слой 14 внимание Wo 1024×1024 51 28.66% 84.46% 690
Laya слой 14 MLP Wi 5248×1024 85 29.29% 84.09% 956
Multilingual слой 11 внимание Wo 768×768 38 24.97% 86.62% 516
Multilingual слой 11 MLP Wi 2304×768 57 32.88% 81.93% 697

Сырые измерения, значения SHA-256 выбранных матриц, экстремумы сингулярных значений, устойчивые ранги и дополнительные ранги-кандидаты — в math_spectrum.json. Каждая выборочная матрица численно полного ранга. Во всех четырёх сохранение 99% квадратичной энергии Фробениуса требует ранга выше точки арифметической безубыточности двух факторов. У многоязычного MLP Wi устойчивый ранг всего 13.29, но ранг 57 сохраняет лишь 32.88% общей энергии: устойчивый ранг — не та размерность, что нужна для малой ошибки реконструкции.

Это сильное свидетельство против чистого SVD только по весам как почти без потерь короткого пути. Оно не доказывает плохую точность на задаче для любой низкоранговой модели: активации токенов могут занимать ограниченное распределение, а дообучение может перенести полезные вычисления в меньшее представление. Сжатие с учётом активаций должно минимизировать ошибку, взвешенную фактической ковариацией входов, приблизительно ||(W-Wr) Sigma_x^(1/2)||F, а затем проверить сквозное качество. Анализ четырёх матриц не оценивает эти ковариации, глобальную границу ошибки логитов или достижимое ускорение всей модели. Дельта низкорангового дообучения также не подразумевает, что саму замороженную предобученную матрицу можно отбросить.

Написанное вручную быстрое умножение матриц не устраняет это свидетельство. Как арифметическая иллюстрация, рекурсия блока из семи произведений вместо восьми экономит лишь 12.5% работы умножения на уровень, до дополнительных сложений матриц и трафика; даже десять идеальных уровней дают примерно в 3.8× меньше умножений. Применение глубокой рекурсии к проекциям ширины 768–1024 не является правдоподобным планом задержки в 10×, особенно против уже тайлированных GPU GEMM. Это не заявление о том, что все возможные точные алгоритмы исключены.

5. Квантование, отсечение и ранний выход меняют контракт

Квантование только по весам. Для аффинных групп по 64 с масштабом и смещением FP16 хранимые байты на параметр матрицы составляют приблизительно bits/8 + 4/64. Это даёт идеальные сокращения хранения матриц 1.88× при 8 битах, 3.56× при 4 битах и 6.40× при 2 битах относительно FP16. Это не сокращения вычислений или выигрыши по настенному времени. В десять раз меньше трафика весов только этим механизмом потребовало бы примерно одного бита на вес плюс метаданные — радикально иная аппроксимация. Существующие тензоры норм/эмбеддингов/головы и накладные расходы декодирования дополнительно уменьшают выгоду всего запроса. Документация MLX quantize, документация quantized matmul.

Квантование может быть полезно при B=1, если доминирует трафик весов, но оно не обязано ускорять GEMM с большим числом токенов. Оно меняет логиты, ожидания score, энтропийную уверенность и вероятности действий. Публичный API раскрывает всё это, поэтому одного согласия argmax недостаточно. Если каждый финальный логит меняется не более чем на epsilon, запас top-two логитов больше 2*epsilon удостоверяет выигрывающую метку, но не удостоверяет согласие вероятности, score или действий. Температурная калибровка делит ошибки логитов на её температуру; малая температура может усилить кажущуюся малой сырую ошибку. Существующие чекпойнты содержат температурные бакеты по числу вариантов около 0.1006, что делает это актуальным.

Отсечение токенов. При неизменных ширине/глубине и эффективности плотных вычислений приблизительная цель 10× по плотной работе требует сохранять около 10% обработки токенов по слоям, а не удалять несколько токенов пунктуации. Отсечение после обработки доли a исходной глубины имеет отношение плотной работы a + (1-a)rho, где rho — доля сохранённых токенов для последующих слоёв. Если a >= 0.1, даже отбрасывание каждого оставшегося токена не может дать более 10× в этой упрощённой модели. В этой модели первый глобальный слой уже связывает каждый токен состояния со всеми немаскированными токенами вопросов/вариантов. Обученную важность токенов и динамическое отсечение можно изучать, но их корректность — заявление о качестве на задаче, требующее обучения/калибровки. Отброшенные токены могут содержать отрицания, редкие сущности или факт, решающий близкий вариант; низкое раннее внимание не является доказательством нерелевантности на более поздних слоях.

Ранний выход. Простая подача скрытых состояний слоя 3 в голову, обученную после слоя 28, не сохраняет её распределение входов. Промежуточные головы и проверенное правило уверенности должны быть обучены. Бюджет глубины 10× при равной стоимости составляет около 2.8 слоёв энкодера для английского или 2.2 для многоязычного, до накладных расходов головы и CPU. Сохранение полной текущей головы делает плотный бюджет короткой последовательности строже: её два слоя одни составляют 6.83%/11.37% английского/многоязычного A. Для многоязычного одна эта голова превышает весь бюджет плотной работы в 10%. Дивергенция пакета также важна: выход отдельных элементов ничего не экономит, если они остаются в неусохшем плотном пакете. FastBERT и DeeBERT устанавливают обученные подходы адаптивного вывода с компромиссами точность/скорость; их заявленные выигрыши не являются измерениями Laya или этого Mac.

Приблизительный студент плюс запасной вариант учителя имеет ожидаемую нормированную стоимость приблизительно c + q, где c — стоимость студента, делённая на стоимость учителя, а q — доля обращений к учителю, при последовательном выполнении. Чтобы достичь 10×, c + q <= 0.1: студент, стоящий 5% от учителя, оставляет не более 5% запросов на запасной вариант. Это может улучшить среднюю задержку, тогда как p95 сложных запросов остаётся близким к задержке учителя. Маршрутизация на основе уверенности не является сертификатом точной эквивалентности.

6. Что именно можно переиспользовать между вопросами?

Промпт — [CLS] question/options [SEP] state [SEP]; разные вопросы могут менять и смещение состояния, и усечение состояния. Для запроса i первого слоя выход внимания:

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

Изменение любого немаскированного ключа/значения вопроса может изменить и числитель, и знаменатель для каждого запроса состояния. Для конечных логитов немаскированные веса softmax положительны в действительной арифметике. Следовательно, контекстное состояние после первого глобального слоя зависит от вопроса. Все последующие K/V зависят от этих изменённых состояний. Поэтому переиспользование полного кодирования состояния или декодерного KV-кэша между разными вопросами меняет функцию. Общего сырого текста недостаточно; смещение, усечение, маски и метаданные маркеров тоже важны.

Есть небольшое точное исключение, которое стоит различать: до первой операции внимания нормализованные эмбеддинги токенов и их проекции Q/K/V первого слоя до RoPE зависят только от идентичности токена. Их можно кэшировать или предвычислять, применяя абсолютные позиции RoPE после. Устранение всей проекции QKV первого слоя убирает лишь 0.85%/1.42% основной плотной работы в английском/многоязычном, до трафика поиска. Полнословарная таблица QKV добавляет примерно 309 MB/1.18 GB хранения FP16, если её хранить рядом с обычными эмбеддингами. Достаточные статистики softmax состояние-к-состоянию первого слоя также можно переиспользовать при идентичных условиях токенов/усечения состояния и относительных позиций, а затем объединить с вкладами вопросов стабильным слиянием softmax. Это экономит лишь часть одного слоя внимания; оно не делает более поздние контекстные состояния переиспользуемыми.

Точная дедупликация всего входа имеет куда больший потенциал. Если N запрошенных вопросов содержат U идентичных подготовленных входов прямого прохода, вычислите U и отобразите их сырые выходы обратно на все исходные вопросы с правильными упорядоченными метками, калибровкой, ID и учётом использования. Равенство и ключи кэша должны охватывать все подготовленные тензоры, включая маски, позиции маркеров и типы вопросов; кросс-вызовные ключи должны также идентифицировать ревизию чекпойнта, dtype и конфигурацию выполнения. В существующей фикстуре на 50 вопросов U <= 3, поэтому идеальное отношение линейной работы — 50/3 = 16.67×. Фактическая задержка менее предсказуема, потому что малые пакеты имеют разную эффективность, а подготовка/отображение вывода остаются. Для 10 вопросов и трёх уникальных входов отношение лишь 3.33×. Бенчмарк на 50 разных вопросов должен сопровождать любой результат.

С кросс-вызовным кэшированием результатов средняя нормированная задержка равна 1-h+h*epsilon, где h — доля попаданий, а epsilon — стоимость попадания в кэш, делённая на стоимость некэшированного вывода. Среднее улучшение в 10× требует h >= 0.9/(1-epsilon); если попадание стоит 1% от вывода, требуемая доля попаданий — 90.91%. Сообщайте доли попаданий, промахи, задержку холодного кэша и путь промаха отдельно. Стандартный бенчмарк повторяет ровно один и тот же запрос, поэтому немаркированное кросс-вызовное кэширование в значительной степени перестало бы измерять выполнение модели.

Кодировщик общего состояния плюс кросс-внимание, специфичное для вопроса — многообещающий переработанный продукт, но требует дообучения или дистилляции, потому что устраняет исходное раннее взаимодействие вопроса/состояния. Если переиспользуемый проход состояния стоит примерно один старый проход на вопрос, то при Q=50 общий проход потребляет 2% старого бюджета; работа, специфичная для вопроса, может потреблять ещё не более 8% для цели 10×. При Q=10 этот единственный общий проход уже использует 10% до работы, специфичной для вопроса. Длина состояния, сложность вариантов и выбранный меньший энкодер состояния меняют эту оценку.

7. Правдоподобный путь к улучшению модели на порядок

Сокращение и глубины, и ширины даёт достаточно арифметического пространства, чтобы поглотить накладные расходы. Ниже — бюджеты дизайна студента, а не реализованные модели, заявления о качестве или измеренные ускорения. Они сохраняют те же длины токенов, используют плотный MLP энкодера с вентилем и один обычный слой головы решений и считают по той же формуле A.

Учитель Кандидат N / D / I / H Основные плотные веса Отношение плотной работы учитель/студент
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×

Эмбеддинг может оставаться относительно большим и всё равно дешёвым для сбора. Дистиллируйте распределения вариантов и выходы действий учителя, добавьте размеченные задачи, покройте поведение score/noul и разное число вариантов, затем переподгоните калибровку вывода на отложенных данных. Оцените полное языковое покрытие и разные вопросы. TinyBERT — свидетельство того, что совместное сокращение глубины/ширины энкодера через дистилляцию может дать крупный компромисс скорость/качество в другой обстановке BERT; его заявленный выигрыш вывода в 9.4× не переносится численно на Laya.

Для написанной вручную инженерии приоритизируйте следующие решения:

  1. Установите предел перед написанием нового GEMM. Измерьте время скомпилированной модели и представительные плотные примитивы при B=1 и пропускном пакете. Сравните фактическую устойчивую пропускную способность с требованиями 31–104 TFLOP/s выше. Если устранение запусков оставляет плотное выполнение доминирующим, новые поэлементные ядра не могут дать недостающий порядок величины.
  2. Реализуйте точный выбор выходов и точное локальное внимание как ограниченные проекты. Последняя голова имеет ясное доказательство зависимостей; длинный многоязычный локальный путь имеет наибольшую точную арифметическую возможность. Исследуйте измеренные доли настенного времени, прежде чем поддерживать пользовательский Metal. Сохраните численный контракт существующего быстрого внимания и протестируйте граничные длины/дополнение.
  3. Поставляйте точную дедупликацию только с учётом нагрузки. Это самый быстрый путь к возможному результату 10× для достаточно повторяющегося приложения. Она должна сосуществовать с бенчмарками некэшированных, уникальных входов, чтобы пользователи могли предсказать свои результаты.
  4. Относитесь к 4/8-битному и к низкому рангу с учётом активаций как к измеряемым аппроксимациям. Требуйте улучшения скорости и ворот калиброванного качества вместе. Ни меньше хранимых байтов, ни низкое число устойчивого ранга не достаточно.
  5. Если 10× требуется на свежих, разнообразных запросах, разработайте и провалидируйте меньшую студенческую или общую архитектуру состояний. Бюджет студента намеренно нацелен более чем на 10× сокращения плотной работы, потому что внимание, подготовка CPU и накладные расходы малых ядер остаются. Бюджет качества и подходящие данные обучения/оценки — необходимые предпосылки; существующая фикстура паритета не может провалидировать это заявление.

Для приблизительных вариантов приёмка должна записывать согласие по choice и размеченную точность, ошибку score, дрейф вероятностей, калибровку уверенности, вероятности действий и случаи с близким запасом. Существующие проверки 378/378 argmax, 600 конечных повторных вызовов и выравнивание регрессии AG News устанавливают поведение текущего порта на этих тестах; они не валидируют новую сжатую модель. Сохраняйте отдельную идентичность модели и сообщайте p50/p95, холодную настройку, память, число уникальных входов и качество вместе.

Воспроизведение и охват

  • math_costs.py воспроизводит каждую таблицу, выведенную из архитектуры, и цель задержки из конфигураций чекпойнтов и существующего JSON бенчмарка; math_costs.json записывает хеши входных файлов и ревизии чекпойнтов.
  • math_spectrum.py воспроизводит четыре выбранных CPU-спектра матриц; math_spectrum.json включает точные хеши матриц. Он использует только NumPy и safetensors и не загружает полную модель.
  • Запустите .venv/bin/python experiments/math_costs.py и .venv/bin/python experiments/math_spectrum.py из корня репозитория после скачивания закреплённых исходных чекпойнтов. CPU-выборка и инженерные GPU-тайминги были согласованы, чтобы избежать пересечения.
  • Текущая семантика квантования MLX была проверена с помощью навыка find-docs с требуемым разрешением библиотеки Context7 и последующим отдельным запросом документации по квантованию. В качестве источников использовались официальная документация MLX, статьи ModernBERT/FlashAttention и о дистилляции/раннем выходе, характеристики Apple и фактическая локальная модель. Ни одно число производительности из статьи не представлено как измерение на этой машине.

Вывод: при том же чекпойнте и той же семантике полного вывода пока нет достоверного пути «написать несколько ядер вручную и получить ещё 10×». Основная часть текущей модели — плотные вычисления; локальное внимание плюс точное отсечение последней головы сокращают лишь около 2.8%–16.5% смоделированных FLOPs. Выборки реальных весов показывают, что сжатие матричного разложения до десятой доли работы даёт лучшую относительную ошибку реконструкции Фробениуса около 82%–87% и не может служить почти без потерь коротким путём. 10× более вероятно из точной дедупликации/кэширования высокоповторяющихся входов или из дистилляции, сокращающей глубину и ширину вместе, с переработкой способа кодирования общего состояния. Первое требует публикации доли попаданий и производительности на независимых входах; второе требует обучения и повторной валидации точности, score, вероятностей и поведения действий.