0

Giải Mã NPR (Phần 2): "Cú Lừa" Của XML Và Bí Mật Dưới Nắp Ca-pô

Trong phần trước, chúng ta đã nói về tư duy song song. Nhưng có một câu hỏi kỹ thuật cực kỳ hóc búa mà nhiều kỹ sư AI lão luyện cũng dễ nhầm lẫn:

"Bản chất của LLM là sinh tuần tự (Autoregressive). Nếu model sinh ra file XML, nó phải viết dòng 1, rồi đến dòng 2. Vậy thì thẻ <step>1 viết xong mới đến <step>2 chứ? Song song ở đâu ra?"

Câu trả lời nằm ở một sự thật bất ngờ: Đối với NPR, XML không phải là văn bản. XML là Tập lệnh gọi hệ thống (System Calls).

Bài viết này sẽ giải phẫu 3 cơ chế kỹ thuật giúp biến dòng văn bản tĩnh thành luồng xử lý động: Cơ chế Fork-Join, Parallel Attention Mask, và PAPO.


1. Sự thật về XML: Kịch bản phim vs. Quá trình quay phim

Để hiểu được cơ chế song song, bạn cần phân biệt rõ hai khái niệm: Logical View (những gì bạn thấy trên màn hình) và Physical Execution (những gì GPU thực sự làm).

"Cú lừa" thị giác

Khi bạn nhìn thấy output cuối cùng:

<plan>A</plan> <plan>B</plan>
<step>Giải A...</step>
<step>Giải B...</step>

Đó chỉ là biên bản nghiệm thu sau khi mọi việc đã xong.

Thực tế diễn ra dưới GPU

Quá trình sinh ra đoạn text trên không diễn ra theo một đường thẳng. Nó bị ngắt quãngbẻ nhánh bởi NPR Engine (một backend được viết lại dựa trên SGLang).

Bước 1: Giai đoạn MAP (Tuần tự)

Model sinh: <guideline> ... </guideline>. Ngay khi Tokenizer phát hiện thẻ đóng </guideline>, Engine ra lệnh: PAUSE (Tạm dừng toàn bộ).

Bước 2: System Call - Fork (Tách dòng)

Engine đọc nội dung và thấy có 2 plans. Nó thực hiện kỹ thuật KV-Cache Cloning:

  • Nó không bắt model sinh tiếp.
  • Nó copy trạng thái bộ nhớ (VRAM) hiện tại ra làm 2 bản sao vật lý khác nhau.
  • Luồng 1 (Thread 1): Được mớm token mồi <step> Plan 1.
  • Luồng 2 (Thread 2): Được mớm token mồi <step> Plan 2.

Bước 3: Giai đoạn PROCESS (Song song thực sự)

Hai luồng này được đẩy vào GPU để tính toán CÙNG MỘT LÚC (Simultaneously). Đây là biểu đồ thời gian thực (Wall-clock time):

Thời gian Luồng 1 (GPU Core A) Luồng 2 (GPU Core B)
0.1s Sinh từ "Tôi" Sinh từ "Bạn"
0.2s Sinh từ "đang" Sinh từ "đã"
0.3s Sinh từ "tính" Sinh từ "làm"

\rightarrow Kết luận: XML đóng vai trò như các lệnh điều khiển (Control Codes). Model là người ra lệnh, Engine là người thực thi lệnh tách nhánh.


2. Nghịch lý Training: Tại sao tách nhánh rồi vẫn cần "Parallel Attention Mask"?

Đây là câu hỏi xuất sắc nhất: "Nếu lúc chạy (Inference), Engine đã tách 2 nhánh ra 2 vùng nhớ riêng biệt rồi, thì chúng chắc chắn không nhìn thấy nhau. Vậy tại sao lúc Train lại cần Mask để che?"

Để trả lời, ta phải phân biệt Lúc Chạy (Inference)Lúc Học (Training).

Vấn đề: "Training-Inference Mismatch" (Sự lệch pha giữa học và hành)

  • Lúc Chạy (Thực tế): Model bị Engine tách làm đôi. Nhánh 2 bị cô lập, mù hoàn toàn về Nhánh 1. Nó phải tự lực cánh sinh.
  • Lúc Học (Trong phòng Lab): Chúng ta train model bằng các file text phẳng (sequential text files). Trong file text đó, nội dung của <step>1 nằm ngay phía trước <step>2.

Thảm họa nếu dùng Causal Mask truyền thống

