FP8
Tìm hiểu FP8 là gì, cách hoạt động của E4M3 và E5M2, cùng với việc scaling, hỗ trợ phần cứng và mixed precision cải thiện quá trình training và inference AI như thế nào.
FP8, hay dấu phẩy động 8-bit, là định dạng số có độ chính xác thấp, lưu trữ mỗi giá trị trong tám bit. Các hệ thống AI sử dụng FP8 để giảm lưu lượng bộ nhớ và tăng tốc các phép nhân ma trận, tích chập và các thao tác tốn kém khác trên phần cứng tương thích. So với FP16 hoặc FP32, định dạng này biểu diễn ít giá trị phân biệt hơn, do đó các quy trình làm việc FP8 thành công kết hợp tính toán tốc độ cao với độ chính xác thấp cùng các thao tác chia tỷ lệ và chọn lọc có độ chính xác cao hơn để bảo toàn chất lượng model.
Link to this sectionCách FP8 Biểu Diễn Số#
Một giá trị dấu phẩy động bao gồm dấu, số mũ kiểm soát phạm vi và phần định trị kiểm soát chi tiết. FP8 thường xuất hiện trong hai định dạng được tài liệu hóa bởi PyTorch floating-point data types:
- E4M3: Một bit dấu, bốn bit số mũ và ba bit định trị. Định dạng này cung cấp nhiều chi tiết số hơn nhưng phạm vi hẹp hơn.
- E5M2: Một bit dấu, năm bit số mũ và hai bit định trị. Định dạng này bao phủ phạm vi rộng hơn nhưng làm tròn các giá trị mạnh tay hơn.
E4M3 thường phù hợp cho trọng số và giá trị kích hoạt, trong khi E5M2 có thể thích ứng tốt hơn với gradient có phạm vi giá trị lớn. Các biến thể chính xác khác nhau giữa các nền tảng, như được hiển thị trong AMD low-precision floating-point documentation, vì vậy một model FP8 không tự động khả chuyển giữa mọi bộ tăng tốc và runtime.
Vì tám bit không thể biểu diễn toàn bộ phạm vi và chi tiết ban đầu của một tensor, các framework thường nhân các giá trị với một hệ số tỷ lệ trước khi chuyển đổi. NVIDIA’s FP8 scaling primer mô tả các chiến lược như chia tỷ lệ trễ, lấy các tỷ lệ trong tương lai từ các giá trị tối đa đã quan sát trước đó. Việc chia tỷ lệ giới hạn tình trạng tràn trên, tràn dưới và bão hòa mà không yêu cầu mọi thao tác phải chạy ở độ chính xác cao hơn.
Link to this sectionFP8 so với Các Định Dạng Liên Quan#
FP8 chiếm vị trí trung gian giữa các kiểu dữ liệu AI phổ biến:
- FP16 hoặc độ chính xác bán phần: Sử dụng số bit gấp đôi, mang lại chi tiết số lớn hơn và quá trình huấn luyện thường đơn giản hơn. FP8 có thể giảm thêm dung lượng lưu trữ và băng thông nhưng đòi hỏi việc chia tỷ lệ cẩn thận hơn.
- BF16: Giữ nguyên dải số mũ rộng trong khi cung cấp ít chi tiết phân số hơn FP16. Định dạng này thường được sử dụng làm thành phần bổ trợ có độ chính xác cao hơn trong quá trình huấn luyện FP8.
- INT8: Biểu diễn các số nguyên thay vì giá trị dấu phẩy động. Quá trình model quantization với INT8 thường dựa vào các tỷ lệ để ánh xạ giá trị thực lên các mức số nguyên cố định, trong khi FP8 giữ lại số mũ để có khoảng cách phi đồng nhất tự nhiên.
- FP4: Chỉ sử dụng bốn bit và có thể cung cấp khả năng nén lớn hơn, nhưng phạm vi và độ chi tiết cực kỳ hạn chế của nó thường khiến việc bảo toàn độ chính xác trở nên khó khăn hơn.
FP8 thường là một phần của quy trình làm việc mixed-precision thay vì là kiểu dữ liệu cho mọi tensor. Các lớp tích lũy, chuẩn hóa, trạng thái optimizer hoặc các lớp nhạy cảm có thể giữ nguyên ở định dạng BF16, FP16 hoặc FP32. Ngoài ra, độ chính xác số học khác với precision evaluation metric, đo lường số lượng dự đoán model dương tính là chính xác.
Link to this sectionCác ứng dụng trong thực tế#
Hai ứng dụng thực tế minh họa lý do tại sao FP8 quan trọng:
-
Huấn luyện model lớn: Quá trình huấn luyện Transformer thực hiện lặp đi lặp lại các phép nhân ma trận lớn. Một framework hỗ trợ FP8 có thể ép các trọng số và giá trị kích hoạt hợp lệ sang FP8 đồng thời duy trì độ chính xác cao hơn ở những nơi tính ổn định đòi hỏi điều đó. Điều này làm giảm nhu cầu băng thông và có thể tăng thông lượng huấn luyện. Quy trình TorchAO quantized-training workflow bao gồm các tùy chọn chia tỷ lệ theo tensor và theo hàng nhằm đánh đổi giữa tốc độ tối đa với khả năng xử lý giá trị ngoại lai tốt hơn.
-
Inference thị giác thông lượng cao: Trung tâm dữ liệu có thể chạy tính năng phát hiện đối tượng trên hàng trăm luồng video bán lẻ, giao thông hoặc sản xuất. Các kernel hỗ trợ FP8 có thể giảm thời gian và bộ nhớ được sử dụng bởi các lớp model hợp lệ, có khả năng hạ thấp inference latency và tăng dung lượng luồng đồng thời. Hướng dẫn TensorRT quantized-types guide giải thích cách các thao tác lượng tử hóa và giải lượng tử hóa rõ ràng mô tả quá trình thực thi FP8.
Link to this sectionRủi Ro Số Học và Hỗ Trợ Phần Cứng#
Việc chia tỷ lệ kém có thể khiến các giá trị lớn bị bão hòa và các giá trị nhỏ bị làm tròn thành zero. Các giá trị ngoại lai đặc biệt có vấn đề khi một tỷ lệ bao trùm toàn bộ tensor. Các hiệu ứng này có thể làm thay đổi điểm số độ tin cậy, làm mất ổn định quá trình huấn luyện hoặc làm giảm độ chính xác phát hiện, vì vậy các nhà phát triển nên xác thực model đã chuyển đổi dựa trên đường cơ sở có độ chính xác cao hơn của nó.
Hỗ trợ phần cứng gốc cũng quan trọng không kém. NVIDIA Hopper architecture đã giới thiệu khả năng tăng tốc FP8 Tensor Core, trong khi NVIDIA A100 GPU cũ hơn hỗ trợ FP16, BF16 và INT8 nhưng không hỗ trợ tính toán FP8 gốc. Do đó, nên kiểm tra TensorRT hardware support matrix trước khi lựa chọn độ chính xác khi triển khai.
Link to this sectionLàm Việc với FP8 trong Thực Tế#
Ví dụ PyTorch nhỏ này minh họa quá trình chuyển đổi E4M3 và sai số làm tròn sinh ra khi các giá trị FP8 được khôi phục về FP32:
import torch
values = torch.tensor([0.1, 1.0, 3.14, 100.0], dtype=torch.float32)
# Convert to E4M3 FP8, then restore the values for comparison.
fp8_values = values.to(torch.float8_e4m3fn)
restored = fp8_values.to(torch.float32)
absolute_error = (restored - values).abs()
print(torch.stack((values, restored, absolute_error), dim=1))Quy trình Ultralytics TensorRT export workflow được tài liệu hóa cung cấp các tùy chọn FP16 và INT8 đã hiệu chuẩn cho Ultralytics YOLO thay vì xuất FP8 một đối số. Do đó, việc triển khai FP8 đòi hỏi một chuỗi công cụ chuyển đổi hạ nguồn tương thích. Bất kể độ chính xác nào được chọn, hãy sử dụng Ultralytics benchmark mode trên GPU mục tiêu để so sánh độ trễ, thông lượng, mức sử dụng bộ nhớ và độ chính xác tác vụ trước khi triển khai sản xuất.






