16 con số để chạy mô hình ngàn tỉ tham số

6 phút đọc English
Featured image for 16 con số để chạy mô hình ngàn tỉ tham số

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ạngSố bitGiá trị khác nhauDùng ở đâu trong ML
FP3232~4,3 tỉHuấn luyện, gradient
BF1616~65.536Huấn luyện mixed-precision
FP88256Suy luận, activations
FP4416Lư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

Hoang Yell

Một nhà phát triển phần mềm và là người kể chuyện kỹ thuật. Tôi đọc Hacker News mỗi ngày và kể lại những câu chuyện hay nhất ở đây — bằng tiếng Việt và tiếng Anh, cho người tò mò nhưng không có thời gian.