Uruchom AI do kodowania na swoim Macu – praktyczny poradnik
Dlaczego Warto Postawić na Lokalne Rozwiązania?
Każdy programista to zna. Jesteś w trakcie intensywnej sesji kodowania, wena twórcza w końcu dopisuje, a tu — pada internet. Chmurowy asystent AI staje się bezużyteczny i zostajesz z kodem, zastanawiając się, co dalej.
Dokładnie to przytrafiło się mnie kilka tygodni temu i to mnie ostatecznie przekonało, żeby w końcu sprawdzić, jak sprawuje się zdolny agent AI do kodowania uruchomiony całkowicie lokalnie. To, co odkryłem, było dla mnie zaskoczeniem: przy odpowiedniej konfiguracji można uzyskać zaskakująco przyzwoitą wydajność na Apple Silicon, często przebijając specjalnie zoptymalizowane rozwiązania dedykowane Macom.
Konfiguracja, Która Naprawdę Działa
Po wielu testach i porównaniach benchmarków, oto konfiguracja, która dała najlepsze rezultaty na moim M1 Max z 64 GB zunifikowanej pamięci:
Rdzeń stacku:
- llama.cpp skompilowane z akceleracją Metal
- Gemma 4 26B-A4B w formacie GGUF (skwantowana do Q4)
- Model draft z Multi-Token Prediction (MTP) do spekulatywnego dekodowania
- Projektor multimodalny Gemma 4 do obsługi zrzutów ekranu
- Pi jako agent kodowy w terminalu
To nie jest najpotężniejsza konfiguracja, jaką teoretycznie można zbudować, ale to optymalny punkt pod względem rzeczywistej użyteczności. Chodzi o prędkość liczoną w tokenach na sekundę, nie minutach na odpowiedź.
Liczby, Które Mają Znaczenie
Przeprowadziłem spójne testy porównawcze używając tego samego prompta we wszystkich konfiguracjach:
"Napisz zwięzłą funkcję Pythona, która parsuje zunifikowany diff i zwraca ścieżki zmienionych plików. Następnie wyjaśnij dwa przypadki brzegowe."
Każdy test generował około 128 tokenów, co dało nam uczciwe porównanie szybkości generowania.
Wyniki Bazowe:
Uruchomienie Gemma 4 bezpośrednio przez llama.cpp z Metal dało nam 58,2 tokenów na sekundę. To użyteczne, ale szczerze? Przy faktycznych sesjach kodowania, gdzie wykonujesz wiele wywołań narzędziowych i czekasz na odpowiedzi, było to odczuwalnie ospałe.
Różnica, Jaką Wnosi MTP:
Tu robi się ciekawie. Multi-Token Prediction pozwala modelowi "spekulować" kilka tokenów do przodu, akceptując poprawne predykcje i cofając błędne. Po włączeniu modelu draft MTP w wersji Q8, wydajność skoczyła do 72,2 tokenów na sekundę — to 24-procentowa poprawa bez żadnej zmiany w głównym modelu.
Prędkość przetwarzania promptów pozostała w zasadzie taka sama (około 297-299 tokenów/sekundę), ale to szybkość generowania ma znaczenie w workflowach agentskich. Nie wysyłasz non-stop nowych promptów — czekasz, aż model wygeneruje odpowiedź, podejmie decyzje i wykona narzędzia.
Testowałem liczbę tokenów draft od 1 do 6, i na moim M1 Max wartość 3 okazała się optymalna. Wartości powyżej 4 zaczynały już spowalniać proces, co ma sens — więcej spekulacji oznacza więcej zmarnowanej pracy, gdy predykcje są błędne.
llama.cpp kontra MLX: Zaskakujący Zwycięzca
To mnie zaskoczyło najbardziej: spodziewałem się, że MLX (natywny framework Apple do ML) będzie królować, bo jest specjalnie zoptymalizowany pod Apple Silicon. Rzeczywistość okazała się inna.
| Runtime | Generowanie 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 z MTP było mniej więcej 58% szybsze od najlepszej konfiguracji MLX. Lata pracy nad optymalizacjami, które zostały włożone w llama.cpp, wyraźnie się opłaciły — działa doskonale na macOS, mimo że jest跨平台owe.
Dodanie Możliwości Wizyjnych
Żeby mieć pełnoprawne doświadczenie agenta kodowego, chcesz mieć możliwość wysyłania zrzutów ekranu. Może chcesz, żeby agent zobaczył, co zbudował, albo przejrzał zmianę w UI, którą właśnie wprowadziłeś.
Problem polega na tym, że tylko Gemma 4 12B jest natywnie multimodalna. Model 26B, którego używamy, wymaga załadowania zewnętrznego projektora multimodalnego obok siebie.
Kiedy dodałem projektor --mmproj do llama.cpp, ten prawidłowo zareklamował możliwości multimodalne wobec Pi, a wyjścia narzędzi obrazkowych zaczęły przepływać poprawnie. Co ważniejsze, nie wprowadziło to żadnego mierzalnego spowolnienia — szybkość generowania pozostała na poziomie 72,2 tokenów na sekundę.
Rzeczywistość Codziennego Użytkowania
Przy tej konfiguracji potrzebujesz mniej więcej 17 GB plików modelowych (16 GB na główny model, plus głowa MTP i projektor). Dla kogoś z 64 GB zunifikowanej pamięci to całkowicie do ogarnięcia.
Pi jako agent zapewnia czysty interfejs terminalowy, który podłącza się do API kompatybilnego z OpenAI, jakie udostępnia tryb server llama.cpp. To oznacza, że możesz używać go z dowolnym narzędziem wspierającym format API OpenAI, co daje elastyczność bez vendor lock-in.
Największa korzyść? Kiedy internet pada — a padnie, w najgorszym możliwym momencie — continue kodujesz. Agent może być minimalnie wolniejszy od chmurowych alternatyw, ale jest wystarczająco responsywny, żeby utrzymać płynność pracy.
Od Czego Zacząć
Musisz skompilować llama.cpp z włączoną obsługą Metal. Projekt ma solidną dokumentację dla buildów na macOS, i po skompilowaniu tryb server daje ci endpoint kompatybilny z OpenAI.
Jeśli chodzi o modele, to skwantowane wersje GGUF od Unsloth na Hugging Face są dobrze zoptymalizowane. Będziesz potrzebować kwantyzacji Q4_K_XL dla głównego modelu i pasującego modelu draft MTP w wersji Q8.
Dostrój wartość --spec-draft-n-max — zacznij od 3 i testuj od 1 do 6, żeby znaleźć optymalną wartość dla twojego konkretnego sprzętu. Różne konfiguracje Apple Silicon mogą mieć różne sweet spoty.
Czy To Ma Sens?
Jeśli regularnie kodujesz z asystentami AI i masz odpowiedni hardware (minimum 16 GB, 32 GB+ zalecane), zdecydowanie tak. Niezależność od łączności internetowej sama w sobie jest warta zachodu, a MTP wprowadza szybkość generowania na poziom naprawdę użyteczny — doświadczenie jest zaskakująco dopracowane.
Nie dorównasz inteligencji klasy GPT-4 tymi otwartymi modelami, ale do uzupełniania kodu, refaktoryzacji, pomocy w debugowaniu i ogólnych zadań agentskich? Jest bardziej zdolny, niż większość osób się spodziewa, i jest twój — działa lokalnie, prywatnie, bez spike'ów opóźnień ani awarii usług.
Narzędzia dojrzały znacząco. Jeśli wcześniej próbowałeś lokalnych modeli i szybkość cię rozczarowała, daj tej konfiguracji szansę. MTP zmienia równanie gry.