2 điểm bởi GN⁺ 2025-09-12 | Chưa có bình luận nào. | Chia sẻ qua WhatsApp
  • Trong suy luận LLM (mô hình ngôn ngữ lớn), có thể xuất hiện vấn đề tính bất định (nondeterminism) khi cùng một đầu vào và điều kiện nhưng kết quả lại khác nhau
  • Trước đây, đồng thời hóa (concurrency)tính không kết hợp (non-associativity) của phép toán dấu chấm động (floating-point) thường được xem là nguyên nhân chính gây ra tính bất định
  • Trên thực tế, nguyên nhân mang tính quyết định lại đến từ sự thay đổi thứ tự tính toán bên trong kernel (mã tính toán) khi kích thước batch (batch size) thay đổi
  • Nếu mọi phép toán trong kernel đều được triển khai để có tính bất biến theo batch (batch invariance), thì có thể bảo đảm hoàn toàn khả năng tái lập (reproducibility)
  • Có thể tạo kernel bất biến theo batch cho các phép toán chính như RMSNorm, matmul, attention bằng tính toán song song theo dữ liệu, split reduction, chiến lược split kích thước cố định

Giới thiệu và tổng quan vấn đề

  • Khả năng tái lập (reproducibility), một yếu tố cốt lõi của tiến bộ khoa học, lại không được đảm bảo tốt trong suy luận LLM (mô hình ngôn ngữ lớn)
  • Ngay cả khi hỏi ChatGPT cùng một câu nhiều lần, thường vẫn có trường hợp tạo ra các câu trả lời khác nhau
  • Điều này là do quá trình sampling kết quả trong LLM là một lựa chọn ngẫu nhiên dựa trên phân phối xác suất
  • Tuy nhiên, ngay cả khi đặt temperature về 0, trên thực tế API của LLM cũng không nhất thiết mang tính xác định (tức là không phải lúc nào cũng cho cùng một kết quả với cùng đầu vào)
  • Vấn đề tính bất định vẫn tồn tại ngay cả khi chạy trên thư viện suy luận mã nguồn mở (vLLM, SGLang, v.v.) và phần cứng tự quản lý

Giả thuyết trước đây và giới hạn

  • Giả thuyết được biết đến rộng rãi: tính bất định xảy ra do đồng thời hóa + tính không kết hợp của dấu chấm động
    • Trong GPU, phép toán dấu chấm động có thể cho kết quả hơi khác nhau tùy theo thứ tự tính toán và thứ tự hoàn thành của luồng
  • Nhưng trên thực tế, ngay cả khi lặp lại phép nhân ma trận theo cùng cách với cùng dữ liệu, vẫn luôn thu được kết quả giống hệt từng bit (bw=bitwise equal)
  • Để xác định nguyên nhân thực sự, cần phân tích sâu hơn

Phân tích sâu nguyên nhân gây bất định trong suy luận LLM

Bản chất của tính không kết hợp trong dấu chấm động

  • Phép toán dấu chấm động có quan hệ (a+b)+c ≠ a+(b+c)
  • Khi tính toán giữa các giá trị có độ lớn khác nhau (exponent khác nhau), sẽ xảy ra mất độ chính xác, mất thông tin, và kết quả thay đổi tùy theo thứ tự tính toán
  • Vì thứ tự tính toán có thể thay đổi, nên nếu thực hiện nhiều phép cộng tổng theo cách ngẫu nhiên, sẽ cho ra nhiều kết quả khác nhau (đã được xác nhận qua thực nghiệm)

Sự thay đổi thứ tự tính toán trong kernel và đồng thời hóa

  • Thông thường, vấn đề đồng thời trong các phép như atomic add được xem là nguyên nhân chính của tính bất định
  • Nhưng phần lớn các kernel dùng trong suy luận LLM (đặc biệt là forward pass) vẫn hoạt động mà không cần atomic add
  • Với chiến lược song song hóa phù hợp từ trước, split (reduction), v.v., có thể đảm bảo cùng một thứ tự tính toán

Nguyên nhân cốt lõi trên thực tế: thiếu "tính bất biến theo batch (batch invariance)"

  • Mỗi kernel riêng lẻ, nếu đầu vào giống nhau, thì luôn trả về cùng một kết quả (run-to-run deterministic)
  • Nhưng vì các yêu cầu đồng thời của nhiều người dùng làm batch size thay đổi một cách bất định, nên trên thực tế kết quả cho từng yêu cầu lại không ổn định
  • Tùy theo kích thước batch, thứ tự tách hoặc gộp tính toán bên trong sẽ thay đổi, từ đó phát sinh tính bất định
  • Nói cách khác, tải máy chủ và mức độ song song hóa (kích thước batch) mang tính bất định mới là nguyên nhân cốt lõi

Thiết kế kernel bất biến theo batch và các ví dụ phép toán chính

