GPU olmadan 13 yıllık bir Xeon’da Gemma 4 26B’yi saniyede 5 token hızında çalıştırmak
(neomindlabs.com)- 2013 model çift Xeon E5-2690 v2 ve DDR3’ten oluşan bir sunucuda Gemma 4 26B-A4B Q8_0 yalnızca CPU ile çalıştırılarak decode aşamasında yaklaşık 5,2 token/sn, prompt değerlendirmesinde yaklaşık 16 token/sn elde edildi
ik_llama.cppiçindeki hızlı yol AVX2·FMA3 varsayımıyla yazılmış olsa da Ivy Bridge CPU yalnızca AVX1 desteklediğinden, AVX2’siz derleme için derleme değişiklikleri ve işlem fallback’leri gerekti- Grafik oluşturucu
MOE_FUSED_UP_GATEveFUSED_UP_GATEişlemlerini koşulsuz üretirken AVX2’siz dispatcher’da bunları işleyecek yol yoktu; bu da her forward geçişte yaklaşık 240 tensörün hesaplanmadan kalmasına ve anlamsız çok dilli çıktılara yol açtı - Claude, logit enstrümantasyonu ve kod analiziyle hatayı buldu; birleşik işlemleri iki
ggml_mul_mat_idveggml_fused_mul_unaryile değiştirdi, kullanıcı da deneyleri çalıştırıp doğru sonucun ölçütünü belirledi - Eski kurumsal sunucular, ücretli API kesintilerinde yerel bir yedek seçenek ya da yavaş batch işleri için hâlâ kullanılabilir; ancak AVX2’ye özgü düzen oluşturan
--run-time-repackkullanılmamalı
13 yıllık depolama sunucusunun çalışma ortamı
- Yeniden değerlendirilmiş HP StoreVirtual donanımı, 2013 model çift Xeon E5-2690 v2 ve DDR3 bellek kullanıyor; GPU yok
- Ivy Bridge nesli olduğu için yalnızca AVX1 destekliyor ve AVX2 ile FMA3 desteklemiyor
- Aslen disk depolama için üretilmiş ve satın alma maliyeti 300 doların altında
- Çalıştırılan model, Google’ın Gemma 4 26B-A4B sürümü; 26 milyar parametreli, açık ağırlıklı bir uzman karışımı (MoE) modeli
- Q8_0 nicemlenmiş modelde decode yaklaşık 5,2 token/sn, prompt değerlendirmesi ise yaklaşık 16 token/sn olarak ölçüldü
Başlangıç noktası olan 2016 model Xeon örneği
- Hacker News’te paylaşılan A 10 year old Xeon is all you need, GPU olmadan 2016 model tek Xeon ve 128 GB DDR3 üzerinde Gemma 4 çalıştırılan bir örnekti
- Bu kurulum ik_llama.cpp ve yaklaşık 25 ayrıntılı çalışma bayrağı kullanıyordu
- speculative decoding
- CPU odaklı MoE routing
- CPU için flash attention
- çalışma zamanında ağırlık yeniden paketleme
- Aynı yaklaşım Ivy Bridge sunucuya uygulandı, ancak çalıştırma daha başlangıçta durdu
- 2016 model Broadwell CPU’nun aksine E5-2690 v2’de AVX2 ve FMA3 yok
- Bu komut kümesi 2014’teki Haswell, yani Intel’in v3 nesliyle geldi ve hızlı çekirdekler buna göre yazılmıştı
Claude ile teşhis ve yama
- Başlatma hatası bilgisi Claude’a verildiğinde, nedeni CPU komut kümesi farkı olarak saptadı
- Daha önce ücretsiz bir modelle denenen ama tamamlanmayan yaklaşımı devralarak, performans açısından kritik C++ yollarının AVX2 öncesi CPU’larda doğru fallback’e dönmesini sağladı
- İş tek bir
fix itisteğiyle bitmedi- başka bir geliştiricinin yazdığı performans odaklı C++ kodunu okudu
- belirli mikro mimaride çekirdeğin neden geçerli olmadığını analiz etti
- fork’taki mevcut optimizasyonları atmadan desteklenmeyen yolları dolaştı
- Kullanıcı, C++ çekirdek fallback’lerini doğrudan yazmak yerine deneyleri çalıştırıp çıktıları okuyarak sonraki soruları belirleme ve doğru sonucun ölçütünü saptama görevini üstlendi
- Teşhis ve yama, ilgili sunucuda çalışan Claude örneği tarafından yapıldı
AVX2’siz derlemede bozulan işlem yolu
- Gemma 4 MoE çıkarımı için kullanılan
ik_llama.cpp,llama.cppfork’u ve varsayılan olarak asgari koşul olarak AVX2 kabul ediyor - Derleme sırasında
GGML_USE_IQK_MULMATkapatılırsa hızlı yolların çoğu devre dışı kalıyor ve genel scalar/SSE işlemlerine fallback yapılıyor- genel Q8_0 matris çarpımında bu fallback çalışıyor
- ancak iki grafik işlemine fallback uygulanmıyordu
- Gemma 4’ün MoE feedforward ağı şu işlemleri üretiyor
MOE_FUSED_UP_GATE: uzman başına gate·up matris çarpımı ile SwiGLU’yu birleştiren işlemFUSED_UP_GATE: MoE olmayan katmanlarda kullanılan yoğun işlem sürümü
- Hesap dispatcher’ındaki bu iki işlem
GGML_USE_IQK_MULMATkoşuluyla korunuyordu, fakat grafik oluşturucu işlemleri koşulsuz üretiyordu- AVX2’siz derlemenin dispatcher’ında bu enum’ları ele alan bir
caseyoktu - işlem varsayılan dala düşüyor, tüm uzman feedforward ağlarının hedef tensörleri sessizce hesaplanmadan kalıyordu
- AVX2’siz derlemenin dispatcher’ında bu enum’ları ele alan bir
- Gemma 4 26B, 30 katmanda token başına 8 etkin uzman kullandığından, her forward geçişte bellek tamponunda kalmış değerleri içeren yaklaşık 240 tensör tüketiliyordu
Anlamsız çıktıda görülen ipuçları
- Hatalı çıktı akıcı görünüyor ama anlam içermeyen çok dilli dizelerden oluşuyordu
- 262.000 sözcüklük tüm sözlükte token ID’leri neredeyse eşit yayılıyordu
- Tayca, Korece,
<unused>sentinel’leri ve İngilizce parçaları benzer sıklıkla üretiliyordu
- Sıcaklık 0 iken çıktı deterministikti; tek iş parçacıklı ve çok iş parçacıklı çalıştırmaların sonucu da byte düzeyinde aynıydı ve NaN oluşmuyordu
- Katman bazında büyük sabitler gizli durumu itiyor ve son softmax’ı düzleştiriyordu
- Claude, örnekleme öncesi ham logit’leri enstrümante ederek ilk 5 token’ı, aralığı, ortalamayı ve NaN sayısını yazdırdı
- ilk tahmin token’ının ortalama logit’i 0 civarında değil, +16 idi
- tüm sözlüğün yaklaşık %80’inde logit pozitiftı
- Rastgele bozulmadan farklı olarak sapma tutarlı olduğu için, gizli durumun büyük bölümünün küçük pozitif kayan nokta değerleri içeren başlatılmamış belleği kullandığı sonucuna varıldı
Üç aşamalı düzeltme
- Yama, fork’un
maindalı üzerine üç commit’ten oluşuyor -
AVX2’siz derleme düzeltmeleri
iqk_quantize.cppiçindekiquantize_row_q8_0_x4vequantize_row_q8_1_x4_Tiçin scalar#elsedalları gerçektehsum_i32_8gibi AVX2 yardımcılarına başvuruyordu- Bu dallar taşınabilir scalar döngüler olarak yeniden yazıldı
ggml.cveggml-quants.ciçine sızan bazı IQK çağrılarına#if GGML_USE_IQK_MULMATkoruması eklendiiqk_cpu_ops.cppdosyasının bağımsız derlenebilmesi için eksik include eklendi- Bu düzeltme olmadan fork’un kendisi AVX2’siz donanımda derlenmiyor
-
Çalışma zamanında grafik fallback’i
- Dispatcher’ı düzeltmek yerine grafik oluşturucu, ilgili derlemede zaten hesap yolu olan işlemleri üretecek şekilde değiştirildi
ggml_moe_up_gateiçindeGGML_USE_IQK_MULMATkapalıyken birleşikup_gate_expsağırlıkları işlendi- Tensör şekli
[n_embd, 2*n_ff, n_experts]; ilk yarı gate, ikinci yarı up - Bunlar iki
ggml_view_3ddilimine ayrıldı - Her dilim için
ggml_mul_mat_idçalıştırıldı - İki sonuç
ggml_fused_mul_unary(gate, up, SILU)ile birleştirildi - Gate ve up ağırlıkları zaten ayrıysa, dilimleme olmadan iki
ggml_mul_mat_idve birleşik çarpma·unary işlem kullanıldı - MoE olmayan katmanlarda kullanılan
ggml_fused_up_gateiçin de aynı fallback uygulandı mul_mat_idvarsayılan ggml uygulamasını kullanıyor vefused_mul_unarySILU ile çarpmayı tek adımda işlediği için, tüm bileşen işlemler için IQK dışı uygulamalar zaten mevcut- Tüm değişiklik
#if !GGML_USE_IQK_MULMATarkasında olduğundan AVX2 derleme çıktısı eskisiyle bit düzeyinde aynı kalıyor
-
CI stub düzenlemesi
- IQK kaynaklarındaki
#elsestub’larıiqk_mul_mat.hile uyuşmadığı içinci/run.shde AVX2’siz donanımda derlenmiyordu <cstdint>include’u eksikti- Bazı stub’ların gereksiz ön parametreleri vardı ya da
sinksparametresi eksikti; yani imzalar farklıydı - Bazı işlevlerde stub hiç olmadığından bağlama aşamasında tanımsız başvuru hataları oluşuyordu
- Stub’lar başlık dosyasıyla uyumlu hâle getirilince AVX2’siz ortamda test paketi çalıştırılabilir oldu
- IQK kaynaklarındaki
Fallback’in performans maliyeti ve repack hatası
- Fallback, tek bir birleşik çekirdek yerine iki kez
mul_mat_idçalıştırdığı için ek maliyet getiriyor - Bu CPU zaten bellek bant genişliği kısıtlı ve asıl birleşik çekirdek de AVX2’ye özel olduğundan, bu ortamda vazgeçilen mevcut bir çalışma yolu yoktu
- Nihai performans, 26B-A4B MoE için decode’da yaklaşık 5,2 token/sn ve prompt değerlendirmesinde yaklaşık 16 token/sn
--run-time-repack, başlangıçta nicemlenmiş ağırlıkları AVX2’ye özel iç içe geçmişQ8_0_R8biçimine yeniden düzenliyor- Bu, AVX1 ortamında çıktıyı yeniden bozan ayrı bir hata
- Mevcut yama bunu düzeltmiyor ve çalışma betiğinden bu bayrak çıkarılıyor
Nedeni daraltma süreci
- Komut kümesi uyumsuzluğu kolay doğrulandı, ancak dispatcher’ın hata vermeden varsayılan dala düşmesi daha zor bulundu
- Kod incelemesiyle birçok aday elendi
- RMSNorm yardımcıları doğru görünüyordu
ggml_vec_dot_q8_0_q8_0için AVX1 fallback’i de doğru görünüyordu- Tek iş parçacıklı sonucun bit düzeyinde aynı çıkması, threading hatasını dışladı
- Logit ortalamasının +16’da sabitlenmesi ve uzun kuyruktaki token’ların benzer değerlere sahip olması, residual stream’in büyük kısmının başlatılmamış olduğunu düşündürdü
- Dispatcher içinde
#if GGML_USE_IQK_MULMATarandıktan yaklaşık 1 dakika sonra eksik iki işlem yolu bulundu
Yeniden üretim koşulları ve kullanım alanı
- AVX2 öncesi donanımda yeniden üretim koşulları şöyle
- Donanım: çift Xeon E5-2690 v2, Ivy Bridge, AVX1, DDR3, GPU yok
- Derleme: yama dalındaki
ik_llama.cpp,GGML_USE_IQK_MULMATolmadan derlenmiş - Model: Gemma 4 26B-A4B Q8_0
- Çalıştırma: olağan
ik_llama.cppCPU bayrakları kullanılmalı, ancak--run-time-repackhariç tutulmalı
- Tam değişiklikler ikawrakow/ik_llama.cpp PR #2138 içinde görülebilir
- Yazı yazıldığı sırada hâlâ açık ve yönetici incelemesini bekliyor; bu yüzden doğrudan branch üzerinden çalıştırmak gerekiyor
- Aynı donanımda görülen hatalar PR başlığı altında raporlanabilir
- Eski kurumsal sunucularda yerel model tutmak, ücretli API kesildiğinde bir yedek olarak kullanılabilir ya da token başı ücretlendirmenin uygun olmadığı yavaş batch işleri işleyebilir
- Abonelik hizmeti kullanmaktan çok tanıdık olmayan kodu ve eski sistemleri bizzat kazıma becerisine değer veriliyor; bu yaklaşım 15 yıllık bir Rails uygulamasını ya da sorumlusu ayrılmış bir veritabanını ayakta tutmada da aynı şekilde geçerli
1 yorum
Hacker News yorumları
2027 ortasına gelindiğinde 200 milyardan fazla parametreli uzman karışımı (MoE) modellerinin sıradan tüketici donanımında çalıştırılabileceğini tahmin ediyor.
16 GB’lık bir Mac’te Qwen3.6-35B-A3B’yi yerel olarak çalıştırıp saniyede 7-9 token alıyorum: https://github.com/deepanwadhwa/samosa-chat
Bu, 16 GB RAM’li bir MacBook Air’de GPT-4 seviyesinde bir modelin bu hızda yerel çalışması demek.
Zaten çoğu 200 milyar+ modelin etkin parametre sayısına yakın bir aralıkta; bu yüzden Prism isterse böyle bir model çıkarabilir. Ancak HRM gibi özyinelemeli sinir ağları o kadar çok parametreye ihtiyaç duymadığından, gerçekten bu ölçeğe gerek olup olmadığı tartışmalı: https://huggingface.co/sapientinc/HRM-Text-1B
Örneğin her katmanda yalnızca 256 bitlik bir seed tutup bunu bir gürültü fonksiyonuna vererek 16K gerçek ağırlık üretirseniz, ağırlık başına depolama boyutunu 1 bitin altına indirebilirsiniz.
Bu ay ve gelecek ay oyunu değiştirecek yeni modellerin peş peşe çıkacağını düşünüyorum, heyecan verici. Ornith kesinlikle denenmeye değer.
Bunu duymak istemeyenler olabilir ama çıkarım sağlayıcılarının token maliyetinin yerel çalıştırmadaki elektrik maliyetinden ucuz olduğunu düşünüyorum.
Basitleştirmek için yalnızca çıktı üretimini hesaplarsak, saniyede 5 token saatte 18.000 token eder ve sağlayıcı maliyeti yaklaşık 0,005 dolardır. Sunucunun çıkarım sırasında yaklaşık 500 W tükettiğini ve elektrik fiyatının kWh başına 0,3 dolar olduğu Almanya’yı baz alırsak, aynı miktarı yerelde üretmek 0,15 dolara gelir; yani 30 kat daha pahalıdır.
Gizlilik konusunda endişeniz varsa yerel çalıştırma hâlâ iyidir, ancak çıkarım sağlayıcılarına göre çok daha verimsiz olduğunu bilmek gerekir. Yeni GPU’lar çıkarım verimliliğini artırdıkça bu fark da ciddi biçimde açılacaktır.
Başta 180 bin token olarak yanlış hesaplamıştım ama aslında 18.000 token; dolayısıyla elektriği neredeyse bedavaya kullanmıyorsanız rekabet etmek zor. Sağlayıcılar küçük modeller için hâlâ H200/H100 kullanıyor olmalı; GB300’e ya da gelecek yılın Ruby GPU’larına geçtiklerinde çıkarım maliyeti otuzda bire düşecek ve yerel modellerin başlıca değeri gizlilik olacak gibi görünüyor.
Bir saatte 3,6 milyon giriş token’ı işleyebilir ya da 144.000 token üretebilir; elektrik maliyeti yaklaşık 0,15 dolar. Sonnet ile aynı miktarı işlemek giriş için 7,2 dolar, üretim için 1,4 dolar eder; yani bulut üretimde 10 kat, işlemede ise neredeyse 50 kat daha pahalı.
Çıkarım sağlayıcıları büyük borç yüküyle pazar payı için yarışıyor; fiyatların kesinlikle artacağı açık.
Yapay zekayı topluluğun doğrudan kontrol edebileceği kadar demokratikleştirirseniz veri merkezi sorununu da çözebilir, sansür ve hizalama düzeyini de topluluk demokratik biçimde belirleyebilir. Geohotz’un bazı yazılarına benzer bir fikir.
Açık kaynak modeller yakında ikinci el donanımla ucuza hizmet verilebilecek kadar iyi ve verimli hâle gelecek. Küçük her toplulukta teknolojiye yatkın bir kişi birkaç yüz dolarlık başlangıç maliyetini toplarsa, sonrasında elektrik masrafı olmadan neredeyse ücretsiz işletilebilir.
https://solar.lowtechmagazine.com/
Yerel alternatif olmasaydı bulut model fiyatları çok daha pahalı olurdu.
Bu neslin çift Xeon’ları yük altındayken 300 W’tan fazla tüketme olasılığı yüksek. ABD ortalama elektrik fiyatıyla günde 1,35 dolar eder; yazın bulunduğu alanı soğutmanız gerekiyorsa daha da artar.
Prompt işleme süresini yok saysanız ve 24 saat çalıştırsanız bile günde yaklaşık 400 bin token üretir; yani 1 milyon çıktı token’ı başına yaklaşık 0,30 dolar. Tesadüfen bu, OpenRouter’da bu modelin güncel fiyatıyla aynı, ancak OpenRouter’ın üretim hızı 8 kat daha yüksek.
Verilerin ev dışına çıkmamasını sağlamak gibi yerel LLM denemek için pek çok neden var, ancak maddi olarak kazançlı çıkmak zor. Evdeki yerel çıkarım donanımına çok daha fazla para yatırmış biri olarak, eğlenceli olsa da bir tasarruf yöntemi olmadığını düşünüyorum.
GPU olmadan çift Xeon ve 256 GB DDR4 üzerinde çeşitli modelleri çalıştırma sonuçlarını derledim.
https://gist.github.com/hparadiz/f3596d00a62d8ebb2dadcc46ee5822c7
Oldukça yavaş sayılır. 13 yıllık bir CPU’da bile saniyede 8–12 token alıyorum; bağlam boyutuna ve diğer ayarlara göre değişebilir.
https://news.ycombinator.com/item?id=48354801
Asıl yazının yazarıyım. Görünüşe göre orijinal yorum bir nedenle şikâyet edilip işleme alınmış. Düzeltmeleri üst projede PR #2138 olarak açtım: https://github.com/ikawrakow/ik_llama.cpp/pull/2138
Bu StoreVirtual cihazında yazılım kurmak için kullanılabilecek pek port yok gibi görünüyor. Sadece USB portu var gibi; kurulumun seri konsol üzerinden mi yapıldığını merak ediyorum.
Aynı yapılandırmayla 2013 Mac Pro’da Gemma 4 26B çalıştırıyor ve saniyede yaklaşık 5 token alıyorum. Çift ekran kartı burada işe yaramıyor ama bazı işler için yeterince pratik.
Cuma günü gelince kendim denemeyi planlıyorum, heyecanlıyım.
https://echalupa.com/blog/mac-pro-6-1-llama-cpp-firepro-d300-vulkan-ubuntu
https://matthewgribben.com/blog/mac-pro-6-1-llama-cpp-firepro-d700-vulkan-ubuntu
Bodrumdaki kurulumu bizzat gördüm; gerçekten harika. Bir dahaki sefere 3D yazıcıyı da tanıtırsan iyi olur.
Biraz ilgili bir video: Pentium 4 üzerinde LLM çalıştırıyor ve buna NetburstGPT takma adını vermiş. Elbette çok yavaş.
https://www.youtube.com/watch?v=ILV-eu90te8