Back to articles
Technology Insight

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

May 30, 2026

Giới thiệu xu hướng chạy DeepSeek-R1 trên CPU Server

Sự ra mắt của dòng mô hình ngôn ngữ lớn (LLM) DeepSeek-R1 đã tái định nghĩa lại bối cảnh AI mã nguồn mở nhờ khả năng tư duy xuất sắc tương đương các mô hình thương mại hàng đầu. Tuy nhiên, với phiên bản đầy đủ cấu hình đồ sộ, việc vận hành đòi hỏi tài nguyên phần cứng cực kỳ lớn. Trong bối cảnh khan hiếm và chi phí thuê GPU tăng cao, việc tận dụng hạ tầng phần cứng có sẵn như VPS (Virtual Private Server) cấu hình cao chạy CPU AMD EPYC trở thành một giải pháp kinh tế và chiến lược cho nhiều doanh nghiệp.

Kiến trúc đa nhân và đặc biệt là thiết kế kênh bộ nhớ (Memory Channels) vượt trội của dòng vi xử lý AMD EPYC mang lại tiềm năng xử lý khối lượng tính toán song song khổng lồ. Tuy nhiên, nếu chỉ cài đặt theo cách mặc định thông thường, tốc độ phản hồi (Token/s) thu được sẽ rất thấp do gặp phải các rào cản về độ trễ và băng thông. Bài viết này sẽ phân tích chuyên sâu và hướng dẫn bạn các bước cấu hình tối ưu nhất để giải phóng toàn bộ sức mạnh phần cứng AMD EPYC cho tác vụ Inference DeepSeek-R1.


Hiểu rõ bản chất kiến trúc AMD EPYC và bài toán nghẽn băng thông RAM

Trong quá trình xử lý suy luận (Inference) của các mô hình LLM lớn, giai đoạn sinh mã (Token Generation / Decoding) bị giới hạn nặng nề bởi băng thông bộ nhớ (Memory Bandwidth Bound) chứ không phải năng lực tính toán thuần túy của lõi CPU. Mỗi khi sinh ra một Token mới, toàn bộ trọng số (Weights) của mô hình phải được tải từ bộ nhớ RAM vào bộ đệm cache của CPU.

Dòng vi xử lý AMD EPYC (như các thế hệ Rome, Milan, hay Genoa) sở hữu ưu thế tuyệt đối nhờ hỗ trợ từ 8 đến 12 kênh bộ nhớ (Memory Channels) trên mỗi Socket, cung cấp băng thông rộng hơn gấp nhiều lần so với CPU phổ thông dành cho người dùng cá nhân. Để đạt hiệu năng tối đa trên VPS, hệ thống phần cứng vật lý bên dưới cần được cắm đủ các thanh RAM để kích hoạt toàn bộ các kênh này (ví dụ: cấu hình đủ 8 hoặc 12 thanh RAM tương ứng).

Quy tắc cốt lõi: Băng thông bộ nhớ tăng gấp đôi đồng nghĩa với tốc độ sinh Token/s tăng gần như gấp đôi. Khi thuê VPS, hãy ưu tiên các nhà cung cấp cam kết cấu hình RAM đa kênh (Multi-channel) và sử dụng loại bộ nhớ tốc độ cao như DDR5 hoặc ít nhất là DDR4 3200 MHz ECC.

Các bước tối ưu hóa hệ thống để đạt Token/s cao nhất

1. Thiết lập kiến trúc NUMA (Non-Uniform Memory Access)

