[Embedded System Lab] Chapter 5 - ML Operations
"ML Operations"
[Objective]
ML의 다양한 계산을 이론으로 이해하기
[MLP Review]
▣ Training MLPs
· Forward Propagation을 이용하여 입력 값에 대한 출력 값을 예측
· Backward Propagation을 통해 예측 값과 실제 값을 비교하며 각 Layer의 Weight를 Update
· 위 과정을 여러 차례 반복하는 것을 MLP Model을 Training(훈련 또는 학습)한다고 지칭
→ MLP Model을 훈련함으로써 Model은 입력 값에 대해 실제 값과 가까운 출력 값을 가지게 됨
▣ Inference Using MLPs
· Training이 완료되면, Neural Network는 학습 데이터를 기반으로 입력 값에 대한 출력 값을 잘 예측하게 됨
· 이후, Neural Network를 실제로 사용하여 결과물을 얻을 때에는 Forward Propagation만을 사용 → Inference(추론) 과정
▣ Forward Propagation
· MLP의 입력 층부터 출력 층까지 순서대로 변수들을 계산하고 저장
· MLP의 각 Node들은 사전에 정의된 Weight를 이용하여 출력을 계산
· "f"는 활성화 함수를 의미
▣ DNN Accelerator
· DNN Model Training을 빠르게 하는 것도 좋지만, Inference를 빠르게 하는 것이 현실적으로 더 중요한 경우↑
(Ex. 자율 주행 차량에서 Inference가 빠를수록 반응 속도가 빨라지므로 안정적 주행 가능)
∴ 모바일 기기 또는 자율 주행 차량 등에서 Inference용 Accelerator에 대한 수요 증가
[Linear Algebra in MLP]
▣ Single Layer Inference - GEMV(General Matrix Vector Multiplication)
· MLP 하나의 Layer에서 Inference 연산은 Vector와 행렬의 곱으로 변환 가능
· Vector와 행렬의 곱을 GEMV(General Matrix Vector Multiplication)으로 표현
▣ Batched Layer Inference - GEMM(General Matrix Multiplication)
· MLP 하나의 Layer에서 Inference 연산은 Vector와 행렬의 곱으로 변환 가능
· 서버에서 여러 개의 요청을 동시에 처리하는 경우, 여러 Vector를 붙여 행렬로 만들게 됨
· 행렬과 행렬 간의 곱셈을 GEMM(General Matrix Multiplication)으로 표현
[GEMM/GEMV Computation]
▣ GEMM Computation in CPU
· 같은 연산에도 다양한 계산법을 사용 가능
1) 3중 Loop를 이용한 계산법
2) Multi-Threading을 이용한 분할 계산법
3) 데이터 재사용을 고려한 연산 분할법
· 데이터 23은 행렬곱 연산에서 총 8번 사용 / 데이터 12는 행렬곱 연산에서 총 4번 사용
방법 1)
· 전체 연산에서 23은 8번 Load (② 과정에서 23은 Register가 부족하여 메모리에 Store)
→ 낮은 재사용률 = 비효율적
· 전체 연산에서 12는 1번만 Load (② 과정에서 Matrix A의 각 Row마다, 12를 연산에 사용하므로 Register에 보관 가능)
→ 높은 재사용률 = 효율적
방법 3)
· 전체 연산에서 23은 1번만 Load (① 과정에서 연산자 개수가 Register 개수보다 작아서 메모리에 Store 필요 X)
→ 높은 재사용률 = 효율적
· 전체 연산에서 12는 2번 Load (②, ③, ④ 과정에서 Register 개수가 부족하여 12는 메모리에 Store)
→ 조금 낮은 재사용률 = 다소 비효율적
· 결과적으로 연산은 같지만 같은 데이터의 Load 횟수가 달라질 수 있음
· 곱, 합 연산 (수 Cycle)에 비해 메모리 접근은 (수십, 수백 Cycle) 굉장히 시간이 오래 걸림
∴ 한 번 Load한 데이터를 재활용 함으로써 성능을 많이 개선 가능
▣ GEMM Computation in DNN Accelerator
> DNN Accelerator에서는, 하나의 큰 연산을 효율적으로 나누어 빠르게 처리
· 대부분의 연산이 곱과 합으로 이루어져 있어 연산 Unit이 간단 (Branch Predictor 등 필요 X)
· 간단한 연산 Unit을 여러 개 배치하여 병렬 처리 효율 향상
· 메모리에서 Load한 값을 최대한 많이 재활용하여 메모리 접근을 줄임
∴ DNN 연산만을 위해 HW를 최적화하고, 해당 HW에 맞는 연산 방식 최적화를 통해 CPU보다 수십, 수백 배의 성능/에너지 효율을 DNN Accelerator로 달성 가능
[Reference]
· ML_Operations_5 (Embedded System Lab : Chapter5) - William J. Song
댓글
댓글 쓰기