Спекулятивное декодирование — не «ползунок скорости», а обмен дополнительными проходами черновика на меньшее число шагов верификатора. На Apple M4 с unified memory выигрывает конфигурация, которая переживает десятиминутный soak с вашей реальной смесью промптов, а не таблица лидеров, где забыли про долю принятия и давление на RAM.

Используйте эту страницу как нейтральный к стеку приёмочный бриф. Сочетайте её с матрицей MLX-LM и Transformers: батч и KV на M4, с материалом llama.cpp и Ollama — инференс и память для GGUF-ориентированных стеков, с мультимодельным роутингом и стоимостью, если перед моделью стоит шлюз, и с офлайн-оценкой DSPy и чек-листом удалённого узла, когда качество должно быть привязано к замороженным наборам. Имена полей телеметрии согласуйте с матрицей OpenTelemetry GenAI, чтобы прогоны со спекуляцией и чистой авторегрессией читались в одних и тех же дашбордах.

Аппаратные предпосылки

Бенчмарки снимайте на хосте класса Mac mini M4 с стабильным питанием от сети, запасом по термике и реалистичным десктопом (браузер, IDE, мониторинг). Unified memory означает, что веса черновика, верификатора, KV-кэш и рантайм делят один пул: спекуляция расширяет рабочий набор, потому что два набора параметров могут быть горячими одновременно, даже если черновик меньше.

До измерений зафиксируйте конверт памяти: например, на конфигурации 24 ГБ держите 8–12 ГБ запаса под macOS и ваши сервисы в режиме стабильного decode. Запишите уровни квантования обеих моделей (условно Q4_K_M и Q5_K_M в мире GGUF или эквивалентную упаковку весов в другом формате) и закрепите ревизии токенизатора и chat template рядом с каждым прогоном.

На M4 пропускная способность decode часто лимитируется полосой памяти, когда контекст разрастается. Если в проде длинные системные промпты и извлечённые фрагменты, заранее оцените окно и батч по матрице локального RAG: чанки, эмбеддинги и квоты, чтобы пики префилла не обнуляли выигрыш от спекуляции.

Сравнение методов

Стандартная авторегрессия (AR) выдаёт один следующий токен за шаг из целевой (верифицирующей) модели. Спекулятивное декодирование предлагает короткий блок токенов меньшим черновиком или ранним выходом и позволяет верификатору принять или откатить пачку за раз. Реализации расходятся (отдельные веса против головы в одной сети, блок или дерево гипотез), но у оператора четыре одинаковых сигнала: сквозной tok/s на decode, хвост задержки, статистика принятия и пик памяти.

Измерение Стандартная авторегрессия Спекуляция (черновик / блок) Заметка для M4
Паттерн вычислений Один проход верификатора на новый токен Один или несколько проходов черновика плюс пакетная проверка верификатора на блок Черновик конкурирует за ту же полосу; смотрите загрузку верификатора, а не только скорость черновика
Потолок tok/s Ограничен верификатором tok/s верификатора × ожидаемая длина принятого блока минус стоимость отката Низкое принятие сводится к AR плюс налог на черновик
Хвост задержки Ровнее при одном интерактивном потоке Границы блоков дают всплески межтокенной задержки при пачках откатов Снимайте p95 и p99, а не только среднее
Память Веса верификатора и KV активных последовательностей Верификатор плюс черновик (или вспомогательные головы) и часто шире временные активации Критерий — пик RSS на soak; давление в Activity Monitor не должно уходить в устойчивый красный
Связка с качеством Один путь сэмплинга Политики черновика и верификатора должны быть согласованы с правилами принятия рантайма Расхождение сначала видно как дрейф JSON или вызовов инструментов — ведите долю успешных задач, а не только прокси перплексии

Примеры измеримых порогов (подстройте под семейство моделей; это шаблоны SLO, не гарантии). Пусть авторегрессионный базовый прогон на вашем стенде даёт медиану decode ≈38 tok/s и p95 межтокенной задержки ≈52 мс при batch-one чате. Конфигурацию со спекуляцией можно пометить как кандидат в прод, только если на том же файле промптов и политике температуры она даёт медиану ≥44 tok/s (≈1,16×) и держит p95 межтокенной ≤45 мс при медиане принятия ≥0,55 для длины чернового блока четыре токена. Если принятие падает ниже 0,40 более чем в двух подряд пятиминутных окнах, классифицируйте прогон как провал (несовпадение черновика или память) и выполните откат по следующему разделу.

Шаги сканирования параметров

