GPT-OSS-120B có thể chạy rất tốt chỉ với 8GB VRAM
(old.reddit.com)- Tận dụng tùy chọn
--cpu-moecủa llama-cpp để xử lý các lớp chuyên gia MOE trên CPU, đồng thời chỉ offload các lớp attention lên GPU, nhờ đó đạt hiệu năng prefill nhanh với 5~8GB VRAM - Trên GPU chỉ giữ KV cache, trọng số và activation của Attention, bảng định tuyến, LayerNorm cùng các tham số không thuộc chuyên gia, nên mức dùng bộ nhớ thấp
- Ngay cả với GPU tầm RTX 3060Ti và 64GB~96GB RAM hệ thống, vẫn có thể chạy nhẹ nhàng mô hình 120B; hiệu năng tối ưu nhất đạt được trên GPU hỗ trợ BF16 (RTX 3000+)
- Khi dùng 5GB VRAM, hiệu năng ghi nhận là 8.15ms mỗi token (122.66 token/giây), và khi dùng 8GB VRAM thì cải thiện lên 7.44ms mỗi token (134.44 token/giây)
- Kiến trúc 120B được thiết kế tối ưu cho phần cứng tiêu dùng, cho phép chạy tốc độ cao ngay cả trong môi trường thiếu tài nguyên GPU
Cấu trúc CPU-MOE và GPU offloading
- Dùng tùy chọn
--cpu-moeđể xử lý toàn bộ lớp chuyên gia (MOE) trên CPU- Ví dụ:
--n-cpu-moe 36→ chạy toàn bộ 36 khối MOE trên CPU - Khi cần có thể chuyển một phần MOE sang GPU để tinh chỉnh hiệu năng
- Ví dụ:
- Chỉ giữ những thành phần sau trên GPU để tiết kiệm VRAM
- KV cache (sequence)
- Trọng số và activation của Attention
- Bảng định tuyến
- LayerNorm và các tham số không thuộc chuyên gia khác
- Trọng số MOE không nằm thường trú trên GPU nên không phải gánh lượng tham số MLP lớn
Yêu cầu bộ nhớ và phần cứng
- GPU: 5~8GB VRAM là đủ (ví dụ: RTX 3060Ti)
- GPU tối ưu khi hỗ trợ BF16 (RTX 3000 series trở lên)
- RAM hệ thống: tối thiểu 64GB, lý tưởng là 96GB
- Tận dụng Linux mmap nên dù toàn bộ mô hình không nằm hết trong bộ nhớ, các lớp chuyên gia “hot” vẫn được giữ trong RAM
Số liệu hiệu năng
Môi trường 5GB VRAM
- Xử lý prompt: 8.15ms/token (122.66 token/giây)
- Suy luận: 55.44ms/token (18.04 token/giây)
Môi trường 8GB VRAM (--n-cpu-moe 36, phần còn lại trên GPU)
- Xử lý prompt: 7.44ms/token (134.44 token/giây)
- Suy luận: 39.03ms/token (25.62 token/giây)
Môi trường 22GB VRAM (một phần MOE trên GPU)
- Xử lý prompt: 6.13ms/token (163.01 token/giây)
- Suy luận: 32.45ms/token (30.82 token/giây)
Kết luận
- Thiết kế của GPT-OSS-120B được tối ưu để chạy mô hình lớn với tốc độ cao ngay cả trên phần cứng tiêu dùng
- Nhờ cấu trúc CPU-MOE giúp giảm mức dùng VRAM nhưng vẫn giữ được tốc độ, mô hình này đặc biệt phù hợp với môi trường có tài nguyên GPU hạn chế
Câu hỏi trọng tâm & nội dung trả lời
Q1. Trong cấu hình này, mức sử dụng VRAM thực tế là bao nhiêu?
- Tác giả gốc: Khoảng 5GB VRAM khi chạy toàn bộ MOE trên CPU, chỉ đưa các lớp attention lên GPU
- Giải thích thêm: Trên GPU chỉ giữ KV cache, trọng số và activation của Attention, bảng định tuyến và LayerNorm
Q2. Tối thiểu cần bao nhiêu RAM?
- Tác giả gốc: Tối thiểu 64GB, khuyến nghị lý tưởng là 96GB
- Lý do: Linux mmap giữ các lớp chuyên gia “hot” trong bộ nhớ, cho phép truy cập nhanh mà không cần nạp toàn bộ mô hình
Q3. Nếu chuyển một phần lớp MOE sang GPU thì tốc độ có tăng nhiều không?
- Tác giả gốc: Có thể nhanh hơn một chút nhưng không tạo khác biệt lớn
- Ví dụ:
- Toàn bộ MOE trên CPU: prompt 134 token/giây, suy luận 25 token/giây
- 8 MOE trên GPU: prompt 163 token/giây, suy luận 30 token/giây
- Mức dùng VRAM tăng lên 22GB
Q4. GPU nào là phù hợp?
- Tác giả gốc: RTX 3060Ti trở lên là đủ, khuyến nghị GPU hỗ trợ BF16 (RTX 3000+)
- Lý do: Tất cả các lớp ngoài MOE đều chạy bằng BF16
Q5. Thiết lập lệnh như thế nào?
- Tác giả gốc: Cung cấp ví dụ theo 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 bình luận
Tôi đã thử thực tế rồi, nhưng quá chậm. Xung nhịp GPU hầu như không được dùng, VRAM chuyên dụng của GPU 8GB và RAM vật lý 64GB thì dùng kín, 16 vCore chỉ dùng khoảng một nửa. Chỉ nên hiểu là nó "vẫn chạy được" thôi, chứ không phải kiểu tận dụng hết mọi tài nguyên. Mỗi lần truy vấn mất 6~8 phút.
Tôi cũng nên thử làm tương tự mới được.
Tôi cứ tưởng 32GB là đủ...
Trước hết, nó không chạy được trên lm studio M4 max 64gb T_T
Vì tận 65GB nên... tiếc thật T_T
Ý kiến trên Hacker News
abliterated finetunetheo hướng lần theo rồi xóa các đường dẫn nơ-ron gây ra phản ứng từ chốiBài liên quan
Vì vậy tôi chủ yếu dùng các mô hình khác như qwen, mistral, gemma
Người khác lại chạy được mô hình 120B với ít VRAM hơn, có lẽ do không được hỗ trợ ROCm và phải dùng Vulkan
Dù vậy, ép phần cứng tới giới hạn vẫn khá vui
llama.cpp cho phép tự đặt số layer tính toán trên GPU, còn ollama thì tự động điều chỉnh
Sẽ hay hơn nếu có thể điều chỉnh động tỷ lệ RAM/VRAM theo độ dài phiên
Chỉ là function calling trong llama.cpp hiện vẫn đang bị lỗi
Tôi dự định host một chatbot AI trong phòng bằng mini PC giá $149, và mô hình Qwen3 4B có vẻ khá ổn
Kế hoạch liên quan
Ví dụ nó đã chạy với Qwen 3, và bạn có thể tự chỉ định regex để chuyển layer cụ thể sang thiết bị cụ thể