[ad_1]
Chú ý flash là cơ chế chú ý biến áp tối ưu hóa năng lượng, mang lại hiệu suất 15% xét về tốc độ đồng hồ treo tường mà không có giá trị gần đúng.
Do các mô hình biến áp chậm và thiếu bộ nhớ trên các chuỗi dài (độ phức tạp về thời gian và bộ nhớ có tính chất bậc hai), hãy chú ý nhanh (giấy) cung cấp khả năng tăng tốc đồng hồ treo tường từ đầu đến cuối 15% trên BERT-lớn, tốc độ gấp 3 lần trên GPT-2.
Xét đến lượng năng lượng khổng lồ tiêu thụ khi đào tạo các mô hình lớn này, Flash Chú ý với việc tối ưu hóa phần mềm và phần cứng có thể mang lại hiệu suất 15%, đây là một thắng lợi lớn về mặt cải tiến.
Phần thảo luận dưới đây sẽ giúp giải thích một số khái niệm cơ bản đằng sau sự chú ý chớp nhoáng và cách thực hiện nó.
Các khái niệm cơ bản xung quanh tính toán và bộ nhớ
Trước khi đi sâu hơn vào điện toán và bộ nhớ, hãy xem lại chúng:
Tính toán là gì?
- Thời gian dành cho GPU của bạn tính toán các phép toán dấu phẩy động thực tế (FLOPS)
Bộ nhớ là gì?
- Thời gian dành cho việc chuyển các tensor trong GPU
Lý tưởng nhất là chúng ta muốn gCPU của mình luôn thực hiện phép nhân ma trận và không bị giới hạn bởi bộ nhớ. Nhưng trên thực tế, tính toán đã đạt được nhiều tiến bộ hơn so với bộ nhớ và chúng ta đang ở trong một thế giới mà gCPU không hoạt động để chờ dữ liệu được tải. Điều này thường được gọi giới hạn bộ nhớ hoạt động. Hãy tham khảo sơ đồ minh họa mô tả điều này dưới đây. Phép nhân ma trận được coi là tính toán và bộ nhớ đang lưu trữ dữ liệu (coi nó như một kho lưu trữ). Tính toán cần dữ liệu để xử lý và băng thông bộ nhớ phải hỗ trợ hoạt động đó.
Hệ thống phân cấp bộ nhớ là gì?
GPU A100 có 40–80GB bộ nhớ băng thông cao với băng thông 1,5–2,0 TB/giây Và 192KB SRAM trên chip với mỗi bộ xử lý đa luồng 108 có băng thông ước tính khoảng 19TB/giây.
Với bối cảnh trên, kiến trúc tự chú ý là bị ràng buộc bởi bộ nhớ.
Nhìn vào phép toán chú ý, đây là một phép toán softmax gây ra giới hạn bộ nhớ.
- Bằng chứng định lượng: Như bạn có thể thấy bên dưới, các hoạt động như softmax, dropout, che giấu chiếm phần lớn thời gian so với phép nhân Ma trận (Matmul)
Tại sao softmax trở thành một hoạt động giới hạn bộ nhớ?
Quy mô hoạt động của nó là nút thắt lớn nhất của chúng tôi. Trong sơ đồ dưới đây
- N -> số lượng mã thông báo
- d -> số lượng kích thước nhúng
- Khi Truy vấn và Khóa’ được nhân lên, ma trận chú ý sẽ chuyển thành N * N, chiếm rất nhiều bộ nhớ. Để tham khảo (d ~128; N ~128k token; google gemini: ~1 triệu token)
Dưới đây là thuật toán thực hiện cơ chế tự chú ý
Như đã lưu ý ở phần trên, việc truyền thông tin vào HBM (ghi S vào HBM) rồi tải ngược từ HBM về gCPU để tính softmax rồi ghi lại vào HBM là rất nhiều thông tin di chuyển khiến nó trở nên khó khăn. hoạt động giới hạn bộ nhớ.
Cùng với sơ đồ, các bước dưới đây giúp giải thích cách tính sự chú ý của bản thân thông qua phép nhân ma trận
Bước 1:
- Tôi đã đơn giản hóa việc này. Trong thực tế, mỗi mã thông báo được thêm vào bằng mã hóa vị trí để tạo các phần nhúng nhằm đưa vào lớp tuyến tính nhằm tạo ra
. Để minh họa, tôi đã sử dụng thứ nguyên là 3 (thường nằm trong khoảng từ 64–128). Đây là đầu vào kiến trúc máy biến áp tiêu chuẩn.
Bước 2
- Khóa -> Khóa’ (chuyển vị) được tính toán và nhân với Truy vấn để cho QK’ là N*N. Điều này chứa đựng sự chú ý của từng mã thông báo với các mã thông báo còn lại. Sơ đồ dưới đây cũng cho thấy mối quan hệ. Vì đây là các mã thông báo và chúng tôi cần tính toán tầm quan trọng của từng mã thông báo đối với nhau nên thao tác softmax được áp dụng theo hàng để chuẩn hóa nó từ 0 -1.
- Bước này yêu cầu di chuyển đến HBM và là hoạt động tốn kém nhất Như chúng ta đã thảo luận. Toàn bộ bài viết flash chú ý là làm thế nào để tối ưu hóa quá trình này.
Bước 3
- Softmax(QK’) * V được tính là ma trận đầu ra cuối cùng. Thứ nguyên ở đây giống như phần nhúng đầu vào của Khóa, truy vấn và giá trị.
- Hàng cuối cùng trong ma trận đầu ra
- 1*5 có nghĩa là việc nhúng “this” phải được thay đổi để kết hợp các mối quan hệ với các mã thông báo khác.
- 2*5 có nghĩa là việc nhúng “is” phải được thay đổi để kết hợp các mối quan hệ với các mã thông báo khác.
- Tương tự như trên cho các hàng còn lại
Ý tưởng cơ bản được giải thích thông qua sơ đồ bên dưới, trong đó các khối khóa, truy vấn và giá trị được truyền từ HBM sang SRAM và thông qua một số thủ thuật toán học (được giải thích bên dưới), phép tính được thực hiện ở đây không phải là câu trả lời gần đúng mà là câu trả lời đúng thực tế.
Với cách triển khai này, giấy có thể giảm thời gian tăng tốc trên tường bằng cách truy cập thông tin theo khối mà không làm mất đi tính chính xác.
Thuật toán đằng sau bài báo: Sự chú ý của Flash được triển khai như thế nào?
Đây là phần phức tạp nhất của bài báo. Hãy chia vấn đề này thành các khía cạnh phụ và tìm hiểu sâu hơn.
Sơ đồ bên dưới chia ma trận thành các khối và cách mỗi khối được sử dụng để tính toán softmax một phần và sau đó sửa softmax.
- Đầu vào ban đầu: Token: Đây là bài viết chú ý nhanh
- Khóa: 4 (mã thông báo) X 3(thứ nguyên), Truy vấn: 4 (mã thông báo) X 3(thứ nguyên) và Giá trị: 4 (mã thông báo) X 3(thứ nguyên)
Bước 0
- Giả sử bộ nhớ là 24 byte
- SRAM sẽ được chia thành 4 khối (Ma trận truy vấn, khóa, giá trị và đầu ra)
- Truy vấn, Khóa, Giá trị, Đầu ra sẽ nhận được = 6 byte mỗi truy vấn để lưu trữ thông tin của chúng (12 byte/4)
- Mỗi chiều là 3 vì mỗi phần nhúng không thể bị phá vỡ, vì vậy
- Truy vấn: 6 byte/ 3 (thứ nguyên) = 2. Tương tự cho giá trị, khóa và đầu ra
- Do đó, (M/4d) cho biết kích thước của mỗi khối. Trong trường hợp này, kích thước khối là 2. Điều đó có nghĩa là 2 hàng có thể được tìm nạp vào SRAM.
- Nói chung, Kích thước khối là (M/4d) và số khối là (N*4D/M)
Bước 1 & 2: Thêm bảng bên dưới minh họa bước 1 và 2 về cách hoạt động của sự chú ý nhanh và so sánh khía cạnh bộ nhớ và tính toán của nó.
Sơ đồ bên dưới giúp hình dung phép nhân ma trận (từng khối) được sử dụng trong flash observe.
Khía cạnh toán học của softmax là gì?
Một trong những khía cạnh quan trọng nhất của bài báo về cách phân tích ma trận vẫn mang lại độ chính xác của phép tính softmax. Để lại ví dụ toán học bên dưới về cách hiển thị hai ma trận khác nhau có thể được kết hợp để tính lại softmax.
Trực giác
- Đây là đặc tính tuyệt vời của số mũ được tận dụng ở đây.
- Mỗi softmax được tính riêng lẻ nhưng cùng với giá trị tối đa này của hàng được lưu trữ cùng với giá trị số mũ tổng hợp.
- Khi hợp nhất với một ma trận khác, chúng ta cần kiểm tra xem max khác nhau bao nhiêu so với max toàn cục của 2 ma trận. Và do số mũ nên cả tử số và mẫu số đều được điều chỉnh bằng e^(current_max — Global_max) để kết hợp điều này.
Logic khá phức tạp và do đó để lại một ví dụ bên dưới. Khi đã làm quen với một ví dụ, trực giác trên sẽ rất có ý nghĩa.
Hãy xem xét phân tích độ phức tạp để hiểu mọi thứ đã thay đổi như thế nào
Tự chú ý
- Trong khi tính toán S = QK’, nó trở thành ma trận N*N cần được truyền trở lại HRAM và sau đó được kéo trở lại từ HRAM.
- Do đó O(N*N + N*N) = O(N*N) là quyền truy cập HBM
Chú ý chớp nhoáng
- Vòng lặp bên ngoài: Khóa và Truy vấn sẽ được truy cập O(Nd) lần
- Vòng lặp bên trong: Chỉ cần tải O(Nd/M) từ HBM vì hoạt động trên các khối
- Nhìn chung: O(N*N*d*d/M)
- Trên thực tế, d nhỏ hơn nhiều so với M. d nằm trong khoảng từ (64–128) trong khi M nằm trong khoảng 100 KB và do đó khả năng truy cập HBM được tối ưu hóa
- Chúng tôi bắt đầu với mục tiêu tối ưu hóa khả năng truy cập HBM và với phân tích độ phức tạp này, chúng tôi thấy bài báo đã tối ưu hóa Truy cập HBM theo hệ số (d*d/M) không có giá trị gần đúng.
Một bài báo phức tạp như vậy với sự cải thiện lớn về hiệu quả. Tôi hy vọng lời giải thích ở trên mang lại một số trực giác về cách chú ý chớp nhoáng tối ưu hóa và cải thiện hiệu suất. Tôi chưa đề cập đến việc chặn sự chú ý của flash thưa thớt, điều này làm thế nào để so sánh điều này với các kỹ thuật tối ưu hóa khác, tối ưu hóa chuyển tiếp, v.v. Hy vọng sẽ đề cập đến vấn đề này trong một bài đăng sau.
Người giới thiệu
[ad_2]
Source link