1. Разбор: сначала контракт рантайма, потом «кто быстрее»
(1) Движок и упаковка: одна и та же GGUF ведёт себя иначе в llama.cpp и в MLX. Стеки класса MetalRT ближе к прямым Metal-ядрам; у Python-MLX другие ручки настройки.(2) Только пик tok/s: фазы prefill и decode узкие в разных местах; при многопользовательской нагрузке блокировки съедают бенчмарки.(3) Unified memory: при активном swap меняют топологию, а не размер модели.
2. Три рантайма
| Рантайм | Роль в 2026 | Кому / цена |
|---|---|---|
| Класс MetalRT | Прямой Metal на Apple Silicon, упор на decode и мультимодальность | Охотники за decode; цепочка инструментов новая — фиксируйте версии |
| MLX | Совместим с unified memory, удобно встраивать в Python/Swift-сервис | Инженерно тяжелее «кликни и чатай» |
| llama.cpp | Широкая база GGUF, много примеров CLI/сервера | Практично на Mac; дефолты не универсальны — профилируйте на железе |
2b. Prefill и decode раздельно
Prefill заполняет KV, decode генерирует токены. Чужие цифры decode без длины контекста и политики батча бесполезны для длинного RAG.
| Фаза | Главная метрика | Типичная ошибка |
|---|---|---|
| Prefill / TTFT | Время до первого токена, взрыв за пределами 8K контекста | Мерить только короткие промпты |
| Decode | Стабильные tok/s, просадка по длине, конкуренция CPU/GPU | Слишком большой batch → trashing памяти |
| Смешанная нагрузка | Давление на память, swap, фризы IDE | «Чистый» бенч без реальных приложений |
3. Пять шагов к воспроизводимости
- Зафиксировать тип нагрузки: чат, RAG, ночной batch — разные цели и разные endpoint’ы.
- Зафиксировать модель и квантование: одна эталонная GGUF/MLX, потом сравнение движков.
- Единая методика: один промпт, контекст, batch; логировать TTFT, decode, дрейф на длинных сессиях; указать SoC и semver движка.
- Поэтапный тюнинг: сначала потоки и ctx/batch, затем KV и параллелизм, затем смена модели.
- Неделя реального микса: IDE, браузер, экспорт открыты; частый красный индикатор памяти в рабочее время → оффлоад.
4. Опорные числа (не вендорские)
Для внутренних оценок:
- Минимум 8 ГБ под ОС и резидентные приложения до весов и KV в диалоге.
- Тяжёлый IDE + длинный контекст + таймлайн → 1–2 потока инференса.
- >20 ч/нед полной нагрузки на ноутбуке при мобильности — смотреть выделенный удалённый узел.
5. Матрица удалённого Mac
| Сигнал | Рекомендация |
|---|---|
| Общий OpenAI-совместимый endpoint с аудитом | Квота на удалённом узле; ноутбук для лёгких экспериментов |
| Память ломает монтаж или IDE | Вынести инференс или сжать контекст/квантование |
| Долгий A/B MetalRT/MLX/llama.cpp без «грязи» на основной машине | Удалённый Mac с фиксированным образом как песочница |
| Сервис 24/7 | Стабильная топология и метрики на удалённом Mac |
6. FAQ
Все три сразу? Да, но явно порты и bind; дубликаты весов забивают диск.Чужие цифры? Только с фиксированным промптом.Когда стоп? Три срыва творческого потока за неделю — вынести нагрузку.
7. Углубление: контракт инференса как актив
Трение в 2026 — не tokenizer, а воспроизводимый контракт: одни версии рантайма, порты, авторизация между dev/stage/demo. Metal-путь и пропускная способность памяти на Apple Silicon критичны для стабильного decode. См. MLX как OpenAI-совместимый API.
8. Итог: пределы «всё на одном Mac» и MACGPU
(1) Пределы: параллельные движки дублируют веса, порты, зависимости; unified memory забивается кэшем; сон и обновления ломают 24/7 на ноутбуке.
(2) Плюс удалёнки: инференс на воспроизводимом образе, локально тонкий клиент; на узле проще держать постоянную нагрузку и метрики без троттлинга клавиатуры — выше предсказуемость по сравнению с перегретым лэптопом.
(3) MACGPU: при необходимости предсказуемого OpenAI-совместимого endpoint и квот команды почасовой Apple Silicon часто быстрее окупается, чем бесконечные апгрейды RAM. Демоны MLX/llama.cpp и длинные задачи на узле; CTA ведёт к публичным тарифам без логина.