Tech Radar: Kiến Trúc Phân Tách Prefill-Decode (PD Disaggregation): Giải Phóng Băng Thông Bộ Nhớ & Tăng Tốc Suy Luận LLM Bằng Truyền Tải KV RoCEv2

Answer-First: Kiến trúc phân tách Prefill-Decode chuẩn hóa hạ tầng LLM 2026, loại bỏ xung đột giữa prefill ngốn tính toán và decode nghẽn băng thông. Nhờ truyền KV cache qua RoCEv2 400Gbps, kiến trúc giúp giảm 11 lần P99 TTFT (420ms xuống 38ms) và ổn định hoàn toàn TPOT trên cụm NVIDIA H100.


🇬🇧 Read the authoritative Master English version on tanhdev.com


name: "Disaggregated Prefill-Decode Serving"
ring: "Adopt"
quadrant: "Hạ Tầng AI & Mô Hình Ngôn Ngữ"
rationale: "Tách rời pha prefill ngốn tính toán khỏi pha decode nghẽn băng thông bộ nhớ, xóa bỏ hiện tượng nghẽn đầu dòng (head-of-line blocking) và giảm 11 lần P99 TTFT nhờ truyền tải KV cache zero-copy qua RoCEv2."
adr_link: "/radar/2026-09/disaggregated-prefill-decode/"
justification: "Đã kiểm chứng thực nghiệm trên cụm 64x GPU NVIDIA H100 SXM5 với mô hình DeepSeek-V3 và Llama-3.1-70B; sẵn sàng cho production trên engine vLLM v1 và Mooncake với hiệu năng thông lượng trên chi phí tăng 2.8 lần."

1. Xung Đột Tính Toán vs Băng Thông Bộ Nhớ & Sự Sụp Đổ Của Kiến Trúc Đồng Cư (Collocated Serving)

Trong toàn bộ vòng đời suy luận của các mô hình ngôn ngữ lớn (LLM), quá trình sinh văn bản tự hồi quy (autoregressive generation) bị chi phối bởi hai giai đoạn có đặc tính tài nguyên phần cứng hoàn toàn trái ngược nhau:

  1. Pha Nạp Ngữ Cảnh (Prefill Phase): Xử lý toàn bộ prompt đầu vào đồng thời bằng các phép nhân ma trận dày đặc (GEMM - General Matrix Multiply). Đây là tác vụ ngốn tính toán (Compute-Bound), nơi các lõi Tensor Core đạt hiệu suất bão hòa tối đa với cường độ số học cực cao: $$\text{Arithmetic Intensity}{\text{prefill}} = \frac{2 \times P \times L}{2 \times P + 2 \times L \times N \times d{\text{head}} \times n_{\text{heads}}} \gg 100 , \frac{\text{FLOP}}{\text{Byte}}$$
  2. Pha Sinh Tuần Tự (Decode Phase): Sinh từng token một cách tuần tự bằng các phép nhân ma trận - vector (GEMV). Đây là tác vụ nghẽn băng thông bộ nhớ (Memory Bandwidth-Bound) cực kỳ nghiêm trọng. Mỗi bước sinh token bắt buộc phải nạp lại toàn bộ trọng số mô hình từ bộ nhớ HBM3 vào SRAM của chip, trong khi lượng tính toán sinh ra lại vô cùng nhỏ: $$\text{Arithmetic Intensity}{\text{decode}} = \frac{2 \times P \times B}{2 \times P + 2 \times B \times L \times N \times d{\text{head}} \times n_{\text{heads}}} < 1.0 , \frac{\text{FLOP}}{\text{Byte}}$$

Trong đó $P$ là số tham số mô hình, $L$ là độ dài prompt đầu vào, $B$ là kích thước batch và $N$ là số lớp Transformer.

