English· Español· Deutsch· Nederlands· Français· 日本語· ქართული· 繁體中文· 简体中文· Português· Русский· العربية· हिन्दी· Italiano· 한국어· Polski· Svenska· Türkçe· Українська· Tiếng Việt· Bahasa Indonesia

un

khách
1 / ?
trở lại bài học

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ạngTổng bitDấuSố mũMantPhạm vi độngĐộ chính xác
FP32321823~10^-38 đến ~10^38~7 chữ số
FP16161510~10^-5 đến ~10^5~3 chữ số
FP8 E4M38143~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ố

ANDREA-120M chứa khoảng 120.000.000 tham số. Tính toán dung lượng lưu trữ chỉ của các ma trận trọng số trong (a) FP32, (b) FP16, (c) FP8. Hiển thị phép tính của bạn theo MB. Sau đó tính (d) dung lượng lưu trữ với trọng số + moment đầu tiên Adam + moment thứ hai Adam (3 lần số lượng trọng số) ở FP16.

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ácBước/phútGhi chú
FP32~3cơ sở; không có tăng tốc tensor core
FP16~6lõi tensor cuBLAS; tăng tốc 2x
FP8 E4M3~6lõ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.


Precision Comparison: FP32 vs FP16 vs FP8

Chọn Độ Chính Xác cho Một Lần Chạy Mới

Bạn đang bắt đầu một lần chạy huấn luyện kiểu ANDREA mới trên RTX 4090. Bạn có hai ưu tiên xung đột: (1) tối đa hóa steps/min, (2) tránh gỡ lỗi các sự cố NaN giữa buổi huấn luyện. ANDREA-120M v3 chọn FP16 cuBLAS thay vì FP8 E4M3 mặc dù cả hai đều chạy ở ~6 steps/min. Lý luận tại sao FP16 thắng quyết định này. Tham chiếu phạm vi động AND hỗ trợ tensor core trong câu trả lời của bạn.

Đặ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ầnKích thước FP16
Trọng số240 MB
m (first moment)240 MB
v (second moment)240 MB
Gradients240 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

ANDREA-480M (thành viên thứ ba dự kiến của gia đình) có khoảng 480 triệu tham số. Ước lượng (a) chỉ trọng số FP16 tính bằng MB, (b) trọng số FP16 + m + v tính bằng MB (giả sử m & v cũng FP16 để đơn giản), & (c) với quy tắc ngón tay cái nhân 6-8x, tổng dấu chân thời gian huấn luyện ở FP16. ANDREA-480M có vừa trên một RTX 4090 đơn (24 GB) không?

Độ chính xác trong Thực tế

Giả sử bạn phát hiện giữa quá trình huấn luyện rằng ANDREA-120M thỉnh thoảng tạo ra mất mát NaN cứ khoảng ~5000 bước ở FP16, & mỗi NaN yêu cầu khởi động lại từ checkpoint. Bạn sẽ thử THAY ĐỔI NÀO ĐẦU TIÊN để giảm tần suất NaN mà không rời khỏi FP16? Giải thích bằng một cơ chế một câu.

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.