การดู : 115

07/11/2026 11:59น.

แผนภาพขนาดไฟล์โมเดล 7B เมื่อใช้ความแม่นยำ 16 บิต 8 บิต และ 4 บิต เทียบกับหน่วยความจำของเครื่อง

Local LLM คืออะไร? ทำความเข้าใจ Quantization, GGUF และคำนวณ Memory ก่อนรัน AI บนเครื่องตัวเองด้วย Ollama หรือ llama.cpp

#Local LLM

#Ollama

#llama.cpp

#GGUF

#Quantization

#AI

ลองนึกภาพว่าคุณอยากให้ AI ช่วยสรุปเอกสารสัญญาของลูกค้า แต่นโยบายบริษัทไม่อยากให้ไฟล์เหล่านั้นถูกส่งออกไปนอกเครือข่าย หรือคุณแค่อยากทดลองเขียนโปรแกรมที่เรียก LLM บนเครื่องโดยไม่ต้องกังวลเรื่องค่า API ทุกครั้งที่กด run คำถามที่ตามมาแทบจะเหมือนกันทุกคนคือ รัน AI บนเครื่องตัวเองได้ไหม ต้องใช้เครื่องแรงแค่ไหน และเสียอะไรไปบ้าง

คำตอบคือทำได้ และเรียกว่า Local LLM ครับ วันนี้ Superdev Academy จะพาไปดูว่า Local LLM คืออะไร คำว่า Quantization กับ GGUF ที่เห็นในชื่อไฟล์โมเดลหมายถึงอะไร เราคำนวณขนาด memory ที่โมเดลต้องใช้คร่าวๆ ได้อย่างไร เครื่องมืออย่าง Ollama กับ llama.cpp ต่างกันตรงไหน และมีข้อควรระวังเรื่องความปลอดภัยอะไรบ้าง บทความนี้ไม่ใช่คู่มือติดตั้งทีละขั้น เพราะเรามีบทความแนะนำวิธีติดตั้งไว้แล้ว ลิงก์อยู่ท้ายบทความครับ

Local LLM คืออะไร?

LLM (Large Language Model) คือโมเดลภาษาขนาดใหญ่ที่อยู่เบื้องหลังแชตบอตอย่างที่เราใช้กันทุกวัน โดยปกติเราเรียกใช้ผ่านอินเทอร์เน็ตไปยังผู้ให้บริการ (cloud API) ส่วน Local LLM คือการดาวน์โหลดไฟล์โมเดลมาไว้ในเครื่องของเราเอง แล้วรันประมวลผลบนเครื่องนั้นเลย ข้อมูลที่เราพิมพ์เข้าไปจึงไม่ต้องเดินทางไปที่ใด

ตัวอย่างจากเอกสารของ Ollama ซึ่งเป็นเครื่องมือยอดนิยมสำหรับงานนี้ ระบุไว้ว่า "Ollama runs locally. We don't see your prompts or data when you run locally." แต่เอกสารเดียวกันก็บอกด้วยว่า Ollama มีโมเดลแบบ cloud ให้เลือกใช้ด้วย และถ้าไม่ต้องการ สามารถปิดฟีเจอร์ cloud ได้ผ่านตัวแปร OLLAMA_NO_CLOUD=1 หรือตั้งค่า "disable_ollama_cloud": true ในไฟล์ ~/.ollama/server.json ข้อนี้สำคัญสำหรับคนที่ต้องการให้ข้อมูลอยู่ในเครื่องจริงๆ ว่าควรตรวจให้แน่ใจว่ากำลังรันโมเดลแบบ local เท่านั้น

Quantization คืออะไร ทำไมต้องรู้?

โมเดลภาษาประกอบด้วยตัวเลขจำนวนมหาศาลที่เรียกว่า weight โดยเดิมแต่ละตัวถูกเก็บด้วยความแม่นยำสูง เช่น 16 บิต ถ้าโมเดลมี 7 พันล้านตัว (7B) ก็ต้องใช้ memory หลายสิบกิกะไบต์ Quantization คือเทคนิคลดจำนวนบิตที่ใช้เก็บแต่ละ weight ลง เช่นจาก 16 บิตเหลือ 8 หรือ 4 บิต เพื่อให้ไฟล์เล็กลงและกิน memory น้อยลง แลกกับความแม่นยำที่อาจลดลงเล็กน้อยตามระดับที่บีบ

