GPT-OSS-120B ทำงานได้ยอดเยี่ยมแม้มี VRAM เพียง 8GB
(old.reddit.com)- ใช้ตัวเลือก
--cpu-moeของ llama-cpp เพื่อให้ เลเยอร์ผู้เชี่ยวชาญของ MOE ทำงานบน CPU และออฟโหลดเฉพาะเลเยอร์ attention ไปยัง GPU ทำให้ได้ประสิทธิภาพ prefill ที่รวดเร็วด้วย VRAM เพียง 5~8GB - บน GPU จะเก็บไว้เฉพาะ KV cache, ค่าน้ำหนักและค่ากระตุ้นของ Attention, ตาราง routing, LayerNorm ฯลฯ ซึ่งเป็นพารามิเตอร์ที่ไม่ใช่ expert จึงใช้หน่วยความจำน้อย
- แม้ใช้ GPU ระดับ RTX 3060Ti และ RAM ระบบ 64GB~96GB ก็ยังรันโมเดล 120B ได้สบาย และจะได้ประสิทธิภาพดีที่สุดบน GPU ที่รองรับ BF16 (RTX 3000 ขึ้นไป)
- เมื่อใช้ VRAM 5GB ทำได้ 8.15ms ต่อโทเค็น (122.66 โทเค็น/วินาที) และเมื่อใช้ VRAM 8GB ปรับดีขึ้นเป็น 7.44ms ต่อโทเค็น (134.44 โทเค็น/วินาที)
- โครงสร้าง 120B นี้ถูกออกแบบมาให้เหมาะกับฮาร์ดแวร์ผู้บริโภค จึงรันได้เร็วแม้ในสภาพแวดล้อมที่ทรัพยากร GPU จำกัด
โครงสร้าง CPU-MOE และการออฟโหลดไป GPU
- ใช้ตัวเลือก
--cpu-moeเพื่อให้เลเยอร์ expert (MOE) ทั้งหมดประมวลผลบน CPU- ตัวอย่าง:
--n-cpu-moe 36→ ให้ MOE ทั้ง 36 บล็อกทำงานบน CPU ทั้งหมด - หากต้องการก็สามารถย้าย MOE บางส่วนไปยัง GPU เพื่อปรับจูนประสิทธิภาพได้
- ตัวอย่าง:
- บน GPU จะเก็บไว้เฉพาะสิ่งต่อไปนี้เพื่อประหยัด VRAM
- KV cache (sequence)
- ค่าน้ำหนักและค่ากระตุ้นของ Attention
- ตาราง routing
- LayerNorm และพารามิเตอร์อื่นที่ไม่ใช่ expert
- เนื่องจากค่าน้ำหนักของ MOE ไม่ได้อยู่บน GPU จึงไม่มีภาระจากพารามิเตอร์ MLP ขนาดใหญ่
หน่วยความจำและความต้องการด้านฮาร์ดแวร์
- GPU: VRAM 5~8GB ก็เพียงพอ (เช่น RTX 3060Ti)
- หาก GPU รองรับ BF16 จะดีที่สุด (RTX 3000 series ขึ้นไป)
- RAM ระบบ: ขั้นต่ำ 64GB และ 96GB จะเหมาะที่สุด
- ใช้ Linux mmap เพื่อให้แม้โมเดลทั้งหมดจะไม่อยู่ในหน่วยความจำ ก็ยังคงเก็บเลเยอร์ expert ที่ “ฮอต” ไว้ในหน่วยความจำได้
ตัวเลขประสิทธิภาพ
สภาพแวดล้อม VRAM 5GB
- การประมวลผลพรอมป์ต์: 8.15ms/โทเค็น (122.66 โทเค็น/วินาที)
- การอนุมาน: 55.44ms/โทเค็น (18.04 โทเค็น/วินาที)
สภาพแวดล้อม VRAM 8GB (--n-cpu-moe 36, ที่เหลือบน GPU)
- การประมวลผลพรอมป์ต์: 7.44ms/โทเค็น (134.44 โทเค็น/วินาที)
- การอนุมาน: 39.03ms/โทเค็น (25.62 โทเค็น/วินาที)
สภาพแวดล้อม VRAM 22GB (ย้าย MOE บางส่วนไป GPU)
- การประมวลผลพรอมป์ต์: 6.13ms/โทเค็น (163.01 โทเค็น/วินาที)
- การอนุมาน: 32.45ms/โทเค็น (30.82 โทเค็น/วินาที)
บทสรุป
- การออกแบบของ GPT-OSS-120B ถูกปรับให้เหมาะกับการ รันโมเดลขนาดใหญ่ด้วยความเร็วสูงบนฮาร์ดแวร์ผู้บริโภค
- ด้วยโครงสร้าง CPU-MOE ที่ลดการใช้ VRAM แต่ยังคงความเร็วไว้ได้ จึงเหมาะอย่างยิ่งกับสภาพแวดล้อมที่ทรัพยากร GPU มีจำกัด
คำถามสำคัญและคำตอบ
Q1. ในการตั้งค่านี้ ใช้ VRAM จริงเท่าไร?
- ผู้เขียนต้นฉบับ: ถ้าให้ MOE ทั้งหมดรันบน CPU จะใช้ VRAM ราว 5GB และย้ายขึ้น GPU เฉพาะเลเยอร์ attention
- คำอธิบายเพิ่มเติม: บน GPU จะมีเพียง KV cache, ค่าน้ำหนักและค่ากระตุ้นของ Attention, ตาราง routing และ LayerNorm
Q2. อย่างน้อยต้องมี RAM เท่าไร?
- ผู้เขียนต้นฉบับ: ขั้นต่ำ 64GB และแนะนำ 96GB จะดีที่สุด
- เหตุผล: Linux mmap จะเก็บเลเยอร์ expert ที่ “ฮอต” ไว้ในหน่วยความจำ ทำให้เข้าถึงได้เร็วแม้ไม่ต้องโหลดโมเดลทั้งหมด
Q3. ถ้าย้ายเลเยอร์ MOE บางส่วนไป GPU จะเร็วขึ้นมากไหม?
- ผู้เขียนต้นฉบับ: เร็วขึ้นได้เล็กน้อย แต่ไม่ได้ต่างมาก
- ตัวอย่าง:
- MOE ทั้งหมดบน CPU: พรอมป์ต์ 134 โทเค็น/วินาที, อนุมาน 25 โทเค็น/วินาที
- MOE 8 ตัวบน GPU: พรอมป์ต์ 163 โทเค็น/วินาที, อนุมาน 30 โทเค็น/วินาที
- การใช้ VRAM เพิ่มเป็น 22GB
Q4. GPU แบบไหนเหมาะสม?
- ผู้เขียนต้นฉบับ: RTX 3060Ti ขึ้นไปก็เพียงพอ และแนะนำให้รองรับ BF16 (RTX 3000+)
- เหตุผล: ทุกเลเยอร์นอกเหนือจาก MOE ทำงานด้วย BF16
Q5. ต้องตั้งค่าคำสั่งอย่างไร?
- ผู้เขียนต้นฉบับ: มีตัวอย่างอ้างอิงจาก PR #15157
~/build/llama.cpp/build-cuda/bin/llama-server \ -m $LLAMA_MODEL_DIR/gpt-oss-120b-mxfp4-00001-of-00003.gguf \ --n-cpu-moe 36 \ --n-gpu-layers 999 \ -c 0 -fa \ --jinja --reasoning-format none \ --host 0.0.0.0 --port 8502 --api-key "dummy"
6 ความคิดเห็น
ผมลองจริงแล้ว แต่มันช้ามาก
แทบไม่ได้ใช้ GPU clock เลย
ใช้หน่วยความจำเฉพาะของ GPU 8GB และหน่วยความจำระบบ 64GB จนเต็ม
ส่วน 16 vCore ใช้แค่ครึ่งเดียว
ต้องมองว่าความหมายคือมันแค่รันได้เท่านั้น ไม่ได้อยู่ในลักษณะที่ใช้ทรัพยากรทั้งหมด
หนึ่งคำถามใช้เวลา 6~8 นาทีครับ
คล้ายกันเลย ผมก็คงต้องลองทำดูเหมือนกันครับ
คิดว่า 32GB ก็น่าจะพอแล้วซะอีก...
อย่างแรกเลย รันบน lm studio M4 max 64gb ไม่ได้อะ T_T
ขนาด 65GB เลย... น่าเสียดายจัง ฮือฮือ
ความคิดเห็นจาก Hacker News
บทความที่เกี่ยวข้อง
จึงใช้งานโมเดลอื่นอย่าง qwen, mistral, gemma เป็นหลักอยู่ตอนนี้
ขณะที่คนอื่นรันโมเดล 120B ได้ด้วย VRAM ที่น้อยกว่า ซึ่งอาจเป็นเพราะไม่รองรับ ROCm และใช้ Vulkan
ถึงอย่างนั้น การรีดฮาร์ดแวร์ไปจนสุดขีดก็สนุกดี
llama.cpp สามารถตั้งจำนวนเลเยอร์ที่ให้ GPU คำนวณได้เอง แต่ ollama จะปรับให้อัตโนมัติ
ถ้าปรับสัดส่วน RAM/VRAM แบบไดนามิกตามความยาวเซสชันได้ก็คงดี
เพียงแต่ function calling ใน llama.cpp ยังพังอยู่
มีแผนจะโฮสต์ AI chatbot ด้วยมินิพีซีราคา $149 ในห้องนอน และโมเดล Qwen3 4B ก็ดูน่าสนใจ
แผนที่เกี่ยวข้อง
ตัวอย่างเช่น ใช้งานกับ Qwen 3 ได้ และยังสามารถกำหนด regex เองเพื่อย้ายเลเยอร์บางตัวไปยังอุปกรณ์ที่ต้องการได้