TurboFieldfare — инференс Gemma 4 26B-A4B в ~2 ГБ памяти на Apple Silicon

· 2 мин чтения
local-llm swift metal apple-silicon llm-inference
📂 Исходный код на GitHub

Custom Swift + Metal рантайм инференса Gemma 4 26B-A4B примерно в 2 ГБ оперативной памяти для Mac на Apple Silicon, включая модели с 8 ГБ. Эксперты, нужные для каждого токена, стримятся с SSD.

TurboFieldfare — инференс Gemma 4 26B-A4B в ~2 ГБ памяти на Apple Silicon

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, эксперименты, которые сформировали проект, инвентарь экспериментов.

Источник: https://github.com/drumih/turbo-fieldfare