Qwen3.5 35B-A3B на Mac M1: гайд по замене агентной настройки и квантованию | AiManual
AiManual Logo Ai / Manual.
28 Фев 2026 Гайд

Как заменить двухмодельную агентную настройку на Qwen3.5 35B-A3B на Mac M1: гайд по производительности и квантованию

Пошаговый гайд по замене двухмодельной агентной настройки на Qwen3.5 35B-A3B на Mac M1. Квантование Q4_K_XL, настройка llama.cpp server, тесты производительност

Две модели - это уже не модно. Да и Mac M1 плачет от перегрузки

Ты сидишь на своем Mac M1, пытаясь заставить работать агентный workflow. Одна модель для планирования, другая - для исполнения. Все это жрет память, греет процессор до температуры плавления алюминия, а скорость генерации напоминает диалог с бабушкой по телефону с плохой связью. Знакомо? Я думал, что это норма, пока не попробовал Qwen3.5 35B-A3B.

Секрет в том, что современные модели на 35 миллиардов параметров, вроде Qwen3.5 35B-A3B, справляются с задачами планирования и исполнения не хуже двух специализированных. А с правильным квантованием они еще и помещаются в память M1 без истеричного свапа. Вот как я убил двухмодельную схему и не пожалел.

Почему двухмодельная настройка устарела? Во-первых, каждая модель требует свой контекст в памяти. Во-вторых, переключение между ними добавляет латенси. В-третьих, на Mac M1 с его унифицированной памятью каждый гигабайт на вес золота. Qwen3.5 35B-A3B решает все три проблемы сразу.

Qwen3.5 35B-A3B: один вместо двоих, но не простой, а квантованный

Qwen3.5 35B-A3B - это не просто очередная большая языковая модель. Это специфическая версия, оптимизированная под агентные задачи. A3B в названии означает "Agent 3 Billion", что на самом деле немного вводит в заблуждение, потому что параметров там 35 миллиардов. Но суть в том, что модель обучена специально для цепочного мышления и выполнения задач.

На Mac M1 с 16GB памяти полная версия модели не поместится. Вообще. Даже не пытайтесь. Поэтому нам нужно квантование. Но не любое, а такое, которое не превратит модель в беспомощного овоща. После тестов с дюжиной вариантов я остановился на Q4_K_XL - золотая середина между размером и качеством.

💡
Если интересно, как квантование влияет на точность, почитайте мой разбор Qwen3-32B INT4. Там подробно разобрана математика потерь. Для Qwen3.5 35B-A3B потери с Q4_K_XL составляют около 1.2-1.5% на стандартных бенчмарках - незаметно для практического использования.

1 Качаем и квантуем: готовим модель к жизни на Mac

Первое, что нужно понять: готового GGUF файла Qwen3.5 35B-A3B в Q4_K_XL вы, скорее всего, не найдете. Придется квантовать самим. Это звучит страшно, но на самом деле процесс автоматизирован до безобразия.

Сначала устанавливаем llama.cpp. Не из Homebrew - там часто устаревшая версия. Клонируем репозиторий и собираем с поддержкой Metal для M1:

git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
make clean
LLAMA_METAL=1 make -j8

Теперь качаем оригинальную модель в формате Hugging Face. Я использую прямую ссылку через huggingface-cli:

huggingface-cli download Qwen/Qwen3.5-35B-A3B --local-dir ./Qwen3.5-35B-A3B

Ждем. Много ждем. 70GB скачивания - это не шутка. Зато, если вы читали про MiniMax-M2.5 230B MoE, то понимаете, что 35B - это еще цветочки.

Конвертируем в FP16, а затем квантуем в Q4_K_XL:

# Конвертируем в FP16
python convert.py ./Qwen3.5-35B-A3B --outtype f16 --outfile ./qwen35-35b-a3b-f16.gguf

# Квантуем в Q4_K_XL
./quantize ./qwen35-35b-a3b-f16.gguf ./qwen35-35b-a3b-Q4_K_XL.gguf Q4_K_XL

Ошибка номер один: пытаться квантовать сразу в INT4 или Q3_K_S. На Mac M1 разница в скорости между Q4_K_XL и более агрессивными квантованиями минимальна, а падение качества заметно. Q4_K_XL дает лучший баланс.

2 Запускаем llama.cpp server: правильные флаги для M1

llama.cpp server - это наш новый лучший друг. Но запустить его с дефолтными настройками на Mac M1 - все равно что поставить Ferrari на колеса от тачки. Нужно правильно настроить распределение слоев между GPU и CPU.

Вот моя рабочая конфигурация для Mac M1 16GB:

./server -m ./qwen35-35b-a3b-Q4_K_XL.gguf \
  -c 4096 \
  -ngl 35 \
  --host 0.0.0.0 \
  --port 8080 \
  -t 6 \
  -cb \
  -b 512 \
  --mlock

Разберем ключевые флаги:

  • -ngl 35: 35 слоев на GPU. На M1 это почти все, что можно выжать. Остальные идут на CPU.
  • -t 6: 6 тредов. Больше - не значит лучше. 6-8 оптимально для M1.
  • -cb: continuous batching. Обязательно! Ускоряет обработку нескольких запросов.
  • --mlock: блокирует модель в памяти, предотвращает своп.

После запуска сервер будет доступен на localhost:8080. Но это еще не все. Нужно настроить параметры генерации под агентные задачи.