Các bộ xử lý AMD EPYC được cấu tạo từ nhiều chiplet (CCD) kết nối với nhau. Cơ chế quản lý bộ nhớ NUMA chia hệ thống thành các vùng bộ nhớ cục bộ riêng biệt cho từng cụm nhân. Khi chạy tác vụ Inference, nếu một nhân CPU thuộc Node NUMA này phải truy xuất dữ liệu nằm trên vùng RAM thuộc Node NUMA khác, độ trễ hệ thống sẽ tăng cao đáng kể, làm sụt giảm nghiêm trọng số Token/s.

  • Vô hiệu hóa NUMA Node liên kết chéo: Trong cấu hình BIOS của máy chủ vật lý (hoặc yêu cầu nhà cung cấp VPS hỗ trợ), khuyến nghị thiết lập chế độ bộ nhớ thành NPS1 (Nodes Per Socket = 1) hoặc sử dụng tính năng gộp vùng nhớ nếu chạy một thực thể mô hình lớn đơn lẻ.
  • Sử dụng công cụ Numactl trên Linux: Khi khởi chạy tiến trình Inference, hãy ép tiến trình đó chạy tập trung trên một node cụ thể hoặc phân bổ đều một cách có tính toán:
numactl --interleave=all ./llama-cli -m deepseek-r1-q4.gguf ...

Lệnh trên giúp trải đều dữ liệu của mô hình lên toàn bộ các kênh bộ nhớ, tối đa hóa tổng băng thông khai thác được.

2. Cấu hình số lượng Thread (Luồng) tối ưu - Không phải càng nhiều càng tốt

Một sai lầm phổ biến của quản trị viên là phân bổ toàn bộ số lõi vCPU của VPS cho tiến trình chạy mô hình. Đối với tác vụ suy luận LLM trên CPU, việc đẩy số thread vượt quá số lượng kênh bộ nhớ vật lý hoặc vượt quá một ngưỡng nhất định sẽ gây ra hiện tượng xung đột bộ đệm cache (Cache Thrashing) và nghẽn hàng đợi giao tiếp dữ liệu.

Qua các thực nghiệm tối ưu hóa cấu hình thực tế cho dòng AMD EPYC:

  1. Tỷ lệ lý tưởng thường là 2 đến 3 lõi CPU vật lý cho mỗi kênh bộ nhớ. Ví dụ, với CPU EPYC hỗ trợ 8 kênh RAM, số thread tối ưu để xử lý thường dao động từ 16 đến 24 threads.
  2. Vô hiệu hóa SMT/Hyper-Threading: Luôn sử dụng số luồng tương ứng với số lõi thực (Physical Cores), không sử dụng các luồng ảo (Virtual Threads), vì luồng ảo không giúp tăng tốc xử lý toán học ma trận mà chỉ làm tăng độ trễ truy xuất RAM.

3. Cấu hình hệ thống Linux (Ulimit và Mlock)

Để ngăn chặn hệ điều hành Linux chuyển một phần dữ liệu của mô hình từ RAM xuống phân vùng hoán đĩa (Swap File) – tác nhân chính gây sụt giảm hiệu năng nghiêm trọng, bạn cần cấu hình quyền khóa bộ nhớ hệ thống.

Hãy tăng giới hạn ulimit để cho phép tính năng mlock hoạt động, giữ cho toàn bộ trọng số của DeepSeek-R1 luôn thường trực trên RAM tốc độ cao:

# Thêm vào file /etc/security/limits.conf
* soft memlock unlimited
* hard memlock unlimited

Lựa chọn và tinh chỉnh Framework: llama.cpp vs vLLM kết hợp ZenDNN

Sử dụng Llama.cpp (Định dạng GGUF)

Llama.cpp là giải pháp tối ưu hàng đầu khi chạy Inference trên CPU nhờ khả năng tối ưu hóa các tập lệnh phần cứng cực tốt. Đối với dòng CPU AMD EPYC thế hệ mới, kiến trúc hỗ trợ tập lệnh AVX-512 và VNNI (Vector Neural Network Instructions). Khi biên dịch mã nguồn Llama.cpp trực tiếp trên VPS, hãy đảm bảo kích hoạt các cờ tối ưu hóa này:

