- L-Mul là một thuật toán nhân có độ phức tạp tuyến tính, tập trung vào việc chi phí năng lượng lớn của LLM đến từ phép nhân số thực dấu phẩy động, và tìm cách xấp xỉ phép nhân bằng phép cộng số nguyên
- Phép nhân fp32 tiêu tốn năng lượng cao hơn 37 lần so với phép cộng int32, nên nếu áp dụng L-Mul vào phần cứng xử lý tensor, nó có tiềm năng giảm 95% năng lượng cho phép nhân tensor dấu phẩy động theo từng phần tử và 80% năng lượng cho dot product
- Cách tính bỏ qua phép nhân phần trị (mantissa) và làm tròn, xử lý dấu bằng XOR, còn các bit còn lại được cấu thành dưới dạng phép cộng
x[1:] + y[1:] - offset - Trong thí nghiệm, L-Mul mantissa 4-bit cho độ chính xác tương tự phép nhân float8 e4m3, còn L-Mul mantissa 3-bit cho kết quả tốt hơn float8 e5m2
- Khi áp dụng L-Mul attention cho LLM tiền huấn luyện mà không cần huấn luyện thêm, mức suy giảm trung bình trong các bài toán suy luận ngôn ngữ tự nhiên là 0,07%, còn trong các bài toán thị giác thì độ chính xác trung bình tăng 0,12%
Điểm nghẽn mà L-Mul nhắm tới
- Các mạng nơ-ron lớn dành phần lớn tính toán cho phép nhân tensor dấu phẩy động, và phép toán này có chi phí năng lượng cao hơn phép cộng
- L-Mul là một thuật toán linear-complexity multiplication xấp xỉ phép nhân số dấu phẩy động bằng phép cộng số nguyên
- Phạm vi áp dụng trải dài qua nhiều bước tính toán
- Phép nhân bên trong cơ chế attention
- Phép nhân ma trận
- Phép nhân theo từng phần tử
- Trong LLM dựa trên Transformer, attention có độ phức tạp
O(N²)theo độ dài ngữ cảnh đầu vàoN, và cùng với phép nhân tensor nhiều chiều trở thành điểm nghẽn chính của hiệu quả tính toán
Chi phí năng lượng theo từng phép toán số học
- Bảng chi phí phép toán của Horowitz (2014) cho thấy trực tiếp chênh lệch năng lượng giữa phép cộng và phép nhân
- Cộng int8: 0.03 pJ
- Cộng int32: 0.1 pJ
- Cộng fp16: 0.4 pJ
- Cộng fp32: 0.9 pJ
- Nhân int8: 0.2 pJ
- Nhân int32: 3.1 pJ
- Nhân fp16: 1.1 pJ
- Nhân fp32: 3.7 pJ
- Phép nhân fp32 dùng nhiều năng lượng gấp 4 lần phép cộng fp32, và gấp 37 lần phép cộng int32
- Độ chính xác tích lũy mặc định cho kết quả nhân tensor trong PyTorch được đặt là fp32
- Nếu bỏ qua I/O và phép toán điều khiển, khi xấp xỉ phép nhân fp32 bằng phép cộng int32 thì mức tiêu thụ năng lượng vào khoảng
1/37 ≈ 2.7% - Ngay cả khi hạ độ chính xác tích lũy xuống fp16, phép cộng số nguyên vẫn chỉ dùng khoảng 4.7% năng lượng của phép nhân dấu phẩy động
Cách tính của L-Mul
- Phép nhân dấu phẩy động thông thường với hai số
x,ycó dạng sau(1 + xm) · 2^xe · (1 + ym) · 2^ye- Kết quả gồm
(1 + xm + ym + xm · ym) · 2^(xe+ye)và dấu được xử lý bằng XOR
- Điểm nghẽn tính toán là phép nhân phần trị
mbit có độ phức tạpO(m²) - L-Mul loại bỏ
xm · ymvà xấp xỉ theo dạng sau(1 + xm + ym + 2^-l(m)) · 2^(xe+ye)
l(m)thay đổi theo số bit của phần trị- nếu
m ≤ 3thì làm - nếu
m = 4thì dùng giá trị riêng - nếu
m > 4thì dùng giá trị riêng
- nếu
- Cài đặt ở mức bit được rút gọn thành biểu thức đơn giản hơn
- Bit dấu:
x[0] ⊕ y[0] - Các bit còn lại:
x[1:] + y[1:] - offset
- Bit dấu:
- Do định dạng dấu phẩy động xử lý ngầm
1 + xm, L-Mul trong triển khai thực tế có thể được cấu thành chỉ với một adder - Khi tổng phần trị vượt quá 2, carry sẽ tự động được chuyển sang exponent
- Nhờ bỏ qua phép nhân phần trị và bước làm tròn vốn cần trong phép nhân dấu phẩy động thông thường, lượng tính toán được giảm xuống
Áp dụng vào Transformer attention
- Attention dựa trên L-Mul tạo
Q,K,Vtrước, rồi thay phép nhân ma trận trong tính toán attention bằng L-matmul - Dạng tính toán như sau
K = H · WkQ = H · WqV = H · WvA = softmax[L-matmul(Q, Kᵀ) / √d]H′ = L-matmul(A, H)
L-matmullà phép nhân ma trận trong đó toàn bộ phép nhân dấu phẩy động thông thường đều được triển khai bằng L-Mul- Cấu trúc này thay phép nhân dấu phẩy động bằng phép cộng số nguyên để giảm mức sử dụng tài nguyên tính toán
Phân tích độ chính xác, độ phức tạp và kết quả thực nghiệm
- Phân tích độ chính xác được xây dựng theo cách đánh giá L-Mul tương đương với việc giữ lại bao nhiêu bit fraction của số dấu phẩy động
- Trong phân tích dựa trên operand phân bố đều, L-Mul chính xác hơn fp8 e5m2
- Trong phân tích thực tiễn dựa trên phân bố weight kết hợp của 5 LLM tiền huấn luyện, nó có thể đạt độ chính xác cao hơn fp8 e4m3 với operand mantissa 5-bit
- Kết quả thực nghiệm phù hợp với ước lượng sai số lý thuyết
- L-Mul mantissa 4-bit có độ chính xác tương tự phép nhân float8 e4m3
- L-Mul mantissa 3-bit có độ chính xác cao hơn float8 e5m2
- Với các LLM tiền huấn luyện, triển khai attention chuẩn được thay trực tiếp bằng L-Mul attention và không dùng huấn luyện bổ sung
- Mức suy giảm hiệu năng trung bình trên các bài toán commonsense, structured reasoning, language understanding: 0.07%
- Mức thay đổi độ chính xác trung bình trên các bài toán visual question answering, object hallucination, free-form visual instruction: tăng 0.12%
- Trong thí nghiệm fine-tuning, mô hình thay toàn bộ phép nhân trong attention, linear transformation và phép nhân theo từng phần tử bằng L-Mul mantissa 3-bit cho hiệu năng tương tự mô hình chuẩn dùng độ chính xác tích lũy float8 e4m3
- Ước lượng lượng tính toán ở mức cổng logic cho phép nhân thông thường ở mức sau
- Nhân fp16: khoảng 584
- Nhân fp8 e4m3: khoảng 325
- Nhân fp8 e5m2: khoảng 296
- Ước lượng lượng tính toán ở mức cổng logic của L-Mul thấp hơn
- fp16 L-Mul: khoảng 256
- fp8 L-Mul: khoảng 157
- GPU hiện chưa có triển khai native cho L-Mul nên khó tận dụng trọn vẹn hiệu quả, và các tác giả khuyến nghị nên huấn luyện/lưu trữ mô hình dựa trên L-Mul trên thiết bị được tích hợp kiến trúc chuyên biệt
- Công nghệ này hiện ở trạng thái patent pending
Chưa có bình luận nào.