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

วิธีรันโมเดล GGUF ในเครื่อง: Ollama, llama.cpp และ vLLM

7 กันยายน 2569

โหลดไฟล์ .gguf มาแล้วแต่ไม่รู้จะรันยังไง? ทางที่เร็วที่สุด: ollama run hf.co/<repo>:Q4_K_M — Ollama ดึง GGUF จาก Hugging Face มาให้ตรง ๆ แล้วเปิดให้ใช้ได้เลย GGUF เป็นฟอร์แมตโมเดลไฟล์เดียวที่ llama.cpp เป็นผู้ริเริ่ม และตอนนี้เครื่องมือ LLM ในเครื่องทุกตัวพูดภาษานี้ได้ ไฟล์เดียวกันจึงรันได้ใน Ollama, llama.cpp, LM Studio, Jan และ (อย่างมีข้อแม้) vLLM บทความนี้ไล่ให้ครบทีละตัวพร้อมคำสั่ง copy-paste วิธีเลือกระดับ quant ให้พอดี VRAM และ error ตอนโหลดที่คุณจะเจอจริง

ไฟล์ GGUF คืออะไร?

GGUF (GGML Universal File) เป็นฟอร์แมตคอนเทนเนอร์สำหรับโมเดลภาษาที่ถูก quantize แล้ว ไฟล์เดียวเก็บทั้งน้ำหนักโมเดล tokenizer และเมทาดาทา — ไม่ต้องโหลดอย่างอื่นเพิ่ม ไม่มีคอนฟิกกองเป็นภูเขา น้ำหนักข้างในถูก quantize: บีบจาก float 16-bit ลงเป็นเลขจำนวนเต็ม 4-bit (หรือต่ำกว่า) โมเดล 9B ที่ต้องใช้ราว 18 GB แบบเต็มความละเอียดจึงกระจุกอยู่ในไฟล์ Q4 ที่ ~5.5 GB และรันได้บนการ์ดเกมมิ่งหรือแม้แต่ CPU

ในชื่อไฟล์ GGUF มีสองอย่างที่ต้องอ่าน:

  1. โมเดลฐานgemma-3-4b-it-GGUF คือ Gemma 3 ขนาด 4B ที่ผ่านการ fine-tune แล้วเอ็กซ์พอร์ตเป็น GGUF
  2. แท็ก quantQ4_K_M, Q8_0, IQ4_XS และเพื่อน ๆ บอกว่าบีบน้ำหนักแน่นแค่ไหน เรื่องการเลือกมีต่อด้านล่าง

Ollama รันโมเดล GGUF ได้ไหม?

ได้ — GGUF เป็นฟอร์แมตแม่ของ Ollama และตั้งแต่ปี 2024 มันดึงไฟล์จาก Hugging Face มาตรง ๆ โดยที่คุณไม่ต้องแตะไฟล์เลย:

# ดึง quant GGUF จาก Hugging Face แล้วคุยกับมัน
ollama run hf.co/bartowski/gemma-2-9b-it-GGUF:Q4_K_M

# แท็ก quant หลังโคลอนเลือกไฟล์ภายใน repo
ollama run hf.co/ggml-org/gemma-3-4b-it-GGUF:Q8_0

โหลดไฟล์ .gguf ไว้เองแล้ว? ชี้ Modelfile ไปที่มัน:

# Modelfile — หนึ่งบรรทัดก็พอ
FROM ./gemma-2-9b-it-Q4_K_M.gguf
ollama create gemma9b -f Modelfile
ollama run gemma9b

Ollama ตัดสินใจ GPU offload ให้เองอัตโนมัติ และเปิด API ที่รองรับ OpenAI บนพอร์ต 11434 อะไรที่พูดภาษา API นี้ใช้โมเดลได้หมด ข้อแลกคือการควบคุม: คุณไม่ได้เลือกว่าจะย้าย layer ไป GPU กี่ชั้น

รันไฟล์ GGUF ใน llama.cpp อย่างไร?

