Движок вывода Bodega: Оптимизация вывода LLM для унифицированной памяти Apple Silicon

Bodega — это механизм вывода, разработанный специально для единой архитектуры памяти Apple Silicon, создававшийся более 2,5 лет с оптимизациями, близкими к уровню Metal на MLX. Он решает фундаментальные ограничения пропускной способности, с которыми сталкиваются разработчики при запуске LLM на оборудовании Mac.
Почему Apple Silicon требует другой оптимизации
Apple Silicon использует единую память, где CPU, GPU и нейронный процессор совместно используют один физический пул через единую внутрикристальную шину. Это принципиально отличается от дискретных GPU, таких как NVIDIA, у которых есть отдельные пулы видеопамяти и оперативной памяти, соединённые через PCIe. Пропускная способность памяти варьируется от ~400 ГБ/с на M1 Max до ~800 ГБ/с на M3 Ultra (с учётом штрафа за межкристальное соединение, фактическая пропускная способность снижается до 1,6–1,8x от производительности одного кристалла).
Ключевые архитектурные следствия:
- Декодирование ограничено пропускной способностью памяти — каждый токен требует загрузки весов модели из общей шины
- Предварительное заполнение ограничено вычислительной мощностью — доминируют TFLOPS GPU для матрично-матричного умножения
- Шина памяти используется совместно для всего — кэш KV, веса модели, ОС и приложения конкурируют за одну и ту же полосу пропускания 400–800 ГБ/с
Эта архитектура делает прямые порты реализаций пакетирования из vLLM или llama.cpp неэффективными на MLX, так как они были разработаны для других архитектур памяти.
Что создаёт Bodega
Разработчик изучил внутреннее устройство vLLM, включая непрерывное пакетирование, спекулятивное декодирование, чанковое предварительное заполнение и кэширование префиксов, а затем перестроил каждый компонент для MLX и единой модели памяти Apple.
Ключевое понимание для непрерывного пакетирования: генерация одного токена для одной последовательности загружает все веса модели для матрично-векторного умножения, что неэффективно на оборудовании с пропускной способностью 400+ ГБ/с. Решение — одновременное выполнение нескольких последовательностей с использованием весов × матрицы векторов вместо весов × одного вектора.
Управление кэшем KV было перепроектировано для единой памяти, где вытеснение блоков кэша имеет другие последствия по стоимости по сравнению с системами с изолированной видеопамятью.
Практические следствия
Разработчик сообщает о тестировании на нескольких конфигурациях Apple Silicon, включая два M3 Ultra (256 ГБ и 512 ГБ), M4 Max 128 ГБ и M1 Max 64 ГБ. Общий выявленный предел — пропускная способность для одного пользователя с одним запросом за раз и GPU, который в основном простаивает.
Репозиторий включает тесты производительности, которые можно проверить с помощью простого скрипта curl для настройки.
📖 Read the full source: r/LocalLLaMA
👀 Смотрите также

Сессионный поиск: локальный полнотекстовый поиск для сессий Claude Code и Codex, теперь в строке меню
Session Search индексирует локальные транскрипты Claude Code и Codex с помощью SQLite FTS, обеспечивая глубокий полнотекстовый поиск по ошибкам, командам, именам файлов и решениям — доступный из строки меню macOS с подсвеченными фрагментами.

Skales: Настольный ИИ-агент, который подключается к Ollama без использования Docker
Skales — это настольный AI-агент, который подключается к Ollama локально, не требуя настройки Docker. Он предлагает такие функции, как управление электронной почтой через Gmail IMAP, автоматизация браузера и голосовой час с использованием Whisper через Groq.

Открытая SQLite-основная система постоянной памяти для Claude
Разработчик выпустил memchat — локальную систему с лицензией GPL, которая извлекает знания из сессий Claude в контрольных точках, сохраняет их в SQLite и собирает заново для новых сессий, чтобы поддерживать контекст между разговорами.

Запуск OpenClaw и Codex CLI нативно на Android через AnyClaw APK
Разработчик упаковал OpenClaw и Codex CLI в APK-файл для Android под названием AnyClaw, что позволяет шлюзу и панели управления работать локально на устройствах ARM64 с Android 7.0+ без прав root. Для проекта потребовалось собрать зависимости из исходного кода и исправить несколько компонентов для работы с ограничениями Android.