16 con số để chạy mô hình ngàn tỉ tham số
FP4, định dạng số thực 4-bit với đúng 16 giá trị, đang là chuẩn mặc định để chạy các mô hình ngôn ngữ lớn trên GPU Blackwell của NVIDIA.

Hồi mới vào làm, tôi nghĩ ai đó nói đùa khi bảo người ta đang nghiêm túc dùng số thực 8-bit để chạy mạng nơ-ron. Tám bit. Đủ để lưu một ký tự ASCII. Rồi tôi thấy benchmark và thôi hết nói.
Bây giờ thì đến FP4. Bốn bit. Mười sáu giá trị. Cả một không gian tham số của mô hình ngôn ngữ, được biểu diễn bằng một bảng tra cứu ngắn hơn menu quán cà phê.
Câu chuyện trong một dòng
John Cook viết một bài toán học cực ngắn, cực gọn về FP4 - định dạng số thực 4-bit đang được NVIDIA tích hợp vào phần cứng Blackwell - và hoá ra toàn bộ định dạng này có thể mô tả bằng một bảng 16 hàng.
FP4 là gì, thật sự
Kiểu phổ biến nhất là E2M1: 1 bit dấu, 2 bit số mũ, 1 bit mantissa. Bốn bit thôi, đúng 16 giá trị khác nhau:
±0, ±0.5, ±1, ±1.5, ±2, ±3, ±4, ±6
Đó là toàn bộ “trục số” của bạn.
Cái khoảng cách không đều giữa các giá trị không phải lỗi - đó là chủ ý. Bit số mũ cho phép dày đặc hơn gần số 0, đúng chỗ mà các tham số mạng nơ-ron thường phân bố. Nếu dùng số nguyên 4-bit thông thường thì bạn chỉ có 0, 1, 2, ..., 15 - phẳng lì, không phản ánh thực tế phân bố tham số chút nào.
Có nhiều cách chia bit: E3M0 thì toàn số mũ (tương đương bảng luỹ thừa của 2), E0M3 thì toàn mantissa (tuyến tính). E2M1 là điểm cân bằng thực tế nhất cho mạng nơ-ron.
Tại sao bài này lên được HN
Bài của Cook ngắn và không có một chút hype. Anh ấy chỉ liệt kê đúng 16 giá trị, giải thích cách tính, đính kèm code Python để thử. Kiểu viết mà nếu có người hỏi “FP4 là gì?” thì bạn dán link là xong.
Nó lên top vì quantization đang là cuộc đua vũ trang thực sự. Mỗi tham số trong một mô hình lớn chiếm FP32 thì tốn 4 byte, FP16 thì 2 byte, FP8 thì 1 byte, FP4 thì nửa byte - hai tham số nhét vào chỗ một tham số FP16. Với mô hình 400 tỉ tham số, phép nhân đó cho ra một con số khổng lồ - theo nghĩa đen, hàng tỉ đô la chi phí hạ tầng.
NVIDIA chip Blackwell (B200, GB300) đã có tensor core FP4 ngay từ silicon. Định dạng NVFP4 của họ thêm một lớp hiệu chỉnh: mỗi nhóm 16 giá trị có một hệ số tỉ lệ FP8 riêng. Cơ chế hai tầng này bù lại phần lớn độ chính xác bị mất khi nhét một tham số vào 4 bit. Kết quả: tốc độ gấp 6 lần FP16, mức giảm độ chính xác dưới 1% so với FP8.
DeepSeek-R1 671 tỉ tham số chạy FP4 trên B200 nhanh hơn 3 lần so với chạy FP8 trên H200. Ba lần. Với mô hình to đó, “3 lần” là con số của nhiều tỉ đô.
HN đang tranh luận gì
Hai trường phái rõ ràng.
Trường phái thứ nhất: đây là kỹ thuật đẹp. Việc mất độ chính xác có giới hạn và có thể đo được. Bình luận tràn đầy người thử nghiệm so sánh E2M1 với E3M0, E1M2, xem cái nào phù hợp hơn cho từng loại lớp trong mạng. Có người viết code sinh bảng giá trị cho cả ba kiểu và dán lên - cả bảng đó không dài hơn một đoạn code Python bình thường.
Trường phái thứ hai: mười sáu giá trị là điên. Phe hoài nghi chỉ ra rằng FP4 vô dụng hoàn toàn cho bất kỳ phép tính số học thông thường nào. Cộng hai số FP4 lại thôi là có thể ra sai ngay. Không làm tích phân, không tích luỹ gradient, không làm gì mà cần độ chính xác tương đối.
Cả hai đều đúng. FP4 chỉ có nghĩa khi bạn nghĩ tham số mô hình là một mục tra cứu trong bộ nhớ nén, không phải một biến trong phương trình toán học. Nó không phải định dạng để tính toán - nó là định dạng để lưu trữ.
Bảng tóm tắt để dành
| Định dạng | Số bit | Giá trị khác nhau | Dùng ở đâu trong ML |
|---|---|---|---|
| FP32 | 32 | ~4,3 tỉ | Huấn luyện, gradient |
| BF16 | 16 | ~65.536 | Huấn luyện mixed-precision |
| FP8 | 8 | 256 | Suy luận, activations |
| FP4 | 4 | 16 | Lưu tham số, suy luận |
Bảng này cũng là lịch sử tám năm ngành hack xung quanh giới hạn bộ nhớ GPU.
Cái điều hơi khó chịu
Có gì đó hơi kỳ lạ khi nhận ra điều này.
Nhiều thế kỷ toán học xây dựng số thực dấu phẩy động để biểu diễn số một cách đủ chính xác cho khoa học và kỹ thuật. Rồi các nhà nghiên cứu phát hiện ra rằng bạn có thể mô tả một tham số hữu ích của mạng nơ-ron với lượng thông tin bằng đáp án một câu trắc nghiệm bốn lựa chọn.
Mạng không quan tâm số đó không chính xác. Sau khi huấn luyện với đủ dữ liệu, tham số đó chưa bao giờ thực sự là một số thực chính xác - nó chỉ là một vị trí gần đúng trong không gian nhiều chiều. Làm tròn nó về phần tử gần nhất trong ±0, ±0.5, ±1, ±1.5, ±2, ±3, ±4, ±6 và tiếp tục - thực nghiệm cho thấy là được.
Điều đó hoặc là một thắng lợi của chủ nghĩa thực dụng, hoặc là nhận xét khá thú vị về bản chất của mô hình ngôn ngữ lớn. Có lẽ là cả hai.
Thảo luận trên Hacker News · Nguồn: johndcook.com · Đăng bởi chmaynard
Bài viết liên quan
- AI & Agents
BitNet: Kỷ nguyên LLM 1-bit Cuối cùng đã Bắt đầu
Khám phá bitnet.cpp, framework chính thức của Microsoft dành cho các LLM 1-bit, giúp thay thế phép nhân bằng phép cộng để tăng tốc độ xử lý vượt trội.
5 phút đọcĐọc tiếp → - AI & Agents
Anthropic Đang Train Model Trên Máy Chủ Của Elon
Anthropic mở rộng sang Colossus2 của xAI, dùng GPU GB200 - sau khi đã dùng toàn bộ Colossus1. HN hỏi: xAI đang bỏ cuộc hay chuyển sang làm thầu?
6 phút đọcĐọc tiếp → - AI & Agents
Một phút video 720p từ một GPU duy nhất - chúng ta tiến nhanh đến thế sao?
SANA-WM là world model mã nguồn mở 2.6B tham số, tạo video dài một phút ở độ phân giải 720p với điều khiển camera 6 bậc tự do trên một GPU. NVIDIA huấn luyện…
6 phút đọcĐọc tiếp → - AI & Agents
BFS Head V1.1: Ghép mặt và đầu In-Context không bệt da trong Qwen Image 2.1
Làm chủ kỹ thuật ghép mặt in-context trên Qwen Image 2.1 DiT với BFS Head V1.1. Xóa bỏ hoàn toàn vết cắt viền cổ và da bệt nhờ cắt tỉa 16 lớp MLP.
15 phút đọcĐọc tiếp →