𝗥𝘂𝗻𝗻𝗶𝗻𝗴 𝗧𝘄𝗼 𝗠𝗼𝗱𝗲𝗹𝘀 𝗼𝗻 𝗢𝗻𝗲 𝗚𝗣𝗨: 𝗧𝗵𝗲 𝗠𝗮𝘁𝗵 𝗕𝗲𝗵𝗶𝗻𝗱 𝗟𝗼𝗰𝗮𝗹 𝗟𝗟𝗠𝘀
ผมรัน agent stack บนเวิร์กสเตชัน โดยโมเดลต่างๆ รันอยู่บน DGX Spark ผ่านเครือข่าย LAN ผมเลือกใช้ vLLM แทน Ollama เพื่อการจัดการหน่วยความจำที่มีประสิทธิภาพมากกว่า
เป้าหมายคือการรันสองโมเดลพร้อมกัน:
- Qwen3-Next-80B สำหรับการใช้เหตุผลที่ซับซ้อน (heavy reasoning)
- Qwen3-4B สำหรับการตอบโต้ที่รวดเร็ว (fast turns)
ทั้งสองโมเดลเรียกใช้งานผ่าน URL เดียวกันโดยใช้ LiteLLM proxy การตั้งค่านี้ล้มเหลวอยู่หลายครั้งก่อนที่ผมจะค้นพบวิธีการคำนวณที่ถูกต้อง
นี่คือบทเรียนที่ได้จากความพยายามครั้งนี้
𝗪𝗵𝗮𝘁 𝗛𝗮𝗽𝗽𝗲𝗻𝗲𝗱 𝗪𝗶𝘁𝗵 𝗧𝗵𝗲 𝗠𝗲𝗺𝗼𝗿𝘆 𝗧𝗿𝗮𝗽
การตั้งค่า gpu_memory_utilization ไม่ใช่เป้าหมายสำหรับหน่วยความจำที่ว่างอยู่ แต่มันคือสัดส่วนของหน่วยความจำ GPU ทั้งหมด
หากคุณมีหน่วยความจำการ์ดจอ 120 GB และตั้งค่า utilization เป็น 0.80 vLLM จะพยายามจองพื้นที่ 96 GB จากความจุทั้งหมด โดยไม่ได้ดูว่าปัจจุบันมีหน่วยความจำว่างอยู่เท่าไหร่ หากคุณพยายามรันสองโปรเซสพร้อมกัน ผลรวมของเปอร์เซ็นต์ทั้งสองต้องน้อยกว่า 0.95 เพื่อเหลือพื้นที่ไว้สำหรับ overhead ของ CUDA framework
𝗪𝗵𝗮𝘁 𝗛𝗮𝗽𝗽𝗲𝗻𝗲𝗱 𝗪𝗶𝘁𝗵 𝗧𝗵𝗲 𝗠𝗼𝗱𝗲𝗹𝘀
ผมลองใช้โมเดล 80B เวอร์ชัน Thinking แต่มันล้มเหลว โมเดลจะใช้เหตุผลภายในแท็ก <think> แต่ไม่ยอมเรียกใช้งาน tool เลย มันจะหยุดทำงานไปเฉยๆ
ผมจึงต้องเปลี่ยน backbone ของ 80B ไปใช้เวอร์ชัน Instruct แทน ซึ่งช่วยให้ agent สามารถใช้งาน tools ได้อย่างถูกต้อง
𝗧𝗵𝗲 𝗔𝗰𝘁𝘂𝗮𝗹 𝗠𝗮𝘁𝗵 หลังจากทดสอบ ผมพบว่าตัวเลขเหล่านี้ใช้งานได้ดีกับระบบของผม:
• Qwen3-Next-80B (ที่เป้าหมาย 0.80): ใช้หน่วยความจำจริงประมาณ ~87.8 GiB • Qwen3-4B (ที่เป้าหมาย 0.10): ใช้หน่วยความจำจริงประมาณ ~13.8 GiB • การใช้งานรวม: ~101.6 GiB • พื้นที่ว่างที่เหลือ (Free headroom): ~18 GiB
หากผมดัน 80B ไปที่ 0.85 โมเดล 4B จะไม่สามารถเริ่มทำงานได้ เพราะ 80B จะจองพื้นที่มากเกินไปจนไม่เหลือพื้นที่ขั้นต่ำสำหรับโมเดล 4B
𝗠𝘆 𝗣𝗹𝗮𝘆𝗯𝗼𝗼𝗸 𝗳𝗼𝗿 𝗖𝗼-𝗿𝗲𝘀𝗶𝗱𝗲𝗻𝘁 𝗠𝗼𝗱𝗲𝗹𝘀
- โหลดโมเดลที่ใหญ่ที่สุดก่อน
- ปล่อยให้ระบบเข้าที่ (settle)
- รัน
nvidia-smiเพื่อดูหน่วยความจำที่ใช้งานจริง - กำหนดขนาดของโมเดลที่เล็กกว่าโดยอิงจากหน่วยความจำที่เหลืออยู่ ลบออก 5 GB สำหรับ overhead
- รีสตาร์ททั้งสองโมเดลสองรอบเพื่อให้แน่ใจในความเสถียร
อย่าเดาการตั้งค่าหน่วยความจำของคุณ ให้ใช้คำสั่งนี้เพื่อดูความเป็นจริง:
nvidia-smi --query-gpu=memory.used --format=csv
หากการจัดสรรเป้าหมาย (target allocation) และการใช้งานจริงของคุณต่างกันมากกว่า 10% แสดงว่าการคำนวณของคุณผิดพลาด ให้แก้ไขก่อนที่จะ deploy agent stack ของคุณ
Optional learning community: https://t.me/GyaanSetuAi