Menjalankan Gemma 4 26B pada Xeon berusia 13 tahun tanpa GPU dengan kecepatan 5 token per detik
(neomindlabs.com)- Pada server berbasis dual Xeon E5-2690 v2 keluaran 2013 dan DDR3, Gemma 4 26B-A4B Q8_0 dijalankan hanya dengan CPU, mencapai sekitar 5,2 token/detik untuk decoding dan sekitar 16 token/detik untuk evaluasi prompt
- Jalur cepat di
ik_llama.cppmengasumsikan AVX2·FMA3, tetapi CPU Ivy Bridge hanya mendukung AVX1, sehingga diperlukan perubahan kompilasi untuk build non-AVX2 dan fallback komputasi - Graph builder selalu membuat
MOE_FUSED_UP_GATEdanFUSED_UP_GATE, tetapi dispatcher non-AVX2 tidak memiliki jalur penanganannya, sehingga sekitar 240 tensor per forward pass tidak pernah dihitung dan menghasilkan keluaran multibahasa yang tampak lancar namun kacau - Claude menemukan bug tersebut lewat instrumentasi logit dan analisis kode, lalu mengganti operasi terfusi itu dengan dua
ggml_mul_mat_iddanggml_fused_mul_unary, sementara pengguna menjalankan eksperimen dan menentukan acuan hasil yang benar - Server enterprise lama masih bisa dimanfaatkan sebagai cadangan lokal saat API berbayar bermasalah atau untuk pekerjaan batch yang lambat, tetapi
--run-time-repackyang membuat layout khusus AVX2 tidak boleh digunakan
Lingkungan eksekusi pada server penyimpanan berusia 13 tahun
- Perangkat HP StoreVirtual bekas pakai ini menggunakan dual Xeon E5-2690 v2 keluaran 2013 dan memori DDR3, tanpa GPU
- Karena berasal dari generasi Ivy Bridge, CPU ini hanya mendukung AVX1 dan tidak mendukung AVX2 maupun FMA3
- Awalnya dibuat untuk penyimpanan disk, dan biaya pembeliannya di bawah 300 dolar
- Model yang dijalankan adalah Gemma 4 26B-A4B dari Google, model mixture-of-experts (MoE) berbobot terbuka dengan 26 miliar parameter
- Pada model terkuantisasi Q8_0, decoding diukur sekitar 5,2 token/detik dan evaluasi prompt sekitar 16 token/detik
Kasus Xeon keluaran 2016 yang menjadi titik awal
- Artikel Hacker News A 10 year old Xeon is all you need membagikan contoh menjalankan Gemma 4 pada Xeon tunggal keluaran 2016 dengan 128GB DDR3 tanpa GPU
- Konfigurasi itu memakai ik_llama.cpp dan sekitar 25 flag eksekusi yang detail
- speculative decoding
- routing MoE yang mempertimbangkan CPU
- flash attention untuk CPU
- repacking bobot saat runtime
- Pendekatan yang sama diterapkan ke server Ivy Bridge, tetapi eksekusi berhenti sejak tahap awal
- Berbeda dari CPU Broadwell keluaran 2016, E5-2690 v2 tidak memiliki AVX2 dan FMA3
- Instruction set ini baru tersedia mulai Haswell tahun 2014, yaitu generasi v3 Intel, dan kernel cepat ditulis dengan asumsi itu tersedia
Diagnosis dan patch dengan bantuan Claude
- Setelah menerima informasi kegagalan startup, Claude mengidentifikasi perbedaan instruction set CPU sebagai penyebabnya
- Melanjutkan upaya sebelumnya yang belum tuntas dengan model gratis, Claude memperbaiki jalur C++ yang penting bagi performa agar bisa fallback dengan benar pada CPU sebelum AVX2
- Pekerjaan ini tidak selesai hanya dengan satu permintaan
fix it- membaca kode C++ berorientasi performa yang ditulis pengembang lain
- menganalisis mengapa kernel tidak valid pada mikroarsitektur tertentu
- menghindari jalur yang tidak didukung tanpa membuang optimisasi yang sudah ada di fork
- Alih-alih menulis sendiri fallback kernel C++, pengguna berperan menjalankan eksperimen, membaca output, menentukan pertanyaan berikutnya, dan menilai acuan hasil yang benar
- Diagnosis dan patch dilakukan oleh instance Claude yang berjalan di server tersebut
Jalur operasi yang rusak pada build non-AVX2
ik_llama.cppyang dipakai untuk inferensi Gemma 4 MoE adalah fork darillama.cppdan pada dasarnya menganggap AVX2 sebagai syarat minimum- Saat build dengan
GGML_USE_IQK_MULMATdimatikan, sebagian besar jalur cepat dikeluarkan dan fallback ke operasi skalar/SSE umum- Untuk perkalian matriks Q8_0 biasa, fallback ini bekerja
- Namun, fallback tidak diterapkan pada dua operasi graph
- Jaringan feedforward MoE di Gemma 4 menghasilkan operasi berikut
MOE_FUSED_UP_GATE: operasi terfusi yang menggabungkan perkalian matriks gate dan up per expert dengan SwiGLUFUSED_UP_GATE: versi operasi padat yang dipakai pada layer non-MoE
- Kedua operasi di compute dispatcher dilindungi oleh kondisi
GGML_USE_IQK_MULMAT, tetapi graph builder tetap membuat operasinya tanpa syarat- Dispatcher pada build non-AVX2 tidak memiliki
caseuntuk menangani enum tersebut - Operasi jatuh ke cabang default, sehingga tensor tujuan untuk seluruh jaringan feedforward expert diam-diam tidak pernah dihitung
- Dispatcher pada build non-AVX2 tidak memiliki
- Gemma 4 26B memakai 8 expert aktif per token di 30 layer, sehingga pada tiap forward pass sistem mengonsumsi sekitar 240 tensor berisi nilai sisa yang tertinggal di buffer memori
Petunjuk yang terlihat dari output kacau
- Output yang salah tampak lancar, tetapi sebenarnya berupa string multibahasa tanpa makna
- ID token tersebar merata di seluruh 262.000 kosakata
- Bahasa Thai, bahasa Korea, sentinel
<unused>, dan potongan bahasa Inggris muncul dengan frekuensi mirip
- Pada temperatur 0, output bersifat deterministik, hasil single-thread dan multi-thread juga identik hingga tingkat byte, dan tidak muncul NaN
- Di setiap layer, konstanta besar mendorong hidden state sehingga softmax akhir menjadi datar
- Claude menginstrumentasi logit mentah sebelum sampling untuk mencetak 5 token teratas, rentang, rata-rata, dan jumlah NaN
- Rata-rata logit token prediksi pertama bukan mendekati 0, melainkan +16
- Sekitar 80% seluruh kosakata memiliki logit positif
- Karena biasnya konsisten, bukan korupsi acak, pencarian dipersempit ke dugaan bahwa sebagian besar hidden state memakai memori yang belum diinisialisasi yang menyisakan nilai floating-point positif kecil
Perbaikan dalam tiga tahap
- Patch terdiri dari tiga commit di atas
mainpada fork tersebut -
Perbaikan kompilasi non-AVX2
- Cabang skalar
#elsediiqk_quantize.cppuntukquantize_row_q8_0_x4danquantize_row_q8_1_x4_Tternyata tetap merujuk helper AVX2 sepertihsum_i32_8 - Cabang itu ditulis ulang menjadi loop skalar portabel
- Sejumlah pemanggilan IQK yang bocor ke
ggml.cdanggml-quants.cdiberi guard#if GGML_USE_IQK_MULMAT - Include yang hilang ditambahkan agar
iqk_cpu_ops.cppbisa dikompilasi secara mandiri - Tanpa perbaikan ini, fork tersebut memang tidak bisa dibuild di hardware non-AVX2
- Cabang skalar
-
Fallback graph saat runtime
- Alih-alih memperbaiki dispatcher, graph builder diubah agar pada build tersebut menghasilkan operasi yang memang sudah punya jalur komputasi
- Di
ggml_moe_up_gate, bobot terfusiup_gate_expsditangani saatGGML_USE_IQK_MULMATdimatikan - Bentuk tensor adalah
[n_embd, 2*n_ff, n_experts], dengan separuh pertama untuk gate dan separuh kedua untuk up - Tensor itu dipisah menjadi dua slice
ggml_view_3d ggml_mul_mat_iddijalankan pada masing-masing slice- Kedua hasil digabung dengan
ggml_fused_mul_unary(gate, up, SILU) - Jika bobot gate dan up memang sudah terpisah, maka tanpa slicing digunakan dua
ggml_mul_mat_iddan operasi fused multiply-unary - Fallback yang sama juga diterapkan pada
ggml_fused_up_gateyang dipakai di layer non-MoE mul_mat_idmemakai implementasi ggml dasar, danfused_mul_unarymenangani SILU dan perkalian sekaligus, sehingga semua operasi penyusunnya sudah memiliki implementasi non-IQK- Seluruh perubahan berada di bawah
#if !GGML_USE_IQK_MULMAT, jadi hasil build AVX2 tetap identik bit demi bit dengan sebelumnya
-
Perapihan stub CI
- Stub
#elsedi sumber IQK berbeda dariiqk_mul_mat.h, sehinggaci/run.shjuga tidak bisa dibuild pada hardware non-AVX2 - Include
<cstdint>tidak ada - Sebagian stub memiliki parameter awal ekstra yang tidak perlu atau tidak memiliki parameter
sinks, sehingga signaturenya berbeda - Sebagian fungsi bahkan tidak punya stub sama sekali, menyebabkan undefined reference saat linking
- Setelah stub disesuaikan dengan header, test suite akhirnya bisa dijalankan di lingkungan non-AVX2
- Stub
Biaya performa fallback dan bug repacking
- Fallback ini menambah biaya karena menjalankan dua
mul_mat_idalih-alih satu kernel terfusi - CPU tersebut memang sudah terbatas oleh bandwidth memori, dan kernel terfusi asli juga khusus AVX2, jadi tidak ada jalur eksekusi lama di lingkungan ini yang benar-benar dikorbankan
- Performa akhirnya adalah sekitar 5,2 token/detik untuk decoding dan sekitar 16 token/detik untuk evaluasi prompt pada MoE 26B-A4B
--run-time-repackmenyusun ulang bobot terkuantisasi saat startup ke format interleave khusus AVX2, yaituQ8_0_R8- Ini adalah bug terpisah yang kembali merusak output pada lingkungan AVX1
- Patch saat ini tidak memperbaikinya, sehingga flag tersebut dihapus dari skrip eksekusi
Proses mempersempit penyebab
- Ketidakcocokan instruction set mudah dikonfirmasi, tetapi masalah dispatcher yang diam-diam jatuh ke cabang default tanpa error jauh lebih sulit ditemukan
- Sejumlah kandidat dieliminasi lewat review kode
- Helper RMSNorm tampak benar
- Fallback AVX1 untuk
ggml_vec_dot_q8_0_q8_0juga tampak benar - Karena hasil single-thread identik bit demi bit, bug threading bisa dikesampingkan
- Dari rata-rata logit yang tetap di +16 dan token berekor panjang yang memiliki nilai serupa, disimpulkan bahwa sebagian besar residual stream belum terinisialisasi
- Setelah mencari
#if GGML_USE_IQK_MULMATdi dispatcher, dua jalur operasi yang hilang ditemukan dalam waktu sekitar satu menit
Syarat reproduksi dan ruang pemanfaatan
- Syarat reproduksi pada perangkat sebelum AVX2 adalah sebagai berikut
- Hardware: dual Xeon E5-2690 v2, Ivy Bridge, AVX1, DDR3, tanpa GPU
- Build:
ik_llama.cppdari branch patch dikompilasi tanpaGGML_USE_IQK_MULMAT - Model: Gemma 4 26B-A4B Q8_0
- Eksekusi: gunakan flag CPU
ik_llama.cppyang umum, tetapi tanpa--run-time-repack
- Perubahan lengkapnya dapat dilihat di ikawrakow/ik_llama.cpp PR #2138
- Pada saat penulisan, PR ini masih terbuka dan menunggu tinjauan maintainer, jadi eksekusi harus dilakukan langsung dari branch
- Bug yang muncul pada perangkat serupa bisa dilaporkan di thread PR
- Menyimpan model lokal di server enterprise lama dapat menjadi alternatif ketika API berbayar berhenti tersedia, atau untuk menangani pekerjaan batch lambat yang tidak cocok dengan skema biaya per token
- Pendekatan ini lebih menekankan kemampuan menggali kode asing dan sistem lama secara langsung ketimbang mengandalkan layanan berlangganan, dan pola yang sama juga berlaku untuk merawat aplikasi Rails berusia 15 tahun atau database yang sudah ditinggalkan penanggung jawabnya
1 komentar
Komentar Hacker News
Diperkirakan pada pertengahan 2027, model mixture-of-experts (MoE) dengan lebih dari 200 miliar parameter akan bisa dijalankan di hardware konsumen biasa
Saya menjalankan Qwen3.6-35B-A3B secara lokal di Mac 16GB dan mendapatkan 7–9 token per detik: https://github.com/deepanwadhwa/samosa-chat
Artinya, model setara GPT-4 bisa dijalankan secara lokal di MacBook Air RAM 16GB dengan kecepatan seperti ini
Ini sudah berada di kisaran jumlah parameter aktif pada sebagian besar model 200 miliar parameter ke atas, jadi jika Prism mau, mereka bisa merilis model seperti itu. Namun, jaringan saraf rekursif seperti HRM tidak memerlukan parameter sebanyak itu, jadi apakah skala sebesar itu benar-benar perlu masih bisa diperdebatkan: https://huggingface.co/sapientinc/HRM-Text-1B
Misalnya, kalau setiap lapisan hanya punya satu seed 256-bit lalu memasukkannya ke fungsi noise untuk menghasilkan 16K bobot nyata, ukuran penyimpanan per bobot bisa ditekan menjadi kurang dari 1 bit
Sepertinya model-model baru yang akan mengubah peta persaingan bakal keluar berturut-turut bulan ini dan bulan depan, jadi saya antusias. Ornith benar-benar layak dicoba
Mungkin ada yang tidak suka mendengarnya, tetapi saya rasa biaya token dari penyedia inferensi lebih murah daripada biaya listrik untuk menjalankan model secara lokal
Untuk menyederhanakan, jika hanya menghitung pembuatan output, 5 token per detik berarti 18.000 token per jam, dan biaya dari penyedia sekitar $0,005. Jika server memakai sekitar 500W saat inferensi dan kita pakai patokan Jerman dengan tarif listrik $0,3 per kWh, maka menghasilkan jumlah yang sama secara lokal memerlukan $0,15, jadi 30 kali lebih mahal
Jika privasi menjadi kekhawatiran, menjalankan secara lokal tetap bagus, tetapi kita perlu sadar bahwa ini jauh lebih tidak efisien daripada penyedia inferensi. GPU baru akan terus meningkatkan efisiensi inferensi, sehingga kesenjangan ini juga akan makin melebar
Awalnya saya salah menghitung menjadi 180.000 token, tetapi sebenarnya 18.000 token, jadi kecuali listrik Anda nyaris gratis, sulit untuk bersaing. Penyedia juga kemungkinan masih memakai H200/H100 untuk model kecil, tetapi jika beralih ke GB300 atau GPU Ruby tahun depan, biaya inferensi bisa turun menjadi seper-30, sehingga nilai utama model lokal nantinya mungkin adalah privasi
Dalam satu jam, itu berarti bisa memproses 3,6 juta token input atau menghasilkan 144.000 token, dengan biaya listrik sekitar $0,15. Jika jumlah yang sama diproses dengan Sonnet, inputnya akan menelan $7,2 dan generasinya $1,4, jadi cloud 10 kali lebih mahal untuk generasi dan hampir 50 kali lebih mahal untuk pemrosesan
Penyedia inferensi sedang bersaing memperebutkan pangsa pasar sambil menanggung utang besar, jadi harganya jelas akan naik
Jika AI didemokratisasi sampai komunitas bisa benar-benar mengendalikannya, masalah data center juga bisa teratasi, dan tingkat sensor maupun alignment bisa diputuskan komunitas secara demokratis. Gagasannya mirip dengan sebagian tulisan Geohotz
Model open source sebentar lagi akan cukup bagus dan efisien untuk dilayani murah memakai hardware bekas. Di tiap komunitas kecil, cukup ada satu orang yang melek teknologi untuk mengumpulkan biaya awal beberapa ratus dolar, lalu setelah itu bisa dijalankan nyaris gratis tanpa biaya listrik
https://solar.lowtechmagazine.com/
Jika tidak ada alternatif lokal, harga model cloud akan jauh lebih mahal
Dual Xeon generasi ini kemungkinan mengonsumsi lebih dari 300W saat dibebani. Dengan tarif listrik rata-rata di AS, biayanya sekitar 1,35 dolar per hari, dan akan lebih mahal jika ruangan perlu didinginkan pada musim panas
Jika waktu pemrosesan prompt diabaikan dan dijalankan 24 jam penuh, hasilnya sekitar 400 ribu token per hari, jadi biayanya sekitar 0,30 dolar per 1 juta token output. Kebetulan ini sama dengan harga model tersebut di OpenRouter saat ini, tetapi kecepatan generasi OpenRouter 8 kali lebih cepat
Ada banyak alasan untuk bereksperimen dengan LLM lokal, seperti menjaga agar data tidak keluar dari rumah, tetapi sulit mengatakan ini menguntungkan secara finansial. Sebagai orang yang sudah menginvestasikan jauh lebih banyak uang pada perangkat inferensi lokal di rumah, menurut saya ini menyenangkan, tetapi bukan cara untuk berhemat
Sudah dirangkum hasil menjalankan beberapa model tanpa GPU di dual Xeon dan DDR4 256GB
https://gist.github.com/hparadiz/f3596d00a62d8ebb2dadcc46ee5822c7
Ini tergolong cukup lambat. Saya mendapatkan 8~12 token per detik bahkan di CPU berusia 13 tahun, dan hasilnya bisa berbeda tergantung ukuran konteks dan pengaturan lain
https://news.ycombinator.com/item?id=48354801
Saya penulis postingan aslinya. Tampaknya komentar asli saya sempat dilaporkan karena suatu alasan. Perbaikannya sudah saya buka sebagai PR #2138 di proyek induk: https://github.com/ikawrakow/ik_llama.cpp/pull/2138
Sepertinya tidak ada port yang layak dipakai untuk memasang perangkat lunak pada perangkat StoreVirtual ini. Hanya ada port USB, jadi saya penasaran apakah pemasangannya dilakukan lewat konsol serial
Saya menjalankan Gemma 4 26B pada Mac Pro 2013 dengan konfigurasi yang sama dan mendapatkan sekitar 5 token per detik. Kartu grafis gandanya tidak berguna untuk ini, tetapi untuk beberapa pekerjaan masih cukup praktis
Kalau barangnya sampai hari Jumat, saya berniat langsung mengujinya sendiri dan cukup menantikannya
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
Saya sudah melihat langsung konfigurasinya di ruang bawah tanah, dan memang luar biasa. Lain kali akan menyenangkan kalau printer 3D-nya juga diperlihatkan
Sebagai video yang agak terkait, ada yang menjalankan LLM di Pentium 4 dan menjulukinya NetburstGPT. Tentu saja sangat lambat
https://www.youtube.com/watch?v=ILV-eu90te8