Khi khởi chạy máy chủ mô hình, hãy áp dụng các tham số tối ưu hóa nâng cao sau:

  • --flash-attn: Bắt buộc kích hoạt tính năng Flash Attention để giảm thiểu lượng bộ nhớ tiêu thụ và tăng tốc độ xử lý ngữ cảnh dài.
  • --cache-type-k q4_0 và --cache-type-v q4_0: Nén KV Cache xuống định dạng 4-bit giúp tiết kiệm dung lượng RAM và tăng tốc đáng kể trong giai đoạn sinh từ tiếp theo.

Sử dụng vLLM tối ưu hóa bởi AMD ZenDNN

Nếu bạn cần triển khai hệ thống phục vụ nhiều người dùng đồng thời (High Throughput), vLLM kết hợp thư viện AMD ZenDNN (Zen Deep Neural Network) là sự lựa chọn chiến lược. ZenDNN được AMD thiết kế riêng nhằm tối ưu hóa các khối xây dựng mạng thần kinh toán học cơ bản trên kiến trúc lõi Zen.

Bằng cách thiết lập các biến môi trường thích hợp như export TF_ENABLE_ZENDNN_OPTS=1 và tích hợp phân bổ bộ nhớ động thông qua tcmalloc (giúp giảm thiểu phân mảnh bộ nhớ), hệ thống VPS chạy AMD EPYC có khả năng xử lý đồng thời lượng prompt lớn hơn từ 1.4x đến 1.76x so với cấu hình mặc định không được tối ưu.


Bảng so sánh hiệu năng dự kiến sau khi tối ưu

Dưới đây là bảng tổng hợp hiệu năng xử lý mô hình DeepSeek-R1 (Phiên bản định dạng Quantization phù hợp) trên hệ thống VPS sử dụng CPU AMD EPYC trước và sau khi áp dụng các kỹ thuật tinh chỉnh nêu trên:

Thông số cấu hình Trước khi tối ưu (Mặc định) Sau khi tối ưu nâng cao Mức độ cải thiện hiệu năng
Cấu hình luồng (Threads) Sử dụng tối đa vCPU (gồm luồng ảo) Giới hạn bằng số lõi thực (Physical Cores) Giảm độ trễ hệ thống, tránh nghẽn luồng
Tốc độ xử lý Prompt (Input) ~30 - 40 Token/s ~100 - 140 Token/s Tăng gấp ~3 lần nhờ AVX-512 & Flash Attention
Tốc độ sinh mã (Generation) ~1.2 - 2.0 Token/s ~4.0 - 8.5 Token/s (Tùy phiên bản mô hình) Tăng đáng kể, đạt ngưỡng phản hồi thực tế ổn định
Trạng thái bộ nhớ (RAM) Bị phân tán qua các NUMA node Liên kết cố định (Interleaved / Mlock) Loại bỏ hoàn toàn hiện tượng sụt giảm tốc độ đột ngột

Kết luận và Khuyến nghị chiến lược

Việc vận hành mô hình trí tuệ nhân tạo đỉnh cao như DeepSeek-R1 trên hệ thống VPS chạy CPU AMD EPYC là một giải pháp hoàn toàn khả thi và mang lại hiệu quả kinh tế cao nếu biết cách làm chủ công nghệ. Chìa khóa thành công không nằm ở việc nâng cấp phần cứng một cách mù quáng, mà nằm ở việc đồng bộ hóa và tối ưu hóa sâu sắc giữa phần cứng và phần mềm: Khai thác triệt để băng thông bộ nhớ đa kênh, cấu hình phân bổ NUMA chính xác, lựa chọn đúng số lượng luồng thực thi và tận dụng sức mạnh của các thư viện chuyên dụng như Llama.cpp hay ZenDNN.

Bằng cách tuân thủ quy trình hướng dẫn trong bài viết này, doanh nghiệp của bạn có thể tự tin triển khai các ứng dụng chatbot tư duy, hệ thống phân tích dữ liệu phức tạp dựa trên nền tảng DeepSeek-R1 với tốc độ Token/s tối ưu nhất, tiết kiệm tối đa chi phí vận hành hạ tầng AI.

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