Quay lại danh sách
Tin tức công nghệ

Tối ưu hóa Inference cho DeepSeek-R1 trên VPS chạy CPU AMD EPYC: Bí quyết tối đa hóa Token/s

30 tháng 5, 2026

Giới thiệu về thách thức Inference DeepSeek-R1 trên hệ thống CPU

Mô hình ngôn ngữ lớn (LLM) DeepSeek-R1 với khả năng suy luận mạnh mẽ đang tạo nên một làn sóng công nghệ lớn trong cộng đồng AI. Tuy nhiên, việc triển khai mô hình này đòi hỏi tài nguyên phần cứng cực kỳ khắt khe. Trong bối cảnh khan hiếm và chi phí thuê GPU tăng cao, việc tận dụng hệ thống VPS (Virtual Private Server) trang bị dòng CPU AMD EPYC thế hệ mới để chạy Inference trở thành một giải pháp kinh tế và khả thi cho nhiều doanh nghiệp.

Mặc dù GPU vượt trội về khả năng tính toán song song, dòng CPU máy chủ AMD EPYC (như Milan, Genoa, Bergamo) lại sở hữu lợi thế lớn về dung lượng bộ nhớ RAM hỗ trợ khổng lồ và số lượng nhân xử lý (Core) vượt trội. Bài viết này sẽ hướng dẫn bạn các bước cấu hình chuyên sâu từ tầng phần cứng (NUMA), tối ưu tập lệnh toán học đến tinh chỉnh phần mềm (Llama.cpp, vLLM với ZenDNN) nhằm đạt số Token/s tối đa trên cấu hình CPU AMD EPYC.


1. Hiểu rõ nút thắt cổ chai: Memory Bandwidth vs. Compute Bound

Khi thực hiện quá trình sinh văn bản (Decoding Phase) của DeepSeek-R1 trên CPU, hệ thống liên tục phải tải hàng chục tỷ tham số từ RAM vào bộ nhớ đệm Cache của CPU để xử lý từng token một. Quá trình này được gọi là Memory Bandwidth Bound (giới hạn bởi băng thông bộ nhớ).

Công thức tính toán lý thuyết tốc độ Token tối đa:
$$\text{Tốc độ tối đa (Token/s)} = \frac{\text{Băng thông bộ nhớ hệ thống (GB/s)}}{\text{Dung lượng mô hình sau khi định lượng (GB)}}$$

Ví dụ, một hệ thống AMD EPYC Dual-Socket với cấu hình RAM DDR5 12 kênh có thể đạt băng thông thực tế khoảng 400 GB/s. Nếu bạn chạy phiên bản định lượng của DeepSeek-R1 nặng 80GB, tốc độ tối đa trên lý thuyết sẽ rơi vào khoảng 5 Token/s. Do đó, mọi nỗ lực tối ưu hóa đều tập trung vào hai mục tiêu: Giảm dung lượng mô hình và Tối đa hóa hiệu suất băng thông RAM.


2. Tối ưu hóa kiến trúc bộ nhớ NUMA (Non-Uniform Memory Access)

Các bộ vi xử lý AMD EPYC có cấu trúc nhiều chiplet (CCD) kết nối với chip quản lý I/O trung tâm. Trên các hệ thống VPS nhiều Socket hoặc cấu hình đa NUMA node, nếu một nhân CPU ở Node này phải truy cập dữ liệu RAM cắm ở Node khác, độ trễ sẽ tăng cao và băng thông sụt giảm nghiêm trọng.

Để giải quyết vấn đề này, chúng ta bắt buộc phải sử dụng công cụ numactl để ràng buộc (bind) tiến trình chạy Inference vào các nhân CPU và vùng nhớ cục bộ có độ trễ thấp nhất.

Chiến lược phân tách Instance hiệu quả

Thay vì chạy một instance duy nhất tận dụng toàn bộ 128 core (dẫn đến nghẽn băng thông và xung đột bộ nhớ đệm L3 Cache), hãy chia nhỏ hệ thống thành nhiều instance nhỏ hơn độc lập:

  • Kiểm tra cấu hình NUMA của VPS bằng lệnh: numactl --hardware
  • Khởi chạy tiến trình Inference được ghim chặt vào một NUMA node cụ thể:
numactl --cpunodebind=0 --membind=0 llama-cli -m deepseek-r1-q4_k_m.gguf -p "Hello" -t 32

Trong đó, tham số -t 32 giới hạn số luồng (threads) bằng chính xác số nhân vật lý (Physical Cores) thuộc NUMA node đó. Việc bật quá nhiều luồng ảo (SMT/Hyper-threading) sẽ gây phản tác dụng do tranh chấp tài nguyên tính toán.


3. Lựa chọn định lượng (Quantization) thông minh

Mô hình DeepSeek-R1 bản gốc (671B) có kích thước khổng lồ. Để chạy được trên CPU, việc sử dụng các phiên bản Distilled (như 8B, 14B, 32B, 70B) hoặc áp dụng kỹ thuật định lượng là bắt buộc. Dưới đây là bảng khuyến nghị định lượng tối ưu cho CPU AMD EPYC nhằm cân bằng giữa độ chính xác (Perplexity) và tốc độ (Token/s):

Dòng mô hình DeepSeek-R1Kiểu định lượng khuyến nghịDung lượng RAM tối thiểuLợi ích trên AMD EPYC
DeepSeek-R1-Distill-Qwen-8BQ4_K_M hoặc Q8_0> 16 GBTốc độ cực nhanh, chạy mượt trên VPS cấu hình thấp.
DeepSeek-R1-Distill-Llama-70BQ4_K_M / Q3_K_L> 64 GBĐạt điểm cân bằng hoàn hảo giữa khả năng suy luận nâng cao và tốc độ.
DeepSeek-R1 (Full 671B)Unsloth 2.51-bit / Q2_K> 256 GBCần hệ thống EPYC chuyên dụng với RAM DDR5 đa kênh lớn.

Lưu ý thực tế: Tránh sử dụng định lượng quá thấp như 1.58-bit trên CPU vì cấu trúc giải nén toán học phức tạp của định lượng này có thể làm CPU bị nghẽn năng lực tính toán (Compute Bound), dẫn đến tốc độ sinh token thấp hơn cả bản 2.51-bit.


4. Tận dụng sức mạnh phần mềm: vLLM với ZenDNN hoặc Llama.cpp

Để tối đa hóa hiệu năng trên phần cứng AMD, việc sử dụng các thư viện phần mềm gốc chưa qua tối ưu là một sai lầm lớn. Bạn có hai giải pháp hàng đầu:

Giải pháp 1: Llama.cpp biên dịch tối ưu hóa AVX-512

Dòng CPU AMD EPYC hỗ trợ rất tốt tập lệnh AVX-512 (và cả AVX3/VNNI tùy thế hệ). Hãy biên dịch Llama.cpp trực tiếp từ mã nguồn trên VPS của bạn để trình biên dịch tự động tối ưu cho kiến trúc chip hiện tại:

cmake -B build -FMA=ON -DAVX512=ON -DCMAKE_BUILD_TYPE=Release
cmake --build build --config Release

Giải pháp 2: Sử dụng vLLM kết hợp thư viện AMD ZenDNN

AMD cung cấp thư viện ZenDNN (Zen Deep Neural Network) được thiết kế riêng để tăng tốc các hàm toán học cốt lõi như nhân ma trận trên kiến trúc CPU Zen. Khi triển khai vLLM cho môi trường Production đông người dùng, việc tích hợp plugin ZenDNN phối hợp với biến môi trường khai báo bất biến tham số mô hình:export TORCHINDUCTOR_FREEZING=1 export OMP_NUM_THREADS=64

Giúp cố định các tham số mô hình trong bộ nhớ, tối ưu hóa vị trí dữ liệu trong Cache L3, giảm thiểu tối đa việc đọc ghi RAM không cần thiết, giúp tăng hiệu suất giải mã (Decode Throughput) lên tới hơn 200% so với cấu hình vLLM mặc định.


5. Check-list cấu hình hệ thống VPS cho Quản trị viên

Trước khi đưa hệ thống vào vận hành thực tế, hãy đảm bảo bạn đã cấu hình các thiết lập hệ điều hành Linux sau đây để tránh suy giảm hiệu năng:

  • Tắt Transparent Huge Pages (THP): Giúp quản lý bộ nhớ RAM ổn định hơn khi cấp phát dung lượng lớn cho LLM.
  • Cấu hình CPU Governor: Chuyển chế độ hoạt động của CPU từ Tiết kiệm điện sang Hiệu năng cao bằng lệnh: cpupower frequency-set -g performance.
  • Sử dụng Thư viện Cấp phát Bộ nhớ Nâng cao: Thay thế bộ cấp phát mặc định bằng tcmalloc hoặc jemalloc thông qua biến môi trường LD_PRELOAD để giảm hiện tượng phân mảnh RAM khi chạy xử lý luồng dữ liệu lớn liên tục.

Kết luận

Tối ưu hóa Inference cho DeepSeek-R1 trên CPU AMD EPYC không chỉ nằm ở việc tăng số lượng Core xử lý, mà cốt lõi là làm chủ được băng thông bộ nhớ và cấu trúc NUMA của hệ thống. Bằng cách áp dụng đúng kỹ thuật định lượng (Quantization phù hợp), cấu hình phân tách luồng xử lý theo Node vật lý, ghim luồng CPU chính xác và tận dụng các tập lệnh AVX-512/ZenDNN, doanh nghiệp hoàn toàn có thể xây dựng một hệ thống phục vụ AI mạnh mẽ, ổn định với mức chi phí tối ưu nhất trên nền tảng VPS sẵn có.

Tối ưu hóa Inference cho DeepSeek-R1 trên VPS chạy CPU AMD EPYC: Bí quyết tối đa hóa Token/s | DPTCloud