Đào tạo độ chính xác hỗn hợp là một kỹ thuật được sử dụng trong học sâu (DL) để tăng tốc đào tạo mô hình và giảm mức tiêu thụ bộ nhớ mà không ảnh hưởng đáng kể đến độ chính xác của mô hình. Nó đạt được điều này bằng cách sử dụng chiến lược kết hợp các định dạng độ chính xác số khác nhau để lưu trữ và tính toán các giá trị trong mạng nơ-ron (NN) . Thông thường, điều này liên quan đến việc sử dụng định dạng dấu phẩy động 32 bit chuẩn (FP32 hoặc độ chính xác đơn) cho các phần quan trọng như lưu trữ trọng số mô hình , trong khi sử dụng các định dạng dấu phẩy động 16 bit nhanh hơn, ít tốn bộ nhớ hơn (FP16 hoặc độ chính xác một nửa và đôi khi là BF16 hoặc BFloat16) để tính toán trong các lần truyền tới và truyền ngược ( truyền ngược ).
Độ 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 là tận dụng lợi ích về tốc độ và bộ nhớ của các định dạng có độ chính xác thấp hơn trong khi giảm thiểu các vấn đề về độ ổn định số tiềm ẩn. Một cách tiếp cận phổ biến bao gồm các bước sau:
- Duy trì trọng số chính trong FP32: Bản sao chính của trọng số mô hình được lưu giữ theo định dạng FP32 chuẩn để đảm bảo độ chính xác cao khi cập nhật trọng số.
- Sử dụng FP16/BF16 để tính toán: Trong vòng lặp đào tạo, trọng số FP32 được chuyển sang FP16 hoặc BF16 cho các lần truyền tới và truyền lui. Các phép tính sử dụng các định dạng có độ chính xác thấp hơn này nhanh hơn đáng kể trên phần cứng hiện đại như GPU NVIDIA được trang bị Tensor Cores , được thiết kế riêng để tăng tốc phép nhân ma trận ở độ chính xác thấp hơn.
- Loss Scaling: Khi sử dụng FP16, phạm vi các số có thể biểu diễn nhỏ hơn nhiều so với FP32. Điều này có thể khiến các giá trị gradient nhỏ được tính toán trong quá trình truyền ngược trở thành số không (underflow), cản trở việc học. Để ngăn chặn điều này, giá trị loss được tăng lên trước khi truyền ngược, về cơ bản là tăng các gradient lên phạm vi có thể biểu diễn được bởi FP16. Trước khi cập nhật trọng số, các gradient này được giảm xuống. BF16, với phạm vi động rộng hơn tương tự như FP32 nhưng độ chính xác thấp hơn, thường tránh được nhu cầu phải tăng tỷ lệ loss scaling.
- Cập nhật trọng số chính: Các gradient được tính toán (giảm xuống nếu sử dụng tỷ lệ mất mát) được dùng để cập nhật bản sao chính của trọng số, vẫn nằm trong FP32.
Sự cân bằng cẩn thận này cho phép các mô hình đào tạo nhanh hơn và sử dụng ít bộ nhớ GPU hơn.
Lợi ích của Độ chính xác hỗn hợp
- Đào tạo nhanh hơn: Các phép tính có độ chính xác thấp hơn (FP16/BF16) thực hiện nhanh hơn nhiều trên phần cứng tương thích, giúp giảm đáng kể thời gian cần thiết cho mỗi kỷ nguyên đào tạo. Điều này cho phép lặp lại và thử nghiệm nhanh hơn.
- Tiêu thụ bộ nhớ giảm: Giá trị FP16/BF16 chỉ cần một nửa bộ nhớ so với giá trị FP32. Việc giảm này áp dụng cho các kích hoạt được lưu trữ trong quá trình truyền tới và các gradient được tính toán trong quá trình truyền ngược. Sử dụng bộ nhớ thấp hơn cho phép đào tạo các mô hình lớn hơn hoặc sử dụng các kích thước lô lớn hơn, có thể cải thiện hiệu suất mô hình và tính ổn định của quá trình đào tạo.
- Hiệu quả được cải thiện: Sự kết hợp giữa tốc độ tính toán nhanh hơn và yêu cầu băng thông bộ nhớ thấp hơn dẫn đến việc sử dụng hiệu quả hơn các tài nguyên phần cứng, có khả năng giảm chi phí đào tạo cho điện toán đám mây hoặc cụm tại chỗ.
Độ chính xác hỗn hợp so với các khái niệm liên quan
- Độ chính xác đầy đủ (FP32): Đào tạo truyền thống sử dụng FP32 cho tất cả lưu trữ và tính toán. Nhìn chung, nó ổn định hơn về mặt số học nhưng chậm hơn và tốn nhiều bộ nhớ hơn so với độ chính xác hỗn hợp.
- Half Precision (FP16/BF16): Chỉ sử dụng FP16 hoặc BF16 trong suốt quá trình đào tạo có thể dẫn đến sự bất ổn định về số lượng đáng kể (đặc biệt là FP16 mà không có các kỹ thuật như tỷ lệ mất mát) và khả năng mất độ chính xác. Độ chính xác hỗn hợp là một phương pháp mạnh mẽ hơn kết hợp FP32 và FP16/BF16.
- Lượng tử hóa mô hình : Điều này thường đề cập đến việc chuyển đổi trọng số mô hình và/hoặc kích hoạt sang các định dạng có độ chính xác thậm chí còn thấp hơn, chẳng hạn như số nguyên 8 bit (INT8), chủ yếu để tối ưu hóa tốc độ suy luận và hiệu quả , đặc biệt là trên các thiết bị biên . Mặc dù đôi khi được sử dụng trong quá trình đào tạo ( Đào tạo có nhận thức về lượng tử hóa ), nhưng nó khác với độ chính xác hỗn hợp FP32/FP16 thông thường được sử dụng trong các giai đoạn đào tạo tiêu chuẩn.