- ใช้ตัวเลือก
--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. ต้องตั้งค่าคำสั่งอย่างไร?
ยังไม่มีความคิดเห็น