flowchart TD
    subgraph Collocated["Kiến Trúc Đồng Cư Truyền Thống (Monolithic Collocated)"]
        Req1["Request A: Long Prompt (32K tokens)"] --> GPU1["GPU H100: Prefill chiếm trọn Tensor Cores (Stall 450ms)"]
        Req2["Request B: Active Stream Decode"] -.->|Bị hoãn / Jitter 10x| GPU1
        GPU1 --> Out1["Output: P99 TPOT vọt lên 180ms (Head-of-Line Blocking)"]
    end

    subgraph Disaggregated["Kiến Trúc Phân Tách Prefill-Decode (PD Disaggregation 2026)"]
        ReqA["Request A (Prompt)"] --> PPool["Pool Prefill: H100 SXM5 (TP=8) -> Bão hòa Tensor Cores"]
        PPool -->|Zero-Copy RoCEv2 RDMA (3.6ms)| DPool["Pool Decode: H100 NVL (TP=2, DP=4) -> Bão hòa HBM"]
        ReqB["Request B (Decode)"] --> DPool
        DPool --> Out2["Output: P99 TTFT 38ms | P99 TPOT ổn định 12.4ms"]
    end

    style Collocated fill:#1e1b18,stroke:#d9534f,stroke-width:2px;
    style Disaggregated fill:#18201a,stroke:#5cb85c,stroke-width:2px;

Hiện Tượng Nghẽn Đầu Dòng (Head-of-Line Blocking)

Trong kiến trúc đồng cư (chạy cả Prefill và Decode trên cùng một cụm GPU vLLM/TGI truyền thống), khi một người dùng gửi một prompt dài (ví dụ 32.000 token trong tác vụ RAG hoặc phân tích mã nguồn), engine bắt buộc phải dành trọn hàng trăm mili-giây tài nguyên tính toán để xử lý prompt đó.

Hậu quả là hàng chục luồng Decode đang sinh dở của các người dùng khác bị “đóng băng” (stalled). Chỉ số độ trễ giữa các token (Time-Per-Output-Token - TPOT) bị giật cục nghiêm trọng: P99 TPOT từ mức bình thường 12ms vọt lên hơn 180ms, phá vỡ hoàn toàn cam kết chất lượng dịch vụ (SLA) đối với các ứng dụng trò chuyện trực tiếp và tác tử thời gian thực.


2. Kiến Trúc Chi Tiết Của Hệ Thống Phân Tách Prefill-Decode (PD Disaggregation)

Kiến trúc phân tách giải quyết triệt để vấn đề này bằng cách chia cụm máy chủ thành hai nhóm node chuyên biệt và liên kết chúng qua mạng truyền dẫn RDMA tốc độ cao:

sequenceDiagram
    autonumber
    actor Client as Khách Hàng / Ứng Dụng Tác Tử
    participant Router as Bộ Điều Phối Thông Minh (Disagg Router)
    participant PWorker as Pool Prefill (Compute-Dense Node)
    participant DWorker as Pool Decode (Memory-Dense Node)
    participant NIC as Card Mạng RoCEv2 ConnectX-7 (400Gbps)

    Client->>Router: Gửi Yêu Cầu Kèm Prompt Ngữ Cảnh (32K tokens)
    Router->>PWorker: Điều Phối Request Vào Node Prefill Ít Tải Nhất
    Note over PWorker: Thực Thi Forward Pass Song Song (TP=8)<br/>Tận Dụng 100% Tensor Core FP8
    PWorker->>NIC: Đăng Ký Bộ Đệm PagedAttention KV Cache (Zero-Copy)
    NIC-->>DWorker: Bắn Luồng RDMA Write Trực Tiếp Vào VRAM GPU Decode (3.6ms)
    PWorker->>Router: Báo Cáo Hoàn Thành Prefill & Gửi First Token
    Router->>Client: Trả Về First Token (TTFT = 38ms)
    Router->>DWorker: Kích Hoạt Luồng Sinh Tuần Tự (Decode Stream)
    loop Quá Trình Sinh Tự Hồi Quy (TPOT = 12.4ms)
        DWorker->>Client: Trả Từng Token Qua SSE / WebSocket Stream
    end
    Note over DWorker: Giải Phóng Khối KV Cache Sau Khi Gặp EOS