README ของ llama.cpp ระบุว่ารองรับ integer quantization ที่ 1.5, 2, 3, 4, 5, 6 และ 8 บิต เพื่อให้ inference เร็วขึ้นและใช้ memory น้อยลง ส่วนเอกสารของ Hugging Face ที่อธิบายชนิดการ quantize ในไฟล์ GGUF ระบุค่าเฉลี่ยบิตต่อ weight ของบางชนิดไว้ เช่น Q4_K อยู่ที่ 4.5 บิตต่อ weight, Q5_K อยู่ที่ 5.5 บิต และ Q6_K อยู่ที่ 6.5625 บิต ตัวเลขเหล่านี้สูงกว่าตัวเลขในชื่อเล็กน้อย เพราะต้องเก็บค่า scale ของแต่ละบล็อกไว้ด้วย

GGUF คืออะไร?

GGUF คือรูปแบบไฟล์โมเดลที่เป็น binary ออกแบบมาให้โหลดและบันทึกได้เร็วเพื่อใช้ใน inference ตามเอกสาร Hugging Face พัฒนาโดย ggerganov ซึ่งเป็นผู้พัฒนา llama.cpp ด้วย และต่างจากรูปแบบที่เก็บแต่ tensor อย่าง safetensors ตรงที่ GGUF เก็บทั้ง tensor และ metadata มาตรฐานไว้ในไฟล์เดียวกัน เมื่อเราเห็นชื่อไฟล์ลักษณะ ...Q4_K_M.gguf ในหน้าโมเดล ส่วน Q4_K บอกชนิดการ quantize ที่ใช้ และนามสกุล .gguf บอกว่าเปิดได้ด้วยเครื่องมืออย่าง llama.cpp, LM Studio, GPT4All หรือ Ollama ซึ่งเป็นรายชื่อเครื่องมือที่เอกสาร Hugging Face ระบุว่ารองรับไฟล์ GGUF

ต้องใช้ memory เท่าไร? คำนวณเองได้จากสูตรง่ายๆ

คำถามที่ถูกถามบ่อยที่สุดคือ เครื่องฉันรันโมเดลขนาดนี้ได้ไหม วิธีประเมินคร่าวๆ ที่ทีมเราใช้คือคูณจำนวน weight ด้วยจำนวนบิตต่อ weight แล้วหาร 8 เพื่อแปลงเป็นไบต์ ตัวเลขด้านล่างเป็นผลการคำนวณจากสูตรนี้เอง ไม่ใช่ตัวเลขที่เราวัดจากเครื่องจริง และคิดเฉพาะขนาดของ weight เท่านั้น ยังไม่รวม memory ของ context (ที่เรียกว่า KV cache) และ overhead ของโปรแกรม ซึ่งทำให้ memory ที่ใช้จริงสูงกว่านี้

  • โมเดล 7B ที่ 16 บิต: 7 พันล้าน คูณ 16 หาร 8 ได้ประมาณ 14 GB

  • โมเดล 7B ที่ 8 บิต: ได้ประมาณ 7 GB

  • โมเดล 7B ที่ Q4_K (4.5 บิตต่อ weight): 7 พันล้าน คูณ 4.5 หาร 8 ได้ประมาณ 3.9 GB

  • โมเดล 13B ที่ Q4_K: ได้ประมาณ 7.3 GB

  • โมเดล 70B ที่ Q4_K: ได้ประมาณ 39.4 GB

ข้อควรจำอีกข้อคือ Ollama ตั้งค่าเริ่มต้นของ context window ไว้ที่ 4096 tokens ตามเอกสาร FAQ และปรับได้ด้วยตัวแปร OLLAMA_CONTEXT_LENGTH หรือคำสั่ง /set parameter num_ctx ภายใน ollama run ยิ่งตั้ง context ยาว memory ที่ใช้เพิ่มขึ้นตามไปด้วย ดังนั้นเมื่อเครื่องของคุณมี memory พอดีกับตัวเลขข้างบนเป๊ะ มันจะ ไม่พอ ในทางปฏิบัติ เผื่อไว้ให้มากกว่าตัวเลขที่คำนวณได้เสมอ

