Độ chính xác hỗn hợp
Tăng cường hiệu quả học sâu với huấn luyện độ chính xác hỗn hợp! Đạt được tốc độ nhanh hơn, giảm mức sử dụng bộ nhớ và tiết kiệm năng lượng mà không làm giảm độ chính xác.
Độ chính xác hỗn hợp (Mixed precision) là một kỹ thuật được sử dụng trong học sâu (deep learning) để tăng tốc quá trình huấn luyện mô hình và giảm mức tiêu thụ bộ nhớ. Nó bao gồm việc sử dụng kết hợp các định dạng số có độ chính xác thấp hơn, như dấu phẩy động 16-bit (FP16) và các định dạng có độ chính xác cao hơn, chẳng hạn như dấu phẩy động 32-bit (FP32), trong quá trình tính toán. Bằng cách sử dụng một cách chiến lược các số có độ chính xác thấp hơn cho các phần nhất định của mô hình, chẳng hạn như phép nhân trọng số và giữ các thành phần quan trọng như cập nhật trọng số ở độ chính xác cao hơn, huấn luyện độ chính xác hỗn hợp có thể tăng tốc đáng kể hiệu suất trên GPU hiện đại mà không làm giảm đáng kể độ chính xác của mô hình.
Độ chính xác hỗn hợp hoạt động như thế nào
Ý tưởng cốt lõi đằng sau độ chính xác hỗn hợp (mixed precision) là tận dụng tốc độ và hiệu quả bộ nhớ của các kiểu dữ liệu có độ chính xác thấp hơn. Phần cứng hiện đại, đặc biệt là GPU NVIDIA với Tensor Cores, có thể thực hiện các phép toán trên số 16-bit nhanh hơn nhiều so với trên số 32-bit. Quá trình này thường bao gồm ba bước chính:
- Ép kiểu về độ chính xác thấp hơn: Hầu hết các hoạt động của mô hình, đặc biệt là các phép nhân ma trận và tích chập tốn nhiều tính toán, được thực hiện bằng số học bán chính xác (FP16). Điều này làm giảm dung lượng bộ nhớ và tăng tốc tính toán.
- Duy trì Bản sao Chính của Trọng số: Để duy trì độ chính xác và ổn định của mô hình, một bản sao chính của trọng số mô hình được giữ ở định dạng dấu phẩy động 32-bit (FP32) tiêu chuẩn. Bản sao chính này được sử dụng để tích lũy gradient và cập nhật trọng số trong quá trình huấn luyện.
- Loss Scaling: Để ngăn chặn tình trạng underflow số—nơi các giá trị gradient nhỏ trở thành 0 khi được chuyển đổi thành FP16—một kỹ thuật gọi là loss scaling được sử dụng. Nó bao gồm việc nhân loss với một hệ số tỷ lệ trước khi lan truyền ngược để giữ cho các giá trị gradient nằm trong một phạm vi có thể biểu diễn được đối với FP16. Trước khi các trọng số được cập nhật, các gradient được thu nhỏ trở lại.
Các framework học sâu như PyTorch và TensorFlow có hỗ trợ tích hợp cho độ chính xác hỗn hợp tự động, giúp dễ dàng triển khai.
Các ứng dụng và ví dụ
Độ chính xác hỗn hợp được áp dụng rộng rãi trong việc huấn luyện các mô hình học máy (ML) quy mô lớn, nơi hiệu quả là tối quan trọng.
Các Khái Niệm Liên Quan
Độ chính xác hỗn hợp là một trong số các kỹ thuật tối ưu hóa được sử dụng để làm cho các mô hình học sâu hiệu quả hơn. Điều quan trọng là phải phân biệt nó với các khái niệm liên quan:
- Lượng tử hóa mô hình: Lượng tử hóa làm giảm kích thước mô hình và chi phí tính toán bằng cách chuyển đổi các số dấu phẩy động (như FP32 hoặc FP16) thành các định dạng số nguyên bit thấp hơn, chẳng hạn như INT8. Trong khi độ chính xác hỗn hợp sử dụng các định dạng dấu phẩy động khác nhau trong quá trình huấn luyện, lượng tử hóa thường được áp dụng sau khi huấn luyện (lượng tử hóa sau huấn luyện) hoặc trong quá trình đó (huấn luyện nhận biết lượng tử hóa) để tối ưu hóa cho suy luận, đặc biệt là trên các thiết bị biên.
- Tỉa thưa mô hình: Tỉa thưa là một kỹ thuật liên quan đến việc loại bỏ các kết nối (trọng số) dư thừa hoặc không quan trọng khỏi một mạng nơ-ron. Không giống như độ chính xác hỗn hợp, làm thay đổi định dạng số của trọng số, tỉa thưa thay đổi chính kiến trúc của mô hình để giảm kích thước và độ phức tạp của nó. Các kỹ thuật này có thể được sử dụng cùng nhau để đạt được mức tăng hiệu suất thậm chí còn lớn hơn.