Độ chính xác nửa
Khám phá cách độ chính xác nửa (FP16) tăng tốc AI với khả năng tính toán nhanh hơn, giảm mức sử dụng bộ nhớ và triển khai mô hình hiệu quả.
Độ chính xác nửa (Half-precision), còn được gọi là FP16, là một định dạng số dấu phẩy động sử dụng 16 bit bộ nhớ để biểu diễn một số, trái ngược với các định dạng độ chính xác đơn (FP32) 32-bit hoặc độ chính xác kép (FP64) 64-bit phổ biến hơn. Trong bối cảnh của học sâu, việc sử dụng độ chính xác nửa giúp giảm đáng kể dung lượng bộ nhớ và yêu cầu tính toán của mô hình. Sự đánh đổi này phải trả giá bằng việc giảm phạm vi số và độ chính xác. Tuy nhiên, các kỹ thuật hiện đại, đặc biệt là huấn luyện độ chính xác hỗn hợp, đã biến FP16 trở thành nền tảng của học máy (ML) hiệu quả bằng cách cho phép huấn luyện và suy luận nhanh hơn với tác động tối thiểu đến độ chính xác của mô hình.
Cách Half-Precision hoạt động
Chuyển từ FP32 sang FP16 giúp giảm một nửa bộ nhớ cần thiết để lưu trữ trọng số và kích hoạt mô hình. Điều này cho phép các mô hình lớn hơn, kích thước lô (batch sizes) lớn hơn hoặc huấn luyện trên GPU với ít bộ nhớ hơn. Hơn nữa, các GPU hiện đại, chẳng hạn như các GPU có NVIDIA Tensor Cores, được thiết kế đặc biệt để thực hiện các phép toán ma trận 16 bit ở tốc độ cao hơn nhiều so với các phép toán 32 bit.
Thách thức chính với FP16 là phạm vi số hạn chế của nó, có thể dẫn đến các vấn đề như vanishing gradient trong quá trình huấn luyện. Để chống lại điều này, độ chính xác một nửa hầu như luôn được triển khai bằng cách sử dụng phương pháp độ chính xác hỗn hợp. Chiến lược này bao gồm việc thực hiện hầu hết các tính toán trong FP16 để có tốc độ, nhưng sử dụng FP32 một cách chiến lược cho các hoạt động quan trọng, chẳng hạn như cập nhật trọng số và một số phép tính hàm mất mát, để duy trì tính ổn định số. Các framework học sâu như PyTorch và TensorFlow cung cấp hỗ trợ tích hợp cho huấn luyện độ chính xác hỗn hợp tự động.
Các ứng dụng và ví dụ
Độ chính xác nửa, chủ yếu thông qua các kỹ thuật độ chính xác hỗn hợp, được sử dụng rộng rãi:
- Tăng tốc Huấn luyện Mô hình: Huấn luyện các mô hình học sâu lớn, chẳng hạn như các mô hình cho phân loại ảnh (image classification) hoặc xử lý ngôn ngữ tự nhiên (natural language processing - NLP), có thể được tăng tốc đáng kể bằng cách sử dụng độ chính xác hỗn hợp, giảm thời gian và chi phí huấn luyện. Các nền tảng như Ultralytics HUB thường sử dụng các tối ưu hóa này trong các phiên huấn luyện trên đám mây (cloud training sessions).
- Tối ưu hóa suy luận phát hiện đối tượng: Các mô hình như Ultralytics YOLO11 có thể được xuất sang các định dạng như ONNX hoặc TensorRT với độ chính xác FP16 để suy luận thời gian thực nhanh hơn. Điều này rất quan trọng đối với các ứng dụng cần thông lượng cao, chẳng hạn như hệ thống an ninh phân tích nhiều nguồn cấp video hoặc kiểm soát chất lượng trên dây chuyền sản xuất tốc độ cao.
- Triển khai trên các Thiết bị Hạn chế Tài nguyên: Dung lượng bộ nhớ và chi phí tính toán giảm của các mô hình FP16 làm cho chúng phù hợp để triển khai trên các nền tảng edge AI như NVIDIA Jetson hoặc các thiết bị di động sử dụng các framework như TensorFlow Lite hoặc Core ML của Apple.
- Huấn luyện các mô hình ngôn ngữ lớn (LLM): Kích thước khổng lồ của các mô hình như GPT-3 và các mô hình nền tảng (foundation models) khác đòi hỏi phải sử dụng các định dạng 16-bit để phù hợp với bộ nhớ và hoàn thành huấn luyện trong khung thời gian hợp lý.
Độ chính xác nửa (Half-Precision) so với các định dạng khác
- Bfloat16 (BF16): Một định dạng 16-bit thay thế được phát triển bởi Google, Bfloat16 phân bổ nhiều bit hơn cho số mũ và ít hơn cho phần định trị so với FP16. Điều này mang lại cho nó cùng dải động như FP32, làm cho nó có khả năng phục hồi tốt hơn trước tình trạng tràn số (underflow) và tràn số (overflow), nhưng với chi phí là độ chính xác thấp hơn. Nó được sử dụng rộng rãi trong TPU của Google. Bạn có thể đọc thêm về nó trên Google Cloud AI Blog.
- Lượng tử hóa mô hình (Model Quantization): Mặc dù cả hai đều là các kỹ thuật tối ưu hóa mô hình (model optimization), lượng tử hóa mô hình (model quantization) thường chuyển đổi các trọng số dấu phẩy động (FP32 hoặc FP16) thành các định dạng số nguyên bit thấp hơn, phổ biến nhất là số nguyên 8 bit (INT8). Điều này có thể mang lại tốc độ tăng tốc lớn hơn, đặc biệt là trên CPU và một số bộ tăng tốc nhất định, nhưng thường yêu cầu quy trình hiệu chuẩn cẩn thận hơn, như Huấn luyện nhận biết lượng tử hóa (Quantization-Aware Training - QAT), để tránh giảm đáng kể hiệu suất của mô hình.
- Độ chính xác đơn (FP32): Đây là định dạng mặc định trong hầu hết các framework học sâu. Nó cung cấp độ chính xác cao và dải động rộng, làm cho nó mạnh mẽ để huấn luyện. Tuy nhiên, nó chậm hơn và tốn nhiều bộ nhớ hơn so với độ chính xác một nửa, làm cho nó kém lý tưởng hơn để triển khai các mô hình lớn hoặc cho các ứng dụng đòi hỏi tốc độ tối đa. Sự đánh đổi giữa các định dạng này là một cân nhắc quan trọng, như được hiển thị trong nhiều so sánh mô hình.