เอนจินอนุมาน CUDA สำหรับรันโมเดลไฮบริด Qwen3.5/3.6 บนการ์ดขุด CMP 100-210
(github.com/Haru-neo)ผมลองคิดหาวิธีรันโมเดลใหญ่ ๆ แบบประหยัด แล้วก็ไปเจอ CMP 100-210 เลยลองซื้อมา 4 ใบครับ
ดูเหมือนจะดีทีเดียวเพราะมี HBM2 ขนาด 16GB ต่อใบ
แต่ NVIDIA ล็อกไว้แน่นมากจริง ๆ
- Tensor Core ช้าลง 64 เท่า (HMMA latency 8→512 cycle)
- เป็น PCIe Gen1 x1 และไม่มี P2P
- บล็อก CUPTI ด้วย เลยใช้
torch.profilerไม่ได้ - เป็น e-fuse ที่ฝังอยู่บนได จึงปลดด้วยเฟิร์มแวร์ไม่ได้ (ลองมาหมดแล้ว)
เพราะงั้นทั้ง vLLM, เส้นทางปกติของ llama.cpp, FA และ bnb ใช้งานไม่ได้ทั้งหมด
ทุกอย่างที่ไปแตะ cuBLAS Tensor Core จะวิ่งที่ความเร็ว 1/64 หรือไม่ก็พังไปเลย
เสียดายที่ GPU มูลค่า 640,000 วอนวางกลิ้งอยู่บนโต๊ะเฉย ๆ เลยเขียนเอนจินอนุมานขึ้นมาเองครับ
เลือกใช้เฉพาะเส้นทางที่ไม่โดน throttle:
- GEMM ใช้เคอร์เนลที่เขียนเองแบบ DP4A (int8, 17 TFLOP)
- attention ใช้ FlashAttention ที่เขียนเอง + block-sparse สไตล์ MInference
- ระหว่าง GPU ใช้ hidden state bridge ผ่าน pinned-host (เพราะไม่มี P2P)
- context 256K ใช้ 3-bit KV cache (WHT + Lloyd-Max) ลดจาก 17GB → 3.5GB
ตอนนี้ถ้าเป็นโมเดล Qwen3.5/3.6 hybrid (GDN + Attention) ก็รันได้ทั้ง 27B และ 9B
รองรับ OpenAI-compatible API, streaming, tool calls, vision (mmproj) และ /no_think ทั้งหมด
ผลทดสอบ (เทียบกับ llama.cpp build 8462, Q8_0 GGUF เดียวกัน, ฮาร์ดแวร์เดียวกัน):
- 9B GPU เดี่ยว prefill: 1.22 ~ 2.99x
- 27B แบบ 3GPU prefill: 1.45 ~ 2.86x
- gen: +30 ~ 50%
ข้อจำกัดแบบตรงไปตรงมา:
- ใช้กับ MoE ไม่ได้ (รองรับเฉพาะ dense hybrid)
- ถ้ามี A100 / H100 ให้ใช้ vLLM ไปเลย เร็วกว่ามาก
- ของอย่าง DFlash มีแค่โค้ด แต่ยังรันไม่ได้ (drafter mismatch)
- รองรับอย่างเป็นทางการเฉพาะ Q8_0
หวังว่าจะเป็นประโยชน์กับคนที่ติดอยู่ในสภาพแวดล้อมแบบเดียวกันครับ
เอนจินนี้เป็นงานที่นักเรียน ม.4 สร้างขึ้นโดยใช้ Claude จึงอาจมีบั๊กหรือสปาเกตตีโค้ดอยู่มาก
ยินดีรับ issue และ PR!
ยังไม่มีความคิดเห็น