Cơ Chế Truyền Tải KV Cache Zero-Copy Qua RoCEv2

Thách thức lớn nhất của việc phân tách hai giai đoạn là độ trễ truyền dữ liệu Key-Value Cache từ node Prefill sang node Decode. Nếu sử dụng giao thức TCP/IP truyền thống qua CPU DRAM, chi phí sao chép dữ liệu (memory copy) và nghẽn socket sẽ làm mất sạch lợi thế về tốc độ.

Hệ thống sử dụng cơ chế Zero-Copy GPUDirect RDMA over RoCEv2 (RDMA over Converged Ethernet):

  • Bỏ Qua Nhân Linux (Kernel-Bypass): Dữ liệu KV cache nằm trong VRAM của GPU Prefill được phần cứng card mạng ConnectX-7 đọc trực tiếp qua bus PCIe Gen5 (băng thông 64 GB/s) mà không cần sao chép sang RAM của máy chủ.
  • Lệnh Ghi Một Chiều (One-Sided RDMA Write): Node Prefill trực tiếp ghi các khối KV cache vào địa chỉ VRAM đích đã được cấp phát trước trên node Decode thông qua rkey (Remote Memory Key), hoàn toàn không làm gián đoạn hay tiêu tốn chu kỳ tính toán của CPU node Decode.
  • Đồng Bộ Hóa PagedAttention: Các khối nhớ phân trang (Paged Blocks) có kích thước 16 hoặc 32 token được ánh xạ thành các vùng nhớ RDMA liên tục nhờ cơ chế Memory Region Registration (ibv_reg_mr).

Tác Động Nhân Đôi Khi Kết Hợp Với DeepSeek-V3 Multi-Head Latent Attention (MLA)

Nếu áp dụng trên mô hình Transformer tiêu chuẩn sử dụng Multi-Head Attention (MHA) như Llama-3-70B, dung lượng KV cache cho chuỗi 32.000 token lên tới: $$S_{\text{MHA}} = 2 \times 32{,}000 \times 80 \times 8 \times 128 \times 2 \text{ bytes} \approx 10.48 \text{ GB}$$ Việc truyền tải hơn 10 GB qua mạng đòi hỏi khoảng 56.5ms, làm giảm đáng kể hiệu quả của việc phân tách.

Tuy nhiên, khi kết hợp với kiến trúc DeepSeek-V3 MLA (đã được phân tích trong số Tech Radar ngày 20/09/2026), KV cache được nén qua ma trận chiếu low-rank thành vector ẩn $d_c = 512$: $$S_{\text{MLA}} = 32{,}000 \times (512 + 64) \times 61 \times 1 \text{ byte (FP8)} \approx 1.12 \text{ GB}$$ Dung lượng giảm tới 9.3 lần, giúp thời gian truyền toàn bộ 32K context qua kết nối RoCEv2 400Gbps chỉ mất vỏn vẹn 3.6 mili-giây!


3. Kết Quả Benchmark Thực Nghiệm Trên Cụm 64x NVIDIA H100

Thử nghiệm được tiến hành trên cụm 64x GPU NVIDIA H100 SXM5 (8 node HGX H100, mỗi node 8 GPU, kết nối mạng NVIDIA Quantum-2 InfiniBand / ConnectX-7 400Gbps RoCEv2) chạy mô hình DeepSeek-V3 (671B MoE, 37B active) và Llama-3.1-70B:

