- Yerel kodlama ajanı yapılandırması, internet kesintisi olduğunda bile macOS'te OpenAI uyumlu API ile modeli çalıştırıp Pi üzerinde metin ve görsel girdilerini işleyebilen bir kurulumdur
- Apple M1 Max 64GB ve macOS 15.7.7 üzerinde llama.cpp Metal ile Gemma 4 26B-A4B GGUF modeli kullanıldı; temel üretim hızı 58.2 tok/s oldu
- MTP draft modeli eklendikten ve
--spec-draft-n-max 3olarak ayarlandıktan sonra üretim hızı 72.2 tok/s'ye çıktı ve yaklaşık %24 iyileşti mmproj-BF16.ggufdosyası--mmprojile yüklenmeli ve Pi model girdisi["text", "image"]olarak ayarlanmalı; ancak bu şekilde ekran görüntüsü gibi görsel girdiler iletilir- Nihai yapılandırmada llama.cpp sunucusu
127.0.0.1:8080/v1üzerinde çalışıyor ve Pi bunu yerel sağlayıcı olarak kullanıyor; Qwen3.6 35B-A3B kodlama ajanı kıyaslamalarında daha iyi görünse de bu testte 55 tok/s ile daha yavaştı
Yerel kodlama ajanı yapılandırmasının hedefi
- İnternet kesintileri birkaç kez yaşandığı için kodlama ajanı kullanılamadı; bu da yerelde çalışan bir kurulum denemek için tetikleyici oldu
- İstenen yapılandırma, Mac'te gerçekten kullanılabilecek kadar hızlı olmalı ve OpenAI uyumlu API üzerinden başka araçlarda da kullanılabilmeliydi
- Gerektiğinde ekran görüntülerini veya görselleri işleyip ajanın ürettiği sonuçları tekrar girdi olarak verebilen bir düzen hedeflendi
- Nihai yapılandırma
llama.cpp, Gemma 4 26B-A4B GGUF, Q8 MTP draft modeli, Gemma 4 multimodal projector ve Pi terminal kodlama ajanından oluşuyor - Test ortamı Apple M1 Max, 64GB birleşik bellek ve macOS 15.7.7 idi
Model
- Ana model
gemma-4-26B-A4B-it-UD-Q4_K_XL.ggufidi ve Hugging Face üzerindekiunsloth-gemma-4-26B-A4B-it-GGUFdeposunda bulunuyor - Dosya boyutu yaklaşık 16GB; MTP draft head ve multimodal projector ile birlikte model klasörü yaklaşık 17GB oluyor
- Benchmark prompt'u şu şekildeydi:
Write a compact Python function that parses a unified diff and returns the changed file paths. Then explain two edge cases. - Her benchmark yaklaşık 128 token üretti
Temel çalıştırma: llama.cpp + Metal
- Ana model doğrudan
llama.cppve Metal hızlandırması ile çalıştırıldı - Çalıştırma komutu
llama-cliiçinde model yolu,-ngl 999,-fa on,-c 4096,-n 128belirtilerek verildi - Temel yapılandırmada prompt işleme hızı 298.0 tok/s, üretim hızı ise 58.2 tok/s oldu
- 58 tok/s çok hızlı değil ama kullanılabilir bir seviye; kodlama ajanı işlerinde çok sayıda araç çağrısı olduğu için mümkün olduğunca yüksek hız gerekiyor
MTP draft modelinin eklenmesi
- Gemma 4 için
MTP/gemma-4-26B-A4B-it-Q8_0-MTP.ggufbiçiminde bir MTP draft modeli sunuluyor llama.cppiçinde bu model speculative decoding için--model-draft,--spec-type draft-mtp,--spec-draft-n-maxile yükleniyor- MTP ile ilk çalıştırma, 4 draft token ayarında 69.2 tok/s gördü
- Unsloth belgeleri başlangıç noktası olarak
--spec-draft-n-max 2öneriyor, ancak donanıma göre 1 ile 6 arasındaki değerlerin test edilip en hızlı olanın seçilmesini söylüyor --spec-draft-n-maxayarı denendiğinde en yüksek hız 3 draft token ile 72.2 tok/s oldu- Yalnızca ana model 58.2 tok/s verirken, Q8 MTP draft modeli eklenmiş yapılandırma 72.2 tok/s verdi
- Prompt işleme hızı neredeyse sabit kalırken üretim hızı yaklaşık %24 arttı
MTP ince ayar sonuçları
--spec-draft-n-maxiçin 1'den 6'ya kadar değerler test edildi- 1 değerinde prompt 295.5 tok/s, üretim 68.4 tok/s oldu
- 2 değerinde prompt 299.1 tok/s, üretim 72.0 tok/s oldu
- 3 değerinde prompt 295.6 tok/s, üretim 72.2 tok/s ile en hızlı sonuç alındı
- 4 değerinde üretim 70.7 tok/s, 5 değerinde 63.7 tok/s, 6 değerinde ise 61.2 tok/s'ye düştü
- M1 Max ortamında
3en hızlı değerdi;2de buna oldukça yakındı
MLX karşılaştırması
- Mac'te modeli çalıştırmanın daha hızlı bir yolu olup olmadığını görmek için
mlx-lmtabanlı MLX modelleri de test edildi llama.cpp Metal + MTP, Unsloth GGUF Q4 ile Q8 MTP kombinasyonunda 72.2 tok/s verdi- Sadece
llama.cpp Metal, Unsloth GGUF Q4 ile 58.2 tok/s verdi MLX-LM, Unsloth UD MLX 4-bit ile 45.8 tok/s verdiMLX-LM,mlx-community 4-bitile 43.9 tok/s vemlx-community OptiQ 4-bitile 38.1 tok/s verdi- Bu özel yapılandırmada llama.cpp, MLX'ten daha hızlıydı ve MTP uygulanmış llama.cpp en iyi seçenek oldu
- Gemma 4 MTP için
gemma-4-swift-mlxde denendi; ancak test edilen 26B 4-bit MLX checkpoint'i, loader'ın beklediği weight key ile eşleşmediği için yeni modeli tekrar indirip uyarlama yapılmadan çalışma bırakıldı
Görsel desteği ekleme
- Pi içinde ekran görüntüsü eklemek için model girdisi yalnızca metin olamaz
- Başlangıçta yerel model girdisi
"input": ["text"]olarak ayarlanmıştı; bu durumda Pi, görsel araç çıktısını modele düzgün şekilde iletemiyordu llama.cppsunucusu da multimodal yetenek için Gemma 4 multimodal projector olanmmproj-BF16.ggufdosyasına ihtiyaç duyuyor- Projector
--mmprojile yüklendiğindellama.cppmultimodal desteği duyuruyor ve Pi görsel gönderebiliyor - Projector olmadan çalışan
llama.cpp Metal + MTPtestinde prompt 120.3 tok/s, üretim 71.4 tok/s oldu mmproj-BF16.ggufyüklü nihai çalıştırmada prompt 297.4 tok/s, üretim 72.2 tok/s oldu- Projector yüklü nihai çalıştırmada metin üretim hızında bir düşüş görülmedi
llama.cpp kurulumu
- Bağımlılıklar Homebrew ile
cmake,git,tmux,python@3.11kurularak yüklendi ~/Developer/ML-Models/Gemma4/reposyolu oluşturuldu veggml-org/llama.cppdeposurepos/llama.cppiçine klonlandı- Derleme
cmake -B build -DCMAKE_BUILD_TYPE=Release -DGGML_METAL=ON -DGGML_ACCELERATE=ONile yapılandırıldı - Ardından
cmake --build build --config Release -jile release derlemesi yapıldı - Test edilen derleme
GGML_METAL=ON,GGML_ACCELERATE=ON,GGML_BLAS=ON,GGML_BLAS_VENDOR=Appleayarlarına sahipti
Model dosyalarını indirme
- Python 3.11 sanal ortamı oluşturuldu ve
huggingface_hubilehf_xetkuruldu huggingface-cli downloadile Gemma 4 ana modeli,mmproj-BF16.ggufve MTP draft modeli indirildi- İndirilen hedef dosyalar
gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf,mmproj-BF16.gguf,MTP/gemma-4-26B-A4B-it-Q8_0-MTP.ggufoldu - Nihai model klasörü
models/unsloth-gemma-4-26B-A4B-it-GGUF/altında bu üç dosyayı içeriyor
Yerel sunucuyu başlatma
- Nihai sunucu
llama-serverile çalıştırılıyor ve ana model, MTP draft modeli ile multimodal projector birlikte belirtiliyor - Başlıca seçenekler
--spec-type draft-mtp,--spec-draft-n-max 3,-ngl 999,-fa on,-c 65536,--parallel 1 - Sunucu
--host 127.0.0.1 --port 8080ile başlatılıyor - OpenAI uyumlu endpoint
http://127.0.0.1:8080/v1 start_server.shsarmalayıcısı sunucuyu birtmuxoturumunda çalıştırıyor ve loglarılogs/llama-server-mtp.logiçine yazıyorchmod +x start_server.shsonrası sunucu./start_server.shile başlatılıyor- Sunucunun çalıştığı
curl http://127.0.0.1:8080/v1/modelsile doğrulanıyor
Pi ayarları
- Pi, model sağlayıcı ayarlarını
~/.pi/agent/models.jsondosyasından okuyor - Yerel sağlayıcı
gemma4-localiçinbaseUrldeğerihttp://127.0.0.1:8080/v1 apideğeriopenai-completions; yerel sunucu kullanıldığı içinauthHeaderfalseolarak bırakılıyor- Model ID'si
gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf, adı iseGemma 4 26B-A4B Q4 + MTPolarak ayarlanıyor inputdeğeri["text", "image"]olmalı; aksi halde Pi modeli yalnızca metin tabanlı kabul ediyor- Context window 65536, maksimum token 8192 olarak ayarlanıyor
- Gerekirse
~/.pi/agent/settings.jsoniçindedefaultProviderdeğerigemma4-local,defaultModeldeğeri de ilgili GGUF dosya adı olarak ayarlanabiliyor pi --offline --list-models gemmaçalıştırıldığında görsel desteğininyesolarak görünmesi bekleniyor- Yerel model çalıştırma komutu
pi --provider gemma4-local --model gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf - Etkileşimsiz çalıştırma
pi -p --provider gemma4-local --model gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf "Explain what this repository does"biçiminde yapılıyor - Ekran görüntüsü girdisi
pi -p @"/path/to/screenshot.png" "Describe this image and point out anything relevant to the UI"biçiminde veriliyor
Nihai yapılandırma
- Nihai inference runtime
llama.cpp - macOS hızlandırması Metal + Accelerate kombinasyonu
- Ana model
gemma-4-26B-A4B-it-UD-Q4_K_XL.gguf - Draft model
gemma-4-26B-A4B-it-Q8_0-MTP.gguf - MTP ayarı
--spec-draft-n-max 3 - Multimodal projector
mmproj-BF16.gguf - Sunucu
127.0.0.1:8080üzerindekillama-server - API, OpenAI uyumlu
/v1 - Kodlama ajanı Pi ve Pi model girdisi
["text", "image"] - MTP draft modeli bu ortamda Gemma 4'ün üretim hızını 58.2 tok/s'den 72.2 tok/s'ye çıkardı ve yerel OpenAI uyumlu sunucu olarak çalıştırılabilecek kadar basit bir kurulum sundu
Qwen3.6 35B-A3B alternatifi
- Bazıları
Gemma 4 26B-A4ByerineQwen3.6 35B-A3Bkullanılmasını öneriyor - Doğrulanabilir benchmark'lara göre Qwen, Gemma 4'ten çok daha iyi bir kodlama ajanı olarak değerlendiriliyor
- Ancak Qwen yapılandırması daha yavaştı;
Qwen3.6-35B-A3B-UD-Q4_K_XL.gguf,unsloth-Qwen3.6-35B-A3B-MTP-GGUF,mmproj-BF16.ggufkombinasyonunda 55 tok/s görüldü - 72 tok/s yerine 55 tok/s, kullanıcının beklediği durumlarda hissedilir bir fark yaratıyor
- Qwen model indirmesi
unsloth/Qwen3.6-35B-A3B-MTP-GGUFüzerindenQwen3.6-35B-A3B-UD-Q4_K_XL.ggufvemmproj-BF16.ggufalınarak yapılıyor - Qwen sunucusu aynı
llama-serverile ancak--port 8081kullanılarak çalıştırılıyor - Pi ayarlarındaki Qwen sağlayıcısının adı
qwen36-local,baseUrldeğeri isehttp://127.0.0.1:8081/v1 - Qwen model yapılandırması
reasoning: true,input: ["text", "image"],contextWindow: 65536,maxTokens: 8192kullanıyor
1 yorum
Hacker News yorumları
Benchmark promptu “unified diff'i parse edip değişen dosya yollarını döndüren kısa bir Python fonksiyonu yaz ve iki edge case'i açıkla” idiyse ve her benchmark yaklaşık 128 token ürettiyse, iyi bir sonuç almak için 128 token fazla az görünüyor
MTP hızlandırması, tahmin edilen tokenların ne kadar sık kabul edildiğine bağlı; deneyimime göre çıktının ilk kısmında kabul oranı daha yüksek oluyor, bu yüzden kısa testler yanlış pozitif hızlanma üretebilir
llama.cpp içinde, sunucuyu yeniden başlatıp prompt göndermeye gerek kalmadan argümanları tarayan benchmark'a özel bir araç var: https://github.com/ggml-org/llama.cpp/blob/master/tools/llam...
Model indirme bölümünde de llama.cpp'nin
-hfargümanının modeli sizin yerinize indirebildiğinden bahsedilmeliydi. Yazarın deneyimini paylaşması güzel ama yeni başlayanlar için en iyi rehber olmayabilirUnclothe'un “2x hız” duyurusunu görüp “bu gerçekten kullanılabilecek kadar hızlandırıyor mu?” diye düşündüm ve kendim kurup denedim
Geçen yıl da Devstral gibi şeylerle test etmiştim ama çok yavaş ve fazla aptalcaydı, bu yüzden kullanmayı sürdürmek istemedim; bu sefer ise sonunda hem hız hem de zeka açısından kullanılabilir seviyeye geldiğini hissettim
llama.cpp'de bunun için araçlar var ve doğru ölçüm yapmak için token üretiminden önce prefill eklemek gerekiyor. 32k ya da 64k gibi uzun bağlamlarda token üretim hızını ölçmek de giderek daha önemli hale geliyor
Daha önce ollama ve opencode kullanarak benzer bir yazı yazmıştım: https://blog.kulman.sk/running-local-llm-coding-server/
opencode sistem promptu bağlamın çok büyük bir kısmını yemiyor mu? Yerel modellerde bağlam kısıtı büyük mesele ve hatırladığım kadarıyla opencode bunun 10k kadarını ya da ona yakın bir miktarı kullanıyor
Sadece llama.cpp kullanıyorsanız bir şey indirmek için
huggingface-clizorunlu görünmüyor.-hf ...verirseniz modeli indiriyorİndirme konumunu değiştirmek için
LLAMA_CACHEayarlanabilir:LLAMA_CACHE="models" ./llama-server \-hf unsloth/gemma-4-31B-it-GGUF:UD-Q4_K_XL \...-hfdkullanılabilirBirleşik bellekli RAM büyük ama teraflops ve bant genişliği GB/s olarak orta-alt seviyedeyse, genelde en umut verici seçenek MoE oluyor. Benim ortamım olan M2 Max 96GB'ta
(zeka, tok/s, bağlam derinliği)açısından şu an 1 numara DeepSeek-V4-Flash REAP25<65gb gguf+ ds4-server + pi agentElbette bulut API'lerinden iyi değil ama gerekirse katlanıp kullanabileceğim kadar yeterli. İnternetsiz 4 saatlik bir uçuşta bile yerel LLM 60W çekmesine rağmen pil gayet dayandı
REAP destekli ds4 branch'i burada: https://github.com/ljubomirj/ds4/tree/reap-compact-support
DS4F'nin ancak 784K bağlamda 10 tok/s altına düşüp kullanılamaz hale gelmesi büyük fark yaratıyor
Bu tür yerel modellerin, belli bir programlama dilinde uzman olmayan kullanıcılar için gerçekten sorun çözebileceğini merak ediyorum
Satır içi otomatik tamamlama veya birim uygulamanın ötesinde, gerçekten çalışan teknik spesifikasyonları tasarlayıp bir araya getirebildiklerinden emin değilim
llama.cpp/server kullanarak yerel bir LLM ayağa kaldırmak ve bunu Claude Code ya da Codex-CLI ile birlikte kullanmak nispeten kolay
Gerekli llama server ayarları çoğu zaman farklı yerlere dağılmış oluyor; popüler birkaç açık LLM için yönergeleri burada tutuyorum: https://pchalasani.github.io/claude-code-tools/integrations/...
omlx.ai ile donanımıma uygun çeşitli MLX modellerini indirip, bu modellerle açık kaynak ve kapalı harness'leri (Claude Code, Codex) otomatik çalıştırmada epey başarılı oldum
Hem web hem masaüstü arayüzünde mümkün olduğu için, bana göre omlx kullanıyorsanız blog yazısını takip etmenize gerek yok
Şimdiye kadar bulduğum Gemma 4 MLX build'leri aynı quantization düzeyinde daha yavaştı, MTP'de ise çok daha yavaştı
Modeli seçtikten sonra llama.cpp'nin yerleşik web arayüzü oldukça iyi ve kurcalamak için LM Studio da gayet uygun
Gemma-4 ve Qwen 3.6 için tipik opencode sistem promptunun büyük kısmı hiç gerekmiyor, hatta çıkarmak daha iyi
antirez'in ds4'ü üzerinde çalışan DeepSeek v4 Flash oldukça etkileyiciydi
“Kayıtlı bilgi” açısından GPT-4 seviyesinde bir model gibi hissettiriyor ama uzun akışlı araç çağrılarında GPT-4 sınıfı modellerden daha iyi
128GB MBP M4 Max'te üretim yaklaşık 24 t/s, prefill ise yaklaşık 200 t/s veriyor. Yavaş olmasını bekliyordum ve kod üretimi gibi işlerde gerçekten yavaş, ama basit görevler için bir makine orkestratörü olarak şaşırtıcı derecede kullanışlı
Ajan tipi olmayan kullanımda sohbet etmek için de fazlasıyla yeterli bir model ve tamamen kendi kendine çalışan, özel kalabilen bir seçenek olma avantajına sahip
[0]https://github.com/antirez/ds4
Çok tembel yapmak isterseniz terminalde Claude Code'u açın, bu yazıyı gösterin ve sadece “bunu yap” deyin
Buna karşılık Claude ya tek seferde yapıyor ya da çok az düzeltmeyle hallediyor
Bilgiye ve icraya giden kapı artık LLM ve Google Search bir dinozor gibi hissettiriyor
Akıllı telefondan bile daha etkileyici; sanki bir yüzyıl geleceğe gitmişiz gibi geliyor bana