บนเครื่อง Mac ที่ใช้ชิป Apple Silicon ซึ่ง CPU และ GPU ใช้ memory ก้อนเดียวกัน README ของ llama.cpp ระบุว่ารองรับ Metal จึงรันบนเครื่องแบบนี้ได้โดยตรง ส่วนเครื่อง Windows หรือ Linux ที่มีการ์ดจอแยก จำนวน VRAM มักเป็นเพดานแรกที่ชนก่อน README ระบุ backend ที่รองรับหลายแบบ เช่น CUDA, HIP, Vulkan และ SYCL

Ollama กับ llama.cpp ต่างกันอย่างไร?

ทั้งสองเป็นโปรเจกต์โอเพนซอร์สภายใต้สัญญาอนุญาต MIT ตามที่หน้าโปรเจกต์ระบุ แต่วางตัวต่างกันที่ระดับความสะดวก

llama.cpp เป็นเอนจิน inference ที่เขียนด้วย C/C++ แบบไม่มี dependency เป้าหมายตาม README คือ "enable LLM (and VLM) inference with minimal setup and state-of-the-art performance" บนฮาร์ดแวร์หลากหลาย และมี server ที่ให้ API ที่เข้ากันได้กับ OpenAI (llama-server) เหมาะกับคนที่อยากควบคุมรายละเอียดและเลือกไฟล์ GGUF ชนิดที่ต้องการเอง

Ollama ห่อการดาวน์โหลดโมเดล การรัน และ API ให้ใช้ง่ายในคำสั่งเดียว ตัวอย่างในหน้า README ของโปรเจกต์คือ ollama run gemma4 ซึ่งรันและเปิดแชตกับโมเดลนั้น ส่วน REST API ตัวอย่างในหน้าเดียวกันชี้ไปที่ http://localhost:11434/api/chat ตามเอกสาร FAQ โมเดลถูกเก็บไว้ที่ ~/.ollama/models บน macOS และค้างอยู่ใน memory 5 นาทีโดยปริยาย ถ้าต้องการปล่อย memory ทันทีใช้ ollama stop ตามด้วยชื่อโมเดล

ทีมเรามองว่าถ้าเพิ่งเริ่ม Ollama เป็นจุดเริ่มต้นที่ตรงที่สุด และ llama.cpp คือทางเลือกเมื่อต้องการเจาะลึกหรือปรับแต่งมากขึ้น (ความเห็นของทีม ไม่ใช่ผลทดสอบ) หากอยากลงมือติดตั้งตามขั้นตอน มีบทความใช้ Ollama รัน AI ส่วนตัวสำหรับโปรแกรมเมอร์และการเรียก Ollama จาก Goรองรับอยู่แล้ว

ข้อควรระวังด้านความปลอดภัย

การรัน LLM บนเครื่องตัวเองไม่ได้แปลว่าปลอดภัยอัตโนมัติ มีสามเรื่องที่ควรตรวจก่อนใช้งานจริง

เรื่องแรกคือใครเรียกเซิร์ฟเวอร์ของเราได้บ้าง เอกสาร FAQ ของ Ollama ระบุว่าโดยปริยาย Ollama ผูกกับ 127.0.0.1 พอร์ต 11434 คือรับเฉพาะการเชื่อมต่อจากเครื่องเดียวกัน และถ้าตั้ง OLLAMA_HOST="0.0.0.0:11434" จะเข้าถึงได้จากภายนอกเครื่อง เอกสารที่เราอ่านบอกวิธีเปิดพอร์ต แต่ไม่ได้พูดถึงการยืนยันตัวตน เราจึงไม่ควรสันนิษฐานว่ามี ถ้าจำเป็นต้องเปิดให้ทีมใช้ร่วมกัน ควรวางไว้หลัง firewall หรือ reverse proxy ที่ควบคุมการเข้าถึงเอง

เรื่องที่สองคือที่มาของไฟล์โมเดล ไฟล์ GGUF ที่ดาวน์โหลดจากแหล่งใดก็ได้เป็นไฟล์ขนาดหลายกิกะไบต์ที่เรามองด้วยตาไม่ออกว่าข้างในคืออะไร ควรดาวน์โหลดจากผู้เผยแพร่ที่เชื่อถือได้ และอ่านเงื่อนไขการใช้งาน (license) ในหน้าของแต่ละโมเดล เพราะ license ของตัวโมเดลเป็นเรื่องแยกจาก license MIT ของ Ollama หรือ llama.cpp และแต่ละโมเดลกำหนดไม่เหมือนกัน รวมถึงเรื่องการนำไปใช้เชิงพาณิชย์

