惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
W
WeLiveSecurity
O
OpenAI News
N
News and Events Feed by Topic
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Webroot Blog
Webroot Blog
Google Online Security Blog
Google Online Security Blog
云风的 BLOG
云风的 BLOG
N
News | PayPal Newsroom
H
Hacker News: Front Page
博客园_首页
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
The Last Watchdog
The Last Watchdog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
H
Heimdal Security Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Schneier on Security
宝玉的分享
宝玉的分享
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Y
Y Combinator Blog
Cyberwarzone
Cyberwarzone
Microsoft Security Blog
Microsoft Security Blog
C
CXSECURITY Database RSS Feed - CXSecurity.com
GbyAI
GbyAI
Cloudbric
Cloudbric
TaoSecurity Blog
TaoSecurity Blog
人人都是产品经理
人人都是产品经理
P
Palo Alto Networks Blog
M
MIT News - Artificial intelligence
G
GRAHAM CLULEY
C
Check Point Blog
Apple Machine Learning Research
Apple Machine Learning Research
Last Week in AI
Last Week in AI
T
Troy Hunt's Blog
L
Lohrmann on Cybersecurity
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
量子位
博客园 - 聂微东
S
Securelist
博客园 - 三生石上(FineUI控件)
F
Full Disclosure
G
Google Developers Blog
L
LINUX DO - 热门话题
P
Proofpoint News Feed
AI
AI
PCI Perspectives
PCI Perspectives

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Я запустил Gemma 4 как локальную модель в Codex CLI
Мыслительный автор · 2026-04-17 · via Все публикации подряд на Хабре

Простой

8 мин

14K

Скетчноут, сравнивающий локальный инференс Gemma 4 на MacBook Pro с 24 ГБ памяти и Dell GB10: для агентной работы с кодом качество модели важнее «сырой» скорости генерации токенов.

Скетчноут, сравнивающий локальный инференс Gemma 4 на MacBook Pro с 24 ГБ памяти и Dell GB10: для агентной работы с кодом качество модели важнее «сырой» скорости генерации токенов.

Я хотел понять, может ли 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 именно в этом: модель должна читать файлы, писать код, запускать тесты и применять патчи. Если она не может стабильно выдать что-то вроде:

{"tool": "Read", "args": {"file": "package.json"}}

то как агент она бесполезна.

У предыдущих поколений Gemma результат на бенчмарке tau2-bench function-calling был 6,6%. То есть 93 провала из 100. На таком ничего серьёзного не построишь.

У Gemma 4 31B на том же бенчмарке — 86,4%. Вот это уже звучит как повод попробовать.


Кстати, об инструментах. Если вам нужен доступ ко всем ключевым моделям — Claude, GPT, Gemini — загляните на BotHub.

Для доступа не требуется VPN, можно использовать российскую карту.

По ссылке вы можете получить 300 000 бесплатных токенов  для первых задач и приступить к работе с нейросетями прямо сейчас!


Что понадобилось, чтобы всё вообще завелось

С первой попытки не заработала ни одна машина.

Mac

На 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. Рабочая команда сервера у меня получилась такая:

llama-server \
  -m /path/to/gemma-4-26B-A4B-it-Q4_K_M.gguf \
  --port 1234 -ngl 99 -c 32768 -np 1 --jinja \
  -ctk q8_0 -ctv q8_0

На машине с 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

С 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 поднялся примерно за час, и большая часть этого часа ушла просто на скачивание модели.


Сам тест

Я дал всем трём конфигурациям одну и ту же задачу через:

codex exec --full-auto

Задача была простая и практичная: написать Python-функцию parse_csv_summary с обработкой ошибок, написать тесты и прогнать их.

Это не был какой-то суперстрогий научный бенчмарк. Просто один нормальный реальный прогон, которого хватает, чтобы увидеть, где что ломается внутри одного и того же Codex CLI workflow.

GPT-5.4

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.

Запускал так:

codex --oss -m gemma4:31b

Если машина у вас удалённая — пробрасывайте порт 11434 через SSH.

Не забудьте про таймаут

Поставьте stream_idle_timeout_ms хотя бы в 1,800,000 в конфиге провайдера.

Один цикл tool call на Mac у меня занимал 1 минуту 39 секунд. С дефолтным таймаутом сессия просто умрёт раньше, чем модель закончит.

И ещё один важный момент

Фиксируйте версию llama.cpp.

Между сборками уже замечали регресс скорости до 3,3 раза, так что ваши бенчмарки могут внезапно уехать буквально за одну ночь.


Условия теста

Бенчмарки прогонялись 12 апреля 2026 года.

Использовалось:

  • Codex CLI v0.120.0

Mac

  • llama.cpp ggml 0.9.11 (build 8680)

  • 24 GB M4 Pro MacBook Pro

  • модель gemma-4–26B-A4B-it Q4_K_M

GB10

  • Ollama v0.20.5

  • Dell Pro Max GB10(128 GB, NVIDIA Blackwell)

  • модель gemma-4–31B-it Q4_K_M

Облачная база для сравнения

  • GPT-5.4 с высоким reasoning effort

Во всех трёх случаях использовался один и тот же промпт через:

codex exec --full-auto

Сырые замеры скорости делались через llama-bench.