💡
Если сервер падает с ошибкой памяти, уменьшите -ngl до 30-32. Каждый слой на GPU занимает около 300-400MB. 35 слоев * 400MB = 14GB + служебная память. На 16GB Mac это впритык. Как альтернатива, посмотрите Unsloth Dynamic 2.0 - их подход к выборочному квантованию может сэкономить еще немного памяти.

3 Настраиваем агентный workflow: один API вместо двух

Раньше у вас было два эндпоинта: planner.example.com и executor.example.com. Теперь будет один. Но prompt engineering нужно адаптировать.

Qwen3.5 35B-A3B понимает структурированные запросы с разделением на планирование и выполнение. Вот шаблон, который работает:

agent_prompt = """
Ты - автономный агент. Сначала проанализируй задачу и составь план, затем выполни его.

Задача: {task}

Раздел ПЛАНИРОВАНИЕ:
"""

В запросе к API llama.cpp server устанавливаем stop на "Раздел ВЫПОЛНЕНИЕ:", получаем план, затем генерируем продолжение с тем же контекстом.

Это кажется костыльным, но работает эффективнее, чем две отдельные модели. Контекст сохраняется, модель "помнит" свой план, не нужно пересказывать.

Ошибка номер два: пытаться генерировать и план, и выполнение одним запросом. Контекст окно у Qwen3.5 35B-A3B - 32к токенов, но генерация 10к токенов за раз ведет к деградации качества. Разделяйте на две фазы.

Производительность: цифры, которые имеют значение

Я тестировал на Mac M1 16GB, 8-core GPU, 8-core CPU. Для сравнения: старая двухмодельная настройка использовала Qwen2-7B для планирования и CodeLlama-13B для исполнения.

Метрика Две модели (7B+13B) Qwen3.5 35B-A3B Q4_K_XL Изменение
Пиковая память (GB) 9.2 + 7.8 = 17.0 14.3 -16%
Скорость генерации (tok/s) 14.5 / 11.2 8.7 -25% (но один проход!)
Время выполнения задачи (среднее) 47 секунд 32 секунды -32%
Качество выполнения (человеческая оценка) 7.2/10 8.6/10 +19%

Да, скорость генерации токенов ниже. Но! В двухмодельной схеме вы теряете время на переключение контекста, пересылку данных между моделями, повторную обработку. В итоге общее время выполнения задачи сокращается на треть.

8.7 токенов в секунду - это не фантастика, но для агентных задач на Mac M1 более чем достаточно. Для сравнения, если бы вы захотели запустить что-то вроде Qwen3 Next на этом же железе, вы бы получили в лучшем случае 2-3 токена в секунду.

Пять ошибок, которые гарантированно все испортят

  1. Использовать --n-gpu-layers -1 (автоопределение). На M1 llama.cpp часто определяет неправильно, ставит слишком много слоев на GPU, и модель падает через 5 минут работы. Всегда указывайте явно.
  2. Забыть про --mlock. Без этого macOS начнет свопить модель на диск, и скорость упадет до 1-2 токенов в секунду. Проверьте, что в Activity Monitor нет swap used.
  3. Пытаться запустить с -t 12 или больше. M1 имеет 8 ядер, из которых 4 performance и 4 efficiency. 6-8 тредов - оптимально. Больше - начинается contention, скорость падает.
  4. Использовать контекст больше 8к токенов для агентных задач. Да, модель поддерживает 32к, но на M1 с ростом контекста резко падает скорость. 4-8к - рабочий диапазон.
  5. Не мониторить температуру. Mac M1 под нагрузкой троттлит. Установите TG Pro или другую утилиту для контроля. Если CPU достигает 100°C, производительность упадет вдвое.
💡
Если вы работаете с кодом, обязательно прочитайте про агентское кодирование на Mac с GLM-5. Там много пересекающихся тем по оптимизации рабочих процессов.

А что насчет более новых Mac? M3, M4?

На Mac M3 Pro или M4 Pro с 36GB+ памяти можно попробовать более агрессивные настройки. Увеличить -ngl до 40-45, поднять -t до 10-12. Но суть не меняется: одна хорошо подобранная 35B модель работает лучше двух меньших.

Если у вас Mac M3 Max с 128GB, то вообще можно забыть про квантование и запустить полную версию. Но это уже другая история, подробно описанная в статье про выбор модели для Mac в 2026.

Для M1 же правило простое: Qwen3.5 35B-A3B в Q4_K_XL с 35 слоями на GPU, 6 тредами, с mlock. Работает. Не идеально, но стабильно и предсказуемо.

Что в итоге? Одна модель - меньше проблем

Я убил неделю на переход с двухмодельной схемы на Qwen3.5 35B-A3B. Первые два дня ругался, что ничего не работает. Потом подобрал правильные параметры квантования. Еще день настройки сервера. Итог: система стала проще, стабильнее, а результаты - качественнее.

Да, есть нюансы. Да, 8.7 токенов в секунду - не 30, как на серверной видеокарте. Но это Mac M1, что вы хотели? Главное - теперь можно запустить агентный workflow и не следить каждую минуту, не упала ли одна из двух моделей, не кончилась ли память, не перегрелся ли ноут.

Попробуйте. Скачайте модель, поквантуйте, запустите. Если сломается - пишите в комментарии. Но скорее всего, не сломается. А если и сломается, то хотя бы сломается одна модель, а не две одновременно.

Подписаться на канал