RMSNorm

  • Áp dụng chiến lược song song hóa theo dữ liệu (data-parallel): mỗi phần tử batch được một lõi xử lý độc lập
  • Khi kích thước batch lớn, vẫn duy trì đủ mức song song hóa, tức là chiến lược song song ổn định nên tính bất biến theo batch được đảm bảo
  • Khi kích thước batch rất nhỏ, có thể dùng chiến lược thay thế như split reduction, nhưng trong trường hợp này sẽ phải hy sinh một phần tính bất biến theo batch

Nhân ma trận (matmul)

  • Song song hóa theo từng tile để áp dụng chiến lược song song theo dữ liệu
  • Để tối ưu việc dùng tensor core, cần chia theo tile 2D; với batch rất nhỏ thì cần các chiến lược đặc biệt như split-K
  • Khi dùng chiến lược split-K, tính bất biến theo batch có thể bị phá vỡ
  • Dù phải đánh đổi một phần hiệu năng, vẫn có thể ép dùng cùng một cấu hình kernel để đảm bảo thứ tự tính toán ổn định (reproducible)

Attention

  • Trong FlashAttention2, v.v., có thể đảm bảo tính bất biến theo batch bằng chiến lược song song hóa theo hướng query, reduction đồng thời cho Key/Value
  • Nếu thứ tự reduction thay đổi theo kích thước batch hoặc cách chia chuỗi (chunked prefill, prefix caching, v.v.) thì tính bất biến sẽ bị phá vỡ
  • Với các chiến lược split-reduction như split-KV (FlashDecoding), có thể giữ nguyên thứ tự tính toán bằng cách cố định kích thước split (fixed split-size)
  • Xét theo hoạt động nội bộ, không nên xử lý riêng key/value cache và token mới, mà phải giữ layout key/value nhất quán trong mọi phép toán

Triển khai

  • Cung cấp bản demo suy luận xác định áp dụng kernel bất biến theo batch bằng vLLM và torch.Library
  • Có thể xem các kernel thay thế cho các phép toán liên quan tại GitHub repo (thinking-machines-lab/batch-invariant-ops)

Thực nghiệm và hiệu năng

Thí nghiệm đo tính bất định

  • Dùng mô hình Qwen/Qwen3-235B-A22B-Instruct-2507 để sinh 1000 lần với cùng prompt (“Tell me about Richard Feynman”) trong điều kiện temperature 0
  • Tạo ra 80 phần hoàn thành khác nhau (cùng prompt nhưng vẫn tồn tại tính bất định)
  • 102 token đầu tiên giống nhau, và nhánh tách đầu tiên xuất hiện ở token thứ 103 (“Queens, New York” so với “New York City”)
  • Khi dùng kernel bất biến theo batch, cả 1000 lần đều cho kết quả giống hệt nhau, đạt được khả năng tái lập hoàn toàn

Đánh giá hiệu năng

  • Chạy Qwen-3-8B trên 1 GPU, với 1000 yêu cầu, mỗi yêu cầu có chuỗi dài khoảng 90~110
    • vLLM mặc định: 26 giây
    • deterministic vLLM chưa tối ưu: 55 giây
    • áp dụng kernel attention đã cải tiến: 42 giây
  • Dù chưa tối ưu đầy đủ, hiệu năng vẫn ở mức có thể sử dụng trong thực tế

Giá trị trong On-policy RL

  • Trước đây, do chênh lệch số học rất nhỏ giữa training và inference nên on-policy RL không thể được triển khai chính xác
  • Nếu suy luận mang tính xác định, có thể làm cho cả sampling và training đều bitwise identical, từ đó triển khai on-policy RL đúng nghĩa
  • Đã xác nhận kết quả trùng khớp hoàn toàn ở các metric chính như KL-divergence, reward, v.v.

Kết luận

  • Trong các hệ thống suy luận LLM, rất dễ xem nhẹ tính bất định và sai số số học, nhưng nếu xác định và khắc phục nguyên nhân gốc rễ (thiếu tính bất biến theo batch) thì có thể đạt được khả năng tái lập và tính xác định hoàn toàn
  • Nghiên cứu này chỉ ra cách giải quyết vấn đề tính bất định trong suy luận LLM, giúp các nhà phát triển có thể bảo đảm khả năng tái lập hoàn toàn trong hệ thống của chính họ

Thông tin trích dẫn

  • Khi trích dẫn nghiên cứu này, hãy dùng thông tin sau
He, Horace and Thinking Machines Lab, "Defeating Nondeterminism in LLM Inference", 
Thinking Machines Lab: Connectionism, Sep 2025.

hoặc

@article{he2025nondeterminism,
  author = {Horace He and Thinking Machines Lab},
  title = {Defeating Nondeterminism in LLM Inference},
  journal = {Thinking Machines Lab: Connectionism},
  year = {2025},
  note = {https://thinkingmachines.ai/blog/…},
  doi = {10.64434/tml.20250910}
}

Chưa có bình luận nào.

Chưa có bình luận nào.