- 이 저장소는 GEMM 및 딥러닝 하드웨어 가속기에서 더 적은 하드웨어 자원이나 실행 시간으로 같은 행렬 곱셈 결과를 계산하는 systolic array 아키텍처를 검증하기 위한 소스 코드임
- 제안된 방식은 일부 행렬 곱셈을 더 저렴한 저비트폭 덧셈으로 바꾸며, 같은 성능에 필요한 multiplier를 절반으로 줄이거나 MAC 단위당 성능을 높이는 것을 목표로 함
- 결과는 유사한 컴퓨트 플랫폼의 최신 가속기 대비 CNN 추론 최대 3× 가속, multiplier/clock당 곱셈 처리량 2× 이상, 낮은 면적과 높은 클럭 주파수를 달성함
- 적용 범위는 dense matrix multiplication과 이를 주로 사용하는 fully-connected layer, CNN, RNN, attention layer/transformer model이며, 주로 고정소수점·양자화 추론에서 기존 방식과 동일한 출력을 생성함
- 아키텍처는 기존 systolic array와 같은 기능·인터페이스를 유지하도록 설계되어, 추가 전처리나 후처리 없이 기존 가속기 시스템의 MXU를 교체하는 방식으로 통합 가능함
프로젝트 목적과 성과
- Algebraic Enhancements for GEMM & AI Accelerators는 GEMM과 딥러닝 하드웨어 가속기 시스템의 소스 코드를 담고 있음
- 이 시스템은 제안되었거나 아직 충분히 탐구되지 않은 효율적 행렬 곱셈 알고리듬을 하드웨어에서 구현하는 systolic array 아키텍처를 검증하는 데 사용됨
- 목표는 같은 출력을 더 적은 하드웨어 자원이나 더 짧은 실행 시간으로 계산하는 것임
- 결과로 제시된 성능은 다음과 같음
- 같은 유형의 컴퓨트 플랫폼에 구현된 최신 가속기 대비 CNN 추론 최대 3× 빠름
- conventional limit인 1을 넘는 mults/multiplier/clock cycle 2× 이상
- 낮은 면적과 높은 클럭 주파수
논문과 박사학위 논문에서 검증된 아키텍처
- Fast Inner-Product Algorithms and Architectures for Deep Neural Network Accelerators
- 행렬 곱셈과 딥러닝 하드웨어 아키텍처에서 같은 성능을 달성하는 데 필요한 multiplier를 절반으로 줄임
- 대체 inner-product 알고리듬이 곱셈의 절반을 저렴한 저비트폭 덧셈으로 교환함
- 제안된 systolic array는 기존 systolic array 시스템에 교체 삽입될 수 있으며, 나머지 시스템의 기능이나 설계 변경 없이 MAC 단위당 성능을 2배로 높일 수 있음
- 공개 전문: https://arxiv.org/abs/2311.12224
- Karatsuba Matrix Multiplication and its Efficient Custom Hardware Implementations
- Karatsuba multiplication을 matrix multiplication으로 확장한 KMM을 제안함
- integer matrix multiplication 복잡도를 줄이고, 행렬 곱셈 및 딥러닝 가속기에서 면적 또는 실행 시간 개선을 제공하는 custom hardware 구현을 제시함
- 공개 전문: https://arxiv.org/abs/2501.08889
- Strassen Multisystolic Array Hardware Architectures
- Strassen의 fast matrix multiplication 알고리듬을 위한 첫 효율적 custom hardware 구현을 제시함
- 딥러닝 가속기에서 최신 수준의 성능을 달성함
- 공개 전문: https://arxiv.org/abs/2502.10063
- Algebraic Enhancements for Systolic Arrays 박사학위 논문
- 위 세 방법과 딥러닝 가속, algebraic enhancements, 제시된 딥러닝 가속기 시스템 설계, 향후 작업을 다룸
- 온라인: https://macsphere.mcmaster.ca/handle/11375/30640
MAC·multiplier당 성능을 높이는 이유
- 딥러닝 모델의 계산 작업 대부분은 일반적으로 matrix multiplication으로 매핑될 수 있으며, 이는 multiply-accumulate 연산의 연속으로 구성됨
- 추가적인 algebraic innovation이 없으면 딥러닝 가속기의 처리량은 clock cycle당 수행 가능한 MAC 연산 수의 최대치로 제한됨
- 딥러닝 가속기는 많은 MAC unit을 포함하므로, multiplier와 MAC unit은 GEMM 및 딥러닝 가속기에서 하드웨어 면적을 크게 차지하는 compute resource가 되기 쉬움
- accelerator의 처리량은 하드웨어 예산이 감당할 수 있는 multiplier 수에 직접 제한될 수 있음
- FPGA 구현에서는 MAC unit을 인스턴스화하는 DSP unit이 LUT와 register보다 먼저 부족해질 수 있음
- 이 프로젝트는 matrix multiplication 알고리듬과 custom hardware 구현에 algebraic enhancement를 적용해 이 제한을 넘는 방향을 탐구함
적용 범위와 제약
- 제안된 systolic array 하드웨어 아키텍처는 dense matrix multiplication 가속을 개선함
- matrix multiplication으로 주로 분해되는 DNN 모델과 layer에서 활용 가능함
- fully-connected layer
- CNN
- RNN
- attention layer 및 transformer model
- 대부분의 기여는 고정소수점 데이터 타입과 양자화 신경망 추론에 초점을 둠
- 일부 고정소수점 개념은 향후 floating point로 확장 가능할 수 있음
- 고정소수점 데이터 타입을 사용하므로 제시된 알고리듬과 하드웨어 아키텍처는 기존 알고리듬·아키텍처와 동일한 출력을 생성함
- numerical stability에는 변화가 없음
- 결과는 FPGA에서 검증되었지만, 제안된 아키텍처는 일반적이며 대부분의 개선은 custom integrated circuit과 FPGA 구현 모두에 적용 가능함
- 아키텍처는 systolic array 기반임
- Google TPU 같은 GEMM 및 딥러닝 가속 설계에 쓰이는 효율적인 설계 유형임
- 일부 개념은 향후 non-systolic array 설계로 확장 가능할 수 있음
- 기존 systolic array와 동일한 기능과 인터페이스를 유지함
- algebraic enhancement는 systolic array 내부에 완전히 self-contained되어 추가 전처리나 후처리 단계가 필요 없음
성능 결과 미리보기
- [1]과 [3]의 아키텍처를 결합한 합성 및 성능 결과는 유사한 컴퓨트 플랫폼의 최신 가속기와 비교해 다음을 달성함
가속기 시스템 구조
- 소스 코드에 구현된 딥러닝 가속기 시스템은 [1]-[4]에서 제안된 systolic array를 host하고 검증하는 데 사용됨
- 시스템 구현은 non-sparse DNN model의 고정소수점·양자화 입력 추론에 특화됨
- convolutional layer
- fully-connected layer
- pooling layer
- 모든 DNN layer는 하드웨어에서 완전히 가속됨
- 단일 하드웨어 설계에서 arbitrary layer dimensions와 kernel sizes를 가진 ML model을 가속할 수 있음
- input bitwidth와 systolic array dimension은 parameter로 설정 가능함
- 일반적인 GEMM accelerator로도 고도로 최적화되어 있음
주요 블록
-
Matrix Multiply Unit / MXU
- 행렬 곱셈을 수행하는 systolic array 아키텍처를 포함함
- [1]-[4]의 각 방법에서 제안된 서로 다른 systolic array/MXU가 시스템의 MXU 자리에 교체됨
-
GEMM Unit
- MXU, SRAM, addition logic을 포함함
- matrix tile을 누적해 임의 크기 행렬의 GEMM 실행을 가능하게 함
-
Post-GEMM Unit
- matrix multiplication 출력에 neural network-specific function을 수행함
- bias 추가, quantization을 위한 inter-layer rescaling, activation, padding, pooling을 포함함
-
Memory Unit
- layer activation을 보관하는 on-chip SRAM과 memory access control logic을 포함함
- data duplication이나 delay 없이 convolution을 GEMM으로 in-place 매핑하는 효율적 caching 및 memory access hardware 알고리듬을 구현함
- SRAM memory와 control을 half 또는 quarter clock rate로 실행하면서 full clock rate로 새 데이터를 출력하는 memory partitioning scheme을 사용해 전체 system frequency와 power를 개선함
-
Off-chip DDR DRAM
- weights 저장에 사용됨
-
RxTx Unit
- host와 연결되는 PCIe interface를 담당함
-
Instruction Unit
- host가 보낸 accelerator instruction을 decoding함
- 단일 하드웨어 설계에서 arbitrary layer dimensions와 kernel sizes를 가진 ML model을 가속할 수 있게 함
소스 코드 구성
compiler- Python ML model description을 accelerator instruction으로 파싱하는 compiler
- PCIe driver와 인터페이스해 accelerator에서 model execution을 시작하고, 결과와 performance counter를 읽고, correctness를 테스트하는 코드 포함
rtl- 합성 가능한 SystemVerilog accelerator RTL
sim- 검증용 simulation environment 설정 스크립트
tests- Python과 cocotb로 작성된 UVM testbench 소스 코드
utils- 프로젝트에서 사용한 추가 Python package와 개발용 utility script
rtl/top/define.svh와rtl/top/pkg.sv- 여러 configurable parameter를 포함함
FIP_METHOD는 systolic array type을 정의하며 baseline, FIP, FFIP [1] 등이 예시임SZI와SZJ는 systolic array의 height와 width를 정의함LAYERIO_WIDTH와WEIGHT_WIDTH는 input bitwidth를 정의함
rtl/arithmxu.sv와mac_array.sv를 포함함FIP_METHOD값에 따라 baseline 및 제안된 일부 systolic array 아키텍처인 FIP, FFIP [1]의 RTL을 담고 있음