Почему ваш агент тупит на Mac — три кита стабильности
Запуск AI-агента для диагностики инфраструктуры на Mac с 16 гигабайтами памяти — это игра в русскую рулетку. Либо модель вылетает с OOM на середине лога, либо галлюцинирует так, что вы лезете проверять системные журналы вручную. Я перебрал с десяток конфигураций на M1 и M3, и вот что понял: стабильность держится на трёх вещах — правильный выбор модели, адекватное квантование и настройки рантайма, которые не дают агенту сожрать всю память.
В этой статье разберу конкретный пример: сравниваю Qwen3.5 9B (плотная модель) и Qwen3.5 35B-A3B (MoE). Обе запускал в LMStudio на MacBook Pro M1 16GB. Покажу, почему 9B с Q4_K_M работает как часы, а 35B валится на 4096 токенах. И главное — как это лечится.
9B и 35B — не просто цифры, а архитектурная пропасть
9B — это плотная (dense) модель: все 9 миллиардов параметров активны на каждом шаге. 35B-A3B — Mixture of Experts: из 35B только 3B активируются за токен. Звучит как экономия, но на практике MoE жрёт память пропорционально полному числу параметров, потому что в RAM нужно держать все эксперты. Плюс overhead на роутинг.
Для диагностики инфраструктуры это критично: агент парсит логи, запускает команды, анализирует метрики. Контекст легко улетает за 8-16K токенов. dense модель с тем же квантованием предсказуемее укладывается в лимиты. MoE выигрывает по скорости инференса, но проигрывает по потреблению памяти при длинных сессиях.
Кстати, про эволюцию MoE-архитектур я писал в статье Qwen3 Next — MoE-модель нового поколения: требования к железу и перспективы для Mac. Там производители обещают уменьшить RAM footprint, но пока 35B-A3B на 16GB — это боль.
Эксперимент на M1 16GB: что падает первым
Взял две модели в квантовании Q4_K_M (самый популярный баланс качества и размера):
- Qwen3.5-9B-Instruct (dense) — ~5.5 GB на диске, ~6 GB в RAM при контексте 8K.
- Qwen3.5-35B-A3B-Instruct (MoE) — ~20 GB на диске, ~22 GB в RAM при том же контексте.
Запускал через LMStudio с настройками по умолчанию (GPU layers = max, context length = 8192). Сценарий: агент парсит вывод top, df -h и journalctl за последний час — суммарно около 2000 токенов контекста.
Результаты:
- 9B Q4_K_M: стабильно отработал 10 запусков. Максимальное потребление RAM — 7.2 GB. Скорость — 15-20 токенов/сек.
- 35B Q4_K_M: упал на 4-м запуске при контексте 4096 токенов. В swap ушло 12 GB, Mac начал «тормозить вентиляторами». Ещё два запуска — kernel_task съел CPU, пришлось убивать процесс.
Вывод: для 16GB памяти 35B-A3B в Q4_K_M непригоден для агентской работы с контекстом больше 2K токенов. Придётся резать квантование до Q3_K_S или Q2_K, но тогда падает качество — а галлюцинации при диагностике инфраструктуры стоят дороже, чем при генерации стихов.
Важно: Если вы используете двухмодельную связку (маленькая модель для быстрого анализа, большая — для сложных выводов), прочитайте мой гайд «Как заменить двухмодельную агентную настройку на Qwen3.5 35B-A3B на Mac M1: гайд по производительности и квантованию». Там я как раз описываю, как 35B может работать в паре с 9B, но для стабильности пришлось пожертвовать контекстом.
Квантование: выбираем между «не влезает» и «забывает логику»
Для диагностики инфраструктуры нужно, чтобы модель не теряла chain-of-thought. Квантование ниже Q4 заметно режет точность рассуждений. Я протестировал три варианта на 9B:
| Квант | Размер на диске | RAM (8K ctx) | Ошибки в диагностике (из 10) |
|---|---|---|---|
| Q4_K_M | 5.2 GB | ~6 GB | 1 |
| Q3_K_S | 4.1 GB | ~5 GB | 3 |
| Q2_K | 3.2 GB | ~4 GB | 6 |
Q4_K_M — единственный приемлемый вариант для диагностики. Q3 уже начинает путать метрики: например, вместо «CPU load average 2.5» мог выдать «2.5 GB RAM used». Q2 — вообще треш, агент терял нить на третьем шаге.
Для 35B-A3B на 16GB единственный способ влезть — Q2_K. Но, как я уже сказал, качество падает катастрофически. Если вы готовы мириться с этим ради скорости MoE, советую почитать статью «Готовый агент на Qwen3.5-9B: как развернуть fine-tuned модель для OpenClaw и AgentScope» — там показано, как дообучение на специфических данных поднимает точность даже на низких квантах.
Настройки LMStudio, которые решают всё
Мало выбрать модель и квантование. Если не настроить LMStudio, агент всё равно упадёт. Вот два параметра, которые я менял:
- GPU Layers: для 9B на M1 выставляю 32 из 35. Остальные 3 оставляю на CPU — это снижает пиковое потребление RAM на 10-15% без потери скорости.
- Batch Size: по умолчанию 512, но на малом контексте ставлю 128. Меньше пауз, стабильнее загрузка GPU.
- Context Length: не ставлю больше 8192 для 9B на 16GB. Для диагностики этого хватает с запасом.
- Flash Attention: включаю обязательно — даёт +20% к скорости и снижает RAM на 5-7%.
Если вы используете LMStudio как сервер (режим API), не забудьте выставить --no-mmap — это предотвращает вытеснение модели в swap при долгих сессиях. Я об этом узнал, когда Mac начал «заикаться» на 5-м запросе.
Совет: Архитектуру постоянного агента с гибридной памятью и экономией токенов я описал в статье «Архитектура перманентного локального агента: гибридная память, экономия токенов и лестница моделей на примере Mac mini». Там как раз показано, как с помощью лестницы моделей выжать максимум из ограниченного железа.
Агентский сценарий без галлюцинаций: экстракт из моего блога
Вот упрощённый промпт, который я использую для диагностики. Он заставляет модель сначала извлекать факты, потом делать вывод — это снижает галлюцинации на 40%.
system_prompt = """Ты — инженер по диагностике инфраструктуры.
Проанализируй следующие данные и ответь строго по плану:
1. Перечисли ключевые метрики и их значения.
2. Сравни с пороговыми значениями (CPU > 80%, RAM > 90%, диск > 85%).
3. Если есть отклонения, укажи их и предложи команду для исправления.
4. Если отклонений нет, ответь: «Система в норме».
НЕ добавляй информацию, которой нет в данных.
"""
user_input = f"Логи: {logs}"
Такой подход + Qwen3.5-9B Q4_K_M даёт стабильность 9 из 10 запусков. Единственная ошибка — иногда он путал «среднюю загрузку» и «пиковую», но это лечится уточнением в промпте.
Если вы хотите браузерный агент без облаков, гляньте статью «On-device браузерный агент на Qwen: локальный Chrome без облаков» — там похожие принципы, но для веб-автоматизации.
Когда выбирать 35B, а когда 9B — мои правила
После десятков экспериментов я выработал такие критерии:
- 9B выбираю если: Mac с 16GB RAM, задача — реальный мониторинг продакшена, нужна стабильность 24/7.
- 35B выбираю если: Mac с 32GB+ (M2/M3 Pro), задача — разовая глубокая диагностика с контекстом до 4K, и можно пожертвовать надёжностью ради более качественного анализа.
- Гибрид: 9B как основной + 35B для верификации сложных кейсов. Именно такую архитектуру я описал в «Claude Code на Mac M3: как заменить облако локальными моделями и не сойти с ума».
Ошибки, которые я совершил (и вы тоже совершите)
- Ставил context length 32K на 9B. В итоге Mac уходил в своп, агент отвечал по 2 минуты. Реальность: 8K хватает для логов за час, а для большего — лучше чанковать.
- Пытался запустить 35B в Q4_K_M на 16GB. Результат — kernel panic. Не повторяйте.
- Не ставил чекпоинты в агенте. Если модель упала на середине анализа — терял весь контекст. Теперь сохраняю историю после каждого шага.
- Игнорировал temperature. При 0.8 модель начинала фантазировать. Сейчас ставлю 0.2 для диагностики — и галлюцинации почти исчезли.
Часто задаваемые вопросы
Можно ли запустить Qwen3.5-35B на 16GB?
Можно, но только в Q2_K и с контекстом до 2048 токенов. Для диагностики этого мало. Лучше взять 9B Q4_K_M — результат будет стабильнее.
Какой квант выбрать для диагностики инфраструктуры?
Q4_K_M — минимальный порог. Всё что ниже — начинает терять точность, что для диагностики критично.
Какой context length оптимален?
Для 9B на 16GB — 8192. Этого хватает на ~10-15 минут логов реальной системы. Больше — режьте чанками.
Нужен ли fine-tuning?
Если вы используете специфические метрики (например, Prometheus + Nginx), да. Прочитайте статью «Apple Foundation Models на Mac: Полный гайд по afm для локального ИИ» — там есть пример дообучения под Mac. Или воспользуйтесь готовым агентом на Qwen3.5-9B из этой статьи.
Что делать, если агент упал с OOM?
Уменьшите контекст до 4096, понизьте GPU layers на 5-10%, включите Flash Attention. Если не помогло — модель слишком тяжелая, переходите на 9B.
Мой вам совет: не гонитесь за размером
Стабильный агент для диагностики инфраструктуры — это не про самую умную модель, а про предсказуемость. Qwen3.5-9B в Q4_K_M на M1 16GB даёт 90% точности и 100% аптайма. 35B-A3B — это рулетка. Если у вас 32GB+ — берите 35B, но держите под рукой 9B как fallback.
Через год, когда MoE-архитектуры пооптимизируют (читайте Qwen3 Next), ситуация изменится. Но пока — выбирайте плотную модель, не жадничайте с квантованием и настраивайте LMStudio под себя. И ваш агент будет работать, а не падать.