Engine suy luận CUDA chạy mô hình hybrid Qwen3.5/3.6 trên card đào coin (CMP 100-210)
(github.com/Haru-neo)Khi nghĩ xem có cách nào chạy mô hình lớn với chi phí rẻ hơn không, mình đã phát hiện ra CMP 100-210 nên thử mua 4 chiếc.
Vì mỗi chiếc có 16GB HBM2 nên có vẻ khá ổn.
Nhưng NVIDIA đã chặn rất quyết liệt.
- Tensor Core chậm hơn 64 lần (
HMMA latency 8→512 cycle) - PCIe Gen1 x1 và cũng không có P2P
- CUPTI cũng bị chặn nên không dùng được
torch.profiler - Là e-fuse được khắc ngay trên die nên cũng không thể mở bằng firmware (mình đã thử tất cả rồi)
Vì vậy đường đi mặc định của vLLM, llama.cpp, FA, bnb đều không dùng được.
Bất cứ thứ gì đụng tới Tensor Core của cuBLAS đều либо chạy ở tốc độ 1/64, либо chết hẳn.
Thấy tiếc vì số GPU trị giá 640 nghìn won cứ nằm lăn lóc trên bàn, mình đã tự viết một engine suy luận.
Chỉ chọn những đường không bị throttle:
- GEMM dùng kernel tự viết DP4A (
int8, 17 TFLOP) - attention dùng FlashAttention tự viết + block-sparse kiểu MInference
- giữa các GPU dùng hidden state bridge qua pinned-host (vì không có P2P)
- context 256K dùng KV cache 3-bit (
WHT + Lloyd-Max) để nén từ 17GB xuống 3.5GB
Hiện tại nếu là mô hình hybrid Qwen3.5/3.6 (GDN + Attention) thì cả 27B lẫn 9B đều chạy được.
Đều hỗ trợ OpenAI-compatible API, streaming, tool calls, vision (mmproj), /no_think.
Benchmark (so với llama.cpp build 8462, cùng Q8_0 GGUF, cùng phần cứng):
- prefill 9B GPU đơn: 1.22 ~ 2.99x
- prefill 27B 3 GPU: 1.45 ~ 2.86x
- gen: +30 ~ 50%
Giới hạn thực tế:
- Không hỗ trợ MoE (chỉ dense hybrid)
- Nếu có A100 / H100 thì hãy dùng vLLM. Nhanh hơn rất nhiều.
- Những thứ như DFlash chỉ có code chứ chưa chạy được (drafter mismatch)
- Chỉ chính thức hỗ trợ
Q8_0
Mong là sẽ giúp được những ai đang bị kẹt trong cùng hoàn cảnh.
Vì đây là engine do một học sinh lớp 10 tạo ra với sự hỗ trợ của Claude nên có thể có nhiều bug, code spaghetti, v.v.
Rất hoan nghênh issue và PR!
Chưa có bình luận nào.