Коротко
Статья разбирает Splash 1.1.0 — движок Inco AI для локального запуска нескольких языковых моделей на Apple silicon — и объясняет, почему скорость зависит от сценария, кэширования и модели. В тесте перевода на M3 Max короткий запрос достиг 52,8 токена/с, но эти результаты нельзя напрямую переносить на другие модели и задачи.
Контекст
Inco AI разрабатывает инфраструктуру для выполнения языковых моделей. Splash переносит специализированные вычисления на Apple silicon; статья рассматривает его архитектуру, опубликованные разработчиками сравнения, личный тест автора и требования для запуска на macOS.
Главное
- Splash — движок Inco AI для локального выполнения моделей на Apple silicon; код открыт под Apache 2.0, лицензии весов отдельные.
- В версии 1.1.0 поддерживаются Qwen3.8-27B и Qwen3.6-35B-A3B в определённых сборках GGUF и MLX; расширение GGUF само по себе не гарантирует совместимость.
- Спекулятивное декодирование использует DFlash 2: вспомогательная модель предлагает блок продолжения, который основная модель проверяет за один проход.
- В тесте автора на M3 Max (40 ядер GPU, 128 ГБ) с Qwen3.8-27B Q8_0 скорость перевода составила 29,8–52,8 токена/с; для запроса с 13 595 входными токенами TTFT достиг 79,3 с.
- В тестах разработчиков с UD-Q4_K_M Splash показал 74 токена/с на M5 Pro и 92 на M3 Max; сравнение включает llama.cpp без спекулятивного декодирования и с MTP.
- Кэш может резко снизить задержку повторного запроса: для закэшированного префикса 32K указано 282 мс до первого токена против 96 секунд для нового запроса на том же объёме.
- Для запуска нужны Mac на M3 или новее и macOS 26.4+; для 4-битных примеров указано минимум 36 ГБ объединённой памяти, рекомендуется 48 ГБ.
- Splash предоставляет встроенный чат и API, совместимые с OpenAI и Anthropic; установка описана через Homebrew.
Как сделано
Splash использует подготовленные Metal-ядра для ограниченного набора поддерживаемых моделей, а также сервер, планировщик и кэш. Для ускорения генерации применяется спекулятивное декодирование: DFlash 2 заранее предлагает блок токенов, а основная модель проверяет его за один проход и принимает подходящую часть. Эффект зависит от затрат на черновик и доли принятых токенов.
У движка есть встроенный чат и API, совместимые с OpenAI и Anthropic. В статье приведены команды установки через Homebrew: brew install incoai/tap/splash, затем запуск Qwen3.8-27B с splash serve --model 'unsloth/Qwen3.8-27B-GGUF:UD-Q4_K_M'; для Q8_0 используется splash serve --model 'unsloth/Qwen3.8-27B-GGUF:Q8_0'. При первом запуске скачивается подходящая DFlash2 и подготавливаются веса.
Результаты
На M3 Max с 40 ядрами GPU и 128 ГБ объединённой памяти, macOS 27.0.0 и unsloth/Qwen3.8-27B-GGUF:Q8_0 автор получил при переводе четыре результата: 53 входных и 48 выходных токенов — 52,8 токена/с, TTFT 1,8 с; 120 входных и 109 выходных — 36,3 токена/с, TTFT 0,9 с; 457 входных и 1 747 выходных — 43,0 токена/с, TTFT 2,6 с; 13 595 входных и 28 704 выходных — 29,8 токена/с, TTFT 79,3 с.
В таблице разработчиков для Qwen3.8-27B на Unsloth UD-Q4_K_M Splash показал 74 токена/с на M5 Pro с 20 ядрами GPU и 92 токена/с на M3 Max с 40 ядрами GPU. Для сравнения, llama.cpp без спекулятивного декодирования выдавал соответственно 16 и 17 токенов/с, а с MTP — 27 и 20. Отдельно для первоначального пакета Qwen3.8-27B-Splash на M5 Pro с 16 ядрами GPU и 48 ГБ памяти указаны 282 мс до первого токена при точном повторе закэшированного запроса длиной 32K и 96 секунд для нового запроса такой длины.
Ограничения
Поддержка ограничена конкретными моделями и сборками: в версии 1.1.0 указаны Qwen3.8-27B и Qwen3.6-35B-A3B в GGUF от Unsloth и поддерживаемых 4-битных сборках MLX. Для GGUF заявлен диапазон от UD-IQ1_S до Q8_0, но исключены UD-Q8_K_XL и веса основной модели в BF16; произвольная GGUF-модель автоматически не становится совместимой. Требуются M3 или новее и macOS 26.4+; для 4-битных вариантов указаны минимум 36 ГБ объединённой памяти и рекомендация 48 ГБ, хотя некоторые компактные GGUF-варианты рассчитаны на 24 ГБ.
Числа скорости относятся к разным моделям, квантованиям, компьютерам и типам нагрузки. Сравнение разработчиков — не независимый универсальный бенчмарк, а личный тест автора содержит по одному результату на каждый запрос. Ускорение генерации не означает такого же ускорения задачи целиком, где есть обработка входа, вызовы инструментов и ожидание ответов. Кэш помогает лишь при повторном использовании контекста; новый длинный запрос всё равно нужно обработать. Специализация также означает необходимость отдельно добавлять поддержку новых семейств моделей. Код движка открыт под Apache 2.0, но лицензии весов регулируются отдельно.
Что взять себе
- Сравнивайте отдельно TTFT, скорость генерации и обработку нового контекста: один показатель не описывает весь рабочий сценарий.
- Проверяйте бенчмарки именно на своей модели, квантовании и Mac; результаты UD-Q4_K_M нельзя считать прогнозом для Q8_0 или иной нагрузки.
- Если часто повторяются длинные запросы с одинаковым префиксом, кэширование может быть особенно полезно; для новых длинных входов выигрыш генерации не устраняет время обработки контекста.
- Перед установкой сверьте список поддерживаемых моделей и требования к памяти; специализированный движок может не запускать произвольную GGUF-модель.
Читать оригинал, если…
Откройте оригинал, если нужны таблицы тестов, подробности поддерживаемых сборок и требований, а также команды установки и запуска.