กลับไปที่บล็อก

llama.cpp vs Ollama: ปี 2026 ควรใช้ตัวไหน

10 กันยายน 2569

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.cppOllama
มันคืออะไรInference engine (C/C++)Service ที่ห่อ llama.cpp
การติดตั้งbuild จากซอร์สหรือผ่านแพ็กเกจตัวติดตั้งหนึ่งบรรทัด ไฟล์เดียวจบ
รันโมเดลllama-cli -m model.gguf + flagollama 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%” จริง ๆ คือการเทียบค่าเริ่มต้นกัน ช่องว่างเกิดจากสามที่:

  1. การเลือก quantization registry ของ Ollama ใช้ Q4_K_M เป็นค่าเริ่มต้น รันโมเดลตัวเดิมแบบ Q5_K_M หรือ Q6_K ผ่าน llama.cpp แล้วคุณจะได้คุณภาพต่อ token ที่ดีกว่าด้วยความเร็วใกล้เคียงกัน — หรือเลือก Q4_0/IQ4 สำหรับความเร็วดิบ ๆ
  2. Flash attention กับการ quantize KV-cache --flash-attn บวก -ctk q8_0 -ctv q8_0 หด KV cache ได้มาก ซึ่งเพิ่ม tokens/วินาที ที่ context ยาวและอัด context ใหญ่ขึ้นลง VRAM เดิมได้ Ollama เปิดสิ่งเหล่านี้ให้เพียงบางส่วน
  3. ความล่าช้าของเวอร์ชัน 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 ↗

รับวิธีแก้ฉบับถัดไปทางอีเมล

อีเมลหนึ่งฉบับต่อหนึ่งโพสต์ แก้เสร็จแล้วไปต่อ

self-hosted · ไม่มีบุคคลที่สาม · ยกเลิกได้ในคลิกเดียว

นี่คืออะไร?

ลบไฟล์ untracked ใน Git: คู่มือ git clean ฉบับปลอดภัย

ถ้าอ่านแล้วชอบ — ผมสร้างงานแบบนี้เป็นอาชีพ จ้างผม