Pull to refresh
4
Erik Bagdasarian@Macyou

macyou.co

1
Subscribers
Send message

По расчёту согласен, я сам это правило в статье и привёл: полоса поделить на размер весов даёт хорошую первую прикидку. Спорить тут не с чем. Но расчёт даёт верхнюю границу, а не факт. На 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 или при скачивании зависимостей, но сам процесс выгрузки действительно проходит штатно.

Information

Rating
Does not participate
Registered
Activity

Specialization

Десктоп разработчик, Разработчик мобильных приложений
Ведущий
Python
JavaScript
CSS
HTML
TypeScript
React
Node.js
Vue.js
Next.js
Кроссбраузерная верстка