30 điểm bởi GN⁺ 2025-08-13 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Tận dụng tùy chọn --cpu-moe củ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
  • 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"  
    

Chưa có bình luận nào.

Chưa có bình luận nào.