llama.cpp แท้ถ้าอยากได้ tokens/วินาที สูงสุดและควบคุมได้ทุกอย่าง; Ollama ถ้าอยากได้ตัวติดตั้งหนึ่งคำสั่งและ API server ที่ใช้งานได้ทันที Ollama ไม่ใช่เอนจินคู่แข่ง — มันคือ service ภาษา Go ที่บรรจุ llama.cpp เป็น inference backend เอาไว้ เพิ่มระบบจัดการโมเดล (ollama pull llama3.1) และเปิด REST API บนพอร์ต 11434 คำถามจริง ๆ จึงไม่ใช่ “เอนจินไหนเร็วกว่า” แต่คือ “คุณต้องการควบคุมปุ่มปรับของเอนจินนั้นมากแค่ไหน” เพราะ Ollama ใช้ค่าเริ่มต้นแบบอนุรักษ์นิยม (quantize แบบ Q4_K_M, context ระดับปานกลาง และไม่มี flash attention จนเมื่อไม่นานมานี้) ฮาร์ดแวร์ชุดเดียวกันจึงให้ตัวเลขต่างกันได้อย่างเห็นได้ชัด ด้านล่างคือสิ่งที่ต่างกันจริง ต้นทางของช่องว่างความเร็ว โมเดลตัวเดียวกันรันในทั้งสอง และตารางตัดสินใจ
llama.cpp กับ Ollama ต่างกันอย่างไร?
llama.cpp คือ inference engine ตัวจริง: โปรเจกต์ C/C++ เดียวจากผู้สร้าง GGUF อย่าง Georgi Gerganov รันโมเดลที่ quantize แล้วบน CPU, GPU หรือผสมกันได้ มันให้ llama-cli สำหรับส่งพรอมต์ครั้งเดียวจบ และ llama-server — เซิร์ฟเวอร์ HTTP ที่รองรับ OpenAI — พร้อม flag ปรับจูนทุกตัวที่เอนจินรองรับ: ย้าย layer ขึ้น GPU, quantize KV-cache, speculative decoding, ตัว sampler แบบกำหนดเอง
Ollama คือผลิตภัณฑ์ที่วางทับบนเอนจินตัวนั้น มัน fork llama.cpp มาแพ็กไว้ในตัวแล้วห่อด้วย:
- model registry (
ollama pull,ollama list) พร้อมการตัดแบ่งไฟล์น้ำหนัก GGUF อัตโนมัติ - ระบบ Modelfile (สเปกลักษณะ Dockerfile สำหรับ prompt template และพารามิเตอร์)
- daemon พื้นหลังที่เก็บโมเดลให้อุ่นอยู่ใน VRAM พร้อมเปิด REST API ของตัวเอง
- การตรวจจับฮาร์ดแวร์อัตโนมัติพร้อมค่าปลอดภัยเริ่มต้น
ผลในทางปฏิบัติ: กับ Ollama คุณจัดการโมเดล; กับ llama.cpp คุณจัดการการ inference ถ้าคุณเคยอยากเปลี่ยนฟอร์แมตการ quantize, quantize KV cache, เพิ่ม context เกินค่าเริ่มต้น หรือกำหนด layer เฉพาะไว้กับ GPU นั่นคือดินแดนของ llama.cpp ที่ Ollama ซ่อนลูกบิดเหล่านี้ไว้ — อย่างตั้งใจ
| llama.cpp | Ollama | |
|---|---|---|
| มันคืออะไร | Inference engine (C/C++) | Service ที่ห่อ llama.cpp |
| การติดตั้ง | build จากซอร์สหรือผ่านแพ็กเกจ | ตัวติดตั้งหนึ่งบรรทัด ไฟล์เดียวจบ |
| รันโมเดล | llama-cli -m model.gguf + flag | ollama run llama3.1 |
| API | รองรับ OpenAI (llama-server) | REST ตัวเอง + endpoint รองรับ OpenAI |
| จัดการโมเดล | หาไฟล์ GGUF เอง | มี registry: pull/list/rm |
| ค่าเริ่มต้น | เลือกเองทุกอย่าง | ปลอดภัย: Q4_K_M, context ปานกลาง |
| อัปเดตเอนจิน | วันแรก (upstream) | ตามหลัง release ของ upstream |
| ความลึกการปรับจูน | เต็มรูปแบบ (KV quant, spec decode, sampler) | ส่งผ่านแบบจำกัด |
| เหมาะกับ | งานเรื่องประสิทธิภาพ เซิร์ฟเวอร์ edge device | มือใหม่ แล็ปท็อปทำงาน |
llama.cpp เร็วกว่า Ollama หรือไม่?
ด้วยไฟล์ GGUF เดียวกัน quantization เดียวกัน context เดียวกัน และ llama.cpp เวอร์ชันเดียวกัน — ไม่ ทั้งคู่อยู่ในระดับสัญญาณรบกวนของกันและกัน เพราะ Ollama ก็คือ llama.cpp ที่กำลังคำนวณอยู่ ทุก benchmark ที่ว่า “Ollama ช้ากว่า 30%” จริง ๆ คือการเทียบค่าเริ่มต้นกัน ช่องว่างเกิดจากสามที่:
- การเลือก quantization registry ของ Ollama ใช้ Q4_K_M เป็นค่าเริ่มต้น รันโมเดลตัวเดิมแบบ Q5_K_M หรือ Q6_K ผ่าน llama.cpp แล้วคุณจะได้คุณภาพต่อ token ที่ดีกว่าด้วยความเร็วใกล้เคียงกัน — หรือเลือก Q4_0/IQ4 สำหรับความเร็วดิบ ๆ
- Flash attention กับการ quantize KV-cache
--flash-attnบวก-ctk q8_0 -ctv q8_0หด KV cache ได้มาก ซึ่งเพิ่ม tokens/วินาที ที่ context ยาวและอัด context ใหญ่ขึ้นลง VRAM เดิมได้ Ollama เปิดสิ่งเหล่านี้ให้เพียงบางส่วน - ความล่าช้าของเวอร์ชัน llama.cpp รับ optimization ระดับ kernel ทุกสัปดาห์ ขณะที่ Ollama ค่อย ๆ merge จาก upstream ตามจังหวะตัวเอง build llama.cpp ใหม่ ๆ วัดแล้วเร็วกว่าไบนารี Ollama อายุหลายเดือนบนเครื่องเดียวกันได้ — จนกว่า Ollama จะตามทัน
คำสั่ง benchmark แบบเร็ว ไม่เลือกฝ่ายเอนจิน — รายงานทั้งความเร็วประมวลผลพรอมต์และการสร้างข้อความ:
./build/bin/llama-bench -m Llama-3.1-8B-Instruct-Q4_K_M.gguf -ngl 99 -fa 1 รันกับไฟล์โมเดลของ Ollama เอง (~/.ollama/models/blobs/... เปลี่ยนชื่อเป็น .gguf) แล้วคุณมักได้ตัวเลขตรงกับ Ollama เป๊ะ — จากนั้นเอาชนะด้วยการเติม -ctk q8_0 ที่ context 16k
รันโมเดลตัวเดียวกันในทั้งสองอย่างไร?
ทั้งคู่กิน GGUF ขั้นต่ำแบบครบวงจรของแต่ละฝ่าย:
# --- เส้นทาง Ollama: ติดตั้ง ดึงโมเดล เปิดเสิร์ฟ ---
curl -fsSL https://ollama.com/install.sh | sh
ollama run llama3.1:8b # ดาวน์โหลด Q4_K_M โหลดเข้า VRAM เปิดหน้าแชต
# API ของมัน แบบที่รองรับ OpenAI:
curl -s http://localhost:11434/v1/chat/completions -d '{
"model": "llama3.1:8b",
"messages": [{"role": "user", "content": "Say hi in 5 words"}]
}' # --- เส้นทาง llama.cpp: build โหลด GGUF เสิร์ฟ ---
git clone https://github.com/ggml-org/llama.cpp && cd llama.cpp
cmake -B build -DGGML_CUDA=ON # หรือ -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 llama-server เปิดสคีมา OpenAI Chat Completions คำสั่ง curl ชุดเดิมที่ยิงไป http://localhost:8080/v1/chat/completions จึงใช้ต่อได้ทันที เครื่องมือที่สร้างบน OpenAI API อะไรก็ตาม — สคริปต์ เอดิเตอร์ pipeline แนว RAG — ชี้มาที่ฝ่ายไหนก็ได้ ส่วน flag คือผู้ทำงานจริง: -ngl 99 ย้ายทุก layer ขึ้น GPU, --flash-attn กับคู่ -ctk/-ctv อัด context 16k ลงการ์ด 8 GB ที่ค่าเริ่มต้นของ Ollama จะปฏิเสธ
สำหรับการเลือกไฟล์ GGUF และความหมายของป้าย quant ดู วิธีรันโมเดล GGUF ในเครื่อง
กรณีไหน Ollama เหมาะกว่า?
คนส่วนใหญ่ควรเริ่มจาก Ollama และนั่นไม่ใช่รางวัลปลอบใจ:
- อยากให้มันใช้ได้คืนนี้ หนึ่งคำสั่ง โมเดลถูกดึง API ขึ้นแล้ว llama.cpp แปลว่าต้องเลือก backend (CUDA/Vulkan/HIP/Metal) build เอง แล้วหาไฟล์น้ำหนักมาเอง
- จัดการโมเดลหลายตัวพร้อมกัน registry, การยกเลิกโหลดอัตโนมัติ และ Modelfiles ชนะการคุมโฟลเดอร์ไฟล์ GGUF ด้วยมือ
- เครื่องคุณพอ ๆ กัน ค่าเริ่มต้นของ Ollama อนุรักษ์นิยมอย่างมีเหตุผล — มันแทบต้องลงตัวและรันได้เสมอ
- อยากได้ผิว API ที่นิ่ง daemon ของ Ollama จัดการวงจรชีวิตโมเดลเพื่อให้ service ระยะยาวไม่ต้องทำเอง
เลือก llama.cpp แท้เมื่อคุณกำลังวัดประสิทธิภาพ เสิร์ฟงานในทุกขนาด รันบนมือถือหรือ Raspberry Pi ต้องการ context ยาวบน VRAM น้อย หรือต้องการฟีเจอร์ตั้งแต่วันที่มัน merge เข้า upstream ผู้ใช้สายลุยมักรันทั้งคู่: Ollama สำหรับโมเดลประจำวัน และ build llama.cpp ที่ตรึงเวอร์ชันไว้สำหรับงานเดียวที่ต้องการ 20% สุดท้าย
ถ้าการเปรียบเทียบของคุณจริง ๆ คือระหว่างแอป GUI บนเดสก์ท็อป นั่นคือแกนอื่น — ดู Ollama vs LM Studio — และการเลือกเอนจินรายงาน ดู LLM ในเครื่องที่ดีที่สุดสำหรับเขียนโค้ด ฝั่งโมเดล
แล้วควรใช้ตัวไหน?
ตัดสินใจที่การควบคุม ไม่ใช่ความเร็ว เอนจินเหมือนกัน แต่ค่าเริ่มต้นไม่เหมือน ติดตั้ง Ollama ถ้าเป้าหมายคือ “รันได้และเปิด API ได้” — คุณเสียลูกบิดไม่กี่ตัวที่คุณไม่ได้จะบิดอยู่แล้ว build llama.cpp ถ้าเป้าหมายคือ tokens/วินาที ความยาว context หรือการควบคุม quantization — ได้ลูกบิดทุกตัว แลกกับการจัดการโมเดลเอง ไม่ว่าทางไหนคุณก็รันไฟล์ GGUF ชุดเดียวกัน และการเปลี่ยนใจทีหลังใช้เวลาแค่หนึ่งบ่าย ไม่ใช่การเขียนใหม่ทั้งหมด
— mrsaynothing
— mrsaynothing
บันทึกหน้างานเรื่อง AI, Linux และ self-hosted
คุยต่อโพสต์นี้บน dev.to dev.to ↗
รับวิธีแก้ฉบับถัดไปทางอีเมล
อีเมลหนึ่งฉบับต่อหนึ่งโพสต์ แก้เสร็จแล้วไปต่อ
นี่คืออะไร?ลบไฟล์ untracked ใน Git: คู่มือ git clean ฉบับปลอดภัย
ถ้าอ่านแล้วชอบ — ผมสร้างงานแบบนี้เป็นอาชีพ จ้างผม