Ведите sweep как инженерный эксперимент: сначала зафиксируйте стенд, затем двигайте по одному рычагу.

  1. Заморозить артефакты: контрольные суммы черновика и верификатора, уровень кванта, версию рантайма, флаги GPU/Metal.
  2. Ярусы промптов: короткие диалоги, средние рассуждения, длинный контекст с префиксом поиска, если в проде есть RAG.
  3. Геометрия черновика: увеличивайте число токенов черновика на шаг верификации из набора {2, 3, 4, 6} (потолок зависит от движка). Логируйте долю принятия или принятые токены на вызов верификации вместе со сквозным tokens_per_second_decode.
  4. Раздельные тайминги: time_to_first_token, миллисекунды префилла и стабильный decode; спекуляция иногда ухудшает TTFT при холодном старте черновика.
  5. Soak: после выбора «колена» кривой гоняйте ≥600 с непрерывного decode с открытыми приложениями. Фиксируйте пик resident set; провал — если рабочий набор растёт без bound или swap монотонно нарастает.
  6. Наблюдаемость: те же атрибуты, что для AR, плюс счётчики спекуляции (принятие, откаты, число проходов черновика). Имена полей сверяйте с матрицей GenAI выше.

Чек-лист приёмки unified memory

  • Запас: устойчиво свободная память не ниже согласованного пола (иллюстрация: ≥10 ГБ свободно на хосте 24 ГБ во время soak).
  • Давление: непрерывное красное состояние memory pressure дольше 60 с при decode недопустимо.
  • Swap: для интерактивного профиля суммарные swap-in за окно soak ≤200 МБ.
  • Термики: стабильный режим вентилятора; для заявленного SKU и температуры окружающей среды — ноль зарегистрированных троттл-событий.
  • Регресс TTFT: медиана TTFT на коротких промптах в пределах +8% к AR-базе; больший разрыв требует явной политики очереди или прогрева.
  • Качество: доля успешных задач на замороженном мини-наборе JSON или вызовов инструментов в пределах ±0,5% от AR-базы — прирост tok/s не оправдывает поломку контрактов.

Откат при сбоях

Выкатывайте фичефлаг или политику рантайма, которая отключает спекуляцию при падении принятия, росте swap, повторяющихся ошибках верификатора или регрессе качества на канареечных промптах. Безопасный дефолт — чистая авторегрессия с теми же метаданными сэмплинга, чтобы инцидентные дашборды не врали.

Ступенчатый откат сохраняет ёмкость: сначала уменьшите длину чернового блока на один шаг; если мало — облегчите квант черновика, если позволяют проверки качества; в конце уберите веса черновика из горячего пути и оставьте только AR. Каждый переход журналируйте с меткой времени для постмортемов и корреляции с трафиком.

Когда локальный unified memory не вмещает обе модели, перенесите sweep на выделенный удалённый Mac mini M4 с той же мажорной версией ОС и закреплёнными бинарниками: сон ноутбука, индексация Spotlight и фоновая обработка фото систематически искажают кривые принятия.

FAQ

Всегда ли спекуляция снижает задержку? Нет. При низком принятии вы платите за проходы черновика, не экономя шаги верификатора. Хвост задержки может ухудшиться, если откаты группируются на границах блоков.

Можно ли взять любую маленькую модель в черновики? Только при совместимости токенизатора и выравнивании логитов с ожиданиями рантайма. Несовпадающий словарь тихо убивает принятие; выбор черновика — это задача версионирования, а не «скачал и вставил».

Как сравнивать фреймворки честно? Фиксируйте промпты, температуру, лимиты и режим питания. В отчёт одновременно включайте принятие, tok/s, TTFT, память и качество — оптимистичные бенчмарки чаще всего получаются, когда долю принятия просто не печатают.

А при параллельных сессиях? Каждый поток умножает резидентный KV. Спекуляция редко спасает от перегруза параллельными чатами: ограничьте конкуренцию на шлюзе по матрице роутинга, затем заново подберите размер чернового блока внутри каждого слота.

Публичные страницы без входа: сравните тарифы и покупку выделенных хостов Apple Silicon, загляните в центр помощи и в каталог технического блога по соседним материалам про LLM и удалённые узлы.

Кратко: спекулятивное декодирование — связанная система: геометрия черновика, принятие, стоимость верификатора и unified memory должны проходить вместе. Сканируйте параметры на замороженных артефактах, градуируйте откат и только после этого переносите цифры с демо-ноутбука в продакшн-SLO.