Дисклеймер: я держу сервис аренды маков, поэтому у меня под рукой флот одинаковых машин и повод их гонять. Цифры ниже с этих машин, методика описана полностью, данные открыты под CC BY. Ссылок на сервис в статье нет.

Зачем очередной бенчмарк

Запросов «сколько тянет мак» в чатах много, ответов тоже, но почти все без методики: неизвестно квантование, неизвестна версия Ollama, один прогон вместо серии, непонятно, что происходило на машине в этот момент. Такие числа нельзя ни перепроверить, ни сравнить между собой.

Я замерил шесть моделей на одной конфигурации и описываю всё, что может повлиять на результат.

Методика

  • Железо: Mac mini M4, 16 ГБ unified memory, пропускная способность 120 ГБ/с. Машина в остальном простаивала только системные демоны.

  • Софт: Ollama 0.31.2, macOS 15.3.1 (Sequoia).

  • Квантование: Q4_K_M у всех моделей.

  • Промпт: одинаковый для всех просьба объяснить механизм внимания в трансформерах на 300 слов для джуна, с одной конкретной аналогией. num_predict = 512, temperature = 0.7.

  • Прогоны: 3 на модель, плюс один прогревочный (отбрасывается). Разброс между прогонами до 0.5%.

Прогрев важнее, чем кажется: первый запуск включает загрузку весов в память, и если его не отбросить, картина смещается на десятки процентов.

Результаты

Модель

Параметров

Генерация, ток/с

Обработка промпта, ток/с

Llama 3.2 3B

3B

46.7

1720

Mistral 7B

7B

22.8

645

Qwen 2.5 7B

7B

22.3

1130

Llama 3.1 8B

8B

21.2

587

DeepSeek R1 8B

8B

20.0

531

Qwen 2.5 14B

14B

11.7

606

Разброс между тремя прогонами каждой модели 0.5%, то есть цифры устойчивые.

Отдельно любопытна разница в обработке промпта у Mistral 7B (645) и Qwen 2.5 7B (1130) при почти одинаковой скорости генерации: модели одного размера, но по разному устроен токенизатор и внимание, и на префилле это видно, а на генерации нет.

Что из этого следует

Генерация упирается в память, а не в вычисления. Скорость почти линейно следует за пропускной способностью памяти и обратно за размером модели. Отсюда практическое правило: прикинуть скорость можно, поделив полосу на размер весов. Для 8B в Q4 (~4.7 ГБ) при 120 ГБ/с получается около 25 ток/с измеренные 21 попадают в ожидание с поправкой на накладные расходы.

Поэтому на M4 Pro (273 ГБ/с) и M4 Max (546 ГБ/с) прирост будет примерно кратен полосе, а не числу ядер. Своих замеров на них у меня пока нет, поэтому конкретных чисел не даю как появятся, добавлю в таблицу.

Комфортный потолок 16 ГБ - 8B. До 8B модели выдают 20+ ток/с, это быстрее, чем читает человек: ассистент по коду, разбор документов, локальный RAG работают нормально. 14B формально запускается, но 11.7 ток/с это уже ожидание, и на длинных ответах оно раздражает. Для 14B и выше нужны 24-32 ГБ и другая полоса.

Длинный контекст не проблема. Обработка промпта идёт от 530 до 1720 ток/с в зависимости от модели, то есть на порядок два быстрее генерации. Закинуть в контекст большой документ дёшево; дорого потом это генерировать.

Чего в замерах нет

Честно про ограничения: одна конфигурация, одно квантование, один тип задачи (генерация связного текста). На кодовых задачах с длинными выводами картина может отличаться, батчинг я не мерил вовсе это отдельная история, и на 16 ГБ он упирается в KV-кэш быстрее, чем в скорость.

Данные и методика: https://macyou.co/benchmarks лицензия CC BY, можно брать и перепроверять.

Если у вас есть машины на M1/M2/M3 или на 24-64 ГБ присылайте свои замеры по этой же методике, соберу сводную таблицу. Разрозненных цифр по интернету много, воспроизводимых почти нет.

Комментарии (1)


  1. adkomarov
    03.08.2026 10:04

    Во вторую версию бенчмарка стоит внести спекулятивный декодинг если задача состоит в том, чтобы измерить скорость генерации за заданное количество озу. Запускать на чистой llama.cpp с вынесением слоев в интегрированную насколько возможно. Запуск на чистой системе если возможно с отключением графики если вопрос сколько реально можно выдать из системы против вопроса для комфортной работы с параллельным запуском модели.