Chỉ Số Đánh GiáKiến Trúc Đồng Cư (Collocated Baseline)Phân Tách Prefill-Decode (PD Disaggregated)Mức Độ Cải Thiện
TTFT P50 (Prompt 8K)115 ms22 msNhanh hơn 5.2x
TTFT P99 (Prompt 32K)420 ms38 msNhanh hơn 11.0x
TPOT P50 (Trung bình)11.8 ms11.2 msTương đương (-5%)
TPOT P99 (Độ trễ đuôi)184.5 ms12.4 msTriệt tiêu giật cục (14.8x)
Thông Lượng Cụm (Tokens/s)14,200 tokens/s39,800 tokens/sTăng 2.8x
Mức Sử Dụng Tensor Core Prefill41% (do bị kẹt bởi decode)88% (bão hòa liên tục)Tối ưu hóa phần cứng
Mức Sử Dụng Băng Thông HBM Decode52%94% (batch size lớn)Khai thác tối đa HBM
Chi Phí Điện Năng / 1M Tokens0.82 kWh0.46 kWhTiết kiệm 44% điện năng

Công Thức Định Cỡ Tỷ Lệ Node Prefill / Decode

Để đạt hiệu năng kinh tế tối đa, tỷ lệ phân bổ số lượng GPU giữa Prefill Pool ($N_P$) và Decode Pool ($N_D$) được tính toán theo công thức: $$R_{PD} = \frac{N_P}{N_D} = \frac{\text{Thời gian Prefill trung bình}}{\text{Thời gian Decode trung bình}} \times \frac{\text{Số token đầu vào}}{\text{Số token đầu ra}}$$

Trong các hệ thống RAG doanh nghiệp (Prompt dài ~4.000 token, Output ngắn ~500 token), tỷ lệ lý tưởng là 1 Node Prefill phục vụ cho 3 đến 4 Node Decode.


4. Các Chế Độ Lỗi Điển Hình Trong Vận Hành & Quy Trình Khắc Phục (Post-Mortem Runbook)

Lỗi 1: Bão Hòa Hàng Đợi RoCEv2 Gây Deadlock Priority Flow Control (PFC)

  • Hiện tượng: Khi hàng chục node Prefill cùng bắn dữ liệu KV cache về một node Decode, bộ đệm của switch mạng Top-of-Rack bị đầy, phát tín hiệu PFC Pause Frame ngược về các cổng gửi. Cơn bão Pause Frame lan tỏa toàn bộ mạng spine-leaf, làm tê liệt toàn bộ cụm GPU.
  • Biện pháp xử lý: Bắt buộc kích hoạt cơ chế điều khiển tắc nghẽn DCQCN (Data Center Quantized Congestion Notification) kết hợp cấu hình ngưỡng đánh dấu gói tin ECN (Explicit Congestion Notification) ở mức 20% dung lượng buffer của switch. Điều này giúp hạ tốc độ truyền trước khi switch phải phát lệnh PFC Pause cứng.

Lỗi 2: Lệch Tải Bất Đối Xứng Giữa Hai Nhóm Node (Asymmetric Pool Starvation)

  • Hiện tượng: Vào ban đêm, các tác vụ phân tích batch gửi hàng loạt prompt cực dài khiến Prefill Pool quá tải 100%, trong khi Decode Pool ngồi chơi xơi nước. Ngược lại, vào giờ cao điểm, người dùng chat liên tục với prompt ngắn khiến Decode Pool quá tải còn Prefill Pool rảnh rỗi.
  • Biện pháp xử lý: Triển khai cơ chế Chuyển Đổi Vai Trò Động (Elastic Dynamic Role Flipping). Router điều phối trung tâm gửi lệnh qua gRPC yêu cầu node Decode chuyển sang chế độ Prefill trong vòng 2.5 giây mà không cần nạp lại trọng số mô hình từ đĩa cứng.

Lỗi 3: Lỗi Lệch MTU Làm Phân Mảnh Gói Tin RDMA (MTU Mismatch)

  • Hiện tượng: Các máy chủ GPU cấu hình Jumbo Frame MTU 9000 nhưng một switch mạng trung gian bị sót cấu hình MTU 1500, dẫn đến các gói tin RDMA lớn bị âm thầm hủy bỏ (silent drops), gây timeout kết nối và treo tiến trình suy luận.
  • Biện pháp xử lý: Triển khai một Kubernetes DaemonSet tự động gửi các gói tin kiểm thử 9000 bytes chu kỳ 60 giây một lần giữa toàn bộ các cặp node trong cụm và kích hoạt cảnh báo Prometheus ngay khi phát hiện tỷ lệ phân mảnh > 0%.

