По расчёту согласен, я сам это правило в статье и привёл: полоса поделить на размер весов даёт хорошую первую прикидку. Спорить тут не с чем. Но расчёт даёт верхнюю границу, а не факт. На 8B он обещает около 25 ток/с, замер даёт 21. Пятнадцать процентов разницы, и для вопроса «хватит или нет» это как раз тот диапазон, где решение меняется. А главное, из полосы вообще не выводится префилл. У Mistral 7B и Qwen 2.5 7B на одной машине генерация практически одинаковая, 22.8 против 22.3, а обработка промпта отличается почти вдвое: 645 против 1130. Разница не в памяти, она в токенизаторе и устройстве внимания. Для агента с длинным контекстом префилл важнее генерации, и никакой калькулятор эту цифру не даст. Про Intel аналогия хромает не в ту сторону. У 8350U двухканальный DDR4 это порядка 35-40 ГБ/с, и встроенная графика к этой памяти доступа толком не имеет. У M4 это 120 ГБ/с, и GPU работает со всей памятью напрямую. Разница не в процентах, а в классе: 3-5 токенов против 21 на той же 8B. Зачем это мне: у меня люди арендуют маки и спрашивают, потянет ли машина их модель. Раньше я отвечал «наверное, да», теперь показываю таблицу. И тем, кому нужно 32-64 ГБ, отвечаю честно, что базовый M4 не подходит, это тоже полезный ответ.
Спасибо! Различение точное, и оно даже глубже, чем звучит. Это не просто «быстрее или медленнее», это разные оптимумы. Человеку за клавиатурой важны скорость одного потока и время до первого токена: пока ответ обгоняет чтение, всё нормально, дальше прирост почти не чувствуется. Агенту важна пропускная способность на параллельных запросах и то, как ведёт себя KV кэш на длинном контексте, а время до первого токена ему безразлично. Отсюда неочевидное следствие: под агента иногда выгоднее модель поменьше с большим окном, чем крупная и медленная, хотя по одиночному замеру вторая выглядит солиднее. И на 16 ГБ второй сценарий упирается не в скорость, а в память: параллельные запросы съедают её кэшем раньше, чем кончается вычислительный запас. Возьму оба сценария в следующий замер, разделю явно.
Справедливо, и это пробел в методике. В этих прогонах я не выставлял num_ctx явно, то есть работал дефолт Ollama. Промпт короткий, около тридцати токенов, генерация ограничена 512, так что окно фактически не использовалось и на эти конкретные цифры не влияло. Но для воспроизводимости указать было нужно, тут вы правы. В следующей серии зафиксирую значение явно и добавлю отдельный замер: как падает скорость по мере роста контекста. Это как раз то, что важно для сценария с агентом, про который пишет @adkomarov выше, там окно забивается быстро.
Спасибо за команды, забрал целиком. EAGLE3 не видел, буду смотреть. Согласен, что на 8B гарантий нет. На маке добавляется своя причина: у драфтера и основной модели одна полоса памяти, а именно в неё всё и упирается. Вполне может выйти ноль. Результат опубликую в любом случае, отрицательный тоже полезен, их обычно никто не пишет.
Спасибо, сайт не знал, полезный. Забавно, что сошлось: у них 12 на qwen14b, у меня в замере 11.7. При этом у них расчёт по объёму и полосе, а у меня прогон на живой машине. Когда независимая оценка и фактический замер сходятся в пределах пары процентов, это хороший знак для обоих.
По памяти влезает. 8B в Q4_K_M это около 4.9 ГБ, драфтер 1B в Q8 около 1.3 ГБ, KV на 8к контекста с квантованием кэша до q8_0 меньше гигабайта. Суммарно в районе 7 ГБ, и это укладывается даже с поправкой на то, что память общая и система забирает своё. Вопрос не влезет ли, а даст ли прирост. На дискретной карте драфтер обычно выигрывает, потому что основная модель упирается в вычисления. На Apple Silicon горлышко это полоса памяти, и драфтер конкурирует за неё же. Может оказаться, что выигрыш съест сам себя.
Разумно, но это два разных замера, и я сознательно делал первый. Мой вопрос был такой: что получит человек, который поставил Ollama и запустил модель, ничего не настраивая. Так делает большинство, и для этого сценария цифры честнее всего. Ваш вопрос другой: сколько железо выдаёт на пределе. Это отдельная статья, и она интереснее. Спекулятивку и чистый llama.cpp заберу. Пара уточнений по маку. Выносить слои в интегрированную не нужно, на Apple Silicon память общая, отдельной видеопамяти нет, и ngl auto грузит всё в GPU по умолчанию. Потолок задаёт не количество слоёв, а wired limit: система отдаёт под GPU примерно две трети RAM, поднимается через sysctl iogpu.wired_limit_mb. Про графику по сути верно, но у меня машины стоят без монитора, рабочий стол на них почти ничего не ест. Разницу всё равно померяю, любопытно.
Дополню статью цифрами, которых в ней не хватило: мак нужен не только чтобы собрать iOS на нём же удобно гонять локальные модели, и это второй сценарий, ради которого его берут.
Замеры на Mac mini M4, 16 ГБ, пропускная способность памяти 120 ГБ/с. Ollama 0.31.2, macOS 15.3.1, квантование Q4_K_M, по 3 прогона на модель плюс отброшенный прогревочный, разброс между прогонами 0.1%:
Потолок базовых 16 ГБ — это 14B. И на нём уже 11.7 ток/с медленнее, чем читает человек, работать некомфортно. Всё до 8B выдаёт 20+ ток/с, то есть быстрее чтения, и на этом уже можно жить: ассистент по коду, разбор документов, локальный RAG.
Обработка промпта идёт на порядок-два быстрее генерации от 530 ток/с у DeepSeek R1 8B до 1720 у Llama 3.2 3B. Длинный контекст на мак закинуть не страшно, упирается всё в генерацию: она memory bound, и цифры почти линейно следуют за пропускной способностью памяти, а не за числом ядер. Поэтому M4 Pro/Max с их 273 и 546 ГБ/с дают прирост примерно кратно полосе, но своих замеров на них у меня пока нет, поэтому чисел не привожу.
Если у кого-то есть замеры на M1/M2/M3 или на 24–32 ГБ, киньте в комментарии, соберу сводную таблицу: разрозненных цифр по интернету много, а воспроизводимых с указанной методикой почти нет.
Работает только для .NET MAUI (Flutter, React Native, нативный Swift — мимо). Деплоит только debug сборку с development подписью: тот ipa из папочки ставится на ваш телефон, но в App Store Connect его не примут для release сборки Microsoft всё так же требует Mac build host, это прямо в их доках. Ещё нужен платный dev аккаунт и установленный iTunes. И грустный апдейт: из Visual Studio 2026 фичу удалили, живёт она только в VS 2022 (17.14), дальше Microsoft отправляет обратно к Pair to Mac. Как способ разрабатывать и гонять на своём айфоне с винды отличный вариант, если вы на .NET стеке. Как путь к публикации нет. Если у вас получалось довести такой ipa до стора без мака, расскажите как, честно впишу в статью.
Именно эту мысль я и старался донести в статье! • Постоянная разработка — свой Mac (новый или б/у M1 с Авито). • Настроенный пайплайн в компании — CI/CD (GitHub Actions / Xcode Cloud). • Разовый заказ / проверка гипотезы — аренда на месяц.
Дисклеймер в самом начале статьи вынесен сознательно и честно — именно чтобы показать аффилированность с темой и не вставлять скрытых реф-ссылок. В тексте приведены конкретные цены конкурентов (Selectel, RentAMac, MacinCloud) и честные альтернативы (от покупного железа до CI/CD). Задача статьи — дать разбор вариантов со всеми их минусами (включая задержку ввода и проблемы с тестированием на физическом айфоне), а не заявить «покупайте только аренду».
Отличная альтернатива, абсолютно согласен! M1 на Авито за 30–35k ₽ — это, пожалуй, лучший «бюджетный вход» в iOS-разработку на постоянку.
Аренда конкурирует не с покупкой б/у M1, а с ситуацией, когда человеку нужно собранное приложение сдать завтра, 30 тысяч на б/у мак выделять из бюджета проекта не хочется, а на руках только Windows-ноутбук.
По пунктам — вы правы в двух из трёх, поправил статью: Цена — да, завысил: смотрел конфигурации 16/512 у крупных продавцов и не проверил нижнюю границу маркетплейсов. Про гарантию продавца по ЗоЗПП — справедливо, тоже поправил. Хакинтош — согласен, «мёртв» было слишком категорично. Переписал на честное «доживает»: macOS 26 на Intel работает и билдит, но она объявлена последней, так что окно закрывается. Плюс EULA-риски для dev-аккаунта — для фриланса под чужие проекты это может быть существенно. Про «оплату рублями» — не только госуха: это фрилансеры без зарубежной карты, которым мак нужен на один-два заказа. Таких запросов в чатах мобильных разработчиков хватает — собственно, из них статья и родилась.
Спасибо за уточнение! Поправил этот нюанс в тексте. Вы правы, сам App Store Connect для аплоуда из Organizer обычно работает без блоковок с RU-IP. Проблема с IP чаще вылезает на соседних этапах — при обращении к некоторым сопутствующим зарубежным сервисам, сторонним API или при скачивании зависимостей, но сам процесс выгрузки действительно проходит штатно.
По расчёту согласен, я сам это правило в статье и привёл: полоса поделить на размер весов даёт хорошую первую прикидку. Спорить тут не с чем. Но расчёт даёт верхнюю границу, а не факт. На 8B он обещает около 25 ток/с, замер даёт 21. Пятнадцать процентов разницы, и для вопроса «хватит или нет» это как раз тот диапазон, где решение меняется. А главное, из полосы вообще не выводится префилл. У Mistral 7B и Qwen 2.5 7B на одной машине генерация практически одинаковая, 22.8 против 22.3, а обработка промпта отличается почти вдвое: 645 против 1130. Разница не в памяти, она в токенизаторе и устройстве внимания. Для агента с длинным контекстом префилл важнее генерации, и никакой калькулятор эту цифру не даст. Про Intel аналогия хромает не в ту сторону. У 8350U двухканальный DDR4 это порядка 35-40 ГБ/с, и встроенная графика к этой памяти доступа толком не имеет. У M4 это 120 ГБ/с, и GPU работает со всей памятью напрямую. Разница не в процентах, а в классе: 3-5 токенов против 21 на той же 8B. Зачем это мне: у меня люди арендуют маки и спрашивают, потянет ли машина их модель. Раньше я отвечал «наверное, да», теперь показываю таблицу. И тем, кому нужно 32-64 ГБ, отвечаю честно, что базовый M4 не подходит, это тоже полезный ответ.
Спасибо! Различение точное, и оно даже глубже, чем звучит. Это не просто «быстрее или медленнее», это разные оптимумы. Человеку за клавиатурой важны скорость одного потока и время до первого токена: пока ответ обгоняет чтение, всё нормально, дальше прирост почти не чувствуется. Агенту важна пропускная способность на параллельных запросах и то, как ведёт себя KV кэш на длинном контексте, а время до первого токена ему безразлично. Отсюда неочевидное следствие: под агента иногда выгоднее модель поменьше с большим окном, чем крупная и медленная, хотя по одиночному замеру вторая выглядит солиднее. И на 16 ГБ второй сценарий упирается не в скорость, а в память: параллельные запросы съедают её кэшем раньше, чем кончается вычислительный запас. Возьму оба сценария в следующий замер, разделю явно.
Справедливо, и это пробел в методике. В этих прогонах я не выставлял
num_ctxявно, то есть работал дефолт Ollama. Промпт короткий, около тридцати токенов, генерация ограничена 512, так что окно фактически не использовалось и на эти конкретные цифры не влияло. Но для воспроизводимости указать было нужно, тут вы правы. В следующей серии зафиксирую значение явно и добавлю отдельный замер: как падает скорость по мере роста контекста. Это как раз то, что важно для сценария с агентом, про который пишет @adkomarov выше, там окно забивается быстро.Спасибо за команды, забрал целиком. EAGLE3 не видел, буду смотреть. Согласен, что на 8B гарантий нет. На маке добавляется своя причина: у драфтера и основной модели одна полоса памяти, а именно в неё всё и упирается. Вполне может выйти ноль. Результат опубликую в любом случае, отрицательный тоже полезен, их обычно никто не пишет.
Спасибо, сайт не знал, полезный. Забавно, что сошлось: у них 12 на qwen14b, у меня в замере 11.7. При этом у них расчёт по объёму и полосе, а у меня прогон на живой машине. Когда независимая оценка и фактический замер сходятся в пределах пары процентов, это хороший знак для обоих.
По памяти влезает. 8B в Q4_K_M это около 4.9 ГБ, драфтер 1B в Q8 около 1.3 ГБ, KV на 8к контекста с квантованием кэша до q8_0 меньше гигабайта. Суммарно в районе 7 ГБ, и это укладывается даже с поправкой на то, что память общая и система забирает своё. Вопрос не влезет ли, а даст ли прирост. На дискретной карте драфтер обычно выигрывает, потому что основная модель упирается в вычисления. На Apple Silicon горлышко это полоса памяти, и драфтер конкурирует за неё же. Может оказаться, что выигрыш съест сам себя.
Разумно, но это два разных замера, и я сознательно делал первый. Мой вопрос был такой: что получит человек, который поставил Ollama и запустил модель, ничего не настраивая. Так делает большинство, и для этого сценария цифры честнее всего. Ваш вопрос другой: сколько железо выдаёт на пределе. Это отдельная статья, и она интереснее. Спекулятивку и чистый llama.cpp заберу. Пара уточнений по маку. Выносить слои в интегрированную не нужно, на Apple Silicon память общая, отдельной видеопамяти нет, и
ngl autoгрузит всё в GPU по умолчанию. Потолок задаёт не количество слоёв, а wired limit: система отдаёт под GPU примерно две трети RAM, поднимается черезsysctl iogpu.wired_limit_mb. Про графику по сути верно, но у меня машины стоят без монитора, рабочий стол на них почти ничего не ест. Разницу всё равно померяю, любопытно.Дополню статью цифрами, которых в ней не хватило: мак нужен не только чтобы собрать iOS на нём же удобно гонять локальные модели, и это второй сценарий, ради которого его берут.
Замеры на Mac mini M4, 16 ГБ, пропускная способность памяти 120 ГБ/с. Ollama 0.31.2, macOS 15.3.1, квантование Q4_K_M, по 3 прогона на модель плюс отброшенный прогревочный, разброс между прогонами 0.1%:
МодельГенерация, ток/сLlama 3.2 3B46.7Mistral 7B22.8Qwen 2.5 7B22.3Llama 3.1 8B21.2DeepSeek R1 8B20.0Qwen 2.5 14B11.7
Что из этого следует практически:
Потолок базовых 16 ГБ — это 14B. И на нём уже 11.7 ток/с медленнее, чем читает человек, работать некомфортно. Всё до 8B выдаёт 20+ ток/с, то есть быстрее чтения, и на этом уже можно жить: ассистент по коду, разбор документов, локальный RAG.
Обработка промпта идёт на порядок-два быстрее генерации от 530 ток/с у DeepSeek R1 8B до 1720 у Llama 3.2 3B. Длинный контекст на мак закинуть не страшно, упирается всё в генерацию: она memory bound, и цифры почти линейно следуют за пропускной способностью памяти, а не за числом ядер. Поэтому M4 Pro/Max с их 273 и 546 ГБ/с дают прирост примерно кратно полосе, но своих замеров на них у меня пока нет, поэтому чисел не привожу.
Методика и сырые данные лежат тут: https://macyou.co/benchmarks под CC BY, можно перепроверять и цитировать.
Если у кого-то есть замеры на M1/M2/M3 или на 24–32 ГБ, киньте в комментарии, соберу сводную таблицу: разрозненных цифр по интернету много, а воспроизводимых с указанной методикой почти нет.
Работает только для .NET MAUI (Flutter, React Native, нативный Swift — мимо). Деплоит только debug сборку с development подписью: тот ipa из папочки ставится на ваш телефон, но в App Store Connect его не примут для release сборки Microsoft всё так же требует Mac build host, это прямо в их доках. Ещё нужен платный dev аккаунт и установленный iTunes. И грустный апдейт: из Visual Studio 2026 фичу удалили, живёт она только в VS 2022 (17.14), дальше Microsoft отправляет обратно к Pair to Mac. Как способ разрабатывать и гонять на своём айфоне с винды отличный вариант, если вы на .NET стеке. Как путь к публикации нет. Если у вас получалось довести такой ipa до стора без мака, расскажите как, честно впишу в статью.
Спасибо, упомянул в правке.
Именно эту мысль я и старался донести в статье! • Постоянная разработка — свой Mac (новый или б/у M1 с Авито). • Настроенный пайплайн в компании — CI/CD (GitHub Actions / Xcode Cloud). • Разовый заказ / проверка гипотезы — аренда на месяц.
Спасибо за резюме!
Дисклеймер в самом начале статьи вынесен сознательно и честно — именно чтобы показать аффилированность с темой и не вставлять скрытых реф-ссылок. В тексте приведены конкретные цены конкурентов (Selectel, RentAMac, MacinCloud) и честные альтернативы (от покупного железа до CI/CD). Задача статьи — дать разбор вариантов со всеми их минусами (включая задержку ввода и проблемы с тестированием на физическом айфоне), а не заявить «покупайте только аренду».
Отличная альтернатива, абсолютно согласен! M1 на Авито за 30–35k ₽ — это, пожалуй, лучший «бюджетный вход» в iOS-разработку на постоянку.
Аренда конкурирует не с покупкой б/у M1, а с ситуацией, когда человеку нужно собранное приложение сдать завтра, 30 тысяч на б/у мак выделять из бюджета проекта не хочется, а на руках только Windows-ноутбук.
По пунктам — вы правы в двух из трёх, поправил статью: Цена — да, завысил: смотрел конфигурации 16/512 у крупных продавцов и не проверил нижнюю границу маркетплейсов. Про гарантию продавца по ЗоЗПП — справедливо, тоже поправил. Хакинтош — согласен, «мёртв» было слишком категорично. Переписал на честное «доживает»: macOS 26 на Intel работает и билдит, но она объявлена последней, так что окно закрывается. Плюс EULA-риски для dev-аккаунта — для фриланса под чужие проекты это может быть существенно. Про «оплату рублями» — не только госуха: это фрилансеры без зарубежной карты, которым мак нужен на один-два заказа. Таких запросов в чатах мобильных разработчиков хватает — собственно, из них статья и родилась.
Спасибо за уточнение! Поправил этот нюанс в тексте. Вы правы, сам App Store Connect для аплоуда из Organizer обычно работает без блоковок с RU-IP. Проблема с IP чаще вылезает на соседних этапах — при обращении к некоторым сопутствующим зарубежным сервисам, сторонним API или при скачивании зависимостей, но сам процесс выгрузки действительно проходит штатно.