Nếu bạn dùng cơ chế Attention mặc định (Causal Mask) để train:

  1. Model đang học sinh ra <step>2.
  2. Nó "liếc mắt" (attend) về quá khứ và thấy <step>1 đã giải xong xuôi rồi.
  3. Nó học được một đường tắt (shortcut): "Cần gì phải nghĩ? Cứ copy logic hoặc kết quả của thằng Step 1 là xong." \rightarrow Model học thói dựa dẫm.

Hậu quả khi mang đi thi (Inference)

Khi mang model "dựa dẫm" này đi chạy thực tế với Fork-Join:

  1. Engine tách nhánh, cô lập Nhánh 2.
  2. Nhánh 2 ngơ ngác tìm kiếm thông tin của Nhánh 1 để dựa dẫm (như thói quen lúc học).
  3. Nhưng không thấy đâu cả! (Do đã bị tách vật lý).
  4. Kết quả: Nhánh 2 sụp đổ, sinh ra nội dung vô nghĩa (hallucination).

Giải pháp: Parallel Attention Mask

Để khắc phục, các tác giả dùng Parallel Attention Mask ngay trong lúc Training. Họ sửa ma trận Attention MM sao cho:

Mi,j=neˆˊiStep 2 vaˋ jStep 1M_{i,j} = -\infty \quad \text{nếu } i \in \text{Step 2} \text{ và } j \in \text{Step 1}

Ý nghĩa: "Này Model, mặc dù trong file training, Step 1 nằm ngay trước mặt mày, nhưng tao sẽ bịt mắt mày lại. Mày phải học cách giải Step 2 như thể Step 1 chưa từng tồn tại."

\rightarrow Masking giúp giả lập môi trường cô lập của Inference ngay trong lúc Training.


3. PAPO: Thuật toán dạy Model "Leo cây"

Sau khi có Engine (chạy song song) và Mask (học độc lập), ta cần một thuật toán Reinforcement Learning (RL) để tối ưu hóa chiến lược. Nhưng PPO truyền thống (thường dùng cho ChatGPT) lại thất bại với cấu trúc cây này.

Tại sao PPO thất bại? Và PAPO (Parallel-Aware Policy Optimization) sửa nó như thế nào?

Vấn đề 1: Sự sụp đổ của nhóm (Group Collapse)

  • PPO/GRPO: Thường sinh ra 1 nhóm (ví dụ 8 câu trả lời) rồi so sánh chúng với nhau (tính Mean/Std) để thưởng phạt.
  • Thực tế Parallel: Khi model mới học, nó hay sinh sai format XML (quên đóng thẻ, sai cấu trúc). Các mẫu này bị Engine loại bỏ ngay lập tức (Filter out).
  • Hậu quả: Nhóm 8 mẫu chỉ còn lại 1 mẫu hợp lệ. Việc tính toán độ lệch chuẩn (Std) trên 1 mẫu là vô nghĩa. Gradient bị biến động cực mạnh, model "tẩu hỏa nhập ma".
  • Giải pháp PAPO: Batch-level Normalization. Thay vì so sánh trong nhóm nhỏ, nó so sánh hiệu suất mẫu hiện tại với trung bình của toàn bộ Batch lớn. Dù nhóm bị loại hết, nó vẫn có tham chiếu từ các nhóm khác.

Vấn đề 2: Gradient Clipping giết chết "Người điều phối"

  • PPO: Có cơ chế "Cắt ngọn" (Clipping) để ngăn model thay đổi quá nhanh.
  • Thực tế: Các token XML (<plan>, <step>) là những "ngã tư đường". Quyết định rẽ nhánh ở đây quan trọng gấp 100 lần việc chọn từ ngữ thông thường.
  • Hậu quả: Nếu Clip gradient ở các thẻ XML, model sẽ học rất chậm việc điều phối cấu trúc. Nó sẽ trở nên "nhát", không dám rẽ nhánh.
  • Giải pháp PAPO: No-Clipping on Structural Tokens. PAPO cho phép dòng gradient chảy mạnh mẽ và nguyên bản qua các thẻ XML. Nó bảo model: "Quyết định rẽ nhánh này cực kỳ quan trọng, hãy ghi nhớ nó thật sâu!".

Tổng kết

Native Parallel Reasoner là một kiệt tác về kỹ thuật hệ thống (System Engineering) chứ không chỉ là thuật toán AI.

  1. XML Fork-Join: Biến LLM thành bộ xử lý đa luồng (CPU-like).
  2. Parallel Attention Mask: Ép model học tư duy độc lập (tránh gian lận khi học).
  3. PAPO: Thuật toán RL chuyên dụng để tối ưu hóa cấu trúc cây.

Hy vọng bài viết này đã giúp bạn nhìn thấu lớp màn nhung của XML để thấy được bộ máy cơ khí phức tạp đang vận hành bên dưới!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí