26B-модель в 2 ГБ памяти: Gemma 4 на восьмигиговом MacBook Air, потому что память подорожала
«Память подорожала. Поэтому я дал модели на 26 миллиардов параметров бюджет в 2 гигабайта». С этой фразы начинается README проекта TurboFieldfare, который сегодня висит на главной Hacker News. Автор — Андрей Михайлов, iOS- и Metal-инженер — написал свой рантайм на Swift и Metal, чтобы Gemma 4 26B работала на восьмигиговом MacBook Air.
TL;DR: TurboFieldfare держит в памяти общее ядро модели на 1,35 ГБ и FP16 KV-кеш, а экспертов под каждый токен стримит с SSD. В итоге Gemma 4 26B-A4B укладывается примерно в 2 ГБ оперативной памяти вместо 14,3 ГБ. Замеры автора: 5,1–6,3 токена в секунду на 8 ГБ M2 MacBook Air и 31–35 на 24 ГБ M5 Pro. Apache-2.0, требуется macOS 26 и Metal 4.
Что делает TurboFieldfare
Проект запускает инструкционную версию Gemma 4 26B-A4B, не загружая всю модель в память. 26 миллиардов параметров всего, около 3,88 миллиарда активных на токен — это MoE-архитектура, и именно она делает трюк возможным.
Идея простая по формулировке и мучительная в реализации. В памяти постоянно живёт только общее ядро на 1,35 ГБ плюс KV-кеш в FP16. Эксперты, которые нужны конкретному токену, подтягиваются с SSD по мере надобности и лежат в ограниченном по размеру кеше. Полная модель на диске занимает 14,3 ГБ, в памяти — около двух.
Это не обёртка над MLX или llama.cpp. Рантайм, Metal-ядра, CLI, установщик и нативное Mac-приложение написаны с нуля на Swift и Metal, и всё заточено под одну конкретную модель. Автор выложил журнал экспериментов со 103 измеренными результатами по ядрам, кешированию, вводу-выводу, префиллу и декодингу — включая идеи, которые звучали разумно и не сработали.
Насколько это быстро на самом деле
Честные цифры из бенчмарков автора: 5,1–6,3 токена в секунду на 8 ГБ M2 MacBook Air и 31–35 токенов в секунду на 24 ГБ M5 Pro.
Шесть токенов в секунду — это медленно. Примерно скорость чтения вслух не торопясь. Для чата в терминале терпимо, для агента, который гоняет десять инструментальных вызовов подряд, — нет.
Но сравнивать надо не с облачным API, а с альтернативой на том же железе. На восьмигиговом Air альтернатива — не запускать 26B вообще. Автор честно оговаривает, что измерение это опорная точка, а не потолок: на пропускную способность влияют длина промпта, длина генерации, состояние page cache и само железо. Есть гайд для контрибуции своих замеров, и на редких конфигурациях цифр пока нет.
Как устроена установка
Установщик заслуживает отдельного абзаца, потому что решает проблему, о которую спотыкаются все локальные раннеры: он никогда не материализует полный исходный чекпоинт.
Вместо этого он тянет нужные диапазоны байт с закреплённой ревизии Hugging Face и на лету перепаковывает их прямо в формат .gturbo. Никакой второй копии чекпоинта на диске, ограниченная память под временные данные. Первая установка прокачивает около 15 ГБ, итоговая установка занимает 14,3 ГБ и принимается только после проверки манифеста и хешей файлов. Загрузка модели в память при установке не происходит.
Поставить и запустить из командной строки:
swift run -c release TurboFieldfareRepack \ --output scratch/gemma4.gturbo \ --overwrite swift run -c release TurboFieldfareCLI \ --model scratch/gemma4.gturbo \ --messages-file messages.json
Пакет отдаёт шесть продуктов: библиотеку с рантаймом и Metal-ядрами, нативное Mac-приложение, CLI для чата и сырых дополнений, экспериментальный OpenAI-совместимый сервер на loopback и установщик-репакер. Модельную директорию .gturbo они делят, но запускать одновременно можно только один процесс, владеющий моделью.
Дефолты генерации: температура 0.2, Top-K 64, Top-P 0.95. Для детерминированного жадного вывода ставьте температуру в 0.
Подводные камни
macOS 26 и Metal 4 обязательны, откатов нет. Пакет только под arm64, нужны Xcode 26 и Swift 6.2 или новее. Старые версии macOS и Metal не поддерживаются в принципе, так что на MacBook, который вы не обновляли, это не поедет.
Стриминг экспертов с SSD означает постоянные чтения. Каждый токен тянет свой набор экспертов с диска. На производительность это влияет предсказуемо, на ресурс SSD при долгих сессиях — вопрос, который в документации не рассматривается вообще.
Только текст и только одна модель. Ни картинок, ни аудио. Приложение и CLI не дают модели инструментов; loopback-сервер принимает объявления function-tool и возвращает вызовы инструментов, но выполнять и авторизовывать их должен клиент. И запускается ровно Gemma 4 26B-A4B с закреплённого чекпоинта, подставить свою модель нельзя — рантайм модель-специфичный.
Запуск требует ручной подготовки. Документация советует перед прогоном закрыть тяжёлые приложения и проверить memory_pressure -Q, а если свободной памяти мало — отложить запуск. Одновременно должен работать только один процесс с моделью: приложение, CLI, сервис декодинга, сервер или тесты. Для восьмигиговой машины это не придирка, а условие работы.
Проект новый и маленький. Репозиторий создан 17 июля, двенадцать коммитов, один автор. Валидированная цель — 8 ГБ M2 MacBook Air, всё остальное железо в статусе «померьте и пришлите». Модель может зациклиться или ответить неверно, автор об этом предупреждает прямым текстом.
Альтернативы
Ollama и llama.cpp — универсальны, поддерживают сотни моделей и работают на любой платформе. Но 26B на восьмигиговой машине они не запустят: там нет стриминга экспертов с диска, модель должна поместиться в память.
MLX от Apple — родной фреймворк под Apple Silicon с хорошей производительностью и большим выбором моделей. Требует, чтобы веса влезли в unified memory, то есть на 8 ГБ вы остаётесь в классе моделей до 7–8B.
Модель поменьше — Gemma 4 в младших размерах или Qwen на 4–8B пойдут на том же Air быстрее и без танцев с версиями macOS. Вопрос в том, устраивает ли вас качество 8B там, где вы хотели 26B.
Вердикт
Ставьте, если у вас Apple Silicon с 8–16 ГБ памяти, macOS 26 и желание гонять модель локально без облака: это единственный известный способ запустить 26B на такой машине, и шесть токенов в секунду лучше, чем ноль. Не ставьте, если нужен агент с инструментами и быстрым циклом — на этой скорости он не работает, берите API. И отдельно стоит прочитать журнал экспериментов, даже если запускать не собираетесь: 103 измеренных результата с описанием того, что не сработало и какие ранние выводы развалились под нормальной проверкой, — редкий жанр в мире локального инференса, где обычно публикуют только победы.
Как попробовать
- Проверьте требования: Apple Silicon, macOS 26 с Metal 4, Xcode 26, Swift 6.2+, около 15 ГБ свободного места. Без macOS 26 дальше можно не читать.
- Склонируйте drumih/turbo-fieldfare и поставьте модель через
TurboFieldfareRepackлибо через Mac-приложение, если хотите графический установщик. - Перед первым прогоном закройте браузер и всё тяжёлое, проверьте
memory_pressure -Q. На восьмигиговой машине это влияет на результат больше, чем настройки сэмплирования. - Замерьте свою скорость по гайду сообщества и пришлите результат: по 16 ГБ M4 Mac mini и другим 8-гиговым конфигурациям цифр пока нет.
- Если хотите подключить модель к своему коду, поднимайте loopback-сервер с OpenAI-совместимым Chat Completions и просто перенаправьте туда base URL.