Dấu, Số mũ, Mantissa
Định dạng Điểm trôi IEEE 754
Mọi số điểm trôi lưu trữ ba trường:
- Bit dấu (1 bit): dương hoặc âm
- Số mũ (E bits): thang đo độ lớn, lũy thừa nguyên của 2
- Mantissa (M bits): độ chính xác phần thập phân, một số giữa 1.0 và ~2.0
Tổng số bits = 1 + E + M. Giá trị xấp xỉ bằng (-1)^sign (1 + mantissa) 2^(exponent - bias).
Hai thuộc tính quan trọng cho việc huấn luyện:
Phạm vi động = 2^(2^E) (xấp xỉ). Nhiều bits số mũ hơn nghĩa là biểu diễn được các số nhỏ hơn và lớn hơn mà không tràn số.
Độ chính xác = 2^M giá trị phân biệt trên mỗi lũy thừa của 2. Nhiều bit mantissa hơn nghĩa là biểu diễn chi tiết hơn giữa các lũy thừa liên tiếp của 2.
Ba Định dạng
| Định dạng | Tổng bit | Dấu | Số mũ | Mant | Phạm vi động | Độ chính xác |
|---|---|---|---|---|---|---|
| FP32 | 32 | 1 | 8 | 23 | ~10^-38 đến ~10^38 | ~7 chữ số |
| FP16 | 16 | 1 | 5 | 10 | ~10^-5 đến ~10^5 | ~3 chữ số |
| FP8 E4M3 | 8 | 1 | 4 | 3 | ~2^-9 đến ~448 | ~2 chữ số |
FP8 E4M3 được đọc là "4 bit số mũ, 3 bit mantissa". Một lựa chọn thay thế FP8 E5M2 đổi độ chính xác lấy phạm vi; các thí nghiệm ANDREA sử dụng E4M3 vì các kích hoạt transformer nằm trong các dải độ lớn hẹp nơi độ chính xác bổ sung vượt trội hơn phạm vi bổ sung.
Số Byte Mỗi Tham Số
Tại sao Độ chính xác Thấp hơn Chạy Nhanh hơn
Băng thông Bộ nhớ Chi phối Tốc độ Huấn luyện
GPU hiện đại dành nhiều thời gian chờ bộ nhớ hơn là tính toán. RTX 4090 có băng thông bộ nhớ 1008 GB/s & 165 TFLOPS tính toán FP16. Một tầng điển hình đọc trọng số từ VRAM, nhân activations, ghi kết quả trở lại. Băng thông, không phải tính toán, quyết định thông lượng.
Giảm độ chính xác xuống một nửa sẽ giảm bytes mỗi tham số xuống một nửa, vì vậy việc đọc cùng trọng số sẽ sử dụng một nửa băng thông bộ nhớ. Thông lượng tăng gấp đôi.
Tensor Cores: Nhân Ma Trận Tăng Tốc Phần Cứng
RTX 4090 có các đơn vị tensor core chuyên dụng để tính toán nhân ma trận ở FP16 hoặc FP8 trực tiếp. Một hoạt động tensor core duy nhất nhân một khối nhỏ (ví dụ: 16x16) trong một chu kỳ, nhanh hơn đáng kể so với nhân FP32 theo kiểu vô hướng.
Số liệu thực nghiệm từ ANDREA-120M:
| Độ chính xác | Bước/phút | Ghi chú |
|---|---|---|
| FP32 | ~3 | cơ sở; không có tăng tốc tensor core |
| FP16 | ~6 | lõi tensor cuBLAS; tăng tốc 2x |
| FP8 E4M3 | ~6 | lõi tensor; tương đương FP16 |
FP8 không vượt qua FP16 về thông lượng trên khối lượng công việc này vì thông lượng tính toán ngừng là nút thắt; băng thông bộ nhớ & chi phí khởi chạy trở thành yếu tố ràng buộc. ANDREA-120M v3 được phát hành trên FP16 cuBLAS ở 6 bước/phút để có biên an toàn thoải mái mà không mất thông lượng.
Rủi ro NaN ở FP8
FP8 E4M3 biểu diễn các số từ ~2^-9 đến ~448. Các kích hoạt hoặc gradient ngoài phạm vi đó sẽ tràn số thành NaN (không phải số) hoặc tràn dưới thành zero. Một NaN duy nhất làm hỏng mọi tính toán downstream: phép nhân ma trận với NaN trả về toàn bộ NaN; gradient toàn NaN làm hỏng trạng thái AdamW; AdamW với NaN m & v xuất ra cập nhật NaN; trọng số trở thành NaN; toàn bộ quá trình huấn luyện chết.
Các thí nghiệm FP8 của ANDREA tạo ra các trường hợp NaN thỉnh thoảng yêu cầu loss scaling, chuyển đổi độ chính xác theo lịch trình, hoặc các đường dẫn dự phòng. Phạm vi động của FP16 (~10^-5 đến ~10^5) đủ rộng để các sự kiện NaN vẫn hiếm gặp mà không cần các thủ thuật scaling phức tạp.
Chọn Độ Chính Xác cho Một Lần Chạy Mới
Đặt vừa 120M trên một 4090 duy nhất
Hệ số Nhân 6-8x từ Bài học Giới thiệu
Nhớ lại từ grow_a_language_model_intro rằng bộ nhớ huấn luyện bằng khoảng 6-8x số lượng trọng số thô, bao gồm:
- Trọng số (1x)
- Adam moment đầu tiên m (1x)
- Adam moment thứ hai v (1x)
- Bộ đệm gradient (1x)
- Kích hoạt & tạm thời (~2-4x, phụ thuộc vào batch & ngữ cảnh)
ANDREA-120M ở FP16 với batch_size=8, context=1024:
| Thành phần | Kích thước FP16 |
|---|---|
| Trọng số | 240 MB |
| m (first moment) | 240 MB |
| v (second moment) | 240 MB |
| Gradients | 240 MB |
| Activations | ~2-4 GB (batch, ctx) |
| Tổng cộng | ~3.5 GB |
RTX 4090 có 24 GB VRAM. ANDREA-120M sử dụng ~14% ở FP16. Còn rất nhiều chỗ cho kích thước batch lớn hơn hoặc cửa sổ ngữ cảnh dài hơn. ANDREA-12M chỉ sử dụng tổng cộng 1.4 GB.
Nơi Mixed Precision Được Sử Dụng
ANDREA KHÔNG giữ mọi thứ ở một độ chính xác duy nhất. Huấn luyện mixed-precision lưu trữ:
- Master weights: FP32 (giữ ổn định huấn luyện)
- Forward & backward compute: FP16 (sử dụng tensor cores)
- AdamW optimizer state: FP32 (m & v cần độ chính xác cho các cập nhật long-tail)
- Gradient buffer: FP16 (phía compute)
Ngân sách bộ nhớ cuối cùng kết hợp cả hai. Dấu chân thực tế của ANDREA nằm giữa FP16 thuần túy (720 MB trạng thái optimizer) & FP32 thuần túy (1.44 GB trạng thái optimizer), gần với FP32 hơn vì m & v vẫn ở FP32.
Xác định Ngân sách cho ANDREA-480M
Độ chính xác trong Thực tế
Các Hoạt Động Liên Quan
Ba anh em liên kết với độ chính xác:
- Hoạt động 1: Giới thiệu / Ngân sách VRAM. Độ chính xác nhân lên mọi thuật trong phép tính ngân sách bộ nhớ. Quy tắc ngón tay cái nhân 6-8x là không đơn vị; bytes-per-param cho nó đơn vị.
- Hoạt động 10: AdamW. Trạng thái optimizer (m & v) thường giữ ở FP32 ngay cả khi tính toán forward/backward chạy ở FP16. Lý do: độ chính xác của bộ tích lũy đuôi dài quan trọng hơn tốc độ runtime đối với optimizer.
- Hoạt động 12: Cắt gradient. Cắt giới hạn độ lớn gradient trước khi cập nhật trạng thái optimizer. Với FP16 forward/backward & FP32 optimizer, cắt xảy ra tại ranh giới nơi độ chính xác thay đổi & nơi rủi ro tràn tập trung.
Độ chính xác là một núm vặn miễn phí: thay đổi nó, mô hình huấn luyện nhanh hơn & sử dụng ít bộ nhớ hơn. Chi phí là sự cẩn thận số học: xử lý NaN, mở rộng loss, kỷ luật mixed-precision. ANDREA-120M v3 chứng minh lợi ích: 120M tham số được huấn luyện trên phần cứng tiêu dùng trong 23 ngày vì FP16 cắt giảm mọi thứ một nửa.