Transformer nâng cao
Các cách đào tạo mô hình Transformer trên văn bản dài
Cách 1: Positional Encoding tốt hơn. Thay vì dùng encoding vị trí như paper gốc Transformer, 2 cái tên có thể thay thế là ALiBi và ROPE. Một cách encode vị trí có thể scale theo context của câu.
Cách 2: Bạn không cần phải tính toán attention scores giữa tất cả các tokens. Một số tokens quan trọng hơn các tokens khác, vì vậy có thể sử dụng Sparse Attention. Điều này sẽ tăng tốc cả quá trình training và inference.
Cách 3: Flash Attention triển khai hiệu quả attention layer cho GPU. Nó sử dụng tiling và tránh việc tạo ra các ma trận trung gian lớn (n, n) không phù hợp với GPU SRAM. Điều này sẽ tăng tốc cả quá trình training và inference.
Multi-Query attention thay vì Multi-Head attention. Bạn chia sẻ weights giữa tất cả các heads khi nhân tuyến tính K và V. Nó sẽ tăng tốc đáng kể quá trình inference.
Conditional computation tránh việc sử dụng tất cả các model parameters lên tất cả các tokens từ input sequence. CoLT5 chỉ áp dụng các tính toán nặng nề lên những tokens quan trọng nhất và xử lý phần còn lại của các tokens với một phiên bản nhẹ hơn của các layers. Điều này sẽ tăng tốc cả quá trình training và inference.
1. Tối ưu trên văn bản dài
1.1. Cách 1 - ROPE
Đưa Rope vào Transformer:
Team nâng cấp mô hình Transformer thay vì sử dụng Embedding vị trí thường thì sử dụng Phép nhúng vị trí xoay (Rotary Position Embedding) giúp cải thiện hiệu năng phân loại từ 1-2%.
RoFormer thêm thông tin vị trí vào vector q và k thay vì phải tạo một lớp chỉ positional Embedding.
RoFormer áp dụng việc xoay vector q và k với một góc không đổi để tăng mối quan hệ vị trí tương đối.
Ví dụ ở vị trí trong câu từ m=1 đến m=2 và vị trí m=2 đến m=3, ở cùng một vị trí embedding ví dụ i = 0 vector q sẽ quay một góc giống nhau. Tương tự vector k cũng quay một góc giống nhau.
Notebook: https://colab.research.google.com/drive/1QBkP6ve4f2-KapKaWDeodkR8_2JEYWjw?usp=sharing.
Bài báo: https://arxiv.org/pdf/2104.09864v5.
Biểu diễn ROPE: https://colab.research.google.com/drive/1SMsORT8958HOs2c99bC9FYV4sfKrs0el?usp=sharing
1.2. Cách 2 - Sparse Attention
1.3. Cách 3 - Flash Attention
Team thực hiện Benchmark Multiheaded Attention thường của Transformer và FlashAttention để tối ưu truy cập memory của GPU.
Kết quả sau 1000 lần thực hiện thì FlashAttention nhanh hơn khoảng gấp rưỡi so với Attention thông thường.
BenchMark này được thực hiện trên GPU T4 Google Colab.
P/S: trong Pytorch hàm scaled_dot_product_attention đã sử dụng Attention.
Notebook và kết quả: https://colab.research.google.com/drive/1-HjN3McMS_boMyBZFAt1TP7NLoRUd346?usp=sharing
1.4. Cách 4 - Multiquery Attention
1.5. Mixture of Experts
Giải thích chi tiết: https://huggingface.co/blog/moe
Open Source MOE: https://huggingface.co/allenai/OLMoE-1B-7B-0924