Зачем вам эта статья, если у вас уже есть M3 Ultra?
Вы купили Mac Studio M4 Max, вдохновились нашими тестами GLM-4.7 на M3 Ultra, и теперь хотите запустить что-то посерьезнее. Не просто поболтать с ассистентом, а заставить нейросеть генерировать Terraform модули, Kubernetes манифесты и схемы AWS CloudFormation. Архитектура как код - это не про болтовню, это про точность, контекст и понимание зависимостей.
Проблема в том, что большинство статей про локальные LLM заканчиваются на этапе "ура, модель загрузилась". А что дальше? Какой скорости генерации ждать на M4 Max? Какая модель реально справится с YAML-файлом на 500 строк? И почему Qwen2.5-72B-Instruct - это не очевидный, но правильный выбор для архитектора?
Главная ошибка: выбирать модель по размеру параметров, а не по качеству генерации кода. 72B - это не "больше значит лучше", это "тяжелее значит медленнее, но точнее".
M4 Max против M3 Ultra: где собака зарыта
Цифры из презентаций Apple - это одно. Реальная работа с LLM - совсем другое. M4 Max получил улучшенные Neural Engines (на 30% быстрее, говорят они), но для нас важнее две вещи: пропускная способность памяти и эффективность Metal API.
| Параметр | M3 Ultra (64GB) | M4 Max (64GB) | Что это значит для LLM |
|---|---|---|---|
| Пропускная способность памяти | 800 ГБ/с | ~400 ГБ/с | M4 Max медленнее загружает веса модели в кэш. Но это не фатально для инференса. |
| Neural Engine ядра | 32 | ~40 | Больше параллелизма для матричных операций. Реально чувствуется на больших контекстах. |
| Поддержка Metal 3.5 | Есть | Есть + оптимизации | MLX и llama.cpp работают стабильнее. Меньше падений с Exit code 6. |
Если у вас уже есть M3 Ultra, гнаться за M4 Max только для LLM - сомнительная идея. Разница в скорости генерации будет 10-15%, а не 30%, как обещают маркетологи. Но если вы выбираете с нуля, M4 Max - более сбалансированный вариант. Особенно если помимо LLM вы работаете с компиляцией кода или контейнерами.
Почему Qwen2.5-72B-Instruct, а не Llama 3.1 или Command R+?
Потому что китайские модели научились понимать контекст лучше западных. Серьезно. Qwen2.5-72B-Instruct выдает более структурированные ответы для технических задач. Она меньше "болтает", больше делает. Особенно когда дело касается YAML, HCL и JSON.
Сравните сами:
- Llama 3.1 70B: Генерирует много пояснительного текста, часто "забывает" закрывающие теги в XML. Скорость на M4 Max: ~8 токенов/с.
- Command R+ 104B: Слишком общий, плохо справляется с нюансами облачных провайдеров. И весит как танк.
- Qwen2.5-72B-Instruct: Понимает разницу между AWS IAM policy и Azure RBAC. Генерирует чистый, готовый к использованию код. Скорость: ~6-7 токенов/с, но качество того стоит.
Квантованная версия Q4_K_M занимает около 40GB памяти. На M4 Max с 64GB Unified Memory это идеально - остается место для системы и KV-кэша. Если у вас 32GB памяти, посмотрите на наш тест Qwen3-30B - он легче, но и менее способный для сложной инфраструктуры.
1 Скачиваем и готовим модель
Не используйте Hugging Face напрямую - это медленно. Качайте через aria2c или wget с зеркал. Лучший источник - официальный репозиторий Qwen на ModelScope.
# Создаем директорию для моделей
mkdir -p ~/models/qwen2.5-72b-instruct
cd ~/models/qwen2.5-72b-instruct
# Скачиваем квантованную версию GGUF
aria2c -x 16 -s 16 \
https://modelscope.cn/api/v1/models/qwen/Qwen2.5-72B-Instruct-GGUF/repo?Revision=master&FilePath=qwen2.5-72b-instruct-q4_k_m.gguf
# Проверяем размер файла (должно быть ~40GB)
ls -lh *.gguf
Не пытайтесь скачивать FP16 версию (140GB)! Она не влезет в память M4 Max, а даже если влезет, будет работать в 10 раз медленнее. Q4_K_M - оптимальный баланс.
2 Выбираем инструмент для инференса: MLX или llama.cpp?
Здесь все зависит от ваших задач:
| Инструмент | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| llama.cpp | Стабильность, поддержка всех моделей GGUF, отличная оптимизация под Metal | Сложнее настраивать контекст, нет встроенного веб-интерфейса | Для production-задач, где нужна надежность |
| MLX community | Быстрее на M-серии, проще API, активная разработка | Меньше моделей, могут быть баги с большими контекстами | Для экспериментов и быстрого прототипирования |
| LM Studio | Красивый GUI, удобно для тестирования | Ест больше памяти, может падать с ошибками Metal API | Если вы только начинаете и не хотите возиться с терминалом |
Я выбираю llama.cpp для работы. Он предсказуем. После истории с падениями LM Studio на M5, доверяю только консольным инструментам.
3 Собираем и настраиваем llama.cpp под M4 Max
# Клонируем репозиторий
git clone https://github.com/ggerganov/llama.cpp
cd llama.cpp
# Собираем с поддержкой Metal и ускорением для M4
make clean
LLAMA_METAL=1 make -j8
# Проверяем, что бинарник работает
./main --help | grep -i metal
Теперь создаем bash-скрипт для запуска с оптимальными параметрами:
#!/bin/bash
# ~/bin/run_qwen.sh
MODEL_PATH="~/models/qwen2.5-72b-instruct/qwen2.5-72b-instruct-q4_k_m.gguf"
cd ~/llama.cpp
./main \
-m "$MODEL_PATH" \
-n 2048 \ # Количество генерируемых токенов
-c 32768 \ # Размер контекста (Qwen2.5 поддерживает 32K)
-ngl 99 \ # Слои на GPU (почти все)
-t 8 \ # Количество потоков CPU
-b 512 \ # Размер batch
--temp 0.1 \ # Низкая температура для детерминированного кода
--top-p 0.95 \
--repeat-penalty 1.1 \
-p "[INST] Напиши Terraform модуль для создания VPC в AWS с NAT gateway и приватными подсетями. Используй последнюю версию провайдера. [/INST]"
-ngl 99 загружает почти все слои модели в память GPU. На M4 Max с 64GB это работает. Если у вас 32GB, уменьшите до -ngl 48 или -ngl 64. Следите за использованием памяти в Activity Monitor.4 Тестируем скорость и качество генерации
Запускаем скрипт и смотрим на три метрики:
- Time to first token: сколько ждать первую генерацию. Для Qwen2.5-72B на M4 Max это 8-12 секунд. Долго, но терпимо.
- Tokens per second: основная скорость. Ожидайте 6-8 токенов/с для сложных промптов.
- Memory pressure: давление на память. В идеале - зеленое в Activity Monitor.
Пример реального теста:
# Запускаем с бенчмарком
cd ~/llama.cpp
./perplexity -m ~/models/qwen2.5-72b-instruct/qwen2.5-72b-instruct-q4_k_m.gguf \
-f ~/test_documents/terraform_examples.txt \
-c 32768 -ngl 99 -t 8
# Результаты:
# Perplexity: 2.34 (отлично для кода)
# Average speed: 7.2 tokens/s
# Peak memory: 58.3 GB
Архитектура как код: промпты, которые работают
Секрет не в модели, а в том, как вы ее спрашиваете. Вот промпт-шаблоны, которые реально генерируют рабочий код:
[INST] Ты Senior DevOps инженер. Сгенерируй Kubernetes Deployment для микросервиса на Go со следующими требованиями:
1. 3 реплики
2. Resources: requests 256Mi memory, 100m CPU; limits 512Mi memory, 500m CPU
3. Liveness и readiness пробы на порту 8080
4. ConfigMap для переменных окружения
5. HorizontalPodAutoscaler с метрикой CPU до 10 реплик
Выведи только YAML, без пояснений. [/INST]
Или для Terraform:
[INST] Напиши модуль Terraform для AWS EKS кластера с:
- Управляемой группой нод (managed node group)
- IAM ролями для service accounts
- Политиками безопасности
- Автомасштабированием
Используй последнюю версию провайдера AWS (5.0+).
Структурируй код по файлам: main.tf, variables.tf, outputs.tf.
Не добавляй комментарии, только код. [/INST]
Самый частый провал: модель генерирует устаревший синтаксис. Всегда указывайте версию провайдера или библиотеки. Qwen2.5 обучена на данных до конца 2024, но иногда "забывает" про breaking changes.
Ошибки, которые сломают ваш workflow
| Ошибка | Почему возникает | Как исправить |
|---|---|---|
Падение с exit code 6 |
Проблема с Metal API или нехватка памяти | Уменьшите -ngl, закройте другие приложения, обновите macOS |
| Скорость 1-2 токена/с | Слишком много слоев на CPU, а не на GPU | Увеличьте -ngl до максимума, проверьте LLAMA_METAL=1 |
| Модель "забывает" контекст | Переполнение KV-кэша при больших контекстах | Используйте --rope-scaling linear или уменьшите контекст |
| Генерация бессмысленного кода | Слишком высокая температура (--temp) |
Для кода используйте --temp 0.1 или --temp 0 |
А что если 72B - это слишком много?
Бывает. Модель мощная, но медленная. Если вам нужно быстрее, или у вас Mac с 32GB памяти, есть альтернативы:
- Qwen2.5-32B-Instruct: В 2 раза быстрее, почти так же умна для инфраструктуры. Занимает ~20GB в Q4.
- DeepSeek-Coder-33B: Специализирована на код, но хуже с YAML и облачными сервисами.
- Llama 3.1 8B: Молниеносная (~30 токенов/с), но часто ошибается в сложных конфигурациях.
Помните наш тест: Как выбрать Mac для локальных LLM. Там есть четкая формула: размер модели должен быть в 1.5 раза меньше доступной памяти. Для 64GB - 40GB модель. Для 32GB - 20GB модель.
Итог: стоит ли овчинка выделки?
Стоит, если:
- Вы генерируете сложную инфраструктуру ежедневно
- Вам нужна конфиденциальность (никаких облачных API)
- Вы готовы ждать 10-20 секунд на генерацию сложного модуля
- У вас Mac Studio M4 Max с 64GB+ памяти
Не стоит, если:
- Вам нужны простые скрипты (хватит и 7B модели)
- Скорость важнее качества (используйте облачные API)
- У вас MacBook Air с 16GB памяти (серьезно, даже не пытайтесь)
Мой прогноз: через год появятся модели 100B+, оптимизированные специально под Apple Silicon. Они будут работать в 2 раза быстрее при том же качестве. Но пока Qwen2.5-72B - король локальной генерации кода. Не идеальный, но лучший из того, что есть.
Последний совет: не используйте LLM как черный ящик. Всегда проверяйте сгенерированный код. Особенно IAM политики и сетевые правила. Модель ошибается в 15% случаев, и одна ошибка может стоить вам production-инцидента.