Я хотел понять, может ли Gemma 4 заменить облачную модель в моей обычной повседневной работе с кодом через агента. Не в теории, а по-настоящему. Я каждый день пользуюсь Codex CLI, и модель по умолчанию у меня — GPT-5.4. Работает она хорошо, но есть два нюанса: каждый токен стоит денег, и каждый промпт уводит мой код на чужие серверы. Плюс у меня есть друзья, которые всерьёз думают вложиться в локальные сетапы, а я до сих пор не был уверен, что для такой работы это вообще имеет смысл.
Я допускал, что могу ошибаться.
Gemma 4 обещала рабочий локальный tool calling. И я решил потратить день, чтобы проверить, не развалится ли всё это, как только Codex CLI начнёт читать файлы, писать патчи и гонять тесты.
Я собрал два стенда:
- MacBook Pro на M4 Pro с 24 ГБ памяти— мой основной ноутбук, который всегда со мной. На нём я запускал вариант26B MoEчерезllama.cppвQ4_K_M, потому что это был максимум, который ещё реально помещался в память.
- Dell Pro Max GB10с128 ГБ unified memoryнаNVIDIA Blackwell, где я запускал31B DenseчерезOllama v0.20.5.
Обе модели я подключил в Codex CLI как кастомных провайдеров черезconfig.tomlсwire_api = "responses". Потом дал всем одну и ту же задачу по генерации кода и для сравнения прогнал её ещё и на облачной модели.
К концу дня обе локальные конфигурации задачу всё-таки выполнили. Но только после долгих зависаний, сломанных tool calls и одной маковской настройки, которая оказалась куда быстрее, чем заслуживал её конечный результат.
Зачем мне вообще всё это понадобилось
Причин было три.
Во-первых — деньги.Я много гоняю Codex CLI: по несколько сессий в день, иногда сразу параллельно. Счета за API довольно быстро начинают кусаться.
Во-вторых — приватность.Некоторые кодовые базы, с которыми я работаю, вообще-то не должны покидать мой компьютер.
В-третьих — надёжность.Облачные API умеют тормозить, падать, душить лимитами и внезапно менять цены. Локальная модель просто у тебя есть — и всё.
Почему я не сделал это раньше? Потому что локальные модели толком не умели работать с инструментами. А вся ценность Codex CLI именно в этом: модель должна читать файлы, писать код, запускать тесты и применять патчи. Если она не может стабильно выдать что-то вроде:
то как агент она бесполезна.
У предыдущих поколений Gemma результат на бенчмаркеtau2-bench function-callingбыл6,6%. То есть 93 провала из 100. На таком ничего серьёзного не построишь.
УGemma 4 31Bна том же бенчмарке —86,4%. Вот это уже звучит как повод попробовать.
Кстати, об инструментах. Если вам нужен доступ ко всем ключевым моделям — Claude, GPT, Gemini — загляните наBotHub.
Для доступа не требуется VPN, можно использовать российскую карту.
По ссылке вы можете получить 300 000 бесплатных токеновдля первых задач и приступить к работе с нейросетями прямо сейчас!
Что понадобилось, чтобы всё вообще завелось
С первой попытки не заработала ни одна машина.
На Mac я сначала пошёл самым простым путём — черезOllama. И почти сразу всё умерло из-за двух багов.
Первый — баг со стримингом вv0.20.3. Ответы Gemma 4 с tool calls улетали не туда: вместо массиваtool_callsони оказывались в reasoning output.
Второй — зависаниеFlash Attention. На Apple Silicon с Gemma 4 Ollama зависал на любом промпте длиннее примерно500 токенов. А системный промпт Codex CLI сам по себе — это примерно27 000 токенов. То есть в реальности всё выглядело так: запрос приходит, промпт начинает загружаться — и дальше тишина.
В итоге я пересел наllama.cpp, установленный через Homebrew. Рабочая команда сервера у меня получилась такая:
На машине с 24 ГБ памяти тут важен реальнокаждый флаг. Я не претендую на звание эксперта, но времени на подбор вариантов потратил прилично.
- -np 1— ограничивает всё одним слотом, потому что несколько слотов резко раздувают KV cache.
- -ctk q8_0 -ctv q8_0— квантуют KV cache и уменьшают его примерно с940 МБ до 499 МБ.
- --jinja— обязателен для шаблона tool calling у Gemma 4.
- -mс прямым путём до модели лучше, чем-hf, потому что-hfнезаметно тащит ещё1,1 ГБ vision projector, после чего всё падает по памяти.
В конфиге Codex CLI ещё пришлось поставитьweb_search = "disabled", потому что Codex CLI отправляет тип инструментаweb_search_preview, аllama.cppего не понимает.
До всего этого я дошёл самым обычным способом: читал ошибки, рыл issues на GitHub и по одному менял параметры, пока запросы не начали вести себя как надо.
С GB10 я был уверен, что всё взлетит наvLLM, потому что именно его советовал гайд, по которому я ориентировался. Не взлетело.
Проблема была в том, что скомпилированные расширенияvLLM 0.19.0собраны подPyTorch 2.10.0, а единственный CUDA-вариант PyTorch дляaarch64 Blackwell(sm_121) — это2.11.0+cu128. ABI не совпадает. На старте —ImportError.
Я собралllama.cppиз исходников с CUDA. Он нормально собрался и даже хорошо прошёл бенчмарки. Но у Codex CLI в режимеwire_api = "responses"есть типы инструментов, которые не считаются function tools, иllama.cppих отбрасывает.
В итоге рабочим вариантом оказалсяOllama v0.20.5. На моём GB10 баг со стримингом, который ломал Apple Silicon, на NVIDIA просто не воспроизвёлся.
Дальше всё было уже просто:
- ollama pull gemma4:31b
- SSH-туннель, чтобы пробросить порт11434на Mac(потому что режим--ossв Codex CLI смотрит только наlocalhost)
- запуск:codex --oss -m gemma4:31b
Генерация текста и tool calling заработали сразу.
Mac я ковырял почти весь день. GB10 поднялся примерно за час, и большая часть этого часа ушла просто на скачивание модели.
Я дал всем трём конфигурациям одну и ту же задачу через:
Задача была простая и практичная: написать Python-функциюparse_csv_summaryс обработкой ошибок, написать тесты и прогнать их.
Это не был какой-то суперстрогий научный бенчмарк. Просто один нормальный реальный прогон, которого хватает, чтобы увидеть, где что ломается внутри одного и того же Codex CLI workflow.
GPT-5.4 написал код с type hints, нормальной цепочкой исключений, распознаванием булевых значений и аккуратной вспомогательной функцией. Все пять тестов прошлис первой попыткиза65 секунд. После этого мне не пришлось ничего допиливать.
GB10 с 31B Dense
31B Dense на GB10 выдал рабочий код без type hints и без распознавания булевых значений, но с хорошей обработкой ошибок и без мусора в коде. Все пять тестов прошлис первого разапослетрёх tool calls. Общее время —7 минут.
Mac с 26B MoE
26B MoE на Mac оставил в коде мусор. Например, модель сначала написала цикл для вывода типов, потом бросила его как есть, а ниже переписала логику заново, оставив в исходнике комментарий вроде“Actually, let’s simplify”.
Файл с тестами она пыталась записатьпять раз. И каждый раз умудрялась сломаться по-новому:
- fileryptвместоfile_path
- encoding=' 'utf-8'с лишним пробелом
- fileint(file_path)
В итоге получилось10 tool callsна то, что GB10 сделал за3.
Сразу оговорюсь: это не «приговор Gemma 4 на Apple Silicon». Это результат конкретной связки:24 ГБ памяти + Q4_K_M + Codex CLI.
Про скорость — и почему Mac оказался неожиданно быстрым
Я прогналllama-benchна обеих машинах с одинаковыми длинами контекста.
И тут вышел сюрприз:Mac генерировал токены в 5,1 раза быстрее, чем GB10.
Я этого не ожидал, потому что у обеих машин пропускная способность памяти273 ГБ/с LPDDR5X.
Объяснение оказалось в архитектуреMixture of Experts.
Генерация токенов упирается в пропускную способность памяти: чтобы сгенерировать токен, нужно прочитать активные параметры модели из памяти.
- У31B Denseна каждый токен читаются все31,2 млрд параметров.
- У26B MoEактивируются только3,8 млрд параметровна токен — это примерно1,9 ГБприQ4.
- Mac проталкивает1,9 ГБ на токенчерез свои273 ГБ/си получает52 ток/с
- GB10 тащит17,4 ГБ на токенчерез те же273 ГБ/си получает10 ток/с
То есть «труба» одинаковая, но объём груза совершенно разный.
С обработкой промпта у меня тоже было неправильное ожидание. Я думал, что GPU Blackwell в GB10 тут всех размажет. Но нет — Mac держался очень близко:
- 531 ток/су Mac
- 548 ток/су GB10
на контексте8K.
Похоже, sparse-активация MoE помогает не только генерации, но и обработке длинного промпта.
Что в итоге изменило моё мнение
Я заходил в этот тест с мыслью, что всё будет решатьскорость генерации токенов.
Оказалось — не всё.
Mac генерировал токены в5,1 раза быстрее, но закончил задачу всего на30% быстрее:4 мин 42 секпротив6 мин 59 сек.
Почему? Потому что время ушло не на генерацию, а на косяки:
- 10 tool calls вместо 3
- 5 неудачных попыток записать тесты
- мёртвый код, который модель сама не убрала
GB10 был медленнее по токенам, но простоделал меньше ошибок.
Облачная модель показала это ещё жёстче: она была самой быстрой, потратила меньше всего токенов и не потребовала вообще никакой последующей чистки. Пять из пяти — за 65 секунд.
Для такого сценариянадёжность с первой попытки важнее, чем голая скорость токенов.
Но главный вывод всё равно позитивный:локальный запуск уже жизнеспособен. Обе машины смогли выдать рабочий код с проходящими тестами.
И именно здесь разница междуGemma 3иGemma 4действительно важна:
- Gemma 3 —6,6%по tool calling
- Gemma 4 —86,4%
Это переход из категории«сломано»в категорию«работает». А именно он и делает локальное агентное кодирование реально пригодным к жизни.
Что касается Mac, тут важная оговорка —квантизация. Я запускал максимально вмещающийся вариантQ4_K_Mна машине с 24 ГБ памяти. Это не значит, что Gemma 4 везде на Apple Silicon будет вести себя ровно так же. Я пока не повторял тот же тест на более свободной машине Apple Silicon с более качественной квантизацией, но ожидаю, что разница будет заметной.
Мне вполне видится нормальныйгибридный сценарий:
- codex --profile local— для быстрых итераций и приватных задач
- облако по умолчанию — для сложной работы
В Codex CLI профили переключаются одним флагом, так что это вполне удобно.
Если захотите повторить у себя
Пара вещей, которые сэкономят вам время.
На Apple Silicon
Для той нагрузки, что я тестировал,Ollama с Gemma 4 был непригоден. Я бы сразу шёл вllama.cppс--jinja.
Что ещё важно:
- в профиле Codex CLI поставитьweb_search = "disabled"
- использовать-mс прямым путём кGGUF, а не-hf
- ставить контекст32 768, потому что один только системный промпт Codex CLI требует минимум27 000 токенов
- квантуйте KV cache через:-ctk q8_0 -ctv q8_0
На NVIDIA GB10
У меня первым по-настоящему рабочим вариантом оказалсяOllama v0.20.5.
Запускал так:
Если машина у вас удалённая — пробрасывайтепорт 11434через SSH.
Не забудьте про таймаут
Поставьтеstream_idle_timeout_msхотя бы в1,800,000в конфиге провайдера.
Один цикл tool call на Mac у меня занимал1 минуту 39 секунд. С дефолтным таймаутом сессия просто умрёт раньше, чем модель закончит.
И ещё один важный момент
Фиксируйте версиюllama.cpp.
Между сборками уже замечали регресс скорости до3,3 раза, так что ваши бенчмарки могут внезапно уехать буквально за одну ночь.
Условия теста
Бенчмарки прогонялись12 апреля 2026 года.
Использовалось:
- llama.cpp ggml 0.9.11 (build 8680)
- 24 GB M4 Pro MacBook Pro
- модельgemma-4–26B-A4B-it Q4_K_M
- Ollama v0.20.5
- Dell Pro Max GB10(128 GB, NVIDIA Blackwell)
- модельgemma-4–31B-it Q4_K_M
Облачная база для сравнения
- GPT-5.4с высоким reasoning effort
Во всех трёх случаях использовался один и тот же промпт через:
Сырые замеры скорости делались черезllama-bench.