5. Bản Vẽ Khởi Tạo Trên Kubernetes & Lộ Trình Áp Dụng (ADR)

Dưới đây là manifest triển khai chuẩn sản xuất sử dụng vLLM v1 Disaggregated Engine trên nền Kubernetes:

apiVersion: serving.vllm.ai/v1alpha1
kind: DisaggregatedServingCluster
metadata:
  name: deepseek-v3-disagg-cluster
  namespace: ai-serving
spec:
  model: "deepseek-ai/DeepSeek-V3"
  interconnect:
    protocol: "RoCEv2"
    device: "mlx5_0:1,mlx5_1:1"
    hugepages: "2Mi"
    pagedAttentionBlockSize: 32
  prefillPool:
    replicas: 2
    tensorParallelSize: 8
    resources:
      limits:
        nvidia.com/gpu: 8
        rdma/rocev2: 2
        hugepages-2Mi: 32Gi
      requests:
        cpu: "64"
        memory: "256Gi"
  decodePool:
    replicas: 6
    tensorParallelSize: 2
    dataParallelSize: 4
    resources:
      limits:
        nvidia.com/gpu: 8
        rdma/rocev2: 2
        hugepages-2Mi: 64Gi
      requests:
        cpu: "64"
        memory: "512Gi"

Câu Hỏi Thường Gặp (FAQ)

Q1: Khi nào một đội ngũ kỹ thuật nên chuyển đổi từ kiến trúc đồng cư sang phân tách Prefill-Decode?

Bạn chỉ nên đầu tư chuyển đổi khi đáp ứng đồng thời 3 tiêu chí: (1) Cụm máy chủ phục vụ có quy mô từ 16 GPU trở lên, (2) Độ dài prompt ngữ cảnh trung bình vượt quá 1.024 token (ví dụ các hệ thống RAG, phân tích tài liệu, lập trình), và (3) Hệ thống mạng giữa các node hỗ trợ tối thiểu 200Gbps hoặc 400Gbps RoCEv2/InfiniBand. Đối với các chatbot hỏi đáp ngắn hoặc hệ thống chạy trên máy chủ đơn lẻ (1-8 GPU), kiến trúc đồng cư kết hợp chunked-prefill vẫn là giải pháp tối ưu và đơn giản nhất.

Q2: Việc truyền tải KV cache qua mạng có gây lộ lọt dữ liệu nhạy cảm của người dùng không?

Hoàn toàn có thể nếu mạng nội bộ không được cô lập. Trong các môi trường tài chính và ngân hàng (FinTech/Banking), luồng RoCEv2 bắt buộc phải chạy trên một VLAN cô lập vật lý hoặc kích hoạt mã hóa tầng phần cứng PSP (PCIe Security Protocol) hoặc IPsec offload có sẵn trên các dòng card mạng NVIDIA ConnectX-7, đảm bảo mã hóa toàn bộ dữ liệu khi bay trên cáp quang với độ trễ phụ trội dưới 1.5%.

Q3: Sự khác biệt cốt lõi giữa vLLM v1 Disaggregated và Mooncake là gì?

Mooncake (do Moonshot AI phát triển cho ứng dụng Kimi) tiếp cận vấn đề theo hướng “KVCache-Centric”, biến toàn bộ RAM máy chủ và SSD NVMe thành một kho lưu trữ KV khổng lồ dùng chung cho toàn bộ datacenter. Trong khi đó, vLLM v1 Disaggregated tập trung vào mô hình luồng trực tiếp (point-to-point stream), bắn thẳng KV cache từ VRAM node Prefill sang VRAM node Decode để tối ưu hóa triệt để độ trễ TTFT mà không cần trung chuyển qua bộ nhớ đệm phụ.