Bài báo · arXiv 2205.14135
FlashAttention: Cơ chế Attention chính xác, nhanh và tối ưu bộ nhớ với nhận thức IO (IO-Awareness)
FlashAttention: Fast and Memory-Efficient Exact Attention with IO-Awareness
Tóm tắt trong ba dòng
- 🎯 Cơ chế exact attention tiêu chuẩn hiện thực hóa ma trận attention trong HBM chậm của GPU, khiến nó bị nghẽn bộ nhớ và khó mở rộng sang các ngữ cảnh dài.
- 🔧 FlashAttention tính toán exact attention trong một CUDA kernel duy nhất (kernel fusion) bằng cách chia nhỏ (tiling) đầu vào trên SRAM nhanh trên chip, cập nhật softmax gia tăng, và tính toán lại attention ngay trên chip trong lượt lan truyền ngược.
- 📈 FlashAttention mang lại tốc độ huấn luyện end-to-end nhanh hơn tới 3 lần trên GPT-2, huấn luyện nhanh hơn 15% so với kỷ lục MLPerf 1.1 của BERT-large, và mở rộng ngữ cảnh lên tới 64K token.
Tóm tắt
Các mô hình Transformer hoạt động chậm và tốn nhiều bộ nhớ trên các chuỗi dài, do độ phức tạp thời gian và bộ nhớ của self-attention tăng theo hàm bậc hai của độ dài chuỗi. Các phương pháp attention xấp xỉ đã cố gắng giải quyết vấn đề này bằng cách đánh đổi chất lượng mô hình để giảm độ phức tạp tính toán, nhưng thường không đạt được tốc độ tăng tốc thực tế (wall-clock speedup). Chúng tôi cho rằng một nguyên lý còn thiếu là làm cho các thuật toán attention có nhận thức về IO (IO-aware) -- tính đến số lần đọc và ghi giữa các cấp bậc bộ nhớ GPU. Chúng tôi đề xuất FlashAttention, một thuật toán exact attention có nhận thức IO sử dụng kỹ thuật tiling để giảm số lần đọc/ghi bộ nhớ giữa bộ nhớ băng thông cao (HBM) của GPU và SRAM trên chip của GPU. Chúng tôi phân tích độ phức tạp IO của FlashAttention, chỉ ra rằng nó đòi hỏi ít lượt truy cập HBM hơn so với attention tiêu chuẩn, và đạt mức tối ưu cho nhiều kích thước SRAM khác nhau. Chúng tôi cũng mở rộng FlashAttention sang block-sparse attention, mang lại một thuật toán attention xấp xỉ nhanh hơn bất kỳ phương pháp attention xấp xỉ hiện có nào. FlashAttention huấn luyện Transformer nhanh hơn các mô hình cơ sở hiện tại: tăng tốc thời gian thực tế end-to-end thêm 15% trên BERT-large (độ dài chuỗi 512) so với kỷ lục tốc độ huấn luyện MLPerf 1.1, tăng tốc 3 trên GPT-2 (độ dài chuỗi 1K), và tăng tốc 2.4 trên Long-Range Arena (độ dài chuỗi 1K-4K). FlashAttention và block-sparse FlashAttention cho phép ngữ cảnh dài hơn trong Transformer, mang lại các mô hình chất lượng cao hơn (cải thiện 0.7 điểm perplexity trên GPT-2 và tăng 6.4 điểm cho phân loại tài liệu dài) cùng những năng lực hoàn toàn mới: những mô hình Transformer đầu tiên đạt hiệu năng tốt hơn ngẫu nhiên trên thử thách Path-X (độ dài chuỗi 16K, độ chính xác 61.4%) và Path-256 (độ dài chuỗi 64K, độ chính xác 63.1%).
Tóm tắt gốc (tiếng Anh)
Transformers are slow and memory-hungry on long sequences, since the time and memory complexity of self-attention are quadratic in sequence length. Approximate attention methods have attempted to address this problem by trading off model quality to reduce the compute complexity, but often do not achieve wall-clock speedup. We argue that a missing principle is making attention algorithms IO-aware -- accounting for reads and writes between levels of GPU memory. We propose FlashAttention, an IO-aware exact attention algorithm that uses tiling to reduce the number of memory reads/writes between GPU high bandwidth memory (HBM) and GPU on-chip SRAM. We analyze the IO complexity of FlashAttention, showing that it requires fewer HBM accesses than standard attention, and is optimal for a range of SRAM sizes. We also extend FlashAttention to block-sparse attention, yielding an approximate attention algorithm that is faster than any existing approximate attention method. FlashAttention trains Transformers faster than existing baselines: 15% end-to-end wall-clock speedup on BERT-large (seq. length 512) compared to the MLPerf 1.1 training speed record, 3 speedup on GPT-2 (seq. length 1K), and 2.4 speedup on long-range arena (seq. length 1K-4K). FlashAttention and block-sparse FlashAttention enable longer context in Transformers, yielding higher quality models (0.7 better perplexity on GPT-2 and 6.4 points of lift on long-document classification) and entirely new capabilities: the first Transformers to achieve better-than-chance performance on the Path-X challenge (seq. length 16K, 61.4% accuracy) and Path-256 (seq. length 64K, 63.1% accuracy).
Hướng dẫn đọc
Vấn đề và động lực
Transformer có độ phức tạp thời gian và bộ nhớ bậc hai theo độ dài chuỗi . Mặc dù các phương pháp attention xấp xỉ giảm được số lượng FLOP lý thuyết, chúng thường thất bại trong việc tăng tốc thời gian thực tế (wall-clock time) vì các phép tính trên GPU hiện đại chủ yếu bị nghẽn do quá trình truyền dữ liệu bộ nhớ (IO) chứ không phải các phép toán số học.
Trong attention tiêu chuẩn, việc tính , , và phải ghi các ma trận trung gian kích thước vào High Bandwidth Memory (HBM) chậm và đọc lại chúng nhiều lần. Điều này làm phát sinh lượt truy cập HBM và dung lượng bộ nhớ , hạn chế kích thước cửa sổ ngữ cảnh trong thực tế.
Các ý tưởng cốt lõi
- IO-Awareness: Tính toán rõ ràng cấu trúc phân cấp bộ nhớ GPU: bộ nhớ SRAM trên chip nhỏ nhưng tốc độ cao (ví dụ: 192 KB/SM với băng thông ~19 TB/s trên A100) so với HBM lớn nhưng chậm (40–80 GB với băng thông 1.5–2.0 TB/s).
- Tiling (Tính toán Softmax theo khối): Chia nhỏ đầu vào thành các khối vừa vặn hoàn toàn trong SRAM. Bằng cách theo dõi các thống kê động về giá trị cực đại của hàng (row-max) và hệ số chuẩn hóa của softmax, phép giản lược softmax được tính toán tăng dần qua các khối mà không cần hiện thực hóa toàn bộ ma trận trong HBM.
- Tính toán lại trong lượt lan truyền ngược (Recomputation in Backward Pass): Tránh lưu ma trận attention trung gian cho quá trình lan truyền ngược. Thay vào đó, chỉ lưu đầu ra và các giá trị thống kê softmax , rồi tính toán lại và ngay trên chip theo từng khối trong SRAM ở lượt truyền ngược.
- Kernel Fusion: Hợp nhất các phép nhân ma trận, tạo mặt nạ (masking), softmax, và dropout vào một CUDA kernel duy nhất để loại bỏ các lượt truy xuất vòng lặp dư thừa đến HBM.
Phương pháp (kèm các phương trình chính)
Cho , FlashAttention thiết lập kích thước khối và , trong đó là dung lượng SRAM.
Theo dõi Softmax tăng dần
Đối với một vector được phân rã thành các vector con và , các thống kê động cập nhật thông qua:
Đối với khối của keys/values và khối của queries:
- Tính điểm số chưa chuẩn hóa trên SRAM: .
- Tính các giá trị thống kê cục bộ của khối: , , và .
- Cập nhật các hệ số chuẩn hóa toàn cục động:
- Cập nhật khối đầu ra động :
Phân tích độ phức tạp
- Độ phức tạp IO: Attention tiêu chuẩn yêu cầu lượt truy cập HBM. FlashAttention chỉ yêu cầu lượt truy cập HBM. Các tác giả chứng minh rằng không có thuật toán exact attention nào có thể đạt mức tiệm cận lượt truy cập trên mọi .
- FLOPs và Bộ nhớ: FlashAttention thực hiện FLOPs (với số FLOP nhiều hơn một chút trong lượt truyền ngược do phải tính toán lại) và chỉ yêu cầu bộ nhớ phụ ngoài đầu vào và đầu ra.
Mở rộng: Block-Sparse FlashAttention
Bằng cách giới hạn việc tính toán trong các khối khác không theo một mặt nạ thưa định trước , thuật toán đạt độ phức tạp IO là , trong đó là tỷ lệ các khối khác không.
Kết quả (kèm các số liệu quan trọng nhất)
- Tăng tốc huấn luyện:
- BERT-large (độ dài chuỗi 512): Vượt qua kỷ lục tốc độ huấn luyện MLPerf 1.1 tới 15% (17.4 phút so với 20.0 phút trên cấu hình A100).
- GPT-2 (độ dài chuỗi 1K): Đạt tốc độ nhanh hơn tới 3.5 lần so với HuggingFace và tới 1.8 lần so với Megatron-LM.
- Long-Range Arena (LRA): Đạt tốc độ nhanh hơn 2.4 lần so với attention tiêu chuẩn; Block-sparse FlashAttention đạt mức tăng tốc 2.8 lần.
- Khả năng xử lý ngữ cảnh dài hơn:
- GPT-2 với ngữ cảnh 4K: Huấn luyện nhanh hơn Megatron-LM ở ngữ cảnh 1K trong khi cải thiện perplexity tập validation thêm 0.7 điểm (17.5 so với 18.2).
- Phân loại văn bản dài: Mở rộng ngữ cảnh từ 512 lên 16K mang lại mức tăng 4.3 điểm micro- trên MIMIC-III (52.8 lên 57.1) và tăng tới 8.5 điểm trên ECtHR (72.2 lên 80.7 ở mức 8K).
- Path-X và Path-256: FlashAttention là Transformer đầu tiên giải quyết được Path-X (độ dài chuỗi 16K) với độ chính xác 61.4%. Block-sparse FlashAttention đạt độ chính xác 63.1% trên Path-256 (độ dài chuỗi 64K).
Hạn chế và các câu hỏi mở
- Độ phức tạp kỹ thuật CUDA: Việc triển khai các kernel có nhận thức IO đòi hỏi kỹ thuật lập trình CUDA cấp thấp tùy chỉnh thay vì dùng PyTorch chuẩn hay các lớp trừu tượng của trình biên dịch, khiến việc chuyển đổi giữa các kiến trúc phần cứng gặp nhiều thách thức.
- Multi-GPU Attention: Lịch trình IO tối ưu trên một node đơn lẻ không tự động mở rộng sang attention phân tán trên nhiều GPU qua các kết nối liên mạng (NVLink, InfiniBand).
- Cận dưới của Exact Attention: Dù đã tối ưu trên các giá trị nói chung, việc chứng minh cận dưới độ phức tạp tham số hóa chi tiết theo vẫn là một bài toán mở.
Thuật ngữ chính
- IO-awareness
- Nguyên lý thuật toán trong việc thiết kế các phép toán có tính đến việc đọc và ghi giữa các cấp bậc bộ nhớ phần cứng (ví dụ: SRAM nhanh trên chip so với HBM chậm hơn).
- High Bandwidth Memory (HBM)
- Bộ nhớ chính dung lượng lớn của GPU, cung cấp tổng dung lượng cao nhưng băng thông thấp hơn đáng kể so với bộ nhớ đệm (cache) trên chip.
- SRAM
- Bộ nhớ scratchpad tốc độ cao trên chip của các GPU hiện đại, nằm bên trong mỗi Streaming Multiprocessor (SM).
- Tiling
- Kỹ thuật tái cấu trúc phép tính bằng cách chia các ma trận đầu vào thành những khối nhỏ hơn nằm vừa trong SRAM và tích lũy kết quả qua các lượt quét.
- Selective gradient checkpointing
- Kỹ thuật tránh lưu trữ ma trận attention trung gian kích thước lớn trong lượt truyền xuôi bằng cách tính toán lại nó ngay trên chip trong lượt truyền ngược dựa vào các thống kê softmax được lưu đệm.
- Kernel fusion
- Kỹ thuật kết hợp nhiều phép toán riêng biệt (nhân ma trận, tạo mặt nạ, softmax, dropout) vào một lần thực thi GPU kernel duy nhất nhằm loại bỏ các thao tác đọc/ghi lặp lại vào HBM.
- Block-sparse FlashAttention
- Một phần mở rộng của FlashAttention chỉ tính toán các khối tile khác không được xác định bởi một mặt nạ thưa theo khối, giúp giảm độ phức tạp IO tỷ lệ thuận với tỷ lệ thưa.
- Path-X / Path-256
- Các bộ benchmark suy luận thị giác chuỗi dài thuộc Long-Range Arena (độ dài chuỗi 16K và 64K) mà trước đây các mô hình Transformer đều không thể đạt độ chính xác cao hơn mức ngẫu nhiên.
Câu hỏi thường gặp
FlashAttention có phải là phương pháp xấp xỉ ma trận attention không?
Không. FlashAttention tính toán exact self-attention (attention chính xác) với các đầu ra toán học đồng nhất với attention tiêu chuẩn, chỉ sai khác trong phạm vi độ chính xác dấu phẩy động số học.
Tại sao FlashAttention lại nhanh hơn nếu nó tính nhiều FLOP hơn trong lượt truyền ngược?
Bởi vì attention tiêu chuẩn bị nghẽn do bộ nhớ (memory-bound); việc di chuyển ma trận giữa HBM và SRAM tốn nhiều thời gian thực tế hơn nhiều so với việc thực hiện thêm các phép toán số học trên SRAM tốc độ cao.
FlashAttention lưu trữ bộ nhớ phụ nào cho lượt truyền ngược?
FlashAttention chỉ lưu trữ đầu ra lượt truyền xuôi , các hệ số chuẩn hóa softmax và (chỉ tốn bộ nhớ phụ), cùng với trạng thái của bộ sinh số ngẫu nhiên giả để tái tạo lại mặt nạ dropout ngay trên chip.
Độ phức tạp IO của FlashAttention so với attention tiêu chuẩn như thế nào?
Attention tiêu chuẩn đòi hỏi lượt truy cập HBM, trong khi FlashAttention chỉ đòi hỏi lượt truy cập, với là dung lượng SRAM và là chiều của attention head.
Phần giải thích trên trang này do AI viết dựa trên bài báo và có thể có sai sót. Hãy đọc bài báo gốc để biết chi tiết.