TurboFieldfare — инференс Gemma 4 26B-A4B в ~2 ГБ памяти на Apple Silicon
📂 Исходный код на GitHubCustom Swift + Metal рантайм инференса Gemma 4 26B-A4B примерно в 2 ГБ оперативной памяти для Mac на Apple Silicon, включая модели с 8 ГБ. Эксперты, нужные для каждого токена, стримятся с SSD.
TurboFieldfare — Gemma 4 26B-A4B в ~2 ГБ памяти на Apple Silicon
TurboFieldfare — это кастомный Swift + Metal рантайм, который запускает инференс инструкционно-настроенной модели Gemma 4 26B-A4B на любом Mac с Apple Silicon, даже на моделях с 8 ГБ оперативной памяти. Идея проекта проста: память стала дорогой, поэтому автор уместил модель с 26 миллиардами параметров в бюджет около 2 ГБ.
Вместо того чтобы загружать все 14.3 ГБ модели в память целиком, рантайм держит в RAM общее ядро объёмом ~1.35 ГБ и FP16 KV-кэш, а затем стримит с SSD только те эксперты, которые нужны для генерации каждого конкретного токена. Именно это позволяет модели работать на Mac с 8 ГБ памяти.
Рантайм, стриминговый установщик, CLI и нативное Mac-приложение написаны на Swift и Metal. TurboFieldfare — модельно-специфичное решение, а не обёртка над MLX или llama.cpp. В проекте задокументирован рекорд экспериментов: 103 измеренных результата по ядрам, кэшированию, I/O, prefill и decode.
Характеристики
| Метрика | Значение |
|---|---|
| Модель | Gemma 4 26B-A4B IT, 26B параметров, ~3.88B активных на токен |
| Веса | MLX affine 4-bit, group 64; 8-bit роутер; 4-bit эксперты |
| Память | ~2 ГБ весов плюс KV-кэш на 4K токенов |
| Хранилище | ~14.3 ГБ для установленной текстовой модели |
| Измеренный decode на M2 | 5.1–6.3 ток/с на 8 ГБ M2 MacBook Air |
| Измеренный decode на M5 | 31–35 ток/с на 24 ГБ M5 Pro |
Результаты — это ориентир, а не предел: на скорость влияют длина промпта, длина генерации, состояние page cache и железа. Свои замеры можно добавить в community benchmark.
Быстрый старт
git clone https://github.com/drumih/turbo-fieldfare.git
cd turbo-fieldfare
swift build -c release
.build/release/TurboFieldfareMac
При первом запуске приложение предложит скачать и перепаковать закреплённую модель (около 15 ГБ). После установки выберите Load Model, введите промпт и нажмите Generate (или Command+Return).
Требования
- Mac на Apple Silicon; валидированная цель — 8 ГБ M2 MacBook Air
- macOS 26 с Metal 4
- Xcode 26 и Swift 6.2 или новее
- Достаточно свободного места — ~14.3 ГБ под модель
- Интернет для первой установки модели
Проект собирается только под arm64. Старые версии macOS и Metal не поддерживаются.
Использование
TurboFieldfare даёт нативное Mac-приложение, интерфейс командной строки и экспериментальный локальный OpenAI-совместимый сервер. Все они используют одну директорию .gturbo, но в один момент времени запускать можно только один продукт, владеющий моделью.
Swift-пакет включает шесть продуктов:
| Продукт | Назначение |
|---|---|
TurboFieldfare |
Swift-библиотека с рантаймом и Metal-ядрами |
TurboFieldfareMac |
Нативное Mac-приложение для установки и генерации |
TurboFieldfareDecodeService |
Однократный локальный владелец модели и Metal для приложения |
TurboFieldfareCLI |
CLI для инструкционного чата и raw completion |
TurboFieldfareServer |
Loopback OpenAI-совместимый Chat Completions сервер |
TurboFieldfareRepack |
Стриминговый установщик модели и верификатор |
Установка модели
Установщик не материализует полный исходный чекпоинт: он стримит нужные байтовые диапазоны из закреплённой ревизии Hugging Face и сразу перепаковывает их в формат .gturbo. Это экономит место на диске и держит ограниченной память при работе.
Первая установка переносит около 15 ГБ через range-запросы к Hugging Face. Готовый .gturbo занимает ~14.3 ГБ и принимается только после проверки манифеста и хэшей файлов.
Командная строка
CLI использует уже установленную модель .gturbo. Установить её из терминала:
swift run -c release TurboFieldfareRepack \
--output scratch/gemma4.gturbo \
--overwrite
Продолжить прерванную загрузку:
swift run -c release TurboFieldfareRepack \
--output scratch/gemma4.gturbo \
--overwrite \
--resume
Запуск инструкционного чата с сообщениями из JSON:
swift run -c release TurboFieldfareCLI \
--model scratch/gemma4.gturbo \
--messages-file messages.json
Формат сообщений такой же, как в Mac-приложении. Лимит ответа задаётся через --max-new (по умолчанию 1024 токена). Доступны --max-context, --temperature, --top-k, --top-p, --repetition-penalty, --seed и повторяемые --stop. Сгенерированный текст идёт в stdout, статистика — в stderr; флаг --quiet отключает её для скриптов.
Локальный OpenAI-совместимый сервер
swift build -c release --product TurboFieldfareServer
.build/release/TurboFieldfareServer \
--model scratch/gemma4.gturbo
Сервер слушает http://127.0.0.1:8080/v1 и поддерживает Chat Completions, стриминг, function tools и переиспользование общего префикса промпта. Клиент сам авторизует и выполняет каждый вызов инструмента. Держите сервер на loopback: удалённой аутентификации и TLS у него нет.
Генерация текста
Приложение трактует введённое как инструкцию и автоматически оформляет чат в формате Gemma. Дефолты генерации: температура 0.2, Top-K 64, Top-P 0.95. Температура 0 даёт детерминированный greedy-вывод. Модель может повторяться и ошибаться, поэтому важные результаты стоит проверять.
TurboFieldfare — только текст: изображения, аудио и видео не поддерживаются. Приложение и CLI работают с сообщениями пользователя и модели плюс опциональной системной инструкцией и не выполняют инструменты; сервер принимает декларации function tools и возвращает сгенерированные моделью вызовы.
Как устроен движок
На каждом слое трансформера Metal вычисляет attention и роутер из резидентных весов. CPU использует ID топ-8 экспертов от роутера, планируя работу с 16-слотовым LFU-кэшем слоя, затем добирает промахи через ограниченные параллельные pread в буферы, видимые Metal. Пока эти чтения идут, Metal считает резидентную ветку общего эксперта, после чего результаты комбинируются.
Prefill идёт чанками до 128 токенов, чтобы один загруженный эксперт обслуживал несколько строк; генерация повторяет цикл роутер-слоёв по одному токену. KV-кэш в FP16: ограниченное циклическое хранилище для 25 слоёв sliding-window attention и линейное — для 5 слоёв полного внимания, плюс точный split-K/V decode attention с раздельными нормализованными K и V путями.
Статус и планы
В проекте реализованы: стриминговая перепаковка в .gturbo, чат Gemma 4 26B-A4B с проверенным форматированием, 4-bit веса MLX (включая 8-bit роутер), кастомные Metal-ядра для quantized GEMV, attention, MoE, нормализации, RoPE, сэмплирования и продакшн-фьюжнов, SSD-стриминг экспертов с ограниченным кэшем, chunked prefill и генерация по токенам.
В планах: приложения для iPhone и iPad с замерами скорости и памяти на мобильном железе, а также бенчмарки на большем числе Mac — особенно на базовом 16 ГБ M4 Mac mini и других 8 ГБ моделях.
Исходники и документация распространяются под Apache License 2.0. Веса в репозиторий не включены: установщик скачивает их из закреплённого чекпоинта Hugging Face отдельно, и на них действуют условия источника. Проект независимый, не аффилирован с Google.
Полезные материалы: Local server, System design, Benchmarks, эксперименты, которые сформировали проект, инвентарь экспериментов.