Пусни AI код агенти локално на своя Mac: Практично ръководство
Защо да мина на локална AI система?
Всеки programmer е изпадал в тази ситуация. Намираш се в разгара на debugging сесия, мислите ти се редуват с код, и изведнъж — интернетът спира. Твоят cloud-базиран AI асистент веднага става безполезен, а ти си оставаш с код, който чака помощ.
Точно това ми се случи и ме подтикна най-накрая да проуча как се работи с пълен AI coding agent локално. Това, което открих, ме изненада: с правилната конфигурация можеш да постигнеш много добра производителност на Apple Silicon, дори по-добра от специализирани Mac-оптимизирани решения.
Конфигурацията, която работи
След много тестване и benchmarking, ето какво даде най-добри резултати на моя M1 Max с 64GB unified memory:
Основен стек:
- llama.cpp компилиран с Metal acceleration
- Gemma 4 26B-A4B в GGUF формат (квантизиран до Q4)
- Multi-Token Prediction (MTP) draft модел за спекулативно декодиране
- Gemma 4 multimodal projector за работа със скрийншоти
- Pi като terminal-базиран coding agent
Това не е най-мощната конфигурация, която можеш да сглобиш теоретично, но е перфектният баланс между възможности и скорост. Тук става въпрос за tokens per second, не за минути на отговор.
Цифрите, които имат значение
Тествах с една и съща prompt във всички конфигурации:
"Напиши компактна Python функция, която парсва unified diff и връща пътищата на променените файлове. След това обясни два edge cases."
Всяко генериране беше около 128 токена, което дава справедливо сравнение на скоростта.
Базова производителност:
Пуснах Gemma 4 директно през llama.cpp с Metal — получих 58.2 tokens per second. Работи, но честно казано? Усеща се бавно при реални coding сесии, където правиш множество tool calls и чакаш отговори.
Разликата с MTP:
Тук нещата стават интересни. Multi-Token Prediction позволява на модела да "предвижда" няколко токена напред, приемайки правилните предвиждания и връщайки се назад при грешни. С Q8 MTP draft модела активиран, производителността скочи до 72.2 tokens per second — подобрение от 24% без никаква промяна в основния модел.
Обработката на prompt-а остана същата (около 297-299 tokens/second), но скоростта на генериране е ключова за agent workflows. Не подаваш нови prompt-ове непрекъснато — чакаш модела да генерира отговори, да взема решения и да изпълнява инструменти.
Тествах draft токени от 1 до 6, и на моя M1 Max оптимумът е 3 draft токена. Стойности над 4 реално започнаха да забавят нещата — логично е, защото повече спекулации означават повече загубена работа при грешни предвиждания.
llama.cpp срещу MLX: Изненадващият победител
Това ме изненада най-много: очаквах MLX (native ML framework на Apple) да доминира, тъй като е оптимизиран специално за Apple Silicon. Реалността се оказа различна.
| Runtime | Generation tok/s | |---------|------------------| | llama.cpp Metal + MTP | 72.2 | | llama.cpp Metal | 58.2 | | MLX-LM (Unsloth 4-bit) | 45.8 | | MLX-LM (standard 4-bit) | 43.9 | | MLX-LM (OptiQ 4-bit) | 38.1 |
Llama.cpp с MTP беше приблизително 58% по-бърз от най-добрата MLX конфигурация. Годините оптимизация в llama.cpp явно са дали резултат — работи отлично на macOS, въпреки че е крос-платформен.
Добавяне на Vision възможности
За пълен coding agent опит искаш да пращаш скрийншоти. Може би искаш agent-ът да види какво е построил, или да прегледа UI промяна, която току-що направи.
Уловката? Само Gemma 4 12B е natively multimodal. 26B моделът, който ползваме, се нуждае от външен multimodal projector.
Когато добавих --mmproj проектора към llama.cpp, той правилно обяви multimodal възможностите си към Pi, и image tool outputs започнаха да текат коректно. По-важното — това не добави измеримо забавяне. Скоростта на генериране си остана 72.2 tokens per second.
Реалният опит
С тази конфигурация ползваш около 17GB моделни файлове (16GB за основния модел, плюс MTP head и projector). За човек с 64GB unified memory това е напълно осъществимо.
Pi като agent дава чист terminal interface, който се свързва към OpenAI-съвместимия API, който llama.cpp server mode експортва. Това означава, че можеш да го ползваш с всякакви инструменти, поддържащи OpenAI API формат — гъвкавост без lock-in.
Най-голямата полза? Когато интернетът ти спре — а ще спре, в най-неподходящия момент — продължаваш да кодиш. Agent-ът може да е малко по-бавен от cloud алтернативите, но е достатъчно responsive, за да поддържа работния ти поток.
Откъде да започнеш
Трябва да компилираш llama.cpp с активиран Metal support. Проектът има добра документация за macOS build-ове, и след като го компилираш, server mode-ът ти дава този OpenAI-съвместим endpoint.
За моделите, Unsloth GGUF квантизациите в Hugging Face са добре оптимизирани. Ще искаш Q4_K_XL квантизация за основния модел и съответстващия Q8 MTP draft модел.
Настрой стойността на --spec-draft-n-max — започни от 3 и тествай от 1 до 6, за да намериш оптимума за твоя hardware. Различните Apple Silicon конфигурации може да имат различни sweet spots.
Струва ли си?
Ако кодиш редовно с AI асистенти и имаш подходящия hardware (минимум 16GB, препоръчително 32GB+), определено да. Независимостта от интернет свързаността сама по себе си си струва усилията, а с MTP, което вкарва скоростта на генериране в наистина използваема територия, опитът е изненадващо polished.
Няма да съпоставиш GPT-4 класа интелект с тези open модели, но за code completion, refactoring, debugging assistance и обичайни coding agent задачи? Е по-способен, отколкото повечето хора очакват, и е твой — работи локално, частно, без latency spikes или service outages.
Инструментите са узрели значително. Ако си пробвал локални модели преди и си бил разочарован от скоростта, дай шанс на тази конфигурация. MTP променя нещата доста съществено.