Raw na llama.cpp kung gusto mo ang maximum tokens/second at buong control; Ollama kung gusto mo ang one-command install at API server na gumagana out of the box. Hindi ang Ollama ang kalabang engine — isang Go service ito na nagbubuhat ng llama.cpp bilang inference backend nito, nagdaragdag ng model management (ollama pull llama3.1), at nagseserve ng REST API sa port 11434. Kaya ang totoong tanong ay hindi “aling engine ang mas mabilis” kundi “gaano kalaking control ang gusto mo sa mga knobs ng engine na iyan”. Dahil konservative ang defaults ng Ollama (Q4_K_M quantization, kaunting context, walang flash attention hanggang kamakailan), mapapansing magkaiba ang numbers ng identical na hardware. Sa ibaba: ang talaga namang pinagkaiba, saan nagmumula ang speed gap, ang same model na tumatakbo sa pareho, at decision table.
Ano ang pagkakaiba ng llama.cpp at Ollama?
Ang llama.cpp ang inference engine: isang C/C++ project mula kay Georgi Gerganov, ang GGUF creator, na tumatakbo ng quantized models sa CPU, GPU, o halo ng pareho. Binibigyan ka nito ng llama-cli para sa one-shot prompts at llama-server — OpenAI-compatible na HTTP server — plus bawat tuning flag na sinusuportahan ng engine: GPU layer offload, KV-cache quantization, speculative decoding, custom samplers.
Ang Ollama ay produktong naka-layer sa ibabaw ng engine na iyan. Ni-fork at ni-vendor nito ang llama.cpp, tapos binabalot ito ng:
- model registry (
ollama pull,ollama list) na may automatic na GGUF weight splitting, - Modelfile system (isang Dockerfile-like na spec para sa prompt templates at parameters),
- background daemon na panatilihing mainit ang mga models sa VRAM at naglalantad ng sariling REST API,
- automatic hardware detection na may ligtas na defaults.
Ang praktikal na epekto: sa Ollama, mga models ang hinahawakan mo; sa llama.cpp, inference. Kung mininasid mo na kailanman na palitan ang quantization format, i-quantize ang KV cache, itaas ang context lampas sa default, o i-pin ang mga partikular na layers sa GPU, teritoryo ng llama.cpp iyan. Itinatago ng Ollama ang kalakhan ng mga dial na iyan — sadya.
| llama.cpp | Ollama | |
|---|---|---|
| Ano ito | Inference engine (C/C++) | Service na bumabalot sa llama.cpp |
| Install | Build mula source o package | One-line installer, iisang binary |
| Patakbuhin ang model | llama-cli -m model.gguf + flags | ollama run llama3.1 |
| API | OpenAI-compatible (llama-server) | Sariling REST + OpenAI-compatible endpoint |
| Model management | Ikaw ang kukuha ng GGUF files | Registry: pull/list/rm |
| Defaults | Ikaw ang pumipili ng lahat | Ligtas: Q4_K_M, kaunting context |
| Engine updates | Day-one (upstream) | Naiiwan sa likod ng upstream releases |
| Lalim ng tuning | Buong (KV quant, spec decode, samplers) | Limitadong passthrough |
| Pinakamainam para sa | Performance work, servers, edge devices | Panimula, dev laptops |
Mas mabilis ba ang llama.cpp kaysa Ollama?
Sa same GGUF file, same quantization, same context, at same bersyon ng llama.cpp — hindi, halos magkalapit sila sa ingay, dahil ang Ollama ay llama.cpp na gumagawa ng math. Bawat benchmark na nakikita mong “30% mas mabagal ang Ollama” ay talaga namang paghahambing ng mga defaults. Tatlong lugar ang pinagmumulan ng gap:
- Pagpili ng quantization. Q4_K_M ang default ng registry ng Ollama. I-run ang same model bilang Q5_K_M o Q6_K mula sa llama.cpp at mas magandang quality kada token sa katulad na bilis — o pumili ng Q4_0/IQ4 para sa hilaw na bilis.
- Flash attention at KV-cache quantization. Ang
--flash-attnplus-ctk q8_0 -ctv q8_0ay malaking pagliit ng KV cache, na nagtataas ng tokens/second sa mahabang context at nagpapakasya ng mas malalaking contexts sa same VRAM. Bahagi lang nito ang inilalantad ng Ollama. - Version lag. Linggu-linggo ang kernel optimizations ng llama.cpp; sariling iskedyul ang pagsasama ng Ollama sa upstream. Kaya namamalas na mas mabilis ang sariwang llama.cpp build kaysa buwanang gulang na Ollama binary sa same box — hanggang sa humabol ang Ollama.
Mabilisang benchmark command, engine-agnostic — iniuulat nito ang prompt evaluation at generation speed:
./build/bin/llama-bench -m Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99 -fa 1 I-run laban sa sariling model file ng Ollama (~/.ollama/models/blobs/..., pinalitan ng pangalan ng .gguf) at karaniwang eksaktong tutugma ka sa numbers ng Ollama — tapos tatalunin mo sila sa -ctk q8_0 sa 16k context.
Paano mo tatakbo ang same model sa pareho?
Kumakain ng GGUF ang pareho. Minimal na end-to-end para sa bawat isa:
# --- Ollama path: install, pull, serve ---
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b # downloads Q4_K_M, loads into VRAM, opens a chat
# its API, OpenAI-compatible style:
curl -s http://localhost:11434/v1/chat/completions -d '{
"model": "llama3.1:8b",
"messages": [{"role": "user", "content": "Say hi in 5 words"}]
}' # --- llama.cpp path: build, download GGUF, serve ---
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON # or -DGGML_VULKAN=ON / -DGGML_HIP=ON
cmake --build build --config Release -j
huggingface-cli download bartowski/Meta-Llama-3.1-8B-Instruct-GGUF
Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf --local-dir models
./build/bin/llama-server -m models/Meta-Llama-3.1-8B-Instruct-Q4_K_M.gguf
-ngl 99 --ctx-size 16384 --flash-attn -ctk q8_0 -ctv q8_0 --port 8080 Ibinubuyad ng llama-server ang OpenAI Chat Completions schema, kaya ang same curl laban sa http://localhost:8080/v1/chat/completions ay gagana nang walang pagbabago. Kahit anong tool na ginawa para sa OpenAI API — scripts, editors, RAG pipelines — pwedeng manuro sa alinman. Ang mga flags ang totoong gumagawa: ino-offload ng -ngl 99 ang bawat layer sa GPU, at pinapanatili ng --flash-attn plus ang -ctk/-ctv pair ang 16k context sa loob ng 8 GB card na tatanggihan ng defaults ng Ollama.
Para sa pagpili mismo ng GGUF file at kahulugan ng mga quant labels, tingnan ang paano mag-run ng GGUF models locally.
Kailan mas makatuwiran ang Ollama?
Dapat magsimula sa Ollama ang kalakhan, at hindi ito consolation prize:
- Gusto mong gumana ito ngayong gabi. Isang command, nakuha ang model, nakaangat ang API. Ang llama.cpp ay pagpili ng backend (CUDA/Vulkan/HIP/Metal), pag-build, at manwal na paghakot ng weights.
- Nagpapalit-palit ka ng maraming models. Tatalo ng registry, automatic unloading at Modelfiles ang manwal na paghawak ng mga directory ng GGUF files.
- Maliit ang machine mo. May dahilan ang konservative na defaults ng Ollama — halos laging pumapasok at tumatakbo ang mga ito.
- Gusto mo ng stable na API surface. Hinahawakan ng daemon ng Ollama ang mga model lifecycle para hindi na kailangan ng long-running na service.
Pumili ng raw na llama.cpp kapag nagbe-benchmark ka, nagseserve sa kahit anong scale, tumatakbo sa telepono o Raspberry Pi, nangangailangan ng mahabang context sa maliit na VRAM, o gusto mo ang feature sa araw mismo ng merge nito sa upstream. Kadalasang pareho ang tinatakbo ng power users: Ollama para sa daily driver models, naka-pin na llama.cpp build para sa isang workload na nangangailangan ng huling 20%.
Kung pagitan ng desktop GUI apps ang totoong comparison mo, ibang axis iyan — tingnan ang Ollama vs LM Studio — at para sa engine choice kada trabaho, saklaw ng best local LLMs for coding ang model side.
Alin ang gagamitin mo?
Pasya kada control, hindi kada bilis. Same ang mga engine; hindi same ang defaults. Mag-install ng Ollama kung ang “tumatakbo at nagseserve ng API” ang layunin — mawawalan ka ng ilang knobs na hindi mo naman ikikiling. Mag-build ng llama.cpp kung ang tokens/second, context length, o quantization control ang layunin — makakakuha ka ng bawat knob, sa halagang ikaw mismo ang mangangasiwa ng models. Alinman, same GGUF files ang tinatakbo mo, at ang paglipat sa huli ay isang hapon, hindi rewrite.
At kapag ang models mismo ang palaisipan — files, quants, VRAM — inilalakad ng GGUF local setup guide ang Ollama, llama.cpp at vLLM command-command.
FAQ
Wrapper lang ba ang Ollama sa llama.cpp?
Sa kasaysayan, oo — derivative ng llama.cpp ang engine nito. Binabayaran mo ang direkta na control ng model registry, isang API at mga makatwirang default.
Alin ang mas mabilis, llama.cpp o Ollama?
Same GGUF, same math — patas sa defaults. Ang mga tuning na panalo (layer offload, context, batch size) ay pag-aari ng llama.cpp.
Pwedeng gamitin ang same GGUF sa pareho?
Oo — ang Modelfile na bumabalot sa same file ay naglo-load nang pareho. Pumili kada workflow, hindi kada model.
— mrsaynothing
— mrsaynothing
Mga field note sa AI, Linux at self-hosting.
Pag-usapan ang post na ito sa dev.to dev.to ↗
Ang susunod na how-to sa email
Isang email kada post. Ayusin, tuloy sa susunod.
ano ito?Git Remove Untracked Files: Ligtas na git clean Guide
Nag-e-enjoy ka ba sa mga sulat na ito? Ito ang tinatayo ko para sa trabaho. i-hire ako