เรื่องที่สามคือการติดตั้ง สคริปต์ติดตั้งแบบ curl ... | sh ที่หน้า README ของ Ollama แนะนำเป็นรูปแบบที่พบบ่อยในหลายเครื่องมือ แต่ก่อนรันสคริปต์ใดก็ตามบนเครื่องที่มีข้อมูลสำคัญ ควรเปิดอ่านสิ่งที่มันจะทำก่อนทุกครั้ง หรือเลือกใช้ตัวติดตั้งแบบดาวน์โหลดตรงที่หน้าเว็บมีให้ ส่วนเรื่องโค้ดที่เราเขียนเรียกโมเดล ก็ควรยึดหลักเดียวกับSecure Codingเหมือนการเรียก API อื่นๆ

แล้ว Local LLM คุ้มกว่า cloud ไหม?

ไม่มีคำตอบเดียวที่ถูกกับทุกงานครับ ข้อดีที่ชัดเจนคือข้อมูลอยู่ในเครื่อง ไม่มีค่าเรียก API ต่อครั้ง และทำงานตอนออฟไลน์ได้ ส่วนข้อจำกัดคือโมเดลที่รันบนเครื่องส่วนบุคคลได้โดยทั่วไปมีขนาดเล็กกว่าโมเดลระดับแนวหน้าที่ผู้ให้บริการรันบนคลัสเตอร์ จึงอาจให้คุณภาพคำตอบไม่เท่ากันในงานที่ซับซ้อน (เป็นข้อสังเกตทั่วไป ไม่ได้มาจากผลทดสอบในบทความนี้) นอกจากนี้ยังต้องรับภาระดูแลเครื่อง อัปเดตโมเดล และจัดการ memory เอง

ทีมเราแนะนำให้ตัดสินใจจากงานจริง นำเอกสารหรือคำถามตัวอย่างสิบข้อที่คุณใช้กับงานของตัวเองไปลองกับโมเดล local และโมเดล cloud เทียบกัน แล้วดูว่าคำตอบที่ได้ใช้งานได้หรือไม่ ผลลัพธ์จากงานของคุณเองบอกได้ตรงกว่าตารางเปรียบเทียบของใครทั้งนั้น และอย่าลืมว่า Local LLM ช่วยเรื่องที่ข้อมูลอยู่ที่ไหน แต่ไม่ได้ตัดสินแทนว่าการนำข้อมูลลูกค้าไปประมวลผลถูกต้องตามกฎหมายหรือนโยบายขององค์กรหรือไม่ ซึ่งต้องตรวจสอบกับผู้รับผิดชอบด้านนั้นโดยตรง


สรุป: เริ่มจากคำนวณ memory ก่อนดาวน์โหลดไฟล์ใหญ่

Local LLM คือการรันโมเดลภาษาบนเครื่องของเอง Quantization ช่วยลดขนาดโมเดลโดยลดจำนวนบิตต่อ weight GGUF คือรูปแบบไฟล์ที่เก็บ tensor พร้อม metadata ไว้ในไฟล์เดียว และ Ollama กับ llama.cpp เป็นสองเครื่องมือที่เปิดไฟล์เหล่านี้ได้ โดยฝั่งแรกเน้นความสะดวก ฝั่งหลังเน้นการควบคุม

ก่อนจะกดดาวน์โหลดไฟล์หลายกิกะไบต์ ลองเอาสูตร จำนวน weight คูณบิตต่อ weight หารแปด มาคำนวณกับ memory ของเครื่องคุณก่อนสักครั้ง แล้วเผื่อเพิ่มสำหรับ context ถ้าตัวเลขเฉียดเพดาน ให้ลดไปใช้โมเดลที่เล็กลงหรือ quantize หนักขึ้น ดีกว่ารอให้เครื่องค้างกลางทางครับ

🎯 ติดตามความรู้สาย Dev ได้ที่ Superdev Academy:

FAQ: คำถามที่พบบ่อยเกี่ยวกับบทความนี้

รวมคำถามและคำตอบที่ช่วยให้คุณเข้าใจเนื้อหาในบทความนี้ได้ดียิ่งขึ้น