รัน LLM บนเครื่องตัวเองด้วย Ollama คุ้มเมื่อไร และต้องมี VRAM เท่าไร
รันโมเดล AI ในเครื่องด้วย Ollama เมื่อไรคุ้ม เมื่อไรไม่คุ้ม คิด VRAM จากขนาดโมเดลกับ quantization ทีละขั้น และช่องว่างคุณภาพที่ต้องยอมรับ
- รันในเครื่องคุ้มเมื่อข้อมูลห้ามออกนอกเครื่อง ต้องทำงานไม่มีเน็ต หรืองานเล็กซ้ำ ๆ ปริมาณมาก ไม่ใช่เพราะคิดว่าจะถูกกว่า
- หน่วยความจำ = น้ำหนักโมเดล (พารามิเตอร์ × bit ÷ 8) + KV cache ที่โตตาม context
- Llama 3.1 8B แบบ q4_K_M ไฟล์ 4.9 GB บวก KV cache 512 MiB ที่ context 4K ใส่การ์ด 6 GB ได้พอดี
- โมเดล 8B ในเครื่องสู้โมเดลใหญ่บน API ไม่ได้ในงานคิดหลายขั้น ให้วัดกับงานจริงของตัวเองก่อนย้าย
รัน LLM บนเครื่องตัวเองคือดาวน์โหลดไฟล์โมเดลมาไว้ในเครื่อง แล้วให้โปรแกรมอย่าง Ollama หรือ llama.cpp ประมวลผลบน GPU หรือ CPU ของเราเอง ข้อมูลไม่ออกนอกเครื่อง ไม่ต้องมีเน็ต ไม่มีบิลราย token แต่ต้องมีหน่วยความจำพอ และต้องยอมรับว่าคุณภาพไม่เท่าโมเดลใหญ่บน cloud บทความนี้ช่วยตัดสินว่าคุ้มไหม และคิดให้ดูว่าเครื่องต้องมี VRAM เท่าไร
ข้อเท็จจริงตรวจกับเอกสาร Ollama (รุ่นล่าสุด v0.40.8 ณ ตุลาคม 2026), หน้า model library ของ Ollama และ config.json ของ Llama 3.1 8B / Llama 3.3 70B บน Hugging Face ตัวเลขหน่วยความจำคำนวณเองจากค่าเหล่านั้น แสดงวิธีคิดไว้ทุกขั้น
คุ้มเมื่อไร ไม่คุ้มเมื่อไร
| สถานการณ์ | ในเครื่อง | API |
|---|---|---|
| ข้อมูลลับห้ามออกนอกองค์กร (เอกสารลูกค้า, log ภายใน) | เหมาะ | ต้องดูสัญญาและนโยบายเก็บข้อมูล |
| ต้องทำงานไม่มีเน็ต (หน้างาน, โรงงาน, เครื่อง IoT) | เหมาะ | ใช้ไม่ได้ |
| งานเล็กซ้ำ ๆ ปริมาณมาก (จัดหมวด, ดึงข้อมูลจากข้อความ) | เหมาะ ถ้าโมเดลเล็กทำได้ดีพอ | ก็ถูกมากเช่นกัน ดูตัวอย่างข้างล่าง |
| งานคิดหลายขั้น เขียนโค้ดยาว agent | ด้อยกว่าชัด | เหมาะ |
| ทีมเล็ก ไม่มีคนดูแลเครื่อง | เป็นภาระ | เหมาะ |
เหตุผลที่ดีที่สุดคือ ข้อมูลห้ามออก กับ ไม่มีเน็ต เหตุผลเรื่องเงินมักอ่อนกว่าที่คิด เพราะโมเดลเล็กบน API ราคาถูกมาก
หน่วยความจำ ส่วนที่ 1: น้ำหนักโมเดล
โมเดลคือพารามิเตอร์จำนวนมหาศาล แต่ละตัวเก็บด้วยจำนวน bit ที่กำหนด สูตรคือ
ขนาดน้ำหนัก (byte) = จำนวนพารามิเตอร์ × bit ต่อพารามิเตอร์ ÷ 8
quantization คือการลด bit ต่อพารามิเตอร์ จาก 16 bit เหลือ 8 หรือ 4 bit แลกความแม่นยำนิดหน่อยกับขนาดที่เล็กลงมาก
ตัวอย่าง Llama 3.1 8B (พารามิเตอร์ราว 8.03 พันล้านตัว)
- fp16 (16 bit): 8.03 × 10⁹ × 16 ÷ 8 = 16.06 × 10⁹ byte ≈ 16 GB ตรงกับไฟล์ใน Ollama 16GB
- q8_0 (ราว 8.5 bit รวมค่า scale): 8.03 × 10⁹ × 8.5 ÷ 8 ≈ 8.5 GB ตรงกับไฟล์ 8.5GB
- q4_K_M: ไฟล์จริง 4.9 GB คิดย้อนกลับได้ 4.9 × 10⁹ × 8 ÷ 8.03 × 10⁹ ≈ 4.9 bit ต่อพารามิเตอร์ (ไม่ใช่ 4 พอดี เพราะบางชั้นเก็บละเอียดกว่า และต้องเก็บค่า scale ด้วย)
ขนาดไฟล์จริงจากหน้า library ของ Ollama
| โมเดล | q4_K_M | q8_0 | fp16 |
|---|---|---|---|
| Llama 3.1 8B | 4.9 GB | 8.5 GB | 16 GB |
| Llama 3.3 70B | 43 GB | 75 GB | 141 GB |
ollama pull llama3.1:8b ได้ตัว q4_K_M เป็นค่าเริ่มต้น
หน่วยความจำ ส่วนที่ 2: KV cache
ระหว่างตอบ โมเดลเก็บข้อมูลของทุก token ใน context ไว้ใน KV cache ยิ่ง context ยาว ยิ่งใช้หน่วยความจำมาก สูตร (เก็บแบบ 16 bit = 2 byte)
ต่อ token = 2 (K และ V) × จำนวนชั้น × จำนวน KV head × ขนาด head × 2 byte
จาก config.json ของ Llama 3.1 8B: 32 ชั้น, 8 KV head, head ขนาด 128
- ต่อ token: 2 × 32 × 8 × 128 × 2 = 131,072 byte = 128 KiB
- context 4,096 token: 4,096 × 128 KiB = 512 MiB
- context 32,768: 4 GiB
- context 131,072 (128K เต็ม): 16 GiB มากกว่าตัวโมเดล q4 สามเท่า
Llama 3.3 70B: 80 ชั้น, 8 KV head, head 128 → 2 × 80 × 8 × 128 × 2 = 327,680 byte = 320 KiB ต่อ token ที่ 4K context คือ 1.25 GiB
context ยาวไม่ฟรี ตั้งเท่าที่งานต้องใช้จริง KV cache ของ context เต็มอาจใหญ่กว่าตัวโมเดล
ตัวอย่างคำนวณ: การ์ดจอ 6 GB ใส่อะไรได้
การ์ด 6 GB (6,144 MiB) กับ Llama 3.1 8B q4_K_M
- น้ำหนัก: 4.9 GB ≈ 4,673 MiB (4.9 × 10⁹ ÷ 1,048,576)
- KV cache ที่ 4K context: 512 MiB
- รวม: 4,673 + 512 = 5,185 MiB
- เหลือ: 6,144 − 5,185 = 959 MiB สำหรับ buffer ที่ใช้คำนวณและหน้าจอ
พอดีมาก ถ้าเพิ่ม context เป็น 32K (KV 4 GiB) จะไม่พอ บางชั้นจะถูกย้ายไป CPU และช้าลงมาก ส่วน 70B q4_K_M (43 GB) ต้องใช้ GPU หลายใบ หรือเครื่องที่แรมใหญ่และยอมช้า
Ollama ตั้ง context เริ่มต้นตาม VRAM: ต่ำกว่า 24 GiB ได้ 4K, 24-48 GiB ได้ 32K, ตั้งแต่ 48 GiB ได้ 256K ตัวเลขจริงดูได้จาก ollama ps
เริ่มใช้ Ollama
ติดตั้งบน Linux (macOS / Windows ดาวน์โหลดตัวติดตั้งจาก ollama.com/download)
curl -fsSL https://ollama.com/install.sh | sh
sudo systemctl status ollama # ตรวจว่า service ทำงาน
ดาวน์โหลดและคุย
ollama pull llama3.1:8b
ollama run llama3.1:8b # พิมพ์ /bye เพื่อออก
ollama ps # ดู SIZE, PROCESSOR (GPU/CPU), CONTEXT
ollama ls # โมเดลที่มีในเครื่อง
ollama stop llama3.1:8b
เรียกผ่าน API ที่ port 11434 และวัดความเร็วจริงจาก eval_count กับ eval_duration (หน่วย nanosecond)
curl -s http://localhost:11434/api/generate -d '{
"model": "llama3.1:8b",
"prompt": "จัดหมวดข้อความนี้: ส่งของช้ามาก 3 วันยังไม่ถึง",
"stream": false,
"options": { "num_ctx": 4096 }
}' | jq '{tokens: .eval_count, tok_per_s: (.eval_count / .eval_duration * 1e9)}'
โค้ดเดิมที่ใช้ OpenAI client เปลี่ยนแค่ base_url="http://localhost:11434/v1/" และใส่ api_key อะไรก็ได้ (Ollama ในเครื่องไม่ตรวจ) อยากตั้ง context ทั้ง server ใช้ OLLAMA_CONTEXT_LENGTH=8192 ollama serve
ถ้าจะเปิดให้เครื่องอื่นในบ้านเรียก อย่าเปิด port ออกอินเทอร์เน็ต ใช้ VPN แบบในบทความ Tailscale
เรื่องเงิน: ถูกกว่า API จริงไหม
งานจัดหมวด 10,000 ข้อความต่อวัน ข้อความละ 500 token ตอบ 20 token
บน API (Claude Haiku 5.5, ณ ตุลาคม 2026: $0.10 / $0.50 ต่อล้าน token)
- input: 10,000 × 500 = 5M × $0.10 = $0.50 ต่อวัน
- output: 10,000 × 20 = 0.2M × $0.50 = $0.10 ต่อวัน
- รวม $0.60 × 30 = $18 ต่อเดือน ถ้ารอได้ใช้ Batch API ลดครึ่ง เหลือ $9
ในเครื่อง (สมมติฐาน: เครื่องกินไฟ 300 W ขณะทำงาน ใช้เวลา 3 ชั่วโมงต่อวัน)
- 0.3 kW × 3 ชม. = 0.9 หน่วยต่อวัน × 30 = 27 หน่วยต่อเดือน คูณค่าไฟบ้านคุณ
- บวกค่าการ์ดจอ เวลาดูแล และเวลาที่ต้องทดสอบโมเดลใหม่
ชั่วโมงทำงานจริงขึ้นกับความเร็วเครื่อง วัดจาก tok_per_s ข้างบนก่อน ข้อสรุป: ที่ปริมาณนี้ เงินไม่ใช่เหตุผลหลัก ถ้าจะย้ายมาในเครื่อง ให้ย้ายเพราะข้อมูลหรือออฟไลน์ วิธีลดบิล API ดูได้ในบทความคุมค่า AI API
ช่องว่างคุณภาพที่ต้องยอมรับ
- โมเดล 7-12B ทำงานแคบได้ดี จัดหมวด, สรุปสั้น, ดึงฟิลด์จากข้อความ, แปลประโยคง่าย
- งานหลายขั้นด้อยชัด วางแผน agent, แก้โค้ดหลายไฟล์, เหตุผลยาว ๆ โมเดลใหญ่บน API ทำได้ดีกว่ามาก
- ภาษาไทยต่างกันตามโมเดล บางตัวตอบไทยแข็งหรือสลับภาษา ทดสอบกับข้อความจริงของคุณ
- ความรู้หยุดที่วันเทรน และไม่มี web search ในตัว ต้องป้อนข้อมูลเอง แบบ RAG
วิธีตัดสินที่ซื่อตรงที่สุด: เตรียมตัวอย่างจริง 50-100 ชิ้นพร้อมคำตอบที่ถูก รันทั้งในเครื่องและบน API แล้วนับว่าถูกกี่ชิ้น
ข้อผิดพลาดที่เจอบ่อย
- ดูแค่ขนาดไฟล์โมเดล ลืม KV cache พอเพิ่ม context แล้วโมเดลไหลไป CPU ช้าลงหลายเท่า
- ไม่ดู
ollama psคอลัมน์ PROCESSOR บอกว่าอยู่บน GPU 100% หรือแบ่ง CPU - ตั้ง context ยาวเกินงาน เพิ่ม VRAM ไปเปล่า ๆ
- เปิด port 11434 สู่อินเทอร์เน็ต ใครก็เรียกโมเดลของคุณได้ ใช้ VPN หรือ reverse proxy ที่มีการยืนยันตัวตน
- คิดว่าในเครื่องปลอดภัยจาก prompt injection ไม่จริง ข้อความที่ป้อนเข้าไปยังสั่งโมเดลได้เหมือนเดิม
แหล่งอ้างอิง
คำถามที่พบบ่อย
ไม่มีการ์ดจอ รันได้ไหม
ได้ Ollama รันบน CPU และแรมเครื่องได้ แต่ช้ากว่ามาก เหมาะกับโมเดลเล็กและงานที่รอได้ ดูคอลัมน์ PROCESSOR ใน ollama ps ว่าโมเดลอยู่บน GPU หรือ CPU กี่เปอร์เซ็นต์
quantization 4-bit ทำให้โมเดลโง่ลงเยอะไหม
ลดลงบ้าง ยิ่ง bit น้อยยิ่งเสียมาก q4_K_M เป็นค่าเริ่มต้นของหลายโมเดลใน Ollama เพราะเป็นจุดสมดุลที่คนใช้กันมาก ถ้าเครื่องมีที่พอ ลอง q8_0 เทียบกับงานของคุณเองแล้วตัดสิน
ใช้แทน API ในโค้ดเดิมได้ไหม
ได้ส่วนใหญ่ Ollama มี endpoint ที่เข้ากับ OpenAI API ที่ http://localhost:11434/v1/ เปลี่ยน base_url ใน client ก็เรียกได้ แต่ฟีเจอร์เฉพาะของผู้ให้บริการแต่ละเจ้าอาจไม่มี
คำสั่งและค่าตั้งในบทความทดสอบบนระบบตัวอย่าง ลองบนเครื่องทดสอบก่อนใช้กับระบบจริงเสมอ