llama.cpp คือแหล่งกำเนิดของ GGUF — ฟอร์แมตนี้เกิดมาเพื่อมัน — การรองรับจึงลึกและสดที่สุด ไฟล์ llama-server ให้ทั้งหน้า UI แชตและ endpoint ที่รองรับ OpenAI:

# โหลดตรงจาก Hugging Face (เลือก GGUF ให้เข้ากับเครื่องคุณ)
llama-server -hf ggml-org/gemma-3-4b-it-GGUF --port 8080

# หรือรันไฟล์ที่มีอยู่แล้ว พร้อม offload เต็มที่ไป GPU
llama-server -m ./gemma-2-9b-it-Q4_K_M.gguf -ngl 99 --port 8080

-ngl 99 ดัน 99 layer ขึ้น GPU ตั้งต่ำกว่าที่ VRAM รับได้แล้วส่วนที่เหลืออยู่บน CPU ลูกบิด offload บางส่วนนี่คือพลังพิเศษของ llama.cpp — โมเดล 9B รันได้สบายบนการ์ด 6 GB ด้วยการย้าย 20 จาก 48 layer เพียงแต่ช้าลง ถ้าจะส่งพรอมต์ครั้งเดียวโดยไม่ต้องเปิดเซิร์ฟเวอร์ เปลี่ยน llama-server เป็น llama-cli โดยใช้ -m แบบเดิม

LM Studio คือเอนจินตัวเดียวกันในชุดเดสก์ท็อป: ลากไฟล์ .gguf ไปวางในโฟลเดอร์โมเดล (หรือค้นหา Hugging Face ในแอป) แล้วกดโหลด ส่วนการเลือกเครื่องมือ การเปรียบเทียบ Ollama กับ LM Studio บอกได้ว่าควรวางตัวไหนใต้โมเดลของคุณ

ควรโหลด quant ระดับไหน?

คำตอบค่าเริ่มต้น: Q4_K_M มันคือจุดหวานของชุมชน — คุณภาพห่างจาก full precision ไม่เกินหนึ่งถึงสองเปอร์เซ็นต์ที่ขนาดราวหนึ่งในสี่ บันไดเรียงจากใหญ่ไปเล็ก:

  • Q8_0 — แทบไม่เสียอะไร ใช้เมื่อ VRAM คุณกลืน 8.5 บิตต่อน้ำหนักได้โดยไม่สะดุด
  • Q6_K / Q5_K_M — ลดขนาดหนึ่งขั้น ยังเยี่ยมสำหรับโมเดล 30B ขึ้นไป
  • Q4_K_M — ค่าเริ่มต้น สำหรับโมเดล 7–14B นี่คือจุดที่คุณภาพต่อกิกะไบต์พีค
  • IQ4_XS / Q3_K_M — สำหรับบีบโมเดลใหญ่ลงการ์ดเล็ก คุณภาพที่หายไปเริ่มเห็นได้ชัด
  • Q2_K และต่ำกว่า — ทางสุดท้าย โมเดลเริ่มเสื่อมกลายเป็นเรื่องไร้สาระกลางประโยค

กฎการจัดพื้นที่: ขนาดไฟล์เป็นกิกะไบต์ บวก overhead ของ context อีก ~1–2 GB ต้องลงตัวใน VRAM ไฟล์ Q4_K_M ขนาด 4.7 GB ของโมเดล 9B อยู่สบายบนการ์ด 8 GB เลือก โมเดลเล็กลงแต่ quant สูงขึ้น ดีกว่าโมเดลใหญ่ที่ quant โหด — Q8 ของ 4B ปกติชนะ Q2 ของ 9B

GGUF vs Safetensors: ต้องใช้ฟอร์แมตไหน?

Safetensors คือฟอร์แมตอาร์ไวฟ์ ยังไม่ quantize — น้ำหนักเต็มความละเอียดสำหรับการเทรน fine-tune และเครื่องมืออย่าง transformers กับ ComfyUI ส่วน GGUF คือฟอร์แมต quantize แล้วรันได้ สำหรับ inference บนฮาร์ดแวร์ของคุณ ไม่สามารถ fine-tune GGUF ได้ และรันไฟล์ safetensors ใน Ollama หรือ llama.cpp ไม่ได้จนกว่าจะแปลงก่อน (สคริปต์ convert_hf_to_gguf.py ใน llama.cpp มีไว้ทำงานนี้) กฎคือ: เทรนหรือ pipeline งานภาพ → safetensors; แชตในเครื่องกับการเปิดให้ใช้งาน → GGUF ถ้าคุณค้นมาจากคำว่า “gguf vs safetensors” การแบ่งแบบนี้คือคำตอบทั้งหมด

ควรใช้ตัวรัน GGUF ตัวไหน?

ตัวรันเหมาะกับการติดตั้งGPU offloadAPI รองรับ OpenAI
OllamaService ตั้งแล้วลืมcurl บรรทัดเดียวอัตโนมัติมี (:11434/v1)
llama.cppควบคุมสูงสุด ฟีเจอร์ใหม่สุดbuild หรือ package managerบิด -ngl เองมี (llama-server)
LM StudioGUI เดสก์ท็อป เลือกดูโมเดลโหลดแอปอัตโนมัติมี (local server)
vLLMเสิร์ฟหลายผู้ใช้พร้อมกันเป็นชุดpip install vllmอัตโนมัติมี (native)

เลือก Ollama ถ้าอยากให้มันรันตอนบูตและหายไปจากสายตา — ผมใช้ตัวนี้บน homelab แจกโมเดลให้ทุกอย่างในเครือข่าย เลือก llama.cpp เมื่อต้องการฟีเจอร์ตั้งแต่วันเปิดตัว (สถาปัตยกรรมใหม่มาถึงที่นั่นก่อนเพื่อน) หรืออยากคุมหน่วยความจำระดับ layer เลือก LM Studio ถ้าอยากได้ GUI เลือก vLLM เฉพาะเมื่อโมเดลหนึ่งตัวต้องเสิร์ฟผู้ใช้พร้อมกันหลายคน — การรองรับ GGUF ของมันใช้ได้ แต่นั่งแท่นรองเท้าหลัง native formats

ทำไมโมเดล GGUF ของผมโหลดไม่ขึ้น?

สี่ error ที่ครอบคลุมเกือบทุกกรณี:

  1. unknown model architecture — ไฟล์ GGUF ใช้สถาปัตยกรรมที่ใหม่กว่า runtime ของคุณ (โมเดล MoE และ vision ตัวใหม่มาไม่หยุด) อัปเดต Ollama หรือ build llama.cpp ใหม่ ไม่มีวิธีแก้อื่น
  2. หน่วยความจำไม่พอตอนโหลด — quant ใหญ่เกินไปสำหรับ VRAM บวก context ของคุณ ลงหนึ่งขั้น (Q4_K_MQ3_K_M) ลด -ngl หรือย่อ context ด้วย -c 4096
  3. โหลดค้างหรือไฟล์เสีย — GGUF โหลดล้มด้วย error เรื่อง magic number หรือเมทาดาทา โหลดใหม่แล้วเทียบ SHA256 ที่แสดงบนหน้า Hugging Face
  4. ollama run ./model.gguf ไม่ยอม — เป็นเรื่องปกติ: run ของ Ollama รับชื่อโมเดล ไม่ใช่พาธไฟล์ ให้ใช้วิธี Modelfile ที่โชว์ไว้ข้างบน

มุมสุดท้ายที่ควรรู้: endpoint GGUF ในเครื่องจับคู่กับเครื่องมือ coding แบบ agentic ได้ดี — ชี้ client ที่รองรับ OpenAI มาที่มัน แล้วค่า completion เหลือแค่ค่าไฟ LLM ในเครื่องที่ดีที่สุดสำหรับเขียนโค้ด ได้ทดสอบไว้แล้วว่าโมเดลไหนสมควรได้เก้าอี้นั้นเมื่องานประปาในบทความนี้พร้อม

— mrsaynothing

— mrsaynothing

บันทึกหน้างานเรื่อง AI, Linux และ self-hosted

คุยต่อโพสต์นี้บน dev.to dev.to ↗

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

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

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

นี่คืออะไร?

Git sync fork กับ upstream: 3 วิธีที่ปลอดภัย

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