- Kho lưu trữ này chứa mã nguồn để kiểm chứng một kiến trúc systolic array tính cùng kết quả nhân ma trận với ít tài nguyên phần cứng hơn hoặc thời gian thực thi ngắn hơn trong GEMM và bộ tăng tốc phần cứng học sâu
- Phương pháp được đề xuất thay một phần phép nhân ma trận bằng phép cộng bit-width thấp rẻ hơn, nhằm giảm một nửa số multiplier cần cho cùng hiệu năng hoặc tăng hiệu năng trên mỗi đơn vị MAC
- Kết quả đạt tăng tốc suy luận CNN tối đa 3× so với các bộ tăng tốc mới nhất trên nền tảng tính toán tương tự, thông lượng phép nhân trên mỗi multiplier/clock cao hơn 2×, diện tích thấp và tần số xung nhịp cao
- Phạm vi áp dụng gồm dense matrix multiplication và các fully-connected layer, CNN, RNN, attention layer/transformer model chủ yếu sử dụng phép toán này; chủ yếu tạo ra cùng đầu ra như phương pháp hiện có trong suy luận fixed-point/quantized
- Kiến trúc được thiết kế để giữ nguyên chức năng và giao diện như systolic array hiện có, nên có thể tích hợp bằng cách thay thế MXU của hệ thống tăng tốc hiện có mà không cần tiền xử lý hay hậu xử lý bổ sung
Mục tiêu và thành quả của dự án
- Algebraic Enhancements for GEMM & AI Accelerators chứa mã nguồn của hệ thống GEMM và bộ tăng tốc phần cứng học sâu
- Hệ thống này được dùng để kiểm chứng các kiến trúc systolic array triển khai trên phần cứng những thuật toán nhân ma trận hiệu quả đã được đề xuất hoặc chưa được khám phá đầy đủ
- Mục tiêu là tính cùng đầu ra với ít tài nguyên phần cứng hơn hoặc thời gian thực thi ngắn hơn
- Hiệu năng được trình bày như sau
- Suy luận CNN nhanh hơn tối đa 3× so với các bộ tăng tốc mới nhất được triển khai trên cùng loại nền tảng tính toán
- mults/multiplier/clock cycle từ 2× trở lên, vượt qua conventional limit là 1
- Diện tích thấp và tần số xung nhịp cao
Kiến trúc đã được kiểm chứng trong các bài báo và luận án tiến sĩ
- Fast Inner-Product Algorithms and Architectures for Deep Neural Network Accelerators
- Giảm một nửa số multiplier cần thiết để đạt cùng hiệu năng trong nhân ma trận và kiến trúc phần cứng học sâu
- Thuật toán inner-product thay thế đổi một nửa số phép nhân lấy các phép cộng bit-width thấp, chi phí thấp
- Systolic array được đề xuất có thể được thay thế trực tiếp vào hệ thống systolic array hiện có, và có thể tăng gấp đôi hiệu năng trên mỗi đơn vị MAC mà không thay đổi chức năng hay thiết kế của phần còn lại trong hệ thống
- Bản đầy đủ công khai: https://arxiv.org/abs/2311.12224
- Karatsuba Matrix Multiplication and its Efficient Custom Hardware Implementations
- Đề xuất KMM, mở rộng Karatsuba multiplication sang matrix multiplication
- Giảm độ phức tạp của integer matrix multiplication và trình bày các triển khai custom hardware giúp cải thiện diện tích hoặc thời gian thực thi trong nhân ma trận và bộ tăng tốc học sâu
- Bản đầy đủ công khai: https://arxiv.org/abs/2501.08889
- Strassen Multisystolic Array Hardware Architectures
- Trình bày triển khai custom hardware hiệu quả đầu tiên cho thuật toán fast matrix multiplication của Strassen
- Đạt hiệu năng ở mức state-of-the-art trong bộ tăng tốc học sâu
- Bản đầy đủ công khai: https://arxiv.org/abs/2502.10063
- Luận án tiến sĩ Algebraic Enhancements for Systolic Arrays
- Bao quát ba phương pháp trên cùng với tăng tốc học sâu, algebraic enhancements, thiết kế hệ thống tăng tốc học sâu được trình bày và công việc trong tương lai
- Trực tuyến: https://macsphere.mcmaster.ca/handle/11375/30640
Vì sao tăng hiệu năng trên mỗi MAC/multiplier
- Phần lớn khối lượng tính toán của mô hình học sâu thường có thể ánh xạ thành matrix multiplication, vốn gồm chuỗi các phép multiply-accumulate
- Nếu không có thêm algebraic innovation, thông lượng của bộ tăng tốc học sâu bị giới hạn bởi số phép toán MAC tối đa có thể thực hiện trong mỗi clock cycle
- Vì bộ tăng tốc học sâu chứa nhiều MAC unit, multiplier và MAC unit dễ trở thành compute resource chiếm nhiều diện tích phần cứng trong GEMM và bộ tăng tốc học sâu
- Thông lượng của accelerator có thể bị giới hạn trực tiếp bởi số lượng multiplier mà ngân sách phần cứng cho phép
- Trong triển khai FPGA, các DSP unit dùng để instantiate MAC unit có thể cạn trước LUT và register
- Dự án này khám phá hướng vượt qua giới hạn đó bằng cách áp dụng algebraic enhancement vào thuật toán matrix multiplication và triển khai custom hardware
Phạm vi áp dụng và ràng buộc
- Kiến trúc phần cứng systolic array được đề xuất cải thiện tăng tốc dense matrix multiplication
- Có thể dùng trong các DNN model và layer chủ yếu được phân rã thành matrix multiplication
- fully-connected layer
- CNN
- RNN
- attention layer và transformer model
- Phần lớn đóng góp tập trung vào kiểu dữ liệu fixed-point và suy luận mạng nơ-ron quantized
- Một số khái niệm fixed-point có thể được mở rộng sang floating point trong tương lai
- Vì sử dụng kiểu dữ liệu fixed-point, các thuật toán và kiến trúc phần cứng được trình bày tạo ra cùng đầu ra như thuật toán/kiến trúc hiện có
- Không có thay đổi về numerical stability
- Kết quả đã được kiểm chứng trên FPGA, nhưng các kiến trúc được đề xuất mang tính tổng quát và phần lớn cải tiến có thể áp dụng cho cả custom integrated circuit lẫn triển khai FPGA
- Kiến trúc dựa trên systolic array
- Đây là kiểu thiết kế hiệu quả được dùng trong các thiết kế tăng tốc GEMM và học sâu như Google TPU
- Một số khái niệm có thể được mở rộng sang thiết kế non-systolic array trong tương lai
- Giữ cùng chức năng và giao diện với systolic array hiện có
- Algebraic enhancement được self-contained hoàn toàn bên trong systolic array, không cần bước tiền xử lý hay hậu xử lý bổ sung
Xem trước kết quả hiệu năng
- Kết quả tổng hợp và hiệu năng khi kết hợp các kiến trúc trong [1] và [3] đạt được những điều sau so với các bộ tăng tốc mới nhất trên nền tảng tính toán tương tự
-
Suy luận CNN nhanh hơn tối đa 3×
-
mults/multiplier/clock cycle cao hơn 2×
- Tần số xung nhịp cao hơn trên 40%
- Có thêm kết quả trong bài báo 1, bài báo 2, bài báo 3, luận án tiến sĩ
-
Cấu trúc hệ thống tăng tốc
- Hệ thống tăng tốc học sâu được triển khai trong mã nguồn được dùng để host và kiểm chứng các systolic array được đề xuất trong [1]-[4]
- Triển khai hệ thống chuyên biệt cho suy luận với đầu vào fixed-point/quantized của non-sparse DNN model
- convolutional layer
- fully-connected layer
- pooling layer
- Tất cả DNN layer đều được tăng tốc hoàn toàn bằng phần cứng
- Một thiết kế phần cứng duy nhất có thể tăng tốc ML model với arbitrary layer dimensions và kernel sizes
- input bitwidth và systolic array dimension có thể được thiết lập dưới dạng parameter
- Cũng được tối ưu hóa cao như một GEMM accelerator thông dụng
Các khối chính
-
Matrix Multiply Unit / MXU
- Chứa kiến trúc systolic array thực hiện nhân ma trận
- Các systolic array/MXU khác nhau được đề xuất trong từng phương pháp của [1]-[4] được thay vào vị trí MXU của hệ thống
-
GEMM Unit
- Chứa MXU, SRAM và addition logic
- Cho phép thực thi GEMM với ma trận kích thước tùy ý bằng cách tích lũy các matrix tile
-
Post-GEMM Unit
- Thực hiện các neural network-specific function trên đầu ra matrix multiplication
- Bao gồm thêm bias, inter-layer rescaling cho quantization, activation, padding và pooling
-
Memory Unit
- Chứa on-chip SRAM lưu layer activation và memory access control logic
- Triển khai thuật toán caching và memory access hardware hiệu quả, ánh xạ convolution thành GEMM in-place mà không cần data duplication hay delay
- Sử dụng memory partitioning scheme chạy SRAM memory và control ở half hoặc quarter clock rate trong khi xuất dữ liệu mới ở full clock rate, nhằm cải thiện frequency và power của toàn hệ thống
-
Off-chip DDR DRAM
- Dùng để lưu weights
-
RxTx Unit
- Đảm nhiệm PCIe interface kết nối với host
-
Instruction Unit
- Decoding accelerator instruction do host gửi
- Cho phép một thiết kế phần cứng duy nhất tăng tốc ML model với arbitrary layer dimensions và kernel sizes
Cấu trúc mã nguồn
compiler- Compiler phân tích Python ML model description thành accelerator instruction
- Bao gồm mã giao tiếp với PCIe driver để bắt đầu model execution trên accelerator, đọc kết quả và performance counter, và kiểm tra correctness
rtl- SystemVerilog accelerator RTL có thể tổng hợp
sim- Script thiết lập simulation environment để kiểm chứng
tests- Mã nguồn UVM testbench viết bằng Python và cocotb
utils- Các Python package bổ sung và utility script phát triển dùng trong dự án
rtl/top/define.svhvàrtl/top/pkg.sv- Chứa nhiều configurable parameter
FIP_METHODđịnh nghĩa systolic array type, với ví dụ như baseline, FIP, FFIP [1]SZIvàSZJđịnh nghĩa height và width của systolic arrayLAYERIO_WIDTHvàWEIGHT_WIDTHđịnh nghĩa input bitwidth
rtl/arith- Chứa
mxu.svvàmac_array.sv - Chứa RTL của baseline và một số kiến trúc systolic array được đề xuất là FIP, FFIP [1], tùy theo giá trị
FIP_METHOD
- Chứa
Tài liệu bổ sung
- Tài liệu bổ sung về hệ thống tăng tốc có trong bài báo 1 và Chapter 3 của luận án tiến sĩ
- Chi tiết về các kiến trúc systolic array được đề xuất và algebraic enhancement có trong bài báo 1, bài báo 2, bài báo 3, luận án tiến sĩ, Ph.D. defence slideshow
1 bình luận
Các ý kiến trên Hacker News
Trông khá hay, nhưng điểm vướng là gì? Chẳng hạn, tôi thắc mắc vì sao nó chưa được triển khai sẵn trong các bộ tăng tốc
Không biết đây thật sự chỉ là một thuật toán bị lãng quên, hay có ràng buộc nào ảnh hưởng đến chi phí sản xuất bộ tăng tốc, v.v.
Muốn có lợi thì phải tạo phần cứng khớp với các chiều của thuật toán, và đó là một quyết định tốn kém
Nó dựa trên thuật toán của Winograd, nhưng tình cờ là về sau Winograd cũng đề xuất một thuật toán riêng khác trở nên rất nổi tiếng trong tăng tốc CNN, nên thuật toán này có thể ít được chú ý hơn. Tuy vậy đây chỉ là suy đoán
Luôn là sự cân bằng giữa độ chính xác, thời gian thực thi, khả năng mở rộng, và cách này có khả năng cho độ chính xác kém với số dấu phẩy động
Nó vẫn còn tồn tại ở một mức nào đó trong các bộ xác thực Wegman-Carter dựa trên tích trong giả như UMAC. Có thể xem chương 3 của [1] để biết bối cảnh
[1] https://cr.yp.to/antiforgery/pema-20071022.pdf
Với mục đích đó thì có vẻ đủ ổn
Tôi nhớ lại hồi năm 2018 từng thử làm thứ tương tự, nhưng bị từ chối hết các hồ sơ ứng tuyển tiến sĩ nên đã bỏ dở
https://github.com/ixaxaar/pytorch-dni
Ý tưởng ở đây còn đi xa hơn một bước: cố gắng sao chép lan truyền ngược bằng một mạng bên ngoài, và cho rằng não bộ thực sự có khả năng làm như vậy
Công trình này là tối ưu hóa cấp thấp cho nhân ma trận, còn kho lưu trữ bạn liên kết có vẻ nhằm thay thế gradient lan truyền ngược bằng một ước lượng rẻ hơn. Tôi tò mò hai thứ này giống nhau ở điểm nào
Thời gian tiết kiệm được nhờ xấp xỉ gradient như vậy có vẻ sẽ biến mất vì mất độ chính xác của gradient khiến cần nhiều vòng huấn luyện hơn, không phải sao?
Thực sự rất thú vị và đáng đọc. Với những ai trong phần bình luận còn bối rối không hiểu vì sao cách này tốt hơn, bài báo đang nói về việc tổng hợp pipeline nhân ma trận trên phần cứng như FPGA hoặc ASIC
Trên CPU hoặc GPU, thời gian cộng và nhân nhìn chung khá tương đương nên khó cảm nhận khác biệt, nhưng đơn vị nhân chiếm nhiều transistor hơn rất nhiều. Giảm độ phức tạp của mạch có thể tăng tốc độ và thông lượng xử lý song song, đồng thời giảm điện năng và độ phức tạp của dây nối. Cách tiếp cận này có thể đặc biệt hữu ích cho các bộ tăng tốc nhân ma trận thưa hiệu quả
Một cách hay khác để loại bỏ phép nhân trong nhân ma trận là dùng một bán vành (semiring) khác [1]. Ví dụ Tropical Semiring [2] thay phép nhân bằng phép cộng, và thay phép cộng bằng min hoặc max. Nó vẫn là nhân ma trận, nhưng ở dạng mà các phép toán nhị phân đã thay đổi. Nghiên cứu về Tropical Algebra [3], một lĩnh vực tương đối mới, hiện khá sôi động và phong phú, được dùng trong nhiều bài toán tối ưu hóa và nghiên cứu tối ưu hóa mạng nơ-ron [4]
Cách này cũng rất phù hợp với tổng hợp phần cứng, vì hầu hết các khối logic cấu hình được của FPGA có thể thực hiện add/min/max trong một chu kỳ xung nhịp, trong khi phép nhân hiệu quả cần các bộ nhân phần cứng chuyên dụng cố định trên chip
Một cách liên quan khác để loại bỏ hiệu quả phép nhân bằng bán vành là dùng Log Semiring [5]. Nếu phải nhân nối tiếp các xác suất như trong chuỗi Markov, các con số sẽ nhanh chóng trở nên rất nhỏ và làm giảm độ chính xác dấu phẩy động. Nếu trước tiên lấy log để co giãn thang đo, phép nhân trở thành phép cộng, còn phép cộng trở thành x + log1p(exp(y - x))
[1] https://en.wikipedia.org/wiki/Semiring
[2] https://en.wikipedia.org/wiki/Tropical_semiring
[3] https://en.wikipedia.org/wiki/Tropical_geometry
[4] https://proceedings.mlr.press/v80/zhang18i/zhang18i.pdf
[5] https://en.wikipedia.org/wiki/Log_semiring
Tôi gần như là người mới trong lĩnh vực này, nhưng có vẻ bài đó cho thấy gần như mọi mạng ReLU đều có thể được biểu diễn dưới dạng tỷ số tropical của hai đa thức tropical, và do đó có thể được phân tích bằng các nguyên lý hình học như trực quan hóa bề mặt. Nó cũng được trích dẫn trong các nghiên cứu gần đây hơn: https://scholar.google.com/scholar?cites=1003719112553620451... Tôi tò mò liệu đã có tiến triển đáng kể nào ở đây chưa
http://www.cs.toronto.edu/~hehner/UA.pdf
Đặc biệt nếu còn quan tâm đến kết quả làm tròn đúng, bảng tra cứu phần cứng cần thiết sẽ khá lớn
Giới hạn duy nhất tôi nghĩ ra là kích thước của trường
https://ieeexplore.ieee.org/abstract/document/1451721
Thật ngạc nhiên là cách này thực sự hoạt động
Thông thường chi phí để phát hiện nên dùng phép nhân hay phép cộng còn chậm hơn việc cứ thực hiện phép nhân. Đặc biệt là khi thực hiện một khối lượng công việc khổng lồ song song
Thú vị là một quy trình được phát minh từ năm 1968 đến nay vẫn chưa được dùng cho mục đích này
À, nghĩ lại thì bản thân khoa học máy tính cũng gần như chưa tồn tại cho đến giữa thế kỷ trước
Nếu quan tâm đến lý thuyết toán học đằng sau thuật toán thời gian dưới bậc ba cho nhân ma trận, có thể bắt đầu từ đây: https://en.wikipedia.org/wiki/Matrix_multiplication_algorith...
Người ta phỏng đoán rằng với mọi số thực j > 0, tồn tại một n nào đó sao cho có thể nhân hai ma trận n x n bất kỳ trong O(n^(2+j)) bước
Hiện đã chứng minh được với 2+j = w = 2.3728596, tức là j > 0.3728596
Nếu bắt đầu bằng “với mọi j, tồn tại một n nào đó” thì trong câu sau n và j trở thành hằng số. Khi đó nó chỉ nói rằng có thể nhân ma trận kích thước hằng số trong thời gian hằng số. Về mặt kỹ thuật thì đúng, nhưng có lẽ người viết muốn nêu một khẳng định mạnh hơn
Có lẽ nó sẽ chạm sàn ở j=1/e. Tôi thậm chí sẽ không gọi đây là phỏng đoán, chỉ là một hằng số tiện lợi gần với giá trị hiện tại. Sẽ khá buồn cười nếu toán học chơi khăm chúng ta như vậy
Bạn có thể chia sẻ trực giác vì sao lại nghĩ vậy không?
README này giải thích rất kém về điểm cải tiến là gì và làm thế nào để giảm một nửa số phép nhân
Thời gian chạy Big O thì sao? Nó có thay đổi cận tối ưu đã biết không?
Hình minh họa cũng rối mắt và hầu như không giải thích được vì sao cách tiếp cận này nhanh hơn hay tốt hơn. Vì vậy tôi cũng ngại bấm vào PDF
Nếu muốn tăng độ tin cậy của dự án, nên giải thích trung thực và rõ ràng chuyện gì đang thực sự diễn ra, đồng thời cung cấp phần giải thích và sơ đồ rõ ràng thay vì những hình ảnh có vẻ như lôi kéo người ta bằng quảng cáo thổi phồng. Khó phân biệt đây là một đột phá lớn hay chẳng có gì đáng kể. Đáng tiếc là cũng có cảm giác đây là lựa chọn có chủ ý nhằm tận dụng cơn sốt AI. Một khả năng khác mà tôi muốn tin hơn là tác giả đơn giản chỉ cần chỉnh sửa và cung cấp bối cảnh tốt hơn
Trong bài báo (https://arxiv.org/abs/2311.12224), phần toán học giúp giảm một nửa số phép nhân không khó hiểu. Chỉ cần đọc phép nhân ma trận truyền thống ở công thức 2 và các công thức 3~6
Có vẻ rõ ràng là đổi lại việc giảm một nửa số phép nhân như quảng bá, nó bổ sung rất nhiều phép cộng/trừ. Sau đó họ vector hóa thuật toán đó tốt hơn, và như thường thấy với những việc kiểu này, nó nhanh chóng trở nên phức tạp
Mối lo chính là độ ổn định số học
Còn về chuyện có mang tính đột phá hay không, tôi xem đây là một cải thiện hệ số hằng số gọn gàng, có thể áp dụng ngay cho bộ tăng tốc số cố định bị ràng buộc về diện tích. Nó sẽ không thay đổi mọi thứ chỉ sau một đêm, nhưng cũng không phải là không có gì. Đây là một công trình tốt
Nếu bạn không hiểu ký hiệu Big O đến mức không biết rằng “giảm một nửa số phép nhân” không làm thay đổi Big O, thì tôi không hiểu vì sao bạn lại hỏi điều đó