D · Mathematical foundation
Hiểu precision và sai số trong phép tính
Đặc tính biểu diễn số thực trên phần cứng (FP32, BF16, FP16, FP8, INT4) và cách kiểm soát sai số làm tròn, tràn số trong mô hình.
1Định nghĩa
Số học máy tính (numerics) trong học sâu giải quyết việc máy tính biểu diễn các giá trị thực bằng số lượng bit hữu hạn. Mỗi kiểu dữ liệu (dtype) chia ngân sách bit giữa phần mũ (exponent — quyết định dải giá trị lớn/nhỏ tối đa) và phần trị (mantissa — quyết định độ mịn hay độ chính xác giữa hai số liền kề).
Ví dụ, BF16 giữ nguyên dải giá trị rộng như FP32 để tránh tràn số (overflow/underflow) khi huấn luyện nhưng giảm độ mịn, trong khi FP8 và INT4 trong lượng tử hóa nén mạnh hơn nữa để tiết kiệm HBM. Để sai số không tích lũy làm lệch bảng điểm logits, các kernels thường nhân ở định dạng thấp nhưng cộng dồn (accumulate) kết quả trung gian ở FP32.
Ví dụ đời thường: Biểu diễn số học máy tính giống như việc chọn thước đo và cách ghi chép sổ sách. Thước dây dài 100 mét đo được cả mảnh đất lớn nhưng vạch chia thưa (giống BF16 có dải rộng nhưng độ mịn vừa phải), còn thước kẹp cơ khí đo chính xác từng phần mười milimét nhưng chỉ kẹp được vật nhỏ (dải hẹp, dễ tràn số); lúc cộng tổng cuối ngày, kế toán luôn cộng trên sổ lớn (FP32) để không bị lệch tiền lẻ.
2Luồng
- Chọn dtype và reference
Xác định format và tolerance.
- Thực hiện phép tính
Bao gồm rounding và accumulation.
- So số học
Đo lỗi trên tensors/gradients.
- So hành vi model
Kiểm tra tác vụ sau thay đổi.
Mã Mermaid
flowchart TD
step1["Chọn dtype và reference"]
step2["Thực hiện phép tính"]
step3["So số học"]
step4["So hành vi model"]
step1 --> step2
step2 --> step3
step3 --> step4 3Giải pháp
Dùng accumulation phù hợp cho tổng lớn; ưu tiên công thức ổn định như log-softmax thay log của softmax tính riêng. Khi huấn luyện với FP16, loss scaling có thể giúp gradients nhỏ.
Không đặt cùng tolerance cho mọi dtype và phép toán; cũng không xem pass numerical test là đủ thay task evaluation.
4Profiling
- Error và non-finite values
So absolute/relative error, số NaN và infinity trên inputs đại diện.
- Task sensitivity
Xem các nhóm output đổi khi logits chênh nhỏ, nhất là token gần đồng điểm.
Mẹo đo lường: ghim số liệu trên workload thật, ghi cả p50/p95/p99 thay vì chỉ trung bình, và luôn ghi lại điều kiện chạy (batch, cache, đồng thời, phần cứng) trước và sau khi tối ưu. Số đo thiếu điều kiện chạy thì không so sánh được.
5Ví dụ
Cross entropy có logits lớn
Công thức ổn định tránh tính exp quá lớn gây overflow.
Hai token gần bằng nhau
Rounding nhỏ có thể đổi token greedy; cần phân biệt sai số cho phép với chất lượng ứng dụng.
6Thuật ngữ
- Overflow / underflow
- Giá trị vượt phạm vi biểu diễn hoặc quá nhỏ so với format.
- Relative error
- Sai số tương đối so với độ lớn của giá trị reference.
- Brain Floating Point 16-bit
- Format thường gọi BF16; có range và precision khác IEEE half precision FP16.
Glossary (4)
- Data type
- Kiểu dữ liệu của tensor, quyết định cách biểu diễn số.
- Tensor
- Mảng số nhiều chiều, như một vector, ma trận hoặc nhóm ma trận.
- Logits
- Điểm số chưa chuẩn hóa cho các token ứng viên trước khi chọn token.
- Kernel
- Hàm tính toán chạy trên thiết bị; thường xử lý nhiều phần tử song song.
7Bài liên quan
8Nguồn
9Bài lab
INT8 đối xứng và sai số khôi phục
Tính toán tham chiếu · số học gần đúngThêm outlier vào W; quan sát scale, clipping, sai số output và byte payload lý thuyết.
Kết quả mong đợiFP32 payload là 24 bytes; INT8 payload là 6 bytes, cộng 4 bytes scale theo tensor hoặc 8 bytes scale theo hai output channels. Có so sánh sai số hai cách scaling và kiểm tra tensor toàn 0. Các số chưa tính metadata, allocator/workspace; phép nhân vẫn dùng số float sau khôi phục nên không đo tốc độ kernel INT8.