Bài đăng
avatar

#Claude #Codex # Đã thử chạy LLM cục bộ trên GPU Ryzen Zen3 (So sánh và phân tích hiệu năng của Qwen3-8B Heretic CPU và GPU) Cố lên, AMD, cố lên Vulkan Tôi từng nghĩ GPU dùng cho game thì chẳng có gì đặc biệt, và hóa ra đúng thật vậy Theo đánh giá, băng thông bộ nhớ là điểm nghẽn (do VRAM nhỏ nên phải dùng bộ nhớ chính, đang trông chờ vào Mac M5 Studio) Phiên bản mới nhất của AMD là Zen6, nên CPU này là thế hệ cũ hơn 3 thế hệ (có GPU tích hợp) ---- # So sánh và phân tích hiệu năng của Qwen3-8B Heretic CPU và GPU Ngày đo: 2026-11-02 / Môi trường: Máy Ubuntu ## Kết luận - **GPU (GPU tích hợp Radeon) nhanh hơn đáng kể khi tải prompt, khoảng 2,5 lần so với CPU.** - **Tốc độ sinh văn bản chỉ nhanh hơn 1,1–1,2 lần so với CPU.** Tốc độ sinh bị giới hạn bởi tốc độ truyền tải bộ nhớ, do GPU tích hợp chia sẻ cùng bộ nhớ với CPU. - Trong cách sử dụng như OpenClaw, nơi gửi lệnh dài mỗi lần, **hiệu quả của bộ nhớ đệm prompt** quan trọng hơn GPU; từ lần thứ hai trở đi, thời gian giảm từ khoảng 7 phút xuống còn khoảng 1 phút. ## Môi trường đo lường | Mục | Nội dung | |---|---| | CPU | AMD Ryzen 7 7730U (8 lõi, 16 luồng, Zen 3) | | GPU | GPU tích hợp AMD Radeon Graphics (Barcelo, tương đương Vega 8) | | Bộ nhớ | 30GB (theo thông số: DDR4-3200 kép kênh. Thực tế chưa xác minh) | | Bộ nhớ GPU | VRAM riêng 512MB + bộ nhớ chia sẻ (GTT) khoảng 15,4GB. LM Studio chỉ sử dụng được 10,59GiB | | Hệ điều hành / Driver | Ubuntu 24.04.5 LTS, Mesa 25.2.8 (RADV) | | LM Studio | Phiên bản không giao diện (llmster), llama.cpp 2.66.0 | | Runtime CPU | `llama.cpp-linux-x86_64-avx2` | | Runtime GPU | `llama.cpp-linux-x86_64-vulkan-avx2` (đặt toàn bộ lớp lên GPU, `--gpu max`) | | Mô hình | DreamFast/qwen3-8b-heretic Q4_K_M (5,03GB) | | Cài đặt tải | Độ dài ngữ cảnh 32768, số lượng xử lý đồng thời 1 | ## Phương pháp đo lường - Gửi cùng một prompt đến API của LM Studio (`/api/v0/chat/completions`) và so sánh giữa CPU và GPU. - Mỗi điều kiện được thực hiện hai lần. Lần thứ hai sử dụng prompt đã được lưu trong bộ nhớ đệm, do đó **tốc độ tải được lấy từ giá trị lần đầu tiên**. - Tốc độ sinh được lấy từ `tokens_per_second` do LM Studio trả về. - Quá trình suy nghĩ trước khi trả lời được tắt bằng `/no_think`, `temperature` đặt về 0. - Sau khi đo GPU, để làm mát 2 phút rồi mới đo CPU. - Script và dữ liệu ghi lại nằm tại `~/bench/bench.py`, `~/bench/run.sh`, `~/bench/result.log` trên máy Ubuntu. ## Kết quả ### Tóm tắt so sánh | Nội dung | Mục | CPU | GPU | Chênh lệch | |---|---|---|---|---| | Câu hỏi ngắn (24 token) sinh 256 token | Tốc độ sinh | 7,3 token/giây | 8,2 token/giây | 1,13 lần | | | Thời gian thực hiện | 35,7 giây | 31,4 giây | | | Prompt 921 token | Tốc độ tải | 30,5 token/giây | 76,3 token/giây | **2,5 lần** | | | Thời gian đến ký tự đầu tiên | 30,2 giây | 12,1 giây | | | | Tốc độ sinh | 7,0 token/giây | 8,0 token/giây | 1,13 lần | | Prompt 3.621 token | Tốc độ tải | 35,4 token/giây | 87,5 token/giây | **2,5 lần** | | | Thời gian đến ký tự đầu tiên | 102,3 giây | 41,4 giây | | | | Tốc độ sinh | 5,9 token/giây | 7,2 token/giây | 1,2 lần | ### Chi tiết giá trị đo | Phương pháp | Nội dung | Lần | Prompt | Sinh | Thời gian thực hiện | Đến ký tự đầu tiên | Tốc độ sinh | |---|---|---|---|---|---|---|---| | GPU | Câu hỏi ngắn | 1 | 24 | 256 | 31,4 giây | 0,50 giây | 8,26 | | GPU | Câu hỏi ngắn | 2 | 24 | 256 | 31,2 giây | 0,12 giây | 8,23 | | GPU | Prompt khoảng 1.000 | 1 | 921 | 32 | 16,0 giây | 12,07 giây | 7,97 | | GPU | Prompt khoảng 1.000 (bộ nhớ đệm) | 2 | 921 | 32 | 4,0 giây | 0,14 giây | 7,98 | | GPU | Prompt khoảng 4.000 | 1 | 3.621 | 32 | 45,7 giây | 41,38 giây | 7,18 || GPU | Khoảng 4.000 từ khóa | 2 (bộ nhớ đệm) | 3.621 | 32 | 4,5 giây | 0,14 giây | 7,22 | | CPU | Câu hỏi ngắn | 1 | 24 | 256 | 35,7 giây | 0,73 giây | 7,29 | | CPU | Câu hỏi ngắn | 2 | 24 | 241 | 32,8 giây | 0,14 giây | 7,36 | | CPU | Khoảng 1.000 từ khóa | 1 | 921 | 32 | 34,7 giây | 30,21 giây | 7,03 | | CPU | Khoảng 1.000 từ khóa | 2 (bộ nhớ đệm) | 921 | 32 | 4,6 giây | 0,15 giây | 6,96 | | CPU | Khoảng 4.000 từ khóa | 1 | 3.621 | 32 | 107,5 giây | 102,30 giây | 5,94 | | CPU | Khoảng 4.000 từ khóa | 2 (bộ nhớ đệm) | 3.621 | 32 | 5,4 giây | 0,17 giây | 5,96 | Đơn vị của từ khóa đầu vào và đầu ra là token, đơn vị tốc độ sinh là token/giây. ### Sửa đổi Lúc đo lường sơ bộ ban đầu, tôi đã thông báo rằng tốc độ sinh trên GPU nhanh hơn khoảng 2,2 lần so với CPU, nhưng đây là sai lầm. Giá trị 3,86 token/giây mà tôi so sánh là khi bot2 xử lý đầu vào khoảng 14.000 token. Vì đầu vào dài sẽ làm chậm quá trình sinh, nên việc so sánh với giá trị của câu hỏi ngắn là không chính xác. Khi so sánh trong cùng điều kiện, sự chênh lệch tốc độ sinh chỉ ở mức 1,1–1,2 lần. ## Lý do sử dụng GPU không giúp tăng tốc đáng kể như mong đợi ### 1. Tốc độ sinh bị giới hạn bởi tốc độ truyền dữ liệu bộ nhớ Mỗi khi LLM sinh một token, nó phải đọc toàn bộ trọng số mô hình từ bộ nhớ. Giới hạn tối đa của tốc độ sinh được xác định khoảng bằng: “Tốc độ truyền bộ nhớ ÷ Kích thước mô hình”. | Mục | Giá trị | |---|---| | Tốc độ truyền bộ nhớ (lý thuyết) | Khoảng 51 GB/giây với DDR4-3200 song kênh | | Lượng dữ liệu đọc mỗi token | Khoảng 5 GB (toàn bộ mô hình) | | Giới hạn lý thuyết của tốc độ sinh | 51 ÷ 5,03 ≒ **khoảng 10 token/giây** | | Thực tế (GPU) | 8,2 token/giây (khoảng 80% giới hạn) | | Thực tế (CPU) | 7,3 token/giây (khoảng 70% giới hạn) | GPU tích hợp chia sẻ cùng bộ nhớ chính với CPU, nên giới hạn tối đa gần như giống hệt CPU. Dù dùng GPU, khoảng trống để tiếp cận giới hạn này chỉ khoảng 1–2%. GPU rời có bộ nhớ riêng tốc độ cao, do đó giới hạn này cao hơn nhiều. | GPU | Tốc độ truyền bộ nhớ | Tỷ lệ so với máy Ubuntu này | |---|---|---| | GPU tích hợp trên máy Ubuntu này | Khoảng 51 GB/giây (chia sẻ với CPU) | 1x | | RTX 4060 | Khoảng 272 GB/giây | Khoảng 5x | | RTX 4090 | Khoảng 1.008 GB/giây | Khoảng 20x | ### 2. Việc đọc đầu vào phụ thuộc vào sức mạnh tính toán, nhưng sức mạnh tính toán của GPU tích hợp là nhỏ Khi đọc đầu vào, nhiều token được xử lý đồng thời nên tốc độ phụ thuộc nhiều hơn vào sức mạnh tính toán hơn là tốc độ bộ nhớ. Hiệu quả của GPU thể hiện rõ ở đây — thực tế cho thấy tốc độ tăng gấp 2,5 lần. Tuy nhiên, GPU này có các hạn chế sau khiến tốc độ chỉ dừng ở mức gấp 2,5 lần: | Hạn chế | Nội dung | |---|---| | Số đơn vị tính toán ít | Chỉ có 8 đơn vị. Dự kiến khoảng 2 TFLOPS ở chế độ đơn chính xác — chỉ bằng vài phần mười so với GPU dành cho game | | Không có mạch tính toán chuyên dụng cho ma trận | Không có mạch chuyên dụng như Tensor Core của NVIDIA để xử lý AI | | Không hỗ trợ ROCm | Nền tảng tính toán dành cho GPU AMD không chính thức hỗ trợ GPU tích hợp này. Hiện đang chạy trên Vulkan phổ dụng | Để xử lý một token trong mô hình kích thước 8B cần khoảng 16 GFLOP tính toán. Với sức mạnh khoảng 2 TFLOPS, giới hạn lý thuyết là khoảng 120 token/giây. Kết quả thực tế từ 76–88 token/giây tương đương khoảng 6–7% giới hạn. ### 3. Đầu vào càng dài thì tốc độ càng chậm Khi ngữ cảnh dài hơn, mỗi token phải tham chiếu đến nhiều token trước đó hơn, khiến cả quá trình đọc và sinh đều chậm lại. | Điều kiện | Tốc độ đọc | Tốc độ sinh | |---|---|---| | GPU, đầu vào khoảng 1.000 token | 76 token/giây | 8,0 token/giây | | GPU, đầu vào khoảng 3.600 token | 88 token/giây | 7,2 token/giây | | GPU, OpenClaw (15.686 token), 2.048 token đầu tiên | 78,7 token/giây | — | | GPU, OpenClaw (15.686 token), trung bình toàn bộ | 44,1 token/giây | 5,1 token/giây | | CPU, OpenClaw (14.021 token) | Khoảng 19,5 token/giây | 3,86 token/giây |Với lượng lên đến 3.600 token, thời gian tải tăng lên do khả năng xử lý đồng thời lớn hơn, nhưng thực tế lại nhanh hơn. Khi vượt quá 15.000 token, tốc độ giảm xuống còn khoảng 46 token/giây ở giai đoạn cuối. ## Xác minh bộ nhớ đệm trên OpenClaw (bot2 mei) Đã gửi liên tiếp hai yêu cầu qua phiên bản Qwen3 chạy trên GPU trong phiên bản xác minh. | Mục | Lần 1 | Lần 2 | |---|---|---| | Prompt do OpenClaw gửi | 15.686 token | 15.744 token | | Số token thực tế được tải | 15.686 (tất cả) | **135 (chỉ phần mới thêm vào)** | | Thời gian tải | 356,1 giây | **6,1 giây** | | Tạo ra | 247 token, 48,1 giây (5,11 token/giây) | 249 token, 48,5 giây (5,11 token/giây) | | Tổng cộng | **410 giây** | **58 giây** | - OpenClaw luôn gửi cùng nội dung ở đầu chỉ dẫn, do đó lần thứ hai đã tái sử dụng trực tiếp phần đã xử lý (98%). - Phần lớn thời gian chờ ở lần thứ hai là do suy nghĩ khoảng 240 token. Ngay cả khi dùng `--thinking off`, quá trình suy nghĩ vẫn không dừng lại. Nếu có thể tắt suy nghĩ, thời gian dự kiến sẽ giảm xuống khoảng 10 giây. - Bộ nhớ đệm không bị xóa theo thời gian. Nó chỉ bị xóa khi mô hình bị gỡ bỏ, khi có xử lý khác xen vào (do giới hạn đồng thời là 1), hoặc khi hội thoại bị nén. ## Các lựa chọn để tăng tốc Vì tốc độ truyền bộ nhớ không thể thay đổi, cách hiệu quả nhất là giảm lượng dữ liệu cần tải cho mỗi token. | Phương pháp | Hiệu quả dự kiến | Lưu ý | |---|---|---| | Tận dụng bộ nhớ đệm prompt | Thời gian tải lần thứ hai trở đi chỉ vài giây (đã xác minh) | Có thể bị xóa do xen ngang hoặc nén | | Tắt suy nghĩ của Qwen3 | Giảm khoảng 48 giây mỗi lần | Chất lượng câu trả lời có thể giảm nhẹ | | Chuyển sang Qwen3-30B-A3B dạng MoE | Mỗi token chỉ sử dụng khoảng 3B trọng số. Dự kiến tốc độ tạo ra tăng 2-3 lần và trí tuệ cũng cải thiện | Kích thước khoảng 18GB, vượt quá dung lượng GPU 10,6GiB nên một phần phải xử lý bằng CPU. Phiên bản không kiểm duyệt có hay không vẫn chưa xác nhận | | Chuyển sang mô hình nhỏ hơn (Qwen3-4B) | Tốc độ tạo ra tăng khoảng 2 lần | Trí tuệ giảm | | Sử dụng giải thuật phỏng đoán | Dùng Qwen3-0.6B làm nháp. Dự kiến tốc độ tạo ra tăng 1,3-2 lần | Hiệu quả thay đổi tùy nội dung | | Giảm thêm mức lượng tử hóa (Q3 trở xuống) | Cải thiện khoảng 10-20% | Độ chính xác giảm | | Rút ngắn chỉ dẫn | Giảm thời gian tải cho lần đầu tiên và sau khi bộ nhớ đệm bị xóa | Phải hy sinh một số chức năng | Hiệu quả trong bảng trên, ngoại trừ bộ nhớ đệm prompt, đều là ước tính và chưa được đo lường thực tế. ## Trạng thái hiện tại (tính đến ngày 2026-11-03) | Mục | Trạng thái | |---|---| | LM Studio | Dừng. Tự khởi động đã vô hiệu hóa | | Runtime đang chọn | Vulkan (GPU) | | bot2 (mei) | gpt-5.4-mini | | Cổng truyền cho bot2 | Dừng. Tự khởi động đã vô hiệu hóa | | Cấu hình bot2 cho Qwen3 | `~/.openclaw-bot2/openclaw.json.bak-qwen3-active-*` |

Nội dung này chỉ nhằm mục đích thông tin và giáo dục. Nội dung có thể bao gồm thông tin từ bên thứ ba, nội dung được tài trợ hoặc tài liệu quảng cáo mà nhà sáng tạo nội dung có thể nhận được thù lao. Không có nội dung nào trong nguồn cấp dữ liệu này cấu thành lời khuyên đầu tư hoặc đảm bảo lợi nhuận. Bạn hoàn toàn chịu trách nhiệm về các quyết định đầu tư của mình. Luôn luôn tự nghiên cứu và thận trọng trước khi giao dịch. Chúng tôi không đảm bảo tính chính xác của thông tin từ bên thứ ba và không chịu trách nhiệm cho bất kỳ tổn thất nào có thể phát sinh. Hiệu suất trong quá khứ không phải là chỉ báo cho kết quả trong tương lai. Vui lòng tham khảo Điều khoản Cộng đồng và Tuyên bố Tiết lộ Rủi ro của chúng tôi để biết thêm chi tiết.

avatarĐăng câu trả lời của bạn

Bình luận