Перейти к содержанию

Ускорение Qwen3.8-27B в Splash до 55 токенов/с на Apple Silicon через нативный 8-бит

6.0/10

Форк движка спекулятивного декодирования Splash на C++ и Metal добавил поддержку схемы 5 (splash-packed-q8, MDFL0008) и нативных тайловых 8-битных ядер для запуска модели Qwen3.8-27B на чипе Apple M5 Pro с 64 ГБ объединенной памяти. Нативный 8-битный формат (Splash-HQ, 27 ГБ) обеспечивает среднюю скорость декодирования 36,9 токенов/с (от 21,9 до 54,8 токенов/с по разным доменам), опережая авторегрессионный baseline MLX/llama.cpp (9,9 токенов/с) в 3,73 раза и превосходя MTPLX-Q8 на 39% за счет отсутствия диспетчерских накладных расходов Python. Тестирование масштабирования контекста вплоть до 190 016 токенов подтвердило отсутствие деградации декодирования (скорость удерживается в коридоре 21–33 токенов/с), при этом префиксное кэширование снизило время TTFT со 227–268 секунд при холодном старте до 6,5 секунд при длине контекста 187k токенов.

Механизм оптимизации

Для преодоления деградации точности на сложных математических рассуждениях (reasoning cliff) разработчик реализовал скомпилированные тайловые декодирующие ядра Metal под несжатые 8-битные веса, что позволило получить более четкие логиты и минимизировать процент отката верификации спекулятивных драфтов. Модель Qwen3.8 сочетает 48 рекуррентных линейных слоев DeltaNet с фиксированным состоянием 128×128 (память $O(1)$) и лишь 16 полных слоев внимания, благодаря чему KV-кэш не разрастается взрывным образом при масштабировании контекста до 190k. Для устранения математических ошибок достаточно перевести в 8-бит только верхние чувствительные слои (с 56 по 63), что восстанавливает точность уровня FP16 без перегрузки памяти.

Эффективность и ресурсы

При максимальном контексте 190 016 токенов на системе с 64 ГБ RAM суммарный объем занятой памяти составил ~42 ГиБ (27 ГБ модель плюс кэш), оставаясь в безопасных границах до срабатывания механизма memory governor. Использование префиксного кэша на длинных цепочках агентов сокращает TTFT со 228,5 секунд до 6,1–6,5 секунд, предотвращая сброс HTTP SSE-таймаутов